<?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>99113</bug_id>
          
          <creation_ts>2012-10-11 16:30:01 -0700</creation_ts>
          <short_desc>Font’s fast code path doesn’t support kerning and ligatures</short_desc>
          <delta_ts>2012-10-15 16:04:39 -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>Text</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>pdr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>740397</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-11 16:30:01 -0700</bug_when>
    <thetext>&lt;rdar://problem/12470680&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740441</commentid>
    <comment_count>1</comment_count>
      <attachid>168320</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-11 16:55:16 -0700</bug_when>
    <thetext>Created attachment 168320
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740455</commentid>
    <comment_count>2</comment_count>
      <attachid>168320</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-10-11 17:13:22 -0700</bug_when>
    <thetext>Comment on attachment 168320
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168320 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14256698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740457</commentid>
    <comment_count>3</comment_count>
      <attachid>168322</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-11 17:19:05 -0700</bug_when>
    <thetext>Created attachment 168322
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740459</commentid>
    <comment_count>4</comment_count>
      <attachid>168322</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-10-11 17:25:37 -0700</bug_when>
    <thetext>Comment on attachment 168322
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168322 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14252745</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740461</commentid>
    <comment_count>5</comment_count>
      <attachid>168322</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-11 17:28:21 -0700</bug_when>
    <thetext>Comment on attachment 168322
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168322 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14258756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740473</commentid>
    <comment_count>6</comment_count>
      <attachid>168322</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-11 17:44:45 -0700</bug_when>
    <thetext>Comment on attachment 168322
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168322 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14256710</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740477</commentid>
    <comment_count>7</comment_count>
      <attachid>168322</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 17:50:11 -0700</bug_when>
    <thetext>Comment on attachment 168322
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168322 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14249969</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740502</commentid>
    <comment_count>8</comment_count>
      <attachid>168322</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-11 18:45:47 -0700</bug_when>
    <thetext>Comment on attachment 168322
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168322 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14249988</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740978</commentid>
    <comment_count>9</comment_count>
      <attachid>168438</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-12 09:41:44 -0700</bug_when>
    <thetext>Created attachment 168438
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740996</commentid>
    <comment_count>10</comment_count>
      <attachid>168438</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-12 09:58:53 -0700</bug_when>
    <thetext>Comment on attachment 168438
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

Attachment 168438 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14265369</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740999</commentid>
    <comment_count>11</comment_count>
      <attachid>168442</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-12 10:02:40 -0700</bug_when>
    <thetext>Created attachment 168442
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741133</commentid>
    <comment_count>12</comment_count>
      <attachid>168465</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-12 13:08:31 -0700</bug_when>
    <thetext>Created attachment 168465
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741327</commentid>
    <comment_count>13</comment_count>
      <attachid>168465</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 16:58:03 -0700</bug_when>
    <thetext>Comment on attachment 168465
Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)

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

&gt; Source/WebCore/platform/graphics/WidthIterator.cpp:104
&gt; +static inline float applyFontTransforms(GlyphBuffer* glyphBuffer, bool ltr, int&amp; lastGlyphCount, const SimpleFontData* fontData, TypesettingFeatures typesettingFeatures, CharactersTreatedAsSpace&amp; charactersTreatedAsSpace)

Do we not have/use an enum for writing direction?

&gt; Source/WebCore/platform/graphics/WidthIterator.cpp:130
&gt; +    if (!ltr) {
&gt; +        for (int i = 0, end = glyphBuffer-&gt;size() - 1; i &lt; glyphBuffer-&gt;size() / 2; ++i, --end)
&gt; +            glyphBuffer-&gt;swap(i, end);
&gt; +    }

DRY? There&apos;s so little code here though, I guess it&apos;s ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741333</commentid>
    <comment_count>14</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-12 17:09:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 168465 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168465&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/WidthIterator.cpp:104
&gt; &gt; +static inline float applyFontTransforms(GlyphBuffer* glyphBuffer, bool ltr, int&amp; lastGlyphCount, const SimpleFontData* fontData, TypesettingFeatures typesettingFeatures, CharactersTreatedAsSpace&amp; charactersTreatedAsSpace)
&gt; 
&gt; Do we not have/use an enum for writing direction?

There is one, but WidthIterator is not using it yet.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/WidthIterator.cpp:130
&gt; &gt; +    if (!ltr) {
&gt; &gt; +        for (int i = 0, end = glyphBuffer-&gt;size() - 1; i &lt; glyphBuffer-&gt;size() / 2; ++i, --end)
&gt; &gt; +            glyphBuffer-&gt;swap(i, end);
&gt; &gt; +    }
&gt; 
&gt; DRY? There&apos;s so little code here though, I guess it&apos;s ok.

I will follow up with a patch moving this into GlyphBuffer.h, as it’s done in two more places.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742481</commentid>
    <comment_count>15</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-15 14:51:15 -0700</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/r131365&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742521</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-10-15 15:36:33 -0700</bug_when>
    <thetext>This has broken the chromium mac build. It should be pretty easy to fix.

http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Mac%20Builder/builds/33006/steps/compile/logs/stdio

The skia code needs to use width() as a function now. Height is not exposed on the advance struct anymore however. I could add it but that seems to be jumping the gun.

Can you please take a look and revert if this isn&apos;t easy to fix? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742523</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-10-15 15:37:10 -0700</bug_when>
    <thetext>nvm! http://trac.webkit.org/changeset/131374 thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742527</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-10-15 15:45:49 -0700</bug_when>
    <thetext>The following tests have started asserting on debug bots after this change:

Regressions: Unexpected crashes : (22)
  fast/css/first-letter-capitalized-edit-select-crash.html [ Crash ] 
  fast/css/text-rendering.html [ Crash ] 
  fast/ruby/modify-positioned-ruby-text-crash.html [ Crash ] 
  fast/text/complex-preferred-logical-widths.html [ Crash ] 
  fast/text/emphasis.html [ Crash ] 
  fast/text/font-kerning.html [ Crash ] 
  fast/text/font-variant-ligatures.html [ Crash ] 
  fast/text/international/text-spliced-font.html [ Crash ] 
  fast/text/international/vertical-text-glyph-test.html [ Crash ] 
  fast/text/international/vertical-text-metrics-test.html [ Crash ] 
  fast/text/ipa-tone-letters.html [ Crash ] 
  fast/text/justification-padding-mid-word.html [ Crash ] 
  fast/text/justify-ideograph-complex.html [ Crash ] 
  fast/text/justify-ideograph-leading-expansion.html [ Crash ] 
  fast/text/offsetForPosition-complex-fallback.html [ Crash ] 
  fast/text/regional-indicator-symobls.html [ Crash ] 
  fast/text/word-space-with-kerning-2.html [ Crash ] 
  fast/text/word-space-with-kerning.html [ Crash ] 
  fast/writing-mode/text-orientation-basic.html [ Crash ] 
  platform/chromium-linux/svg/text/text-with-geometric-precision.svg [ Crash ] 
  svg/W3C-SVG-1.1/filters-conv-01-f.svg [ Crash ] 
  svg/text/scaling-font-with-geometric-precision.html [ Crash ] 

The stacktrace for fast/css/first-letter-capitalized-edit-select-crash.html:
crash log for DumpRenderTree (pid 25383):
STDOUT: &lt;empty&gt;
STDERR: SHOULD NEVER BE REACHED
STDERR: third_party/WebKit/Source/WebCore/platform/graphics/SimpleFontData.h(206) : bool WebCore::SimpleFontData::applyTransforms(WebCore::GlyphBufferGlyph*, WebCore::GlyphBufferAdvance*, size_t, WebCore::TypesettingFeatures) const

STDERR: [25383:25383:17802909680655:ERROR:process_util_posix.cc(144)] Received signal 11
STDERR: 	base::debug::StackTrace::StackTrace() [0x7fccefb28fda]
STDERR: 	base::(anonymous namespace)::StackDumpSignalHandler() [0x7fccefb93579]
STDERR: 	0x7fcce8ac1af0
STDERR: 	WebCore::SimpleFontData::applyTransforms() [0x7fccf2de897e]
STDERR: 	WebCore::applyFontTransforms() [0x7fccf2de8474]
STDERR: 	WebCore::WidthIterator::advanceInternal&lt;&gt;() [0x7fccf2deae51]
STDERR: 	WebCore::WidthIterator::advance() [0x7fccf2de8749]
STDERR: 	WebCore::Font::floatWidthForSimpleText() [0x7fccf2da6bfa]
STDERR: 	WebCore::Font::width() [0x7fccf2d8ff28]
STDERR: 	WebCore::RenderText::computePreferredLogicalWidths() [0x7fccf38d6f66]
STDERR: 	WebCore::RenderText::width() [0x7fccf38d89bf]
STDERR: 	WebCore::textWidth() [0x7fccf37878dd]
STDERR: 	WebCore::RenderBlock::LineBreaker::nextLineBreak() [0x7fccf378a9fe]
STDERR: 	WebCore::RenderBlock::layoutRunsAndFloatsInRange() [0x7fccf3783265]
STDERR: 	WebCore::RenderBlock::layoutRunsAndFloats() [0x7fccf3782b00]
STDERR: 	WebCore::RenderBlock::layoutInlineChildren() [0x7fccf378517a]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fccf37351fd]
STDERR: 	WebCore::RenderBlock::layout() [0x7fccf3734776]
STDERR: 	WebCore::RenderListItem::layout() [0x7fccf38588b8]
STDERR: 	WebCore::RenderBlock::layoutBlockChild() [0x7fccf373a44a]
STDERR: 	WebCore::RenderBlock::layoutBlockChildren() [0x7fccf3739fc1]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fccf373521e]
STDERR: 	WebCore::RenderBlock::layout() [0x7fccf3734776]
STDERR: 	WebCore::RenderBlock::layoutBlockChild() [0x7fccf373a44a]
STDERR: 	WebCore::RenderBlock::layoutBlockChildren() [0x7fccf3739fc1]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fccf373521e]
STDERR: 	WebCore::RenderBlock::layout() [0x7fccf3734776]
STDERR: 	WebCore::RenderBlock::layoutBlockChild() [0x7fccf373a44a]
STDERR: 	WebCore::RenderBlock::layoutBlockChildren() [0x7fccf3739fc1]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fccf373521e]
STDERR: 	WebCore::RenderBlock::layout() [0x7fccf3734776]
STDERR: 	WebCore::RenderBlock::layoutBlockChild() [0x7fccf373a44a]
STDERR: 	WebCore::RenderBlock::layoutBlockChildren() [0x7fccf3739fc1]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fccf373521e]
STDERR: 	WebCore::RenderBlock::layout() [0x7fccf3734776]
STDERR: 	WebCore::RenderView::layoutContent() [0x7fccf38f2222]
STDERR: 	WebCore::RenderView::layout() [0x7fccf38f27d6]

For fast/text/emphasis.html
crash log for DumpRenderTree (pid 27545):
STDOUT: &lt;empty&gt;
STDERR: SHOULD NEVER BE REACHED
STDERR: third_party/WebKit/Source/WebCore/platform/graphics/SimpleFontData.h(206) : bool WebCore::SimpleFontData::applyTransforms(WebCore::GlyphBufferGlyph*, WebCore::GlyphBufferAdvance*, size_t, WebCore::TypesettingFeatures) const

STDERR: [27545:27545:17803018430928:ERROR:process_util_posix.cc(144)] Received signal 11
STDERR: 	base::debug::StackTrace::StackTrace() [0x7fe5dd006fda]
STDERR: 	base::(anonymous namespace)::StackDumpSignalHandler() [0x7fe5dd071579]
STDERR: 	0x7fe5d5f9faf0
STDERR: 	WebCore::SimpleFontData::applyTransforms() [0x7fe5e02c697e]
STDERR: 	WebCore::applyFontTransforms() [0x7fe5e02c6474]
STDERR: 	WebCore::WidthIterator::advanceInternal&lt;&gt;() [0x7fe5e02c8e51]
STDERR: 	WebCore::WidthIterator::advance() [0x7fe5e02c6749]
STDERR: 	WebCore::Font::floatWidthForSimpleText() [0x7fe5e0284bfa]
STDERR: 	WebCore::Font::width() [0x7fe5e026df28]
STDERR: 	WebCore::RenderBlock::LineBreaker::nextLineBreak() [0x7fe5e0c67804]
STDERR: 	WebCore::RenderBlock::layoutRunsAndFloatsInRange() [0x7fe5e0c61265]
STDERR: 	WebCore::RenderBlock::layoutRunsAndFloats() [0x7fe5e0c60b00]
STDERR: 	WebCore::RenderBlock::layoutInlineChildren() [0x7fe5e0c6317a]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fe5e0c131fd]
STDERR: 	WebCore::RenderBlock::layout() [0x7fe5e0c12776]
STDERR: 	WebCore::RenderObject::layoutIfNeeded() [0x7fe5e0be372b]
STDERR: 	WebCore::RenderBlock::insertFloatingObject() [0x7fe5e0c214f8]
STDERR: 	WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace() [0x7fe5e0c655da]
STDERR: 	WebCore::RenderBlock::LineBreaker::nextLineBreak() [0x7fe5e0c664de]
STDERR: 	WebCore::RenderBlock::layoutRunsAndFloatsInRange() [0x7fe5e0c61265]
STDERR: 	WebCore::RenderBlock::layoutRunsAndFloats() [0x7fe5e0c60b00]
STDERR: 	WebCore::RenderBlock::layoutInlineChildren() [0x7fe5e0c6317a]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fe5e0c131fd]
STDERR: 	WebCore::RenderBlock::layout() [0x7fe5e0c12776]
STDERR: 	WebCore::RenderBlock::layoutBlockChild() [0x7fe5e0c1844a]
STDERR: 	WebCore::RenderBlock::layoutBlockChildren() [0x7fe5e0c17fc1]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fe5e0c1321e]
STDERR: 	WebCore::RenderBlock::layout() [0x7fe5e0c12776]
STDERR: 	WebCore::RenderBlock::layoutBlockChild() [0x7fe5e0c1844a]
STDERR: 	WebCore::RenderBlock::layoutBlockChildren() [0x7fe5e0c17fc1]
STDERR: 	WebCore::RenderBlock::layoutBlock() [0x7fe5e0c1321e]
STDERR: 	WebCore::RenderBlock::layout() [0x7fe5e0c12776]

Here&apos;s a subset: http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=fast%2Ftext%2Fjustify-ideograph-leading-expansion.html%2Cfast%2Ftext%2Fword-space-with-kerning-2.html%2Cfast%2Ftext%2Fcomplex-preferred-logical-widths.html%2Cfast%2Ftext%2Ffont-variant-ligatures.html%2Cfast%2Ftext%2Fjustification-padding-mid-word.html%2Cfast%2Ftext%2Fregional-indicator-symobls.html%2Cfast%2Ftext%2Fword-space-with-kerning.html%2Cfast%2Ftext%2Fjustify-ideograph-complex.html%2Cfast%2Ftext%2Fipa-tone-letters.html%2Cfast%2Ftext%2Femphasis.html%2Cfast%2Ftext%2Ffont-kerning.html%2Cfast%2Ftext%2FoffsetForPosition-complex-fallback.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742532</commentid>
    <comment_count>19</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-15 15:52:54 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; The following tests have started asserting on debug bots after this change:

I tried to fix that in &lt;http://trac.webkit.org/r131375&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742546</commentid>
    <comment_count>20</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-15 16:02:43 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; The following tests have started asserting on debug bots after this change:
&gt; 
&gt; I tried to fix that in &lt;http://trac.webkit.org/r131375&gt;.

This made things worse. I’ll fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742547</commentid>
    <comment_count>21</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-15 16:04:39 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; The following tests have started asserting on debug bots after this change:
&gt; &gt; 
&gt; &gt; I tried to fix that in &lt;http://trac.webkit.org/r131375&gt;.
&gt; 
&gt; This made things worse. I’ll fix that.

&lt;http://trac.webkit.org/r131377&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168320</attachid>
            <date>2012-10-11 16:55:16 -0700</date>
            <delta_ts>2012-10-11 17:19:03 -0700</delta_ts>
            <desc>Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</desc>
            <filename>bug-99113-20121011165413.patch</filename>
            <type>text/plain</type>
            <size>25388</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTEwLTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1
cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydGVkIHdrQ1RGb250VHJh
bnNmb3JtR2x5cGhzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOiBBZGRlZCBhIGxvY2FsIEdseXBoQnVmZmVyIHRv
IHBhc3MgdG8gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmNvZGVQYXRoKTogUmF0aGVyIHRoYW4gYWx3YXlzIHVzZSB0aGUgY29tcGxleCBjb2RlIHBh
dGggd2hlbiBhbnkgdHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGNo
YW5nZWQgdG8gZG8gc28gb25seSBpZiBXaWR0aEl0ZXJhdG9yIGRvZXNu4oCZdCBzdXBwb3J0IHRo
aXMgRm9udOKAmXMKKyAgICAgICAgdHlwZXNldHRpbmcgZmVhdHVyZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9jYWwgR2x5cGhC
dWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKCkgd2hlbiBh
ZHZhbmNpbmcgdG8gb3IgZnJvbSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3QuIEFkZGVkIGEgRklYTUUK
KyAgICAgICAgYWJvdXQgaG93IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yIGxpZ2F0dXJlcyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KTogQWRkZWQgYSBsb2NhbCBHbHlwaEJ1ZmZlciB0byBw
YXNzIHRvCisgICAgICAgIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoKSB3aGVuIGFkdmFuY2luZyB0
byBvciBmcm9tIHRoZSByYW5nZSBvZiBpbnRlcmVzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dCk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2Ug
dG8KKyAgICAgICAgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcigpLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKTogQWRkZWQuIENhbGxzIHdrQ1RGb250
VHJhbnNmb3JtR2x5cGhzKCkgd2hlcmUKKyAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcik6IEFkZGVkIGluaXRpYWxpemVyIGZvciB0aGUgbmV3
IG1fdHlwZXNldHRpbmdGZWF0dXJlcworICAgICAgICBkYXRhIG1lbWJlci4KKyAgICAgICAgKE9y
aWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZSk6IEFkZGVkIHRoaXMgZGF0
YSB0eXBlLCB1c2VkIHRvIHRyYWNrIHNwYWNlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVycyB0cmVh
dGVkIGFzIHNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOiBB
ZGRlZC4gQXBwbGllcyBzaGFwaW5nIGFuZCBwb3NpdGlvbmluZyB0cmFuc2Zvcm1zLCBhcworICAg
ICAgICByZXF1aXJlZCBieSB0aGUgdHlwZXNldHRpbmcgZmVhdHVyZXMsIHRvIHRoZSBnbHlwaHMg
cmVjZW50bHkgYWRkZWQgdG8gYSBHbHlwaEJ1ZmZlciwgd2hpbGUKKyAgICAgICAgbWFpbnRhaW5p
bmcgdGhlIGFkdmFuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgdHJlYXRlZCBhcyBzcGFjZXMg
YW5kIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgIHByZWNlZGluZyB0aGVtLCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOiBBZGRl
ZCBjYWxscyB0byBhcHBseUZvbnRUcmFuc2Zvcm1zKCkgYXQgdGhlIGVuZAorICAgICAgICBvZiBl
YWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyBmcm9tIHRoZSBzYW1lIGZvbnQuIEFsc28gYWRk
ZWQgY29kZSB0byBtYWludGFpbiBhIHZlY3RvcgorICAgICAgICBvZiBzcGFjZXMgYW5kIGNoYXJh
Y3RlcnMgdHJlYXRlZCBhcyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6
OmFkdmFuY2VPbmVDaGFyYWN0ZXIpOiBDaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSBmcm9tIGEg
cG9pbnRlciB0bworICAgICAgICBhIHJlZmVyZW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMpOiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIFdpZHRo
SXRlcmF0b3IKKyAgICAgICAgaW5zdGFuY2VzIHN1cHBvcnQgdGhlIHR5cGVzZXR0aW5nIGZlYXR1
cmVzIG9mIHRoZSBnaXZlbiBmb250LiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMKKyAgICAg
ICAgbm90IGEgc2NyZWVuIGZvbnQgYW5kIGl0cyB0eXBlc2V0dGluZyBmZWF0dXJlcyBhcmUga2Vy
bmluZywgbGlnYXR1cmVzIG9yIGJvdGguCisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKTogQWRkZWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgaW5jbHVkZSBrZXJuaW5nIG9yIGxpZ2F0dXJl
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOiBEZWZp
bmVkIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBhbmQgZGVjbGFyZWQKKyAgICAgICAgd2tDVEZv
bnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UubW06IERlZmluZWQgd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9j
YWwgR2x5cGhCdWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
KCkuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udCk6IERpdHRvLgorCiAyMDEyLTEwLTExICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEltcHJvdmUgdmVy
dGljYWwgdGV4dCByZW5kZXJpbmcgb2YgSGFyZkJ1enpTaGFwZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTQzNyw2ICsxNDM3LDkgQEAgX3drQ0dDb250ZXh0UmVzZXRD
bGlwCiBfd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cwogI2VuZGlmCiBf
d2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0KKyNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK193a0NURm9udFRyYW5zZm9ybUdseXBocworI2Vu
ZGlmCiBfd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lCiBfd2tDb3B5Q0ZVUkxSZXNw
b25zZVN1Z2dlc3RlZEZpbGVuYW1lCiBfd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw4IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGEKICAgICAgICAgLy8gSWYgdGhlIGNvbXBsZXggdGV4dCBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmV0dXJuIGZhbGxiYWNrIGZvbnRzLCBhdm9pZAogICAgICAgICAvLyByZXR1cm5p
bmcgdGhlbSBmb3Igc2ltcGxlIHRleHQgYXMgd2VsbC4KICAgICAgICAgc3RhdGljIGJvb2wgcmV0
dXJuRmFsbGJhY2tGb250cyA9IGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
OwotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCByZXR1cm5G
YWxsYmFja0ZvbnRzID8gZmFsbGJhY2tGb250cyA6IDAsIGNvZGVQYXRoVG9Vc2UgPT0gU2ltcGxl
V2l0aEdseXBoT3ZlcmZsb3cgfHwgKGdseXBoT3ZlcmZsb3cgJiYgZ2x5cGhPdmVyZmxvdy0+Y29t
cHV0ZUJvdW5kcykgPyBnbHlwaE92ZXJmbG93IDogMCk7CisgICAgICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOworICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAm
Z2x5cGhCdWZmZXIsIHJldHVybkZhbGxiYWNrRm9udHMgPyBmYWxsYmFja0ZvbnRzIDogMCwgY29k
ZVBhdGhUb1VzZSA9PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB8fCAoZ2x5cGhPdmVyZmxvdyAm
JiBnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSA/IGdseXBoT3ZlcmZsb3cgOiAwKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CkBAIC0zMTQsNyArMzE1LDcgQEAgRm9udDo6Q29kZVBhdGgg
Rm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5mZWF0
dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+c2l6
ZSgpID4gMCkKICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAgICAgCi0gICAgaWYgKHJ1bi5sZW5n
dGgoKSA+IDEgJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpKQorICAgIGlmIChydW4ubGVuZ3RoKCkg
PiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMp
KQogICAgICAgICByZXR1cm4gQ29tcGxleDsKIAogICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5G
b3JDb2RlUGF0aCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzMsNyArMzMzLDEwIEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGwK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIAogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywg
cnVuLCAwLCBmYWxzZSwgZm9yVGV4dEVtcGhhc2lzKTsKLSAgICBpdC5hZHZhbmNlKGZyb20pOwor
ICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJlZml4
IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKKyAgICAvLyBsaWdh
dHVyZXMgYXJlIGVuYWJsZWQuCisgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKKyAg
ICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVX
aWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZm
ZXIpOwogCkBAIC0zNDQsNyArMzQ3LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbAogCiAgICAgaWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCBmaW5hbFJv
dW5kaW5nV2lkdGggPSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICAgICAgaXQuYWR2YW5j
ZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmxvY2Fs
R2x5cGhCdWZmZXIpOwogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdXaWR0
aCArIGl0Lm1fcnVuV2lkdGhTb0ZhciAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAgICAg
IGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CkBAIC00ODgsMTUgKzQ5MSwxNiBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAKIEZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKKyAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Ci0g
ICAgaXQuYWR2YW5jZShmcm9tKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sICZnbHlwaEJ1ZmZlcik7
CiAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgaXQuYWR2
YW5jZSh0byk7CisgICAgaXQuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBh
ZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogCiAgICAgLy8gVXNpbmcgcm91bmRmKCkg
cmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNlIHRv
IGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nLgogICAgIGlmIChydW4ucnRsKCkpIHsK
LSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQu
eCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54
KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFs
V2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CiAgICAgfQpAQCAtNTE2LDcgKzUyMCw3IEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICAgICAgd2hpbGUgKDEpIHsK
ICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVudENoYXJhY3RlcjsKICAgICAgICAgICAg
IGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgJmxv
Y2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVy
KHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVsdGEgKz0gdzsKICAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykgewpA
QCAtNTMxLDcgKzUzNSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRl
eHQKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVu
dENoYXJhY3RlcjsKICAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFk
dmFuY2VPbmVDaGFyYWN0ZXIodywgJmxvY2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYg
KCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVsdGEgLT0gdzsKICAgICAgICAgICAgIGlmIChp
bmNsdWRlUGFydGlhbEdseXBocykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJH
bHlwaFBhZ2VUcmVlTm9kZS5oIgogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKQEAgLTM3
LDggKzM4LDEzIEBACiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJX
SU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikpCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogI2VuZGlmCkBAIC0xOTAsNiArMTk2LDIxIEBAIHB1YmxpYzoKICAgICBib29sIGNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBj
b25zdDsKICNlbmRpZgogCisgICAgYm9vbCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCBzaXplX3QgZ2x5cGhDb3Vu
dCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdAorICAgIHsK
KyNpZiAhUExBVEZPUk0oTUFDKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9
IDEwODAKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShhZHZhbmNlcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICB3a0NURm9udFRyYW5z
Zm9ybU9wdGlvbnMgb3B0aW9ucyA9ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZyA/IHdr
Q1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwgKHR5cGVzZXR0aW5nRmVhdHVy
ZXMgJiBMaWdhdHVyZXMgPyB3a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOworICAg
IHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCBhZHZhbmNlcywgZ2x5cGhDb3VudCwgb3B0aW9ucyk7CisjZW5kaWYKKyAgICB9CisK
ICNpZiBQTEFURk9STShRVCkKICAgICBRUmF3Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtRGF0YS5yYXdGb250KCk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIFdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCoKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAg
ICwgbV9pc0FmdGVyRXhwYW5zaW9uKCFydW4uYWxsb3dzTGVhZGluZ0V4cGFuc2lvbigpKQogICAg
ICwgbV9maW5hbFJvdW5kaW5nV2lkdGgoMCkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhm
b250LT50eXBlc2V0dGluZ0ZlYXR1cmVzKCkpCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJh
Y2tGb250cykKICAgICAsIG1fYWNjb3VudEZvckdseXBoQm91bmRzKGFjY291bnRGb3JHbHlwaEJv
dW5kcykKICAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkobnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjptaW4oKSkKQEAgLTg0LDYgKzg1LDY2IEBAIEdseXBoRGF0YSBXaWR0aEl0ZXJhdG9yOjpnbHlw
aERhdGFGb3JDaGEKICAgICByZXR1cm4gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hh
cmFjdGVyLCBtaXJyb3IpOwogfQogCitzdHJ1Y3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3Rl
clRyZWF0ZWRBc1NwYWNlIHsKK3B1YmxpYzoKKyAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFj
dGVyVHJlYXRlZEFzU3BhY2UoYm9vbCBpc1NwYWNlLCBmbG9hdCBhZHZhbmNlQmVmb3JlLCBmbG9h
dCBhZHZhbmNlQXQpCisgICAgICAgIDogY2hhcmFjdGVySXNTcGFjZShpc1NwYWNlKQorICAgICAg
ICAsIGFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIoYWR2YW5jZUJlZm9yZSkKKyAgICAgICAgLCBhZHZh
bmNlQXRDaGFyYWN0ZXIoYWR2YW5jZUF0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNoYXJh
Y3RlcklzU3BhY2U7CisgICAgZmxvYXQgYWR2YW5jZUJlZm9yZUNoYXJhY3RlcjsKKyAgICBmbG9h
dCBhZHZhbmNlQXRDaGFyYWN0ZXI7Cit9OworCit0eXBlZGVmIFZlY3RvcjxwYWlyPGludCwgT3Jp
Z2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZTsKKworc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1z
KEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBl
c2V0dGluZ0ZlYXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkKK3sKKyAgICBBU1NFUlQodHlwZXNldHRpbmdGZWF0dXJlcyAmIChLZXJuaW5n
IHwgTGlnYXR1cmVzKSk7CisKKyAgICBpZiAoIWdseXBoQnVmZmVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGludCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAg
IGlmIChnbHlwaEJ1ZmZlci0+c2l6ZSgpIDw9IGxhc3RHbHlwaENvdW50KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIENHU2l6ZSogYWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMoMCk7
CisgICAgQ0dGbG9hdCB3aWR0aERpZmZlcmVuY2UgPSAwOworICAgIGZvciAoaW50IGkgPSBsYXN0
R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsgKytpKQorICAgICAgICB3aWR0aERpZmZl
cmVuY2UgLT0gYWR2YW5jZXNbaV0ud2lkdGg7CisKKyAgICBpZiAoIWx0cikgeworICAgICAgICBm
b3IgKGludCBpID0gMCwgZW5kID0gZ2x5cGhCdWZmZXItPnNpemUoKSAtIDE7IGkgPCBnbHlwaEJ1
ZmZlci0+c2l6ZSgpIC8gMjsgKytpLCAtLWVuZCkKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLT5z
d2FwKGksIGVuZCk7CisgICAgfQorCisgICAgZm9udERhdGEtPmFwcGx5VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3Vu
dCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMp
OworCisgICAgaWYgKCFsdHIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGVuZCA9IGdseXBo
QnVmZmVyLT5zaXplKCkgLSAxOyBpIDwgZ2x5cGhCdWZmZXItPnNpemUoKSAvIDI7ICsraSwgLS1l
bmQpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c3dhcChpLCBlbmQpOworICAgIH0KKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGludCBzcGFjZU9mZnNldCA9IGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZVtpXS5maXJzdDsKKyAgICAgICAgY29uc3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRy
ZWF0ZWRBc1NwYWNlJiBvcmlnaW5hbEFkdmFuY2VzID0gY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
W2ldLnNlY29uZDsKKyAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ICYmICFvcmlnaW5hbEFkdmFuY2Vz
LmNoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMoc3Bh
Y2VPZmZzZXQgLSAxKS0+d2lkdGggPSBvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VCZWZvcmVDaGFy
YWN0ZXI7CisgICAgICAgIGdseXBoQnVmZmVyLT5hZHZhbmNlcyhzcGFjZU9mZnNldCktPndpZHRo
ID0gb3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQXRDaGFyYWN0ZXI7CisgICAgfQorICAgIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZS5jbGVhcigpOworCisgICAgZm9yIChpbnQgaSA9IGxhc3RHbHlw
aENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgICAgIHdpZHRoRGlmZmVyZW5j
ZSArPSBhZHZhbmNlc1tpXS53aWR0aDsKKworICAgIGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZm
ZXJTaXplOworICAgIHJldHVybiB3aWR0aERpZmZlcmVuY2U7Cit9CisKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0SXRlcmF0b3I+CiBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhC
dWZmZXIpCiB7CkBAIC05OSwxMCArMTYwLDExIEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KIAogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9
IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbGFzdEZv
bnREYXRhID0gcHJpbWFyeUZvbnQ7CisgICAgaW50IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZm
ZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVDaGFyMzIgY2hhcmFjdGVyID0g
MDsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKLQorICAgIENoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2U7CiAgICAgd2hpbGUgKHRleHRJdGVy
YXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpIHsKICAgICAgICAgdW5zaWdu
ZWQgYWR2YW5jZUxlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAgIGNvbnN0IEdseXBoRGF0
YSYgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgcnRsLCB0ZXh0
SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpLCBhZHZhbmNlTGVuZ3RoKTsKQEAgLTEzMiw2ICsx
OTQsOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZm9udERhdGEgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKQorICAgICAgICAgICAg
ICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBt
X3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwgbV90eXBlc2V0dGluZ0Zl
YXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOworCiAgICAgICAgICAgICBsYXN0Rm9u
dERhdGEgPSBmb250RGF0YTsKICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9u
dERhdGEgIT0gcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBk
b2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGlmCkBAIC0xODcs
NiArMjUyLDEwIEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAg
ICAgICAgICAgICAgICBtX2lzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKICAgICAgICAgfQogCisg
ICAgICAgIGlmIChzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgJiYgZ2x5cGhCdWZmZXIgJiYg
Rm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICBjaGFyYWN0ZXJzVHJl
YXRlZEFzU3BhY2UuYXBwZW5kKG1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+c2l6ZSgpLAorICAgICAg
ICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZShjaGFy
YWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhCdWZmZXItPmFkdmFuY2VB
dChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkgOiAwLCB3aWR0aCkpKTsKKwogICAgICAgICBpZiAo
bV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKICAgICAgICAgICAgIGJvdW5kcyA9IGZvbnREYXRh
LT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBpZiAoIXRleHRJdGVyYXRvci5j
dXJyZW50Q2hhcmFjdGVyKCkpCkBAIC0yMzksNiArMzA4LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKHNob3Vs
ZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSkKKyAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5
Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwg
bGFzdEZvbnREYXRhLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMsIGNoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZSk7CisKICAgICB1bnNpZ25lZCBjb25zdW1lZENoYXJhY3RlcnMgPSB0ZXh0SXRlcmF0b3Iu
Y3VycmVudENoYXJhY3RlcigpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwogICAgIG1fY3VycmVudENo
YXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CiAgICAgbV9ydW5XaWR0
aFNvRmFyICs9IHdpZHRoU2luY2VMYXN0Um91bmRpbmc7CkBAIC0yNjUsMTUgKzMzNywxNSBAQCB1
bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzCiAgICAgcmV0dXJuIGFkdmFu
Y2VJbnRlcm5hbCh0ZXh0SXRlcmF0b3IsIGdseXBoQnVmZmVyKTsKIH0KIAotYm9vbCBXaWR0aEl0
ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIqIGds
eXBoQnVmZmVyKQorYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0
JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewotICAgIGludCBvbGRTaXplID0g
Z2x5cGhCdWZmZXItPnNpemUoKTsKLSAgICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEs
IGdseXBoQnVmZmVyKTsKKyAgICBpbnQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAg
ICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1ZmZlcik7CiAgICAgZmxv
YXQgdyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci0+c2l6
ZSgpOyArK2kpCi0gICAgICAgIHcgKz0gZ2x5cGhCdWZmZXItPmFkdmFuY2VBdChpKTsKKyAgICBm
b3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQorICAgICAg
ICB3ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKTsKICAgICB3aWR0aCA9IHc7Ci0gICAgcmV0
dXJuIGdseXBoQnVmZmVyLT5zaXplKCkgPiBvbGRTaXplOworICAgIHJldHVybiBnbHlwaEJ1ZmZl
ci5zaXplKCkgPiBvbGRTaXplOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCShyZXZpc2lvbiAxMzEwOTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgV2lkdGhJdGVyYXRvcl9oCiAjZGVmaW5l
IFdpZHRoSXRlcmF0b3JfaAogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlNWR0dseXBo
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00MCw4ICs0MSw4IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3Vu
ZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKLSAgICB1bnNpZ25l
ZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0gICAgYm9vbCBhZHZhbmNlT25l
Q2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIqID0gMCk7CisgICAgdW5zaWduZWQg
YWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7CisgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFj
dGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1heEdseXBoQm91
bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1
cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQogICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdC
b3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9t
aW5HbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNTcsNiArNTgsMTggQEAgcHVibGljOgogICAgIFZl
Y3RvcjxTVkdHbHlwaDo6QXJhYmljRm9ybT4mIGFyYWJpY0Zvcm1zKCkgeyByZXR1cm4gbV9hcmFi
aWNGb3JtczsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGVzZXR0aW5n
RmVhdHVyZXMoY29uc3QgRm9udCYgZm9udCkKKyAgICB7CisjaWYgIVBMQVRGT1JNKE1BQykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDgwCisgICAgICAgIHJldHVybiAh
Zm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisjZWxzZQorICAgICAgICBpZiAoIWZvbnQuaXNQ
cmludGVyRm9udCgpKQorICAgICAgICAgICAgcmV0dXJuICFmb250LnR5cGVzZXR0aW5nRmVhdHVy
ZXMoKTsKKworICAgICAgICByZXR1cm4gIShmb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIH4o
S2VybmluZyB8IExpZ2F0dXJlcykpOworI2VuZGlmCisgICAgfQorCiAgICAgY29uc3QgRm9udCog
bV9mb250OwogCiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CkBAIC03OCw2ICs5MSw5IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KICAgICBpbmxpbmUg
dW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYsIEdseXBoQnVmZmVyKik7CiAK
KyAgICBib29sIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7IH0KKworICAgIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgbV90eXBlc2V0dGluZ0ZlYXR1cmVzOwogICAgIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogICAgIGJvb2wgbV9hY2NvdW50Rm9y
R2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaAkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSwxNyBA
QCBleHRlcm4gaW50ICgqd2tHZXROU0V2ZW50TW9tZW50dW1QaGFzZSkoCiAKIGV4dGVybiBDVExp
bmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIq
ICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRp
Y3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVu
aUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsKIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorZW51bSB7CisgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVNo
YXBpbmcgPSAoMSA8PCAwKSwKKyAgICB3a0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcg
PSAoMSA8PCAxKQorfTsKKwordHlwZWRlZiBpbnQgd2tDVEZvbnRUcmFuc2Zvcm1PcHRpb25zOwor
CitleHRlcm4gYm9vbCAoKndrQ1RGb250VHJhbnNmb3JtR2x5cGhzKShDVEZvbnRSZWYgZm9udCwg
Q0dHbHlwaCBnbHlwaHNbXSwgQ0dTaXplIGFkdmFuY2VzW10sIENGSW5kZXggY291bnQsIHdrQ1RG
b250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zKTsKKyNlbmRpZgorCiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCiAKIGV4dGVybiBDVFR5cGVzZXR0ZXJSZWYgKCp3
a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBV
bmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3Vu
dCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShj
b25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlv
bnMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzYsNiArMTM2LDEwIEBAIGludCAoKndrR2V0TlNFdmVudE1vbWVudHVtUGhhc2UpKE5TRXZl
bnQKICNlbmRpZgogCiBDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlk
ZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRl
eCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAo
KmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsKKyNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK2Jvb2wgKCp3a0NURm9udFRyYW5z
Zm9ybUdseXBocykoQ1RGb250UmVmIGZvbnQsIENHR2x5cGggZ2x5cGhzW10sIENHU2l6ZSBhZHZh
bmNlc1tdLCBDRkluZGV4IGNvdW50LCB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyk7
CisjZW5kaWYKKwogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3MAog
Q1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3ZpZGVy
QW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4
LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCop
LCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCosIENG
RGljdGlvbmFyeVJlZiBvcHRpb25zKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTMx
MDkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBAIGJvb2wgU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyOjphZHZhbmNlKCkKIAogdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFu
Y2VTaW1wbGVUZXh0KCkKIHsKLSAgICB1bnNpZ25lZCBtZXRyaWNzTGVuZ3RoID0gbV9zaW1wbGVX
aWR0aEl0ZXJhdG9yLT5hZHZhbmNlKG1fdGV4dFBvc2l0aW9uICsgMSk7CisgICAgR2x5cGhCdWZm
ZXIgZ2x5cGhCdWZmZXI7CisgICAgdW5zaWduZWQgbWV0cmljc0xlbmd0aCA9IG1fc2ltcGxlV2lk
dGhJdGVyYXRvci0+YWR2YW5jZShtX3RleHRQb3NpdGlvbiArIDEsICZnbHlwaEJ1ZmZlcik7CiAg
ICAgaWYgKCFtZXRyaWNzTGVuZ3RoKSB7CiAgICAgICAgIG1fY3VycmVudE1ldHJpY3MgPSBTVkdU
ZXh0TWV0cmljcygpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNw
cAkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDgg
QEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUAogZmxvYXQgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5
cGhOYW1lKSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQoJmZvbnQsIHJ1bik7Ci0gICAg
Y2hhcnNDb25zdW1lZCArPSBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CisgICAgR2x5cGhCdWZm
ZXIgZ2x5cGhCdWZmZXI7CisgICAgY2hhcnNDb25zdW1lZCArPSBpdC5hZHZhbmNlKHJ1bi5sZW5n
dGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICBnbHlwaE5hbWUgPSBpdC5sYXN0R2x5cGhOYW1lKCk7
CiAgICAgcmV0dXJuIGl0LnJ1bldpZHRoU29GYXIoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDEyLTEwLTExICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViS2l0MiBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMjQ3MDY4MD4g
Rm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1cHBvcnQga2VybmluZyBhbmQgbGln
YXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRp
b25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEp
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50
ZXJmYWNlLm1tOgorICAgICAgICAoSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UpOiBBZGRlZCB3
a0NURm9udFRyYW5zZm9ybUdseXBocy4KKwogMjAxMi0xMC0xMSAgUmVnaW5hIENodW5nICA8aGVl
amluLnIuY2h1bmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBXZWJQcm9jZXNz
IGtlZXBzIG9uIHdhaXRpbmcgZm9yIFVJUHJvY2VzcwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5
c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uo
dm9pZCkKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKICAgICAg
ICAgSU5JVChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cyk7CiAjZW5kaWYK
KyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAgICAgICAgSU5J
VChDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpOworI2VuZGlmCiAgICAgICAgIElOSVQoQ29weUNPTk5F
Q1RQcm94eVJlc3BvbnNlKTsKICAgICAgICAgSU5JVChDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xp
bmUpOwogICAgICAgICBJTklUKENyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpOwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMTA5KQorKysgU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTAtMTEgIERh
biBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBXZWJLaXQvbWFjIHBhcnQg
b2YgPHJkYXI6Ly9wcm9ibGVtLzEyNDcwNjgwPiBGb2504oCZcyBmYXN0IGNvZGUgcGF0aCBkb2Vz
buKAmXQgc3VwcG9ydCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUg
Y2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rp
b24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAgICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVy
ZmFjZSk6IEFkZGVkIHdrQ1RGb250VHJhbnNmb3JtR2x5cGhzLgorCiAyMDEyLTEwLTEwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2ggUmVzb3VyY2VM
b2FkZXI6OnJlc291cmNlRGF0YSgpIGZyb20gU2hhcmVkQnVmZmVyIHRvIFJlc291cmNlQnVmZmVy
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZh
Y2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
U3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAg
LTUyLDYgKzUyLDkgQEAgdm9pZCBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSh2b2lkKQogI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogICAgIElOSVQoQ0dDb250
ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMpOwogI2VuZGlmCisjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgSU5JVChDVEZvbnRUcmFuc2Zvcm1H
bHlwaHMpOworI2VuZGlmCiAgICAgSU5JVChDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1l
KTsKICAgICBJTklUKENvcHlDT05ORUNUUHJveHlSZXNwb25zZSk7CiAgICAgSU5JVChDb3B5TlNV
UkxSZXNwb25zZVN0YXR1c0xpbmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168322</attachid>
            <date>2012-10-11 17:19:05 -0700</date>
            <delta_ts>2012-10-12 09:41:42 -0700</delta_ts>
            <desc>Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</desc>
            <filename>bug-99113-20121011171802.patch</filename>
            <type>text/plain</type>
            <size>25398</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTEwLTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1
cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydGVkIHdrQ1RGb250VHJh
bnNmb3JtR2x5cGhzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOiBBZGRlZCBhIGxvY2FsIEdseXBoQnVmZmVyIHRv
IHBhc3MgdG8gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmNvZGVQYXRoKTogUmF0aGVyIHRoYW4gYWx3YXlzIHVzZSB0aGUgY29tcGxleCBjb2RlIHBh
dGggd2hlbiBhbnkgdHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGNo
YW5nZWQgdG8gZG8gc28gb25seSBpZiBXaWR0aEl0ZXJhdG9yIGRvZXNu4oCZdCBzdXBwb3J0IHRo
aXMgRm9udOKAmXMKKyAgICAgICAgdHlwZXNldHRpbmcgZmVhdHVyZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9jYWwgR2x5cGhC
dWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKCkgd2hlbiBh
ZHZhbmNpbmcgdG8gb3IgZnJvbSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3QuIEFkZGVkIGEgRklYTUUK
KyAgICAgICAgYWJvdXQgaG93IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yIGxpZ2F0dXJlcyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KTogQWRkZWQgYSBsb2NhbCBHbHlwaEJ1ZmZlciB0byBw
YXNzIHRvCisgICAgICAgIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoKSB3aGVuIGFkdmFuY2luZyB0
byBvciBmcm9tIHRoZSByYW5nZSBvZiBpbnRlcmVzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dCk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2Ug
dG8KKyAgICAgICAgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcigpLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKTogQWRkZWQuIENhbGxzIHdrQ1RGb250
VHJhbnNmb3JtR2x5cGhzKCkgd2hlcmUKKyAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcik6IEFkZGVkIGluaXRpYWxpemVyIGZvciB0aGUgbmV3
IG1fdHlwZXNldHRpbmdGZWF0dXJlcworICAgICAgICBkYXRhIG1lbWJlci4KKyAgICAgICAgKE9y
aWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZSk6IEFkZGVkIHRoaXMgZGF0
YSB0eXBlLCB1c2VkIHRvIHRyYWNrIHNwYWNlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVycyB0cmVh
dGVkIGFzIHNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOiBB
ZGRlZC4gQXBwbGllcyBzaGFwaW5nIGFuZCBwb3NpdGlvbmluZyB0cmFuc2Zvcm1zLCBhcworICAg
ICAgICByZXF1aXJlZCBieSB0aGUgdHlwZXNldHRpbmcgZmVhdHVyZXMsIHRvIHRoZSBnbHlwaHMg
cmVjZW50bHkgYWRkZWQgdG8gYSBHbHlwaEJ1ZmZlciwgd2hpbGUKKyAgICAgICAgbWFpbnRhaW5p
bmcgdGhlIGFkdmFuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgdHJlYXRlZCBhcyBzcGFjZXMg
YW5kIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgIHByZWNlZGluZyB0aGVtLCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOiBBZGRl
ZCBjYWxscyB0byBhcHBseUZvbnRUcmFuc2Zvcm1zKCkgYXQgdGhlIGVuZAorICAgICAgICBvZiBl
YWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyBmcm9tIHRoZSBzYW1lIGZvbnQuIEFsc28gYWRk
ZWQgY29kZSB0byBtYWludGFpbiBhIHZlY3RvcgorICAgICAgICBvZiBzcGFjZXMgYW5kIGNoYXJh
Y3RlcnMgdHJlYXRlZCBhcyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6
OmFkdmFuY2VPbmVDaGFyYWN0ZXIpOiBDaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSBmcm9tIGEg
cG9pbnRlciB0bworICAgICAgICBhIHJlZmVyZW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMpOiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIFdpZHRo
SXRlcmF0b3IKKyAgICAgICAgaW5zdGFuY2VzIHN1cHBvcnQgdGhlIHR5cGVzZXR0aW5nIGZlYXR1
cmVzIG9mIHRoZSBnaXZlbiBmb250LiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMKKyAgICAg
ICAgbm90IGEgc2NyZWVuIGZvbnQgYW5kIGl0cyB0eXBlc2V0dGluZyBmZWF0dXJlcyBhcmUga2Vy
bmluZywgbGlnYXR1cmVzIG9yIGJvdGguCisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKTogQWRkZWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgaW5jbHVkZSBrZXJuaW5nIG9yIGxpZ2F0dXJl
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOiBEZWZp
bmVkIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBhbmQgZGVjbGFyZWQKKyAgICAgICAgd2tDVEZv
bnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UubW06IERlZmluZWQgd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9j
YWwgR2x5cGhCdWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
KCkuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udCk6IERpdHRvLgorCiAyMDEyLTEwLTExICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEltcHJvdmUgdmVy
dGljYWwgdGV4dCByZW5kZXJpbmcgb2YgSGFyZkJ1enpTaGFwZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTQzNyw2ICsxNDM3LDkgQEAgX3drQ0dDb250ZXh0UmVzZXRD
bGlwCiBfd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cwogI2VuZGlmCiBf
d2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0KKyNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK193a0NURm9udFRyYW5zZm9ybUdseXBocworI2Vu
ZGlmCiBfd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lCiBfd2tDb3B5Q0ZVUkxSZXNw
b25zZVN1Z2dlc3RlZEZpbGVuYW1lCiBfd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw4IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGEKICAgICAgICAgLy8gSWYgdGhlIGNvbXBsZXggdGV4dCBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmV0dXJuIGZhbGxiYWNrIGZvbnRzLCBhdm9pZAogICAgICAgICAvLyByZXR1cm5p
bmcgdGhlbSBmb3Igc2ltcGxlIHRleHQgYXMgd2VsbC4KICAgICAgICAgc3RhdGljIGJvb2wgcmV0
dXJuRmFsbGJhY2tGb250cyA9IGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
OwotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCByZXR1cm5G
YWxsYmFja0ZvbnRzID8gZmFsbGJhY2tGb250cyA6IDAsIGNvZGVQYXRoVG9Vc2UgPT0gU2ltcGxl
V2l0aEdseXBoT3ZlcmZsb3cgfHwgKGdseXBoT3ZlcmZsb3cgJiYgZ2x5cGhPdmVyZmxvdy0+Y29t
cHV0ZUJvdW5kcykgPyBnbHlwaE92ZXJmbG93IDogMCk7CisgICAgICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOworICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAm
Z2x5cGhCdWZmZXIsIHJldHVybkZhbGxiYWNrRm9udHMgPyBmYWxsYmFja0ZvbnRzIDogMCwgY29k
ZVBhdGhUb1VzZSA9PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB8fCAoZ2x5cGhPdmVyZmxvdyAm
JiBnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSA/IGdseXBoT3ZlcmZsb3cgOiAwKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CkBAIC0zMTQsNyArMzE1LDcgQEAgRm9udDo6Q29kZVBhdGgg
Rm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5mZWF0
dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+c2l6
ZSgpID4gMCkKICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAgICAgCi0gICAgaWYgKHJ1bi5sZW5n
dGgoKSA+IDEgJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpKQorICAgIGlmIChydW4ubGVuZ3RoKCkg
PiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMp
KQogICAgICAgICByZXR1cm4gQ29tcGxleDsKIAogICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5G
b3JDb2RlUGF0aCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzMsNyArMzMzLDEwIEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGwK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIAogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywg
cnVuLCAwLCBmYWxzZSwgZm9yVGV4dEVtcGhhc2lzKTsKLSAgICBpdC5hZHZhbmNlKGZyb20pOwor
ICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJlZml4
IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKKyAgICAvLyBsaWdh
dHVyZXMgYXJlIGVuYWJsZWQuCisgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKKyAg
ICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVX
aWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZm
ZXIpOwogCkBAIC0zNDQsNyArMzQ3LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbAogCiAgICAgaWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCBmaW5hbFJv
dW5kaW5nV2lkdGggPSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICAgICAgaXQuYWR2YW5j
ZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmxvY2Fs
R2x5cGhCdWZmZXIpOwogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdXaWR0
aCArIGl0Lm1fcnVuV2lkdGhTb0ZhciAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAgICAg
IGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CkBAIC00ODgsMTUgKzQ5MSwxNiBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAKIEZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKKyAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Ci0g
ICAgaXQuYWR2YW5jZShmcm9tKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sICZnbHlwaEJ1ZmZlcik7
CiAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgaXQuYWR2
YW5jZSh0byk7CisgICAgaXQuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBh
ZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogCiAgICAgLy8gVXNpbmcgcm91bmRmKCkg
cmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNlIHRv
IGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nLgogICAgIGlmIChydW4ucnRsKCkpIHsK
LSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQu
eCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54
KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFs
V2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CiAgICAgfQpAQCAtNTE2LDcgKzUyMCw3IEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICAgICAgd2hpbGUgKDEpIHsK
ICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVudENoYXJhY3RlcjsKICAgICAgICAgICAg
IGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgJmxv
Y2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVy
KHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVsdGEgKz0gdzsKICAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykgewpA
QCAtNTMxLDcgKzUzNSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRl
eHQKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVu
dENoYXJhY3RlcjsKICAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFk
dmFuY2VPbmVDaGFyYWN0ZXIodywgJmxvY2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYg
KCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVsdGEgLT0gdzsKICAgICAgICAgICAgIGlmIChp
bmNsdWRlUGFydGlhbEdseXBocykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJH
bHlwaFBhZ2VUcmVlTm9kZS5oIgogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKQEAgLTM3
LDggKzM4LDEzIEBACiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJX
SU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikpCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogI2VuZGlmCkBAIC0xOTAsNiArMTk2LDIxIEBAIHB1YmxpYzoKICAgICBib29sIGNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBj
b25zdDsKICNlbmRpZgogCisgICAgYm9vbCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCBzaXplX3QgZ2x5cGhDb3Vu
dCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdAorICAgIHsK
KyNpZiAhUExBVEZPUk0oTUFDKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9
IDEwODAKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShhZHZhbmNlcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICB3a0NURm9udFRyYW5z
Zm9ybU9wdGlvbnMgb3B0aW9ucyA9ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZyA/IHdr
Q1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwgKHR5cGVzZXR0aW5nRmVhdHVy
ZXMgJiBMaWdhdHVyZXMgPyB3a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOworICAg
IHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCBhZHZhbmNlcywgZ2x5cGhDb3VudCwgb3B0aW9ucyk7CisjZW5kaWYKKyAgICB9CisK
ICNpZiBQTEFURk9STShRVCkKICAgICBRUmF3Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtRGF0YS5yYXdGb250KCk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIFdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCoKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAg
ICwgbV9pc0FmdGVyRXhwYW5zaW9uKCFydW4uYWxsb3dzTGVhZGluZ0V4cGFuc2lvbigpKQogICAg
ICwgbV9maW5hbFJvdW5kaW5nV2lkdGgoMCkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhm
b250LT50eXBlc2V0dGluZ0ZlYXR1cmVzKCkpCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJh
Y2tGb250cykKICAgICAsIG1fYWNjb3VudEZvckdseXBoQm91bmRzKGFjY291bnRGb3JHbHlwaEJv
dW5kcykKICAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkobnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjptaW4oKSkKQEAgLTg0LDYgKzg1LDY2IEBAIEdseXBoRGF0YSBXaWR0aEl0ZXJhdG9yOjpnbHlw
aERhdGFGb3JDaGEKICAgICByZXR1cm4gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hh
cmFjdGVyLCBtaXJyb3IpOwogfQogCitzdHJ1Y3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3Rl
clRyZWF0ZWRBc1NwYWNlIHsKK3B1YmxpYzoKKyAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFj
dGVyVHJlYXRlZEFzU3BhY2UoYm9vbCBpc1NwYWNlLCBmbG9hdCBhZHZhbmNlQmVmb3JlLCBmbG9h
dCBhZHZhbmNlQXQpCisgICAgICAgIDogY2hhcmFjdGVySXNTcGFjZShpc1NwYWNlKQorICAgICAg
ICAsIGFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIoYWR2YW5jZUJlZm9yZSkKKyAgICAgICAgLCBhZHZh
bmNlQXRDaGFyYWN0ZXIoYWR2YW5jZUF0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNoYXJh
Y3RlcklzU3BhY2U7CisgICAgZmxvYXQgYWR2YW5jZUJlZm9yZUNoYXJhY3RlcjsKKyAgICBmbG9h
dCBhZHZhbmNlQXRDaGFyYWN0ZXI7Cit9OworCit0eXBlZGVmIFZlY3RvcjxwYWlyPGludCwgT3Jp
Z2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZTsKKworc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1z
KEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBl
c2V0dGluZ0ZlYXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkKK3sKKyAgICBBU1NFUlQodHlwZXNldHRpbmdGZWF0dXJlcyAmIChLZXJuaW5n
IHwgTGlnYXR1cmVzKSk7CisKKyAgICBpZiAoIWdseXBoQnVmZmVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGludCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAg
IGlmIChnbHlwaEJ1ZmZlci0+c2l6ZSgpIDw9IGxhc3RHbHlwaENvdW50KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci0+
YWR2YW5jZXMoMCk7CisgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKKyAgICAgICAg
d2lkdGhEaWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoOworCisgICAgaWYgKCFsdHIpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGVuZCA9IGdseXBoQnVmZmVyLT5zaXplKCkgLSAxOyBp
IDwgZ2x5cGhCdWZmZXItPnNpemUoKSAvIDI7ICsraSwgLS1lbmQpCisgICAgICAgICAgICBnbHlw
aEJ1ZmZlci0+c3dhcChpLCBlbmQpOworICAgIH0KKworICAgIGZvbnREYXRhLT5hcHBseVRyYW5z
Zm9ybXMoZ2x5cGhCdWZmZXItPmdseXBocyhsYXN0R2x5cGhDb3VudCksIGFkdmFuY2VzICsgbGFz
dEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50LCB0eXBlc2V0dGlu
Z0ZlYXR1cmVzKTsKKworICAgIGlmICghbHRyKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwLCBl
bmQgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMTsgaSA8IGdseXBoQnVmZmVyLT5zaXplKCkgLyAy
OyArK2ksIC0tZW5kKQorICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnN3YXAoaSwgZW5kKTsKKyAg
ICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZS5zaXplKCk7ICsraSkgeworICAgICAgICBpbnQgc3BhY2VPZmZzZXQgPSBjaGFyYWN0ZXJzVHJl
YXRlZEFzU3BhY2VbaV0uZmlyc3Q7CisgICAgICAgIGNvbnN0IE9yaWdpbmFsQWR2YW5jZXNGb3JD
aGFyYWN0ZXJUcmVhdGVkQXNTcGFjZSYgb3JpZ2luYWxBZHZhbmNlcyA9IGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZVtpXS5zZWNvbmQ7CisgICAgICAgIGlmIChzcGFjZU9mZnNldCAmJiAhb3JpZ2lu
YWxBZHZhbmNlcy5jaGFyYWN0ZXJJc1NwYWNlKQorICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFk
dmFuY2VzKHNwYWNlT2Zmc2V0IC0gMSktPndpZHRoID0gb3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNl
QmVmb3JlQ2hhcmFjdGVyOworICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMoc3BhY2VPZmZz
ZXQpLT53aWR0aCA9IG9yaWdpbmFsQWR2YW5jZXMuYWR2YW5jZUF0Q2hhcmFjdGVyOworICAgIH0K
KyAgICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuY2xlYXIoKTsKKworICAgIGZvciAoaW50IGkg
PSBsYXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsgKytpKQorICAgICAgICB3aWR0
aERpZmZlcmVuY2UgKz0gYWR2YW5jZXNbaV0ud2lkdGg7CisKKyAgICBsYXN0R2x5cGhDb3VudCA9
IGdseXBoQnVmZmVyU2l6ZTsKKyAgICByZXR1cm4gd2lkdGhEaWZmZXJlbmNlOworfQorCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgogaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0
b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyKQogewpAQCAtOTksMTAgKzE2MCwxMSBAQCBpbmxpbmUgdW5zaWduZWQg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcHJp
bWFyeUZvbnQgPSBtX2ZvbnQtPnByaW1hcnlGb250KCk7CiAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIGxhc3RGb250RGF0YSA9IHByaW1hcnlGb250OworICAgIGludCBsYXN0R2x5cGhDb3VudCA9
IGdseXBoQnVmZmVyID8gZ2x5cGhCdWZmZXItPnNpemUoKSA6IDA7CiAKICAgICBVQ2hhcjMyIGNo
YXJhY3RlciA9IDA7CiAgICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7Ci0KKyAgICBDaGFy
YWN0ZXJzVHJlYXRlZEFzU3BhY2UgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlOwogICAgIHdoaWxl
ICh0ZXh0SXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7CiAgICAg
ICAgIHVuc2lnbmVkIGFkdmFuY2VMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwogICAgICAgICBjb25z
dCBHbHlwaERhdGEmIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIs
IHJ0bCwgdGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSwgYWR2YW5jZUxlbmd0aCk7CkBA
IC0xMzIsNiArMTk0LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJ
bgogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvbnREYXRhICE9IGxhc3RGb250RGF0YSAmJiB3
aWR0aCkgeworICAgICAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSkKKyAg
ICAgICAgICAgICAgICBtX3J1bldpZHRoU29GYXIgKz0gYXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbV9ydW4ubHRyKCksIGxhc3RHbHlwaENvdW50LCBsYXN0Rm9udERhdGEsIG1fdHlw
ZXNldHRpbmdGZWF0dXJlcywgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKKwogICAgICAgICAg
ICAgbGFzdEZvbnREYXRhID0gZm9udERhdGE7CiAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0Zv
bnRzICYmIGZvbnREYXRhICE9IHByaW1hcnlGb250KSB7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgZG9lcyBhIGxpdHRsZSBleHRyYSB3b3JrIHRoYXQgY291bGQgYmUgYXZvaWRlZCBp
ZgpAQCAtMTg3LDYgKzI1MiwxMCBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2
YW5jZUluCiAgICAgICAgICAgICAgICAgbV9pc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CiAgICAg
ICAgIH0KIAorICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpICYmIGdseXBo
QnVmZmVyICYmIEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgY2hh
cmFjdGVyc1RyZWF0ZWRBc1NwYWNlLmFwcGVuZChtYWtlX3BhaXIoZ2x5cGhCdWZmZXItPnNpemUo
KSwKKyAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRlZEFz
U3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/IGdseXBoQnVmZmVy
LT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpIDogMCwgd2lkdGgpKSk7CisKICAg
ICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRzKSB7CiAgICAgICAgICAgICBib3VuZHMg
PSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgaWYgKCF0ZXh0
SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpKQpAQCAtMjM5LDYgKzMwOCw5IEBAIGlubGluZSB1
bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgfQogICAgIH0KIAorICAg
IGlmIChzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkpCisgICAgICAgIG1fcnVuV2lkdGhTb0Zh
ciArPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEds
eXBoQ291bnQsIGxhc3RGb250RGF0YSwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJz
VHJlYXRlZEFzU3BhY2UpOworCiAgICAgdW5zaWduZWQgY29uc3VtZWRDaGFyYWN0ZXJzID0gdGV4
dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSAtIG1fY3VycmVudENoYXJhY3RlcjsKICAgICBt
X2N1cnJlbnRDaGFyYWN0ZXIgPSB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOwogICAg
IG1fcnVuV2lkdGhTb0ZhciArPSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nOwpAQCAtMjY1LDE1ICsz
MzcsMTUgQEAgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2ZmcwogICAgIHJl
dHVybiBhZHZhbmNlSW50ZXJuYWwodGV4dEl0ZXJhdG9yLCBnbHlwaEJ1ZmZlcik7CiB9CiAKLWJv
b2wgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlcikKK2Jvb2wgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJh
Y3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlcikKIHsKLSAgICBpbnQg
b2xkU2l6ZSA9IGdseXBoQnVmZmVyLT5zaXplKCk7Ci0gICAgYWR2YW5jZShtX2N1cnJlbnRDaGFy
YWN0ZXIgKyAxLCBnbHlwaEJ1ZmZlcik7CisgICAgaW50IG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5z
aXplKCk7CisgICAgYWR2YW5jZShtX2N1cnJlbnRDaGFyYWN0ZXIgKyAxLCAmZ2x5cGhCdWZmZXIp
OwogICAgIGZsb2F0IHcgPSAwOwotICAgIGZvciAoaW50IGkgPSBvbGRTaXplOyBpIDwgZ2x5cGhC
dWZmZXItPnNpemUoKTsgKytpKQotICAgICAgICB3ICs9IGdseXBoQnVmZmVyLT5hZHZhbmNlQXQo
aSk7CisgICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsr
aSkKKyAgICAgICAgdyArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSk7CiAgICAgd2lkdGggPSB3
OwotICAgIHJldHVybiBnbHlwaEJ1ZmZlci0+c2l6ZSgpID4gb2xkU2l6ZTsKKyAgICByZXR1cm4g
Z2x5cGhCdWZmZXIuc2l6ZSgpID4gb2xkU2l6ZTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTMx
MDkyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3Jf
aAogI2RlZmluZSBXaWR0aEl0ZXJhdG9yX2gKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJTVkdHbHlwaC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtNDAsOCArNDEsOCBAQCBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiBwdWJsaWM6
CiAgICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNjb3VudEZv
ckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwogCi0g
ICAgdW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKiA9IDApOwotICAgIGJvb2wg
YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyKiA9IDApOworICAg
IHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOworICAgIGJvb2wgYWR2YW5j
ZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CiAKICAgICBmbG9hdCBt
YXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgQVNTRVJUKG1fYWNjb3VudEZvckdseXBoQm91
bmRzKTsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KICAgICBmbG9hdCBtaW5HbHlw
aEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgQVNTRVJUKG1fYWNjb3VudEZvckdseXBoQm91bmRzKTsg
cmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0KQEAgLTU3LDYgKzU4LDE4IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+JiBhcmFiaWNGb3JtcygpIHsgcmV0
dXJuIG1fYXJhYmljRm9ybXM7IH0KICNlbmRpZgogCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNU
eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnQmIGZvbnQpCisgICAgeworI2lmICFQTEFURk9S
TShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA4MAorICAgICAg
ICByZXR1cm4gIWZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpOworI2Vsc2UKKyAgICAgICAgaWYg
KCFmb250LmlzUHJpbnRlckZvbnQoKSkKKyAgICAgICAgICAgIHJldHVybiAhZm9udC50eXBlc2V0
dGluZ0ZlYXR1cmVzKCk7CisKKyAgICAgICAgcmV0dXJuICEoZm9udC50eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiB+KEtlcm5pbmcgfCBMaWdhdHVyZXMpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIGNv
bnN0IEZvbnQqIG1fZm9udDsKIAogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwpAQCAtNzgsNiAr
OTEsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUZXh0SXRlcmF0b3I+CiAg
ICAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImLCBHbHlwaEJ1
ZmZlciopOwogCisgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlc2V0dGluZ0ZlYXR1cmVzICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOyB9CisK
KyAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIG1fdHlwZXNldHRpbmdGZWF0dXJlczsKICAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKICAgICBib29sIG1f
YWNjb3VudEZvckdseXBoQm91bmRzOwogICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2
ICsyMzUsMTcgQEAgZXh0ZXJuIGludCAoKndrR2V0TlNFdmVudE1vbWVudHVtUGhhc2UpKAogCiBl
eHRlcm4gQ1RMaW5lUmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKShjb25z
dCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJD
b3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3Nl
KShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7CiAKKyNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK2VudW0geworICAgIHdrQ1RGb250VHJhbnNm
b3JtQXBwbHlTaGFwaW5nID0gKDEgPDwgMCksCisgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVBv
c2l0aW9uaW5nID0gKDEgPDwgMSkKK307CisKK3R5cGVkZWYgaW50IHdrQ1RGb250VHJhbnNmb3Jt
T3B0aW9uczsKKworZXh0ZXJuIGJvb2wgKCp3a0NURm9udFRyYW5zZm9ybUdseXBocykoQ1RGb250
UmVmIGZvbnQsIENHR2x5cGggZ2x5cGhzW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4IGNv
dW50LCB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyk7CisjZW5kaWYKKwogI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3MAogCiBleHRlcm4gQ1RUeXBlc2V0
dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3ZpZGVyQW5kT3B0aW9u
cykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4
KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgq
ZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCosIENGRGljdGlvbmFy
eVJlZiBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiwxMCBAQCBpbnQgKCp3a0dldE5TRXZlbnRNb21lbnR1bVBo
YXNlKShOU0V2ZW50CiAjZW5kaWYKIAogQ1RMaW5lUmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5p
Q2hhclByb3ZpZGVyKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5k
ZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lk
KiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7
CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCitib29sICgqd2tD
VEZvbnRUcmFuc2Zvcm1HbHlwaHMpKENURm9udFJlZiBmb250LCBDR0dseXBoIGdseXBoc1tdLCBD
R1NpemUgYWR2YW5jZXNbXSwgQ0ZJbmRleCBjb3VudCwgd2tDVEZvbnRUcmFuc2Zvcm1PcHRpb25z
IG9wdGlvbnMpOworI2VuZGlmCisKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwNzAKIENUVHlwZXNldHRlclJlZiAoKndrQ3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNo
YXJQcm92aWRlckFuZE9wdGlvbnMpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBz
dHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0
ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiks
IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHJl
dmlzaW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1l
dHJpY3NCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCBib29sIFNW
R1RleHRNZXRyaWNzQnVpbGRlcjo6YWR2YW5jZSgpCiAKIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyOjphZHZhbmNlU2ltcGxlVGV4dCgpCiB7Ci0gICAgdW5zaWduZWQgbWV0cmljc0xlbmd0aCA9
IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+YWR2YW5jZShtX3RleHRQb3NpdGlvbiArIDEpOworICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgIHVuc2lnbmVkIG1ldHJpY3NMZW5ndGggPSBt
X3NpbXBsZVdpZHRoSXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxLCAmZ2x5cGhC
dWZmZXIpOwogICAgIGlmICghbWV0cmljc0xlbmd0aCkgewogICAgICAgICBtX2N1cnJlbnRNZXRy
aWNzID0gU1ZHVGV4dE1ldHJpY3MoKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAJKHJldmlzaW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Niw3ICs3Niw4IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVAKIGZs
b2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBT
dHJpbmcmIGdseXBoTmFtZSkgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KCZmb250LCBy
dW4pOwotICAgIGNoYXJzQ29uc3VtZWQgKz0gaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOworICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgIGNoYXJzQ29uc3VtZWQgKz0gaXQuYWR2YW5j
ZShydW4ubGVuZ3RoKCksICZnbHlwaEJ1ZmZlcik7CiAgICAgZ2x5cGhOYW1lID0gaXQubGFzdEds
eXBoTmFtZSgpOwogICAgIHJldHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzExMDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0xMC0xMSAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgorCisgICAgICAgIFdlYktpdDIgcGFydCBvZiA8cmRhcjovL3Byb2JsZW0v
MTI0NzA2ODA+IEZvbnTigJlzIGZhc3QgY29kZSBwYXRoIGRvZXNu4oCZdCBzdXBwb3J0IGtlcm5p
bmcgYW5kIGxpZ2F0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTkxMTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHBy
b2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVs
b3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YlN5c3RlbUludGVyZmFjZS5tbToKKyAgICAgICAgKEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
KTogQWRkZWQgd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMuCisKIDIwMTItMTAtMTEgIFJlZ2luYSBD
aHVuZyAgPGhlZWppbi5yLmNodW5nQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0g
V2ViUHJvY2VzcyBrZWVwcyBvbiB3YWl0aW5nIGZvciBVSVByb2Nlc3MKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDEzMTA5MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOSBAQCB2b2lkIEluaXRXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlKHZvaWQpCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDgwCiAgICAgICAgIElOSVQoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMp
OwogI2VuZGlmCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisg
ICAgICAgIElOSVQoQ1RGb250VHJhbnNmb3JtR2x5cGhzKTsKKyNlbmRpZgogICAgICAgICBJTklU
KENvcHlDT05ORUNUUHJveHlSZXNwb25zZSk7CiAgICAgICAgIElOSVQoQ29weU5TVVJMUmVzcG9u
c2VTdGF0dXNMaW5lKTsKICAgICAgICAgSU5JVChDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclByb3Zp
ZGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEy
LTEwLTExICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0
L21hYyBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2Rl
IHBhdGggZG9lc27igJl0IHN1cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQg
cGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAoSW5pdFdlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UpOiBBZGRlZCB3a0NURm9udFRyYW5zZm9ybUdseXBocy4KKwogMjAxMi0x
MC0xMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNo
IFJlc291cmNlTG9hZGVyOjpyZXNvdXJjZURhdGEoKSBmcm9tIFNoYXJlZEJ1ZmZlciB0byBSZXNv
dXJjZUJ1ZmZlcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lz
dGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1Miw5IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uo
dm9pZCkKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKICAgICBJ
TklUKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKTsKICNlbmRpZgorI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIElOSVQoQ1RGb250
VHJhbnNmb3JtR2x5cGhzKTsKKyNlbmRpZgogICAgIElOSVQoQ29weUNGTG9jYWxpemF0aW9uUHJl
ZmVycmVkTmFtZSk7CiAgICAgSU5JVChDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UpOwogICAgIElO
SVQoQ29weU5TVVJMUmVzcG9uc2VTdGF0dXNMaW5lKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168438</attachid>
            <date>2012-10-12 09:41:44 -0700</date>
            <delta_ts>2012-10-12 10:02:37 -0700</delta_ts>
            <desc>Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</desc>
            <filename>bug-99113-20121012094040.patch</filename>
            <type>text/plain</type>
            <size>29972</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTEwLTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1
cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydGVkIHdrQ1RGb250VHJh
bnNmb3JtR2x5cGhzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOiBBZGRlZCBhIGxvY2FsIEdseXBoQnVmZmVyIHRv
IHBhc3MgdG8gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmNvZGVQYXRoKTogUmF0aGVyIHRoYW4gYWx3YXlzIHVzZSB0aGUgY29tcGxleCBjb2RlIHBh
dGggd2hlbiBhbnkgdHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGNo
YW5nZWQgdG8gZG8gc28gb25seSBpZiBXaWR0aEl0ZXJhdG9yIGRvZXNu4oCZdCBzdXBwb3J0IHRo
aXMgRm9udOKAmXMKKyAgICAgICAgdHlwZXNldHRpbmcgZmVhdHVyZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9jYWwgR2x5cGhC
dWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKCkgd2hlbiBh
ZHZhbmNpbmcgdG8gb3IgZnJvbSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3QuIEFkZGVkIGEgRklYTUUK
KyAgICAgICAgYWJvdXQgaG93IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yIGxpZ2F0dXJlcyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KTogQWRkZWQgYSBsb2NhbCBHbHlwaEJ1ZmZlciB0byBw
YXNzIHRvCisgICAgICAgIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoKSB3aGVuIGFkdmFuY2luZyB0
byBvciBmcm9tIHRoZSByYW5nZSBvZiBpbnRlcmVzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dCk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2Ug
dG8KKyAgICAgICAgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcigpLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKTogQWRkZWQuIENhbGxzIHdrQ1RGb250
VHJhbnNmb3JtR2x5cGhzKCkgd2hlcmUKKyAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcik6IEFkZGVkIGluaXRpYWxpemVyIGZvciB0aGUgbmV3
IG1fdHlwZXNldHRpbmdGZWF0dXJlcworICAgICAgICBkYXRhIG1lbWJlci4KKyAgICAgICAgKE9y
aWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZSk6IEFkZGVkIHRoaXMgZGF0
YSB0eXBlLCB1c2VkIHRvIHRyYWNrIHNwYWNlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVycyB0cmVh
dGVkIGFzIHNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOiBB
ZGRlZC4gQXBwbGllcyBzaGFwaW5nIGFuZCBwb3NpdGlvbmluZyB0cmFuc2Zvcm1zLCBhcworICAg
ICAgICByZXF1aXJlZCBieSB0aGUgdHlwZXNldHRpbmcgZmVhdHVyZXMsIHRvIHRoZSBnbHlwaHMg
cmVjZW50bHkgYWRkZWQgdG8gYSBHbHlwaEJ1ZmZlciwgd2hpbGUKKyAgICAgICAgbWFpbnRhaW5p
bmcgdGhlIGFkdmFuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgdHJlYXRlZCBhcyBzcGFjZXMg
YW5kIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgIHByZWNlZGluZyB0aGVtLCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOiBBZGRl
ZCBjYWxscyB0byBhcHBseUZvbnRUcmFuc2Zvcm1zKCkgYXQgdGhlIGVuZAorICAgICAgICBvZiBl
YWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyBmcm9tIHRoZSBzYW1lIGZvbnQuIEFsc28gYWRk
ZWQgY29kZSB0byBtYWludGFpbiBhIHZlY3RvcgorICAgICAgICBvZiBzcGFjZXMgYW5kIGNoYXJh
Y3RlcnMgdHJlYXRlZCBhcyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6
OmFkdmFuY2VPbmVDaGFyYWN0ZXIpOiBDaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSBmcm9tIGEg
cG9pbnRlciB0bworICAgICAgICBhIHJlZmVyZW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMpOiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIFdpZHRo
SXRlcmF0b3IKKyAgICAgICAgaW5zdGFuY2VzIHN1cHBvcnQgdGhlIHR5cGVzZXR0aW5nIGZlYXR1
cmVzIG9mIHRoZSBnaXZlbiBmb250LiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMKKyAgICAg
ICAgbm90IGEgc2NyZWVuIGZvbnQgYW5kIGl0cyB0eXBlc2V0dGluZyBmZWF0dXJlcyBhcmUga2Vy
bmluZywgbGlnYXR1cmVzIG9yIGJvdGguCisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKTogQWRkZWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgaW5jbHVkZSBrZXJuaW5nIG9yIGxpZ2F0dXJl
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOiBEZWZp
bmVkIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBhbmQgZGVjbGFyZWQKKyAgICAgICAgd2tDVEZv
bnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UubW06IERlZmluZWQgd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9j
YWwgR2x5cGhCdWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
KCkuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udCk6IERpdHRvLgorCiAyMDEyLTEwLTExICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEltcHJvdmUgdmVy
dGljYWwgdGV4dCByZW5kZXJpbmcgb2YgSGFyZkJ1enpTaGFwZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTQzNyw2ICsxNDM3LDkgQEAgX3drQ0dDb250ZXh0UmVzZXRD
bGlwCiBfd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cwogI2VuZGlmCiBf
d2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0KKyNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK193a0NURm9udFRyYW5zZm9ybUdseXBocworI2Vu
ZGlmCiBfd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lCiBfd2tDb3B5Q0ZVUkxSZXNw
b25zZVN1Z2dlc3RlZEZpbGVuYW1lCiBfd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw4IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGEKICAgICAgICAgLy8gSWYgdGhlIGNvbXBsZXggdGV4dCBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmV0dXJuIGZhbGxiYWNrIGZvbnRzLCBhdm9pZAogICAgICAgICAvLyByZXR1cm5p
bmcgdGhlbSBmb3Igc2ltcGxlIHRleHQgYXMgd2VsbC4KICAgICAgICAgc3RhdGljIGJvb2wgcmV0
dXJuRmFsbGJhY2tGb250cyA9IGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
OwotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCByZXR1cm5G
YWxsYmFja0ZvbnRzID8gZmFsbGJhY2tGb250cyA6IDAsIGNvZGVQYXRoVG9Vc2UgPT0gU2ltcGxl
V2l0aEdseXBoT3ZlcmZsb3cgfHwgKGdseXBoT3ZlcmZsb3cgJiYgZ2x5cGhPdmVyZmxvdy0+Y29t
cHV0ZUJvdW5kcykgPyBnbHlwaE92ZXJmbG93IDogMCk7CisgICAgICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOworICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAm
Z2x5cGhCdWZmZXIsIHJldHVybkZhbGxiYWNrRm9udHMgPyBmYWxsYmFja0ZvbnRzIDogMCwgY29k
ZVBhdGhUb1VzZSA9PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB8fCAoZ2x5cGhPdmVyZmxvdyAm
JiBnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSA/IGdseXBoT3ZlcmZsb3cgOiAwKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CkBAIC0zMTQsNyArMzE1LDcgQEAgRm9udDo6Q29kZVBhdGgg
Rm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5mZWF0
dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+c2l6
ZSgpID4gMCkKICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAgICAgCi0gICAgaWYgKHJ1bi5sZW5n
dGgoKSA+IDEgJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpKQorICAgIGlmIChydW4ubGVuZ3RoKCkg
PiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMp
KQogICAgICAgICByZXR1cm4gQ29tcGxleDsKIAogICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5G
b3JDb2RlUGF0aCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzMsNyArMzMzLDEwIEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGwK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIAogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywg
cnVuLCAwLCBmYWxzZSwgZm9yVGV4dEVtcGhhc2lzKTsKLSAgICBpdC5hZHZhbmNlKGZyb20pOwor
ICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJlZml4
IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKKyAgICAvLyBsaWdh
dHVyZXMgYXJlIGVuYWJsZWQuCisgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKKyAg
ICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVX
aWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZm
ZXIpOwogCkBAIC0zNDQsNyArMzQ3LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbAogCiAgICAgaWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCBmaW5hbFJv
dW5kaW5nV2lkdGggPSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICAgICAgaXQuYWR2YW5j
ZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmxvY2Fs
R2x5cGhCdWZmZXIpOwogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdXaWR0
aCArIGl0Lm1fcnVuV2lkdGhTb0ZhciAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAgICAg
IGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CkBAIC00ODgsMTUgKzQ5MSwxNiBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAKIEZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKKyAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Ci0g
ICAgaXQuYWR2YW5jZShmcm9tKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sICZnbHlwaEJ1ZmZlcik7
CiAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgaXQuYWR2
YW5jZSh0byk7CisgICAgaXQuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBh
ZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogCiAgICAgLy8gVXNpbmcgcm91bmRmKCkg
cmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNlIHRv
IGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nLgogICAgIGlmIChydW4ucnRsKCkpIHsK
LSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQu
eCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54
KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFs
V2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CiAgICAgfQpAQCAtNTE2LDcgKzUyMCw3IEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICAgICAgd2hpbGUgKDEpIHsK
ICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVudENoYXJhY3RlcjsKICAgICAgICAgICAg
IGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgJmxv
Y2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVy
KHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVsdGEgKz0gdzsKICAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykgewpA
QCAtNTMxLDcgKzUzNSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRl
eHQKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVu
dENoYXJhY3RlcjsKICAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFk
dmFuY2VPbmVDaGFyYWN0ZXIodywgJmxvY2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYg
KCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVsdGEgLT0gdzsKICAgICAgICAgICAgIGlmIChp
bmNsdWRlUGFydGlhbEdseXBocykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MywxMSArNjMsMzkgQEAgdHlwZWRlZiBHbHlwaCBHbHlwaEJ1ZmZlckdseXBoOwogLy8gQ0cgdXNl
cyBDR1NpemUgaW5zdGVhZCBvZiBGbG9hdFNpemUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIGFkdmFu
Y2VzKCkKIC8vIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0dDb250ZXh0U2hvd0dseXBoc1dp
dGhBZHZhbmNlcyBpbiBGb250TWFjLm1tCiAjaWYgVVNFKENHKSB8fCAoT1MoREFSV0lOKSAmJiAo
UExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkpCi10eXBlZGVmIENHU2l6ZSBHbHlw
aEJ1ZmZlckFkdmFuY2U7CitzdHJ1Y3QgR2x5cGhCdWZmZXJBZHZhbmNlIHsKK3B1YmxpYzoKKyAg
ICBHbHlwaEJ1ZmZlckFkdmFuY2UoQ0dTaXplIHNpemUpCisgICAgICAgIDogYWR2YW5jZShzaXpl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFdpZHRoKENHRmxvYXQgd2lkdGgpIHsgYWR2
YW5jZS53aWR0aCA9IHdpZHRoOyB9CisgICAgQ0dGbG9hdCYgd2lkdGgoKSB7IHJldHVybiBhZHZh
bmNlLndpZHRoOyB9CisgICAgY29uc3QgQ0dGbG9hdCYgd2lkdGgoKSBjb25zdCB7IHJldHVybiBh
ZHZhbmNlLndpZHRoOyB9CisKKyAgICBvcGVyYXRvciBDR1NpemUmKCkgeyByZXR1cm4gYWR2YW5j
ZTsgfQorCitwcml2YXRlOgorICAgIENHU2l6ZSBhZHZhbmNlOworfTsKICNlbGlmIE9TKFdJTkNF
KQogLy8gVGhlcmUgaXMgbm8gY3Jvc3MtcGxhdGZvcm0gY29kZSB0aGF0IHVzZXMgdGhlIGhlaWdo
dCBvZiBHbHlwaEJ1ZmZlckFkdmFuY2UsCiAvLyBzbyB3ZSBjYW4gc2F2ZSBtZW1vcnkgc3BhY2Ug
b24gZW1iZWRkZWQgZGV2aWNlcyBieSBzdG9yaW5nIG9ubHkgdGhlIHdpZHRoCi10eXBlZGVmIGZs
b2F0IEdseXBoQnVmZmVyQWR2YW5jZTsKK3N0cnVjdCBHbHlwaEJ1ZmZlckFkdmFuY2UgeworcHVi
bGljOgorICAgIEdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCkKKyAgICAgICAgOiBhZHZh
bmNlKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRo
KSB7IGFkdmFuY2UgPSB3aWR0aDsgfQorICAgIGZsb2F0JiB3aWR0aCgpIHsgcmV0dXJuIGFkdmFu
Y2U7IH0KKyAgICBjb25zdCBmbG9hdCYgd2lkdGgoKSBjb25zdCB7IHJldHVybiBhZHZhbmNlOyB9
CisKK3ByaXZhdGU6CisgICAgZmxvYXQgYWR2YW5jZTsKK307CiAjZWxzZQogdHlwZWRlZiBGbG9h
dFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogI2VuZGlmCkBAIC0xMjYsMTMgKzE1NCw3IEBAIHB1
YmxpYzoKIAogICAgIGZsb2F0IGFkdmFuY2VBdChpbnQgaW5kZXgpIGNvbnN0CiAgICAgewotI2lm
IFVTRShDRykgfHwgKE9TKERBUldJTikgJiYgKFBMQVRGT1JNKFdYKSB8fCBQTEFURk9STShDSFJP
TUlVTSkpKQotICAgICAgICByZXR1cm4gbV9hZHZhbmNlc1tpbmRleF0ud2lkdGg7Ci0jZWxpZiBP
UyhXSU5DRSkKLSAgICAgICAgcmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdOwotI2Vsc2UKICAgICAg
ICAgcmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdLndpZHRoKCk7Ci0jZW5kaWYKICAgICB9CiAKICAg
ICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdApAQCAtMTk2LDEwICsyMTgsOCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgICAgIEds
eXBoQnVmZmVyQWR2YW5jZSYgbGFzdEFkdmFuY2UgPSBtX2FkdmFuY2VzLmxhc3QoKTsKLSNpZiBV
U0UoQ0cpIHx8IChPUyhEQVJXSU4pICYmIChQTEFURk9STShXWCkgfHwgUExBVEZPUk0oQ0hST01J
VU0pKSkKLSAgICAgICAgbGFzdEFkdmFuY2Uud2lkdGggKz0gd2lkdGg7Ci0jZWxpZiBPUyhXSU5D
RSkKLSAgICAgICAgbGFzdEFkdmFuY2UgKz0gd2lkdGg7CisjaWYgVVNFKENHKSB8fCAoT1MoREFS
V0lOKSAmJiAoUExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkpIHx8IE9TKFdJTkNF
KQorICAgICAgICBsYXN0QWR2YW5jZS53aWR0aCgpICs9IHdpZHRoOwogI2Vsc2UKICAgICAgICAg
bGFzdEFkdmFuY2UgKz0gRmxvYXRTaXplKHdpZHRoLCAwKTsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZp
c2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRm9u
dE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJp
Y3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogI2lmIEVOQUJMRShPUEVO
VFlQRV9WRVJUSUNBTCkKQEAgLTM3LDggKzM4LDEzIEBACiAjaW5jbHVkZSAiVHlwZXNldHRpbmdG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikp
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCkBAIC0xOTAsNiArMTk2LDIxIEBA
IHB1YmxpYzoKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgogCisgICAgYm9vbCBhcHBseVRyYW5z
Zm9ybXMoR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzKSBjb25zdAorICAgIHsKKyNpZiAhUExBVEZPUk0oTUFDKSB8fCBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShhZHZhbmNlcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShn
bHlwaENvdW50KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGVzZXR0aW5nRmVhdHVyZXMpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vs
c2UKKyAgICB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9ICh0eXBlc2V0dGluZ0Zl
YXR1cmVzICYgS2VybmluZyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDAp
IHwgKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBMaWdhdHVyZXMgPyB3a0NURm9udFRyYW5zZm9ybUFw
cGx5U2hhcGluZyA6IDApOworICAgIHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGFk
dmFuY2VzKSwgZ2x5cGhDb3VudCwgb3B0aW9ucyk7CisjZW5kaWYKKyAgICB9CisKICNpZiBQTEFU
Rk9STShRVCkKICAgICBRUmF3Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXRmb3JtRGF0YS5yYXdGb250KCk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEzMTA5
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRl
cmF0b3IoY29uc3QgRm9udCoKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAgICwgbV9pc0Fm
dGVyRXhwYW5zaW9uKCFydW4uYWxsb3dzTGVhZGluZ0V4cGFuc2lvbigpKQogICAgICwgbV9maW5h
bFJvdW5kaW5nV2lkdGgoMCkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhmb250LT50eXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykK
ICAgICAsIG1fYWNjb3VudEZvckdseXBoQm91bmRzKGFjY291bnRGb3JHbHlwaEJvdW5kcykKICAg
ICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkobnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkK
QEAgLTg0LDYgKzg1LDY2IEBAIEdseXBoRGF0YSBXaWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFGb3JD
aGEKICAgICByZXR1cm4gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBt
aXJyb3IpOwogfQogCitzdHJ1Y3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRB
c1NwYWNlIHsKK3B1YmxpYzoKKyAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoYm9vbCBpc1NwYWNlLCBmbG9hdCBhZHZhbmNlQmVmb3JlLCBmbG9hdCBhZHZhbmNl
QXQpCisgICAgICAgIDogY2hhcmFjdGVySXNTcGFjZShpc1NwYWNlKQorICAgICAgICAsIGFkdmFu
Y2VCZWZvcmVDaGFyYWN0ZXIoYWR2YW5jZUJlZm9yZSkKKyAgICAgICAgLCBhZHZhbmNlQXRDaGFy
YWN0ZXIoYWR2YW5jZUF0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNoYXJhY3RlcklzU3Bh
Y2U7CisgICAgZmxvYXQgYWR2YW5jZUJlZm9yZUNoYXJhY3RlcjsKKyAgICBmbG9hdCBhZHZhbmNl
QXRDaGFyYWN0ZXI7Cit9OworCit0eXBlZGVmIFZlY3RvcjxwYWlyPGludCwgT3JpZ2luYWxBZHZh
bmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZTsKKworc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZSkKK3sKKyAgICBBU1NFUlQodHlwZXNldHRpbmdGZWF0dXJlcyAmIChLZXJuaW5nIHwgTGlnYXR1
cmVzKSk7CisKKyAgICBpZiAoIWdseXBoQnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGludCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAgIGlmIChnbHlw
aEJ1ZmZlci0+c2l6ZSgpIDw9IGxhc3RHbHlwaENvdW50KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMo
MCk7CisgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gMDsKKyAgICBmb3IgKGludCBpID0gbGFz
dEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKKyAgICAgICAgd2lkdGhEaWZm
ZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoKCk7CisKKyAgICBpZiAoIWx0cikgeworICAgICAg
ICBmb3IgKGludCBpID0gMCwgZW5kID0gZ2x5cGhCdWZmZXItPnNpemUoKSAtIDE7IGkgPCBnbHlw
aEJ1ZmZlci0+c2l6ZSgpIC8gMjsgKytpLCAtLWVuZCkKKyAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5zd2FwKGksIGVuZCk7CisgICAgfQorCisgICAgZm9udERhdGEtPmFwcGx5VHJhbnNmb3Jtcyhn
bHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhD
b3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVy
ZXMpOworCisgICAgaWYgKCFsdHIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGVuZCA9IGds
eXBoQnVmZmVyLT5zaXplKCkgLSAxOyBpIDwgZ2x5cGhCdWZmZXItPnNpemUoKSAvIDI7ICsraSwg
LS1lbmQpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c3dhcChpLCBlbmQpOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGludCBzcGFjZU9mZnNldCA9IGNoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZVtpXS5maXJzdDsKKyAgICAgICAgY29uc3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3Rl
clRyZWF0ZWRBc1NwYWNlJiBvcmlnaW5hbEFkdmFuY2VzID0gY2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlW2ldLnNlY29uZDsKKyAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ICYmICFvcmlnaW5hbEFkdmFu
Y2VzLmNoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMo
c3BhY2VPZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQmVmb3Jl
Q2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXItPmFkdmFuY2VzKHNwYWNlT2Zmc2V0KS0+
c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQXRDaGFyYWN0ZXIpOworICAgIH0KKyAg
ICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuY2xlYXIoKTsKKworICAgIGZvciAoaW50IGkgPSBs
YXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsgKytpKQorICAgICAgICB3aWR0aERp
ZmZlcmVuY2UgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKworICAgIGxhc3RHbHlwaENvdW50ID0g
Z2x5cGhCdWZmZXJTaXplOworICAgIHJldHVybiB3aWR0aERpZmZlcmVuY2U7Cit9CisKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0SXRlcmF0b3I+CiBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWZmZXIpCiB7CkBAIC05OSwxMCArMTYwLDExIEBAIGlubGluZSB1bnNpZ25lZCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KIAogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmlt
YXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZvbnQ7CisgICAgaW50IGxhc3RHbHlwaENvdW50ID0g
Z2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVDaGFyMzIgY2hh
cmFjdGVyID0gMDsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKLQorICAgIENoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZSBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2U7CiAgICAgd2hpbGUg
KHRleHRJdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpIHsKICAgICAg
ICAgdW5zaWduZWQgYWR2YW5jZUxlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAgIGNvbnN0
IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
cnRsLCB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpLCBhZHZhbmNlTGVuZ3RoKTsKQEAg
LTEzMiw2ICsxOTQsOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUlu
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm9udERhdGEgIT0gbGFzdEZvbnREYXRhICYmIHdp
ZHRoKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKQorICAg
ICAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBo
QnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOworCiAgICAgICAgICAg
ICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9u
dHMgJiYgZm9udERhdGEgIT0gcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGlm
CkBAIC0xODcsNiArMjUyLDEwIEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZh
bmNlSW4KICAgICAgICAgICAgICAgICBtX2lzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmIChzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgJiYgZ2x5cGhC
dWZmZXIgJiYgRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICBjaGFy
YWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKG1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+c2l6ZSgp
LAorICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNT
cGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhCdWZmZXIt
PmFkdmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkgOiAwLCB3aWR0aCkpKTsKKwogICAg
ICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKICAgICAgICAgICAgIGJvdW5kcyA9
IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBpZiAoIXRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpCkBAIC0yMzksNiArMzA4LDkgQEAgaW5saW5lIHVu
c2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9CiAgICAgfQogCisgICAg
aWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSkKKyAgICAgICAgbV9ydW5XaWR0aFNvRmFy
ICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5
cGhDb3VudCwgbGFzdEZvbnREYXRhLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMsIGNoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZSk7CisKICAgICB1bnNpZ25lZCBjb25zdW1lZENoYXJhY3RlcnMgPSB0ZXh0
SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwogICAgIG1f
Y3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CiAgICAg
bV9ydW5XaWR0aFNvRmFyICs9IHdpZHRoU2luY2VMYXN0Um91bmRpbmc7CkBAIC0yNjUsMTUgKzMz
NywxNSBAQCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzCiAgICAgcmV0
dXJuIGFkdmFuY2VJbnRlcm5hbCh0ZXh0SXRlcmF0b3IsIGdseXBoQnVmZmVyKTsKIH0KIAotYm9v
bCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyKQorYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewotICAgIGludCBv
bGRTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKLSAgICBhZHZhbmNlKG1fY3VycmVudENoYXJh
Y3RlciArIDEsIGdseXBoQnVmZmVyKTsKKyAgICBpbnQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNp
emUoKTsKKyAgICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1ZmZlcik7
CiAgICAgZmxvYXQgdyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1
ZmZlci0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHcgKz0gZ2x5cGhCdWZmZXItPmFkdmFuY2VBdChp
KTsKKyAgICBmb3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KQorICAgICAgICB3ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKTsKICAgICB3aWR0aCA9IHc7
Ci0gICAgcmV0dXJuIGdseXBoQnVmZmVyLT5zaXplKCkgPiBvbGRTaXplOworICAgIHJldHVybiBn
bHlwaEJ1ZmZlci5zaXplKCkgPiBvbGRTaXplOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgV2lkdGhJdGVyYXRvcl9o
CiAjZGVmaW5lIFdpZHRoSXRlcmF0b3JfaAogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IlNWR0dseXBoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC00MCw4ICs0MSw4IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIHB1YmxpYzoK
ICAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9y
R2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKLSAg
ICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0gICAgYm9vbCBh
ZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIqID0gMCk7CisgICAg
dW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7CisgICAgYm9vbCBhZHZhbmNl
T25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1h
eEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3Vu
ZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQogICAgIGZsb2F0IG1pbkdseXBo
Qm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyBy
ZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNTcsNiArNTgsMTggQEAgcHVibGlj
OgogICAgIFZlY3RvcjxTVkdHbHlwaDo6QXJhYmljRm9ybT4mIGFyYWJpY0Zvcm1zKCkgeyByZXR1
cm4gbV9hcmFiaWNGb3JtczsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5
cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYgZm9udCkKKyAgICB7CisjaWYgIVBMQVRGT1JN
KE1BQykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDgwCisgICAgICAg
IHJldHVybiAhZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisjZWxzZQorICAgICAgICBpZiAo
IWZvbnQuaXNQcmludGVyRm9udCgpKQorICAgICAgICAgICAgcmV0dXJuICFmb250LnR5cGVzZXR0
aW5nRmVhdHVyZXMoKTsKKworICAgICAgICByZXR1cm4gIShmb250LnR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSAmIH4oS2VybmluZyB8IExpZ2F0dXJlcykpOworI2VuZGlmCisgICAgfQorCiAgICAgY29u
c3QgRm9udCogbV9mb250OwogCiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CkBAIC03OCw2ICs5
MSw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KICAg
ICBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYsIEdseXBoQnVm
ZmVyKik7CiAKKyAgICBib29sIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7IH0KKwor
ICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgbV90eXBlc2V0dGluZ0ZlYXR1cmVzOwogICAgIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogICAgIGJvb2wgbV9h
Y2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
Lm1tCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQxLDE1ICsyNDEsMTUgQEAgdm9p
ZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICBmbG9hdCBzaGFk
b3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJ
ZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGll
ZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAq
IChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0
WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4
dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IENHU2l6
ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICAgICAgaWYg
KHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0
WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNo
YWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkp
LCBudW1HbHlwaHMpOwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBm
aWxsQ29sb3JTcGFjZSk7CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2lu
dCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMo
cG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVt
R2x5cGhzKTsKICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
KSwgbnVtR2x5cGhzKTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCiAgICAgICAgIGNvbnRl
eHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFk
b3dDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM1LDYgKzIzNSwxNyBAQCBleHRlcm4gaW50ICgqd2tHZXROU0V2ZW50TW9tZW50
dW1QaGFzZSkoCiAKIGV4dGVybiBDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFy
UHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwg
Q0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwg
dm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsKIAor
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorZW51bSB7CisgICAg
d2tDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwKKyAgICB3a0NURm9udFRy
YW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgPSAoMSA8PCAxKQorfTsKKwordHlwZWRlZiBpbnQgd2tD
VEZvbnRUcmFuc2Zvcm1PcHRpb25zOworCitleHRlcm4gYm9vbCAoKndrQ1RGb250VHJhbnNmb3Jt
R2x5cGhzKShDVEZvbnRSZWYgZm9udCwgQ0dHbHlwaCBnbHlwaHNbXSwgQ0dTaXplIGFkdmFuY2Vz
W10sIENGSW5kZXggY291bnQsIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zKTsKKyNl
bmRpZgorCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCiAKIGV4
dGVybiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJv
dmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5n
SW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2
b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lk
KiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDEz
MTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDEwIEBAIGludCAoKndrR2V0TlNF
dmVudE1vbWVudHVtUGhhc2UpKE5TRXZlbnQKICNlbmRpZgogCiBDVExpbmVSZWYgKCp3a0NyZWF0
ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJ
bmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0
dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2
b2lkKiksIHZvaWQqKTsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKK2Jvb2wgKCp3a0NURm9udFRyYW5zZm9ybUdseXBocykoQ1RGb250UmVmIGZvbnQsIENHR2x5
cGggZ2x5cGhzW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4IGNvdW50LCB3a0NURm9udFRy
YW5zZm9ybU9wdGlvbnMgb3B0aW9ucyk7CisjZW5kaWYKKwogI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA3MAogQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVz
ZXR0ZXJXaXRoVW5pQ2hhclByb3ZpZGVyQW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92
aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFy
eVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciog
Y2hhcnMsIHZvaWQqKSwgdm9pZCosIENGRGljdGlvbmFyeVJlZiBvcHRpb25zKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NC
dWlsZGVyLmNwcAkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw4IEBAIGJvb2wgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlKCkKIAogdm9pZCBTVkdU
ZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0KCkKIHsKLSAgICB1bnNpZ25lZCBt
ZXRyaWNzTGVuZ3RoID0gbV9zaW1wbGVXaWR0aEl0ZXJhdG9yLT5hZHZhbmNlKG1fdGV4dFBvc2l0
aW9uICsgMSk7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgdW5zaWduZWQgbWV0
cmljc0xlbmd0aCA9IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+YWR2YW5jZShtX3RleHRQb3NpdGlv
biArIDEsICZnbHlwaEJ1ZmZlcik7CiAgICAgaWYgKCFtZXRyaWNzTGVuZ3RoKSB7CiAgICAgICAg
IG1fY3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmljcygpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDcgKzc2LDggQEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJj
ZSogYWN0aXZlUAogZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNo
YXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0
b3IgaXQoJmZvbnQsIHJ1bik7Ci0gICAgY2hhcnNDb25zdW1lZCArPSBpdC5hZHZhbmNlKHJ1bi5s
ZW5ndGgoKSk7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgY2hhcnNDb25zdW1l
ZCArPSBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICBnbHlwaE5h
bWUgPSBpdC5sYXN0R2x5cGhOYW1lKCk7CiAgICAgcmV0dXJuIGl0LnJ1bldpZHRoU29GYXIoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEwLTExICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MiBwYXJ0IG9mIDxy
ZGFyOi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0
IHN1cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAoSW5pdFdlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UpOiBBZGRlZCB3a0NURm9udFRyYW5zZm9ybUdseXBocy4KKwogMjAxMi0x
MC0xMSAgUmVnaW5hIENodW5nICA8aGVlamluLnIuY2h1bmdAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF1bV0syXSBXZWJQcm9jZXNzIGtlZXBzIG9uIHdhaXRpbmcgZm9yIFVJUHJvY2VzcwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lz
dGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMTMxMDky
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lz
dGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBAIHZvaWQgSW5p
dFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwODAKICAgICAgICAgSU5JVChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0
U2hhZG93T2Zmc2V0cyk7CiAjZW5kaWYKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKKyAgICAgICAgSU5JVChDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpOworI2VuZGlm
CiAgICAgICAgIElOSVQoQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKTsKICAgICAgICAgSU5JVChD
b3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUpOwogICAgICAgICBJTklUKENyZWF0ZUNUTGluZVdp
dGhVbmlDaGFyUHJvdmlkZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMTA5
KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTItMTAtMTEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWJLaXQvbWFjIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzEyNDcwNjgwPiBGb250
4oCZcyBmYXN0IGNvZGUgcGF0aCBkb2VzbuKAmXQgc3VwcG9ydCBrZXJuaW5nIGFuZCBsaWdhdHVy
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTEz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRp
b25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFs
ZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAgICAg
IChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6IEFkZGVkIHdrQ1RGb250VHJhbnNmb3JtR2x5
cGhzLgorCiAyMDEyLTEwLTEwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTd2l0Y2ggUmVzb3VyY2VMb2FkZXI6OnJlc291cmNlRGF0YSgpIGZyb20gU2hhcmVk
QnVmZmVyIHRvIFJlc291cmNlQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZh
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgdm9pZCBJbml0V2ViQ29yZVN5
c3RlbUludGVyZmFjZSh2b2lkKQogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA4MAogICAgIElOSVQoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMp
OwogI2VuZGlmCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisg
ICAgSU5JVChDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpOworI2VuZGlmCiAgICAgSU5JVChDb3B5Q0ZM
b2NhbGl6YXRpb25QcmVmZXJyZWROYW1lKTsKICAgICBJTklUKENvcHlDT05ORUNUUHJveHlSZXNw
b25zZSk7CiAgICAgSU5JVChDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168442</attachid>
            <date>2012-10-12 10:02:40 -0700</date>
            <delta_ts>2012-10-12 13:08:28 -0700</delta_ts>
            <desc>Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</desc>
            <filename>bug-99113-20121012100136.patch</filename>
            <type>text/plain</type>
            <size>32372</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTEwLTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1
cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydGVkIHdrQ1RGb250VHJh
bnNmb3JtR2x5cGhzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOiBBZGRlZCBhIGxvY2FsIEdseXBoQnVmZmVyIHRv
IHBhc3MgdG8gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmNvZGVQYXRoKTogUmF0aGVyIHRoYW4gYWx3YXlzIHVzZSB0aGUgY29tcGxleCBjb2RlIHBh
dGggd2hlbiBhbnkgdHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGNo
YW5nZWQgdG8gZG8gc28gb25seSBpZiBXaWR0aEl0ZXJhdG9yIGRvZXNu4oCZdCBzdXBwb3J0IHRo
aXMgRm9udOKAmXMKKyAgICAgICAgdHlwZXNldHRpbmcgZmVhdHVyZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9jYWwgR2x5cGhC
dWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKCkgd2hlbiBh
ZHZhbmNpbmcgdG8gb3IgZnJvbSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3QuIEFkZGVkIGEgRklYTUUK
KyAgICAgICAgYWJvdXQgaG93IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yIGxpZ2F0dXJlcyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KTogQWRkZWQgYSBsb2NhbCBHbHlwaEJ1ZmZlciB0byBw
YXNzIHRvCisgICAgICAgIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoKSB3aGVuIGFkdmFuY2luZyB0
byBvciBmcm9tIHRoZSByYW5nZSBvZiBpbnRlcmVzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dCk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2Ug
dG8KKyAgICAgICAgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcigpLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKTogQWRkZWQuIENhbGxzIHdrQ1RGb250
VHJhbnNmb3JtR2x5cGhzKCkgd2hlcmUKKyAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcik6IEFkZGVkIGluaXRpYWxpemVyIGZvciB0aGUgbmV3
IG1fdHlwZXNldHRpbmdGZWF0dXJlcworICAgICAgICBkYXRhIG1lbWJlci4KKyAgICAgICAgKE9y
aWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZSk6IEFkZGVkIHRoaXMgZGF0
YSB0eXBlLCB1c2VkIHRvIHRyYWNrIHNwYWNlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVycyB0cmVh
dGVkIGFzIHNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOiBB
ZGRlZC4gQXBwbGllcyBzaGFwaW5nIGFuZCBwb3NpdGlvbmluZyB0cmFuc2Zvcm1zLCBhcworICAg
ICAgICByZXF1aXJlZCBieSB0aGUgdHlwZXNldHRpbmcgZmVhdHVyZXMsIHRvIHRoZSBnbHlwaHMg
cmVjZW50bHkgYWRkZWQgdG8gYSBHbHlwaEJ1ZmZlciwgd2hpbGUKKyAgICAgICAgbWFpbnRhaW5p
bmcgdGhlIGFkdmFuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgdHJlYXRlZCBhcyBzcGFjZXMg
YW5kIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgIHByZWNlZGluZyB0aGVtLCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOiBBZGRl
ZCBjYWxscyB0byBhcHBseUZvbnRUcmFuc2Zvcm1zKCkgYXQgdGhlIGVuZAorICAgICAgICBvZiBl
YWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyBmcm9tIHRoZSBzYW1lIGZvbnQuIEFsc28gYWRk
ZWQgY29kZSB0byBtYWludGFpbiBhIHZlY3RvcgorICAgICAgICBvZiBzcGFjZXMgYW5kIGNoYXJh
Y3RlcnMgdHJlYXRlZCBhcyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6
OmFkdmFuY2VPbmVDaGFyYWN0ZXIpOiBDaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSBmcm9tIGEg
cG9pbnRlciB0bworICAgICAgICBhIHJlZmVyZW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMpOiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIFdpZHRo
SXRlcmF0b3IKKyAgICAgICAgaW5zdGFuY2VzIHN1cHBvcnQgdGhlIHR5cGVzZXR0aW5nIGZlYXR1
cmVzIG9mIHRoZSBnaXZlbiBmb250LiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMKKyAgICAg
ICAgbm90IGEgc2NyZWVuIGZvbnQgYW5kIGl0cyB0eXBlc2V0dGluZyBmZWF0dXJlcyBhcmUga2Vy
bmluZywgbGlnYXR1cmVzIG9yIGJvdGguCisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKTogQWRkZWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgaW5jbHVkZSBrZXJuaW5nIG9yIGxpZ2F0dXJl
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOiBEZWZp
bmVkIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBhbmQgZGVjbGFyZWQKKyAgICAgICAgd2tDVEZv
bnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UubW06IERlZmluZWQgd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9j
YWwgR2x5cGhCdWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
KCkuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udCk6IERpdHRvLgorCiAyMDEyLTEwLTExICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEltcHJvdmUgdmVy
dGljYWwgdGV4dCByZW5kZXJpbmcgb2YgSGFyZkJ1enpTaGFwZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTQzNyw2ICsxNDM3LDkgQEAgX3drQ0dDb250ZXh0UmVzZXRD
bGlwCiBfd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cwogI2VuZGlmCiBf
d2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0KKyNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK193a0NURm9udFRyYW5zZm9ybUdseXBocworI2Vu
ZGlmCiBfd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lCiBfd2tDb3B5Q0ZVUkxSZXNw
b25zZVN1Z2dlc3RlZEZpbGVuYW1lCiBfd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw4IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGEKICAgICAgICAgLy8gSWYgdGhlIGNvbXBsZXggdGV4dCBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmV0dXJuIGZhbGxiYWNrIGZvbnRzLCBhdm9pZAogICAgICAgICAvLyByZXR1cm5p
bmcgdGhlbSBmb3Igc2ltcGxlIHRleHQgYXMgd2VsbC4KICAgICAgICAgc3RhdGljIGJvb2wgcmV0
dXJuRmFsbGJhY2tGb250cyA9IGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
OwotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCByZXR1cm5G
YWxsYmFja0ZvbnRzID8gZmFsbGJhY2tGb250cyA6IDAsIGNvZGVQYXRoVG9Vc2UgPT0gU2ltcGxl
V2l0aEdseXBoT3ZlcmZsb3cgfHwgKGdseXBoT3ZlcmZsb3cgJiYgZ2x5cGhPdmVyZmxvdy0+Y29t
cHV0ZUJvdW5kcykgPyBnbHlwaE92ZXJmbG93IDogMCk7CisgICAgICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOworICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAm
Z2x5cGhCdWZmZXIsIHJldHVybkZhbGxiYWNrRm9udHMgPyBmYWxsYmFja0ZvbnRzIDogMCwgY29k
ZVBhdGhUb1VzZSA9PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB8fCAoZ2x5cGhPdmVyZmxvdyAm
JiBnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSA/IGdseXBoT3ZlcmZsb3cgOiAwKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CkBAIC0zMTQsNyArMzE1LDcgQEAgRm9udDo6Q29kZVBhdGgg
Rm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5mZWF0
dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+c2l6
ZSgpID4gMCkKICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAgICAgCi0gICAgaWYgKHJ1bi5sZW5n
dGgoKSA+IDEgJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpKQorICAgIGlmIChydW4ubGVuZ3RoKCkg
PiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMp
KQogICAgICAgICByZXR1cm4gQ29tcGxleDsKIAogICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5G
b3JDb2RlUGF0aCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzMsNyArMzMzLDEwIEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGwK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIAogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywg
cnVuLCAwLCBmYWxzZSwgZm9yVGV4dEVtcGhhc2lzKTsKLSAgICBpdC5hZHZhbmNlKGZyb20pOwor
ICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJlZml4
IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKKyAgICAvLyBsaWdh
dHVyZXMgYXJlIGVuYWJsZWQuCisgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKKyAg
ICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVX
aWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZm
ZXIpOwogCkBAIC0zNDQsNyArMzQ3LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbAogCiAgICAgaWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCBmaW5hbFJv
dW5kaW5nV2lkdGggPSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICAgICAgaXQuYWR2YW5j
ZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmxvY2Fs
R2x5cGhCdWZmZXIpOwogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdXaWR0
aCArIGl0Lm1fcnVuV2lkdGhTb0ZhciAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAgICAg
IGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CkBAIC00ODgsMTUgKzQ5MSwxNiBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAKIEZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKKyAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Ci0g
ICAgaXQuYWR2YW5jZShmcm9tKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sICZnbHlwaEJ1ZmZlcik7
CiAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgaXQuYWR2
YW5jZSh0byk7CisgICAgaXQuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBh
ZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogCiAgICAgLy8gVXNpbmcgcm91bmRmKCkg
cmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNlIHRv
IGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nLgogICAgIGlmIChydW4ucnRsKCkpIHsK
LSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQu
eCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54
KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFs
V2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CiAgICAgfQpAQCAtNTE2LDcgKzUyMCw3IEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICAgICAgd2hpbGUgKDEpIHsK
ICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVudENoYXJhY3RlcjsKICAgICAgICAgICAg
IGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgJmxv
Y2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVy
KHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVsdGEgKz0gdzsKICAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykgewpA
QCAtNTMxLDcgKzUzNSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRl
eHQKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVu
dENoYXJhY3RlcjsKICAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFk
dmFuY2VPbmVDaGFyYWN0ZXIodywgJmxvY2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYg
KCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVsdGEgLT0gdzsKICAgICAgICAgICAgIGlmIChp
bmNsdWRlUGFydGlhbEdseXBocykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MywxMSArNjMsMzkgQEAgdHlwZWRlZiBHbHlwaCBHbHlwaEJ1ZmZlckdseXBoOwogLy8gQ0cgdXNl
cyBDR1NpemUgaW5zdGVhZCBvZiBGbG9hdFNpemUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIGFkdmFu
Y2VzKCkKIC8vIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0dDb250ZXh0U2hvd0dseXBoc1dp
dGhBZHZhbmNlcyBpbiBGb250TWFjLm1tCiAjaWYgVVNFKENHKSB8fCAoT1MoREFSV0lOKSAmJiAo
UExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkpCi10eXBlZGVmIENHU2l6ZSBHbHlw
aEJ1ZmZlckFkdmFuY2U7CitzdHJ1Y3QgR2x5cGhCdWZmZXJBZHZhbmNlIHsKK3B1YmxpYzoKKyAg
ICBHbHlwaEJ1ZmZlckFkdmFuY2UoQ0dTaXplIHNpemUpCisgICAgICAgIDogYWR2YW5jZShzaXpl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFdpZHRoKENHRmxvYXQgd2lkdGgpIHsgYWR2
YW5jZS53aWR0aCA9IHdpZHRoOyB9CisgICAgQ0dGbG9hdCYgd2lkdGgoKSB7IHJldHVybiBhZHZh
bmNlLndpZHRoOyB9CisgICAgY29uc3QgQ0dGbG9hdCYgd2lkdGgoKSBjb25zdCB7IHJldHVybiBh
ZHZhbmNlLndpZHRoOyB9CisKKyAgICBvcGVyYXRvciBDR1NpemUmKCkgeyByZXR1cm4gYWR2YW5j
ZTsgfQorCitwcml2YXRlOgorICAgIENHU2l6ZSBhZHZhbmNlOworfTsKICNlbGlmIE9TKFdJTkNF
KQogLy8gVGhlcmUgaXMgbm8gY3Jvc3MtcGxhdGZvcm0gY29kZSB0aGF0IHVzZXMgdGhlIGhlaWdo
dCBvZiBHbHlwaEJ1ZmZlckFkdmFuY2UsCiAvLyBzbyB3ZSBjYW4gc2F2ZSBtZW1vcnkgc3BhY2Ug
b24gZW1iZWRkZWQgZGV2aWNlcyBieSBzdG9yaW5nIG9ubHkgdGhlIHdpZHRoCi10eXBlZGVmIGZs
b2F0IEdseXBoQnVmZmVyQWR2YW5jZTsKK3N0cnVjdCBHbHlwaEJ1ZmZlckFkdmFuY2UgeworcHVi
bGljOgorICAgIEdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCkKKyAgICAgICAgOiBhZHZh
bmNlKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRo
KSB7IGFkdmFuY2UgPSB3aWR0aDsgfQorICAgIGZsb2F0JiB3aWR0aCgpIHsgcmV0dXJuIGFkdmFu
Y2U7IH0KKyAgICBjb25zdCBmbG9hdCYgd2lkdGgoKSBjb25zdCB7IHJldHVybiBhZHZhbmNlOyB9
CisKK3ByaXZhdGU6CisgICAgZmxvYXQgYWR2YW5jZTsKK307CiAjZWxzZQogdHlwZWRlZiBGbG9h
dFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogI2VuZGlmCkBAIC0xMjYsMTMgKzE1NCw3IEBAIHB1
YmxpYzoKIAogICAgIGZsb2F0IGFkdmFuY2VBdChpbnQgaW5kZXgpIGNvbnN0CiAgICAgewotI2lm
IFVTRShDRykgfHwgKE9TKERBUldJTikgJiYgKFBMQVRGT1JNKFdYKSB8fCBQTEFURk9STShDSFJP
TUlVTSkpKQotICAgICAgICByZXR1cm4gbV9hZHZhbmNlc1tpbmRleF0ud2lkdGg7Ci0jZWxpZiBP
UyhXSU5DRSkKLSAgICAgICAgcmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdOwotI2Vsc2UKICAgICAg
ICAgcmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdLndpZHRoKCk7Ci0jZW5kaWYKICAgICB9CiAKICAg
ICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdApAQCAtMTk2LDEwICsyMTgsOCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgICAgIEds
eXBoQnVmZmVyQWR2YW5jZSYgbGFzdEFkdmFuY2UgPSBtX2FkdmFuY2VzLmxhc3QoKTsKLSNpZiBV
U0UoQ0cpIHx8IChPUyhEQVJXSU4pICYmIChQTEFURk9STShXWCkgfHwgUExBVEZPUk0oQ0hST01J
VU0pKSkKLSAgICAgICAgbGFzdEFkdmFuY2Uud2lkdGggKz0gd2lkdGg7Ci0jZWxpZiBPUyhXSU5D
RSkKLSAgICAgICAgbGFzdEFkdmFuY2UgKz0gd2lkdGg7CisjaWYgVVNFKENHKSB8fCAoT1MoREFS
V0lOKSAmJiAoUExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkpIHx8IE9TKFdJTkNF
KQorICAgICAgICBsYXN0QWR2YW5jZS53aWR0aCgpICs9IHdpZHRoOwogI2Vsc2UKICAgICAgICAg
bGFzdEFkdmFuY2UgKz0gRmxvYXRTaXplKHdpZHRoLCAwKTsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZp
c2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRm9u
dE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJp
Y3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogI2lmIEVOQUJMRShPUEVO
VFlQRV9WRVJUSUNBTCkKQEAgLTM3LDggKzM4LDEzIEBACiAjaW5jbHVkZSAiVHlwZXNldHRpbmdG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikp
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCkBAIC0xOTAsNiArMTk2LDIxIEBA
IHB1YmxpYzoKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgogCisgICAgYm9vbCBhcHBseVRyYW5z
Zm9ybXMoR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzKSBjb25zdAorICAgIHsKKyNpZiAhUExBVEZPUk0oTUFDKSB8fCBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShhZHZhbmNlcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShn
bHlwaENvdW50KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGVzZXR0aW5nRmVhdHVyZXMpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vs
c2UKKyAgICB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9ICh0eXBlc2V0dGluZ0Zl
YXR1cmVzICYgS2VybmluZyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDAp
IHwgKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBMaWdhdHVyZXMgPyB3a0NURm9udFRyYW5zZm9ybUFw
cGx5U2hhcGluZyA6IDApOworICAgIHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGFk
dmFuY2VzKSwgZ2x5cGhDb3VudCwgb3B0aW9ucyk7CisjZW5kaWYKKyAgICB9CisKICNpZiBQTEFU
Rk9STShRVCkKICAgICBRUmF3Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXRmb3JtRGF0YS5yYXdGb250KCk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEzMTA5
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRl
cmF0b3IoY29uc3QgRm9udCoKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAgICwgbV9pc0Fm
dGVyRXhwYW5zaW9uKCFydW4uYWxsb3dzTGVhZGluZ0V4cGFuc2lvbigpKQogICAgICwgbV9maW5h
bFJvdW5kaW5nV2lkdGgoMCkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhmb250LT50eXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykK
ICAgICAsIG1fYWNjb3VudEZvckdseXBoQm91bmRzKGFjY291bnRGb3JHbHlwaEJvdW5kcykKICAg
ICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkobnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkK
QEAgLTg0LDYgKzg1LDY2IEBAIEdseXBoRGF0YSBXaWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFGb3JD
aGEKICAgICByZXR1cm4gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBt
aXJyb3IpOwogfQogCitzdHJ1Y3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRB
c1NwYWNlIHsKK3B1YmxpYzoKKyAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoYm9vbCBpc1NwYWNlLCBmbG9hdCBhZHZhbmNlQmVmb3JlLCBmbG9hdCBhZHZhbmNl
QXQpCisgICAgICAgIDogY2hhcmFjdGVySXNTcGFjZShpc1NwYWNlKQorICAgICAgICAsIGFkdmFu
Y2VCZWZvcmVDaGFyYWN0ZXIoYWR2YW5jZUJlZm9yZSkKKyAgICAgICAgLCBhZHZhbmNlQXRDaGFy
YWN0ZXIoYWR2YW5jZUF0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNoYXJhY3RlcklzU3Bh
Y2U7CisgICAgZmxvYXQgYWR2YW5jZUJlZm9yZUNoYXJhY3RlcjsKKyAgICBmbG9hdCBhZHZhbmNl
QXRDaGFyYWN0ZXI7Cit9OworCit0eXBlZGVmIFZlY3RvcjxwYWlyPGludCwgT3JpZ2luYWxBZHZh
bmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZTsKKworc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZSkKK3sKKyAgICBBU1NFUlQodHlwZXNldHRpbmdGZWF0dXJlcyAmIChLZXJuaW5nIHwgTGlnYXR1
cmVzKSk7CisKKyAgICBpZiAoIWdseXBoQnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGludCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAgIGlmIChnbHlw
aEJ1ZmZlci0+c2l6ZSgpIDw9IGxhc3RHbHlwaENvdW50KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMo
MCk7CisgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gMDsKKyAgICBmb3IgKGludCBpID0gbGFz
dEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKKyAgICAgICAgd2lkdGhEaWZm
ZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoKCk7CisKKyAgICBpZiAoIWx0cikgeworICAgICAg
ICBmb3IgKGludCBpID0gMCwgZW5kID0gZ2x5cGhCdWZmZXItPnNpemUoKSAtIDE7IGkgPCBnbHlw
aEJ1ZmZlci0+c2l6ZSgpIC8gMjsgKytpLCAtLWVuZCkKKyAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5zd2FwKGksIGVuZCk7CisgICAgfQorCisgICAgZm9udERhdGEtPmFwcGx5VHJhbnNmb3Jtcyhn
bHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhD
b3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVy
ZXMpOworCisgICAgaWYgKCFsdHIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGVuZCA9IGds
eXBoQnVmZmVyLT5zaXplKCkgLSAxOyBpIDwgZ2x5cGhCdWZmZXItPnNpemUoKSAvIDI7ICsraSwg
LS1lbmQpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c3dhcChpLCBlbmQpOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGludCBzcGFjZU9mZnNldCA9IGNoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZVtpXS5maXJzdDsKKyAgICAgICAgY29uc3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3Rl
clRyZWF0ZWRBc1NwYWNlJiBvcmlnaW5hbEFkdmFuY2VzID0gY2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlW2ldLnNlY29uZDsKKyAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ICYmICFvcmlnaW5hbEFkdmFu
Y2VzLmNoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMo
c3BhY2VPZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQmVmb3Jl
Q2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXItPmFkdmFuY2VzKHNwYWNlT2Zmc2V0KS0+
c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQXRDaGFyYWN0ZXIpOworICAgIH0KKyAg
ICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuY2xlYXIoKTsKKworICAgIGZvciAoaW50IGkgPSBs
YXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsgKytpKQorICAgICAgICB3aWR0aERp
ZmZlcmVuY2UgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKworICAgIGxhc3RHbHlwaENvdW50ID0g
Z2x5cGhCdWZmZXJTaXplOworICAgIHJldHVybiB3aWR0aERpZmZlcmVuY2U7Cit9CisKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0SXRlcmF0b3I+CiBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWZmZXIpCiB7CkBAIC05OSwxMCArMTYwLDExIEBAIGlubGluZSB1bnNpZ25lZCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KIAogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmlt
YXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZvbnQ7CisgICAgaW50IGxhc3RHbHlwaENvdW50ID0g
Z2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVDaGFyMzIgY2hh
cmFjdGVyID0gMDsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKLQorICAgIENoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZSBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2U7CiAgICAgd2hpbGUg
KHRleHRJdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpIHsKICAgICAg
ICAgdW5zaWduZWQgYWR2YW5jZUxlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAgIGNvbnN0
IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
cnRsLCB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpLCBhZHZhbmNlTGVuZ3RoKTsKQEAg
LTEzMiw2ICsxOTQsOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUlu
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm9udERhdGEgIT0gbGFzdEZvbnREYXRhICYmIHdp
ZHRoKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKQorICAg
ICAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBo
QnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOworCiAgICAgICAgICAg
ICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9u
dHMgJiYgZm9udERhdGEgIT0gcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGlm
CkBAIC0xODcsNiArMjUyLDEwIEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZh
bmNlSW4KICAgICAgICAgICAgICAgICBtX2lzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmIChzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgJiYgZ2x5cGhC
dWZmZXIgJiYgRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICBjaGFy
YWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKG1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+c2l6ZSgp
LAorICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNT
cGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhCdWZmZXIt
PmFkdmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkgOiAwLCB3aWR0aCkpKTsKKwogICAg
ICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKICAgICAgICAgICAgIGJvdW5kcyA9
IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBpZiAoIXRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpCkBAIC0yMzksNiArMzA4LDkgQEAgaW5saW5lIHVu
c2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9CiAgICAgfQogCisgICAg
aWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSkKKyAgICAgICAgbV9ydW5XaWR0aFNvRmFy
ICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5
cGhDb3VudCwgbGFzdEZvbnREYXRhLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMsIGNoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZSk7CisKICAgICB1bnNpZ25lZCBjb25zdW1lZENoYXJhY3RlcnMgPSB0ZXh0
SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwogICAgIG1f
Y3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CiAgICAg
bV9ydW5XaWR0aFNvRmFyICs9IHdpZHRoU2luY2VMYXN0Um91bmRpbmc7CkBAIC0yNjUsMTUgKzMz
NywxNSBAQCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzCiAgICAgcmV0
dXJuIGFkdmFuY2VJbnRlcm5hbCh0ZXh0SXRlcmF0b3IsIGdseXBoQnVmZmVyKTsKIH0KIAotYm9v
bCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyKQorYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewotICAgIGludCBv
bGRTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKLSAgICBhZHZhbmNlKG1fY3VycmVudENoYXJh
Y3RlciArIDEsIGdseXBoQnVmZmVyKTsKKyAgICBpbnQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNp
emUoKTsKKyAgICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1ZmZlcik7
CiAgICAgZmxvYXQgdyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1
ZmZlci0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHcgKz0gZ2x5cGhCdWZmZXItPmFkdmFuY2VBdChp
KTsKKyAgICBmb3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KQorICAgICAgICB3ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKTsKICAgICB3aWR0aCA9IHc7
Ci0gICAgcmV0dXJuIGdseXBoQnVmZmVyLT5zaXplKCkgPiBvbGRTaXplOworICAgIHJldHVybiBn
bHlwaEJ1ZmZlci5zaXplKCkgPiBvbGRTaXplOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCShyZXZpc2lvbiAxMzEw
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgV2lkdGhJdGVyYXRvcl9o
CiAjZGVmaW5lIFdpZHRoSXRlcmF0b3JfaAogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IlNWR0dseXBoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC00MCw4ICs0MSw4IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIHB1YmxpYzoK
ICAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9y
R2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKLSAg
ICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0gICAgYm9vbCBh
ZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIqID0gMCk7CisgICAg
dW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7CisgICAgYm9vbCBhZHZhbmNl
T25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1h
eEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3Vu
ZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQogICAgIGZsb2F0IG1pbkdseXBo
Qm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyBy
ZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNTcsNiArNTgsMTggQEAgcHVibGlj
OgogICAgIFZlY3RvcjxTVkdHbHlwaDo6QXJhYmljRm9ybT4mIGFyYWJpY0Zvcm1zKCkgeyByZXR1
cm4gbV9hcmFiaWNGb3JtczsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5
cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYgZm9udCkKKyAgICB7CisjaWYgIVBMQVRGT1JN
KE1BQykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDgwCisgICAgICAg
IHJldHVybiAhZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisjZWxzZQorICAgICAgICBpZiAo
IWZvbnQuaXNQcmludGVyRm9udCgpKQorICAgICAgICAgICAgcmV0dXJuICFmb250LnR5cGVzZXR0
aW5nRmVhdHVyZXMoKTsKKworICAgICAgICByZXR1cm4gIShmb250LnR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSAmIH4oS2VybmluZyB8IExpZ2F0dXJlcykpOworI2VuZGlmCisgICAgfQorCiAgICAgY29u
c3QgRm9udCogbV9mb250OwogCiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CkBAIC03OCw2ICs5
MSw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KICAg
ICBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYsIEdseXBoQnVm
ZmVyKik7CiAKKyAgICBib29sIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7IH0KKwor
ICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgbV90eXBlc2V0dGluZ0ZlYXR1cmVzOwogICAgIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogICAgIGJvb2wgbV9h
Y2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
Lm1tCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQxLDE1ICsyNDEsMTUgQEAgdm9p
ZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICBmbG9hdCBzaGFk
b3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJ
ZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGll
ZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAq
IChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0
WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4
dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IENHU2l6
ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICAgICAgaWYg
KHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0
WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNo
YWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkp
LCBudW1HbHlwaHMpOwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBm
aWxsQ29sb3JTcGFjZSk7CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2lu
dCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMo
cG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVt
R2x5cGhzKTsKICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
KSwgbnVtR2x5cGhzKTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCiAgICAgICAgIGNvbnRl
eHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFk
b3dDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAxMzEwOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogZwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVu
IHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlz
IG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHRyYW5z
bGF0aW9uLmhlaWdodCgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4
dC0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CiAgICAgICAgIENHQ29udGV4
dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSk7Ci0g
ICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1
ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMp
OworICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5
cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IENHU2l6ZSo+KGds
eXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICAgICAgaWYgKGZvbnQt
PnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkgewogICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBv
c2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIHNoYWRv
d09mZnNldC53aWR0aCgpICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkg
KyB0cmFuc2xhdGlvbi5oZWlnaHQoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsK
KyAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBn
bHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ0dTaXplKj4o
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwogICAgICAgICB9CiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CiAgICAgfQogCiAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4
dCwgcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSwgcG9pbnQueSgpICsgdHJhbnNsYXRp
b24uaGVpZ2h0KCkpOwotICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250
ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
LCBudW1HbHlwaHMpOworICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250
ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ0dT
aXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwogICAgIGlmIChm
b250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBv
c2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIGZvbnQt
PnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpICsgdHJhbnNsYXRpb24uaGVpZ2h0KCkp
OwotICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5
cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5
cGhzKTsKKyAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDR1NpemUq
PihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CiAgICAgfQogCiAgICAg
aWYgKGhhc1NpbXBsZVNoYWRvdykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkocmV2aXNpb24gMTMxMDkyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSwxNyBAQCBleHRlcm4gaW50ICgqd2tHZXROU0V2ZW50
TW9tZW50dW1QaGFzZSkoCiAKIGV4dGVybiBDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhV
bmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJ
bmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZv
aWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQq
KTsKIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorZW51bSB7
CisgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwKKyAgICB3a0NU
Rm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgPSAoMSA8PCAxKQorfTsKKwordHlwZWRlZiBp
bnQgd2tDVEZvbnRUcmFuc2Zvcm1PcHRpb25zOworCitleHRlcm4gYm9vbCAoKndrQ1RGb250VHJh
bnNmb3JtR2x5cGhzKShDVEZvbnRSZWYgZm9udCwgQ0dHbHlwaCBnbHlwaHNbXSwgQ0dTaXplIGFk
dmFuY2VzW10sIENGSW5kZXggY291bnQsIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25z
KTsKKyNlbmRpZgorCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcw
CiAKIGV4dGVybiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlD
aGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXgg
c3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1
dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCop
LCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlz
aW9uIDEzMTA5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDEwIEBAIGludCAoKndr
R2V0TlNFdmVudE1vbWVudHVtUGhhc2UpKE5TRXZlbnQKICNlbmRpZgogCiBDVExpbmVSZWYgKCp3
a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlk
ZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlS
ZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNo
YXJzLCB2b2lkKiksIHZvaWQqKTsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKK2Jvb2wgKCp3a0NURm9udFRyYW5zZm9ybUdseXBocykoQ1RGb250UmVmIGZvbnQs
IENHR2x5cGggZ2x5cGhzW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4IGNvdW50LCB3a0NU
Rm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyk7CisjZW5kaWYKKwogI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3MAogQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVD
VFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3ZpZGVyQW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciog
KCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGlj
dGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5p
Q2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCosIENGRGljdGlvbmFyeVJlZiBvcHRpb25zKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1l
dHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTMxMDkyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw4IEBAIGJvb2wgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlKCkKIAogdm9p
ZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0KCkKIHsKLSAgICB1bnNp
Z25lZCBtZXRyaWNzTGVuZ3RoID0gbV9zaW1wbGVXaWR0aEl0ZXJhdG9yLT5hZHZhbmNlKG1fdGV4
dFBvc2l0aW9uICsgMSk7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgdW5zaWdu
ZWQgbWV0cmljc0xlbmd0aCA9IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+YWR2YW5jZShtX3RleHRQ
b3NpdGlvbiArIDEsICZnbHlwaEJ1ZmZlcik7CiAgICAgaWYgKCFtZXRyaWNzTGVuZ3RoKSB7CiAg
ICAgICAgIG1fY3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmljcygpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTMxMDkyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDggQEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdS
ZXNvdXJjZSogYWN0aXZlUAogZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0
V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBp
bnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewogICAgIFdpZHRo
SXRlcmF0b3IgaXQoJmZvbnQsIHJ1bik7Ci0gICAgY2hhcnNDb25zdW1lZCArPSBpdC5hZHZhbmNl
KHJ1bi5sZW5ndGgoKSk7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgY2hhcnND
b25zdW1lZCArPSBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICBn
bHlwaE5hbWUgPSBpdC5sYXN0R2x5cGhOYW1lKCk7CiAgICAgcmV0dXJuIGl0LnJ1bldpZHRoU29G
YXIoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTEwOSkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEwLTEx
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MiBwYXJ0
IG9mIDxyZGFyOi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9l
c27igJl0IHN1cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhl
IGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0
aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAoSW5pdFdl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UpOiBBZGRlZCB3a0NURm9udFRyYW5zZm9ybUdseXBocy4KKwog
MjAxMi0xMC0xMSAgUmVnaW5hIENodW5nICA8aGVlamluLnIuY2h1bmdAc2Ftc3VuZy5jb20+CiAK
ICAgICAgICAgW0VGTF1bV0syXSBXZWJQcm9jZXNzIGtlZXBzIG9uIHdhaXRpbmcgZm9yIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViU3lzdGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24g
MTMxMDkyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBAIHZv
aWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwODAKICAgICAgICAgSU5JVChDR0NvbnRleHREcmF3c1dpdGhD
b3JyZWN0U2hhZG93T2Zmc2V0cyk7CiAjZW5kaWYKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwOTAKKyAgICAgICAgSU5JVChDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpOwor
I2VuZGlmCiAgICAgICAgIElOSVQoQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKTsKICAgICAgICAg
SU5JVChDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUpOwogICAgICAgICBJTklUKENyZWF0ZUNU
TGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
MTMxMTA5KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTItMTAtMTEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBXZWJLaXQvbWFjIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzEyNDcwNjgw
PiBGb2504oCZcyBmYXN0IGNvZGUgcGF0aCBkb2VzbuKAmXQgc3VwcG9ydCBrZXJuaW5nIGFuZCBs
aWdhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJh
dGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06Cisg
ICAgICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6IEFkZGVkIHdrQ1RGb250VHJhbnNm
b3JtR2x5cGhzLgorCiAyMDEyLTEwLTEwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBTd2l0Y2ggUmVzb3VyY2VMb2FkZXI6OnJlc291cmNlRGF0YSgpIGZyb20g
U2hhcmVkQnVmZmVyIHRvIFJlc291cmNlQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lv
biAxMzEwOTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1J
bnRlcmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgdm9pZCBJbml0V2Vi
Q29yZVN5c3RlbUludGVyZmFjZSh2b2lkKQogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA4MAogICAgIElOSVQoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09m
ZnNldHMpOwogI2VuZGlmCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDkwCisgICAgSU5JVChDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpOworI2VuZGlmCiAgICAgSU5JVChD
b3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lKTsKICAgICBJTklUKENvcHlDT05ORUNUUHJv
eHlSZXNwb25zZSk7CiAgICAgSU5JVChDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168465</attachid>
            <date>2012-10-12 13:08:31 -0700</date>
            <delta_ts>2012-10-12 16:58:03 -0700</delta_ts>
            <desc>Add kerning and ligature support on the fast code path (this patch excludes WebKitLibraries changes)</desc>
            <filename>bug-99113-20121012130726.patch</filename>
            <type>text/plain</type>
            <size>31905</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTEwLTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMjQ3MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1
cHBvcnQga2VybmluZyBhbmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydGVkIHdrQ1RGb250VHJh
bnNmb3JtR2x5cGhzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOiBBZGRlZCBhIGxvY2FsIEdseXBoQnVmZmVyIHRv
IHBhc3MgdG8gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmNvZGVQYXRoKTogUmF0aGVyIHRoYW4gYWx3YXlzIHVzZSB0aGUgY29tcGxleCBjb2RlIHBh
dGggd2hlbiBhbnkgdHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGNo
YW5nZWQgdG8gZG8gc28gb25seSBpZiBXaWR0aEl0ZXJhdG9yIGRvZXNu4oCZdCBzdXBwb3J0IHRo
aXMgRm9udOKAmXMKKyAgICAgICAgdHlwZXNldHRpbmcgZmVhdHVyZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9jYWwgR2x5cGhC
dWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKCkgd2hlbiBh
ZHZhbmNpbmcgdG8gb3IgZnJvbSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3QuIEFkZGVkIGEgRklYTUUK
KyAgICAgICAgYWJvdXQgaG93IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yIGxpZ2F0dXJlcyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KTogQWRkZWQgYSBsb2NhbCBHbHlwaEJ1ZmZlciB0byBw
YXNzIHRvCisgICAgICAgIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoKSB3aGVuIGFkdmFuY2luZyB0
byBvciBmcm9tIHRoZSByYW5nZSBvZiBpbnRlcmVzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dCk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2Ug
dG8KKyAgICAgICAgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcigpLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKTogQWRkZWQuIENhbGxzIHdrQ1RGb250
VHJhbnNmb3JtR2x5cGhzKCkgd2hlcmUKKyAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcik6IEFkZGVkIGluaXRpYWxpemVyIGZvciB0aGUgbmV3
IG1fdHlwZXNldHRpbmdGZWF0dXJlcworICAgICAgICBkYXRhIG1lbWJlci4KKyAgICAgICAgKE9y
aWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZSk6IEFkZGVkIHRoaXMgZGF0
YSB0eXBlLCB1c2VkIHRvIHRyYWNrIHNwYWNlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVycyB0cmVh
dGVkIGFzIHNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOiBB
ZGRlZC4gQXBwbGllcyBzaGFwaW5nIGFuZCBwb3NpdGlvbmluZyB0cmFuc2Zvcm1zLCBhcworICAg
ICAgICByZXF1aXJlZCBieSB0aGUgdHlwZXNldHRpbmcgZmVhdHVyZXMsIHRvIHRoZSBnbHlwaHMg
cmVjZW50bHkgYWRkZWQgdG8gYSBHbHlwaEJ1ZmZlciwgd2hpbGUKKyAgICAgICAgbWFpbnRhaW5p
bmcgdGhlIGFkdmFuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgdHJlYXRlZCBhcyBzcGFjZXMg
YW5kIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgIHByZWNlZGluZyB0aGVtLCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOiBBZGRl
ZCBjYWxscyB0byBhcHBseUZvbnRUcmFuc2Zvcm1zKCkgYXQgdGhlIGVuZAorICAgICAgICBvZiBl
YWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyBmcm9tIHRoZSBzYW1lIGZvbnQuIEFsc28gYWRk
ZWQgY29kZSB0byBtYWludGFpbiBhIHZlY3RvcgorICAgICAgICBvZiBzcGFjZXMgYW5kIGNoYXJh
Y3RlcnMgdHJlYXRlZCBhcyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6
OmFkdmFuY2VPbmVDaGFyYWN0ZXIpOiBDaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSBmcm9tIGEg
cG9pbnRlciB0bworICAgICAgICBhIHJlZmVyZW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMpOiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIFdpZHRo
SXRlcmF0b3IKKyAgICAgICAgaW5zdGFuY2VzIHN1cHBvcnQgdGhlIHR5cGVzZXR0aW5nIGZlYXR1
cmVzIG9mIHRoZSBnaXZlbiBmb250LiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMKKyAgICAg
ICAgbm90IGEgc2NyZWVuIGZvbnQgYW5kIGl0cyB0eXBlc2V0dGluZyBmZWF0dXJlcyBhcmUga2Vy
bmluZywgbGlnYXR1cmVzIG9yIGJvdGguCisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKTogQWRkZWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHlwZXNldHRpbmcKKyAgICAgICAgZmVhdHVyZXMgaW5jbHVkZSBrZXJuaW5nIG9yIGxpZ2F0dXJl
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOiBEZWZp
bmVkIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBhbmQgZGVjbGFyZWQKKyAgICAgICAgd2tDVEZv
bnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UubW06IERlZmluZWQgd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjphZHZhbmNlU2ltcGxlVGV4dCk6IEFkZGVkIGEgbG9j
YWwgR2x5cGhCdWZmZXIgdG8gcGFzcyB0bworICAgICAgICBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
KCkuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udCk6IERpdHRvLgorCiAyMDEyLTEwLTEyICBTY290dCBHcmFoYW0gIDxz
Y290dG1nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBMb2NhbCBkaXNhYmxlIG9mIHN0YWNrIGNv
cnJ1cHRpb24gd2FybmluZyB3aGVuIGNvbXBpbGluZyBvbiBWUzIwMTIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTQ0OSw2ICsxNDQ5LDkgQEAgX3drQ0dDb250ZXh0UmVz
ZXRDbGlwCiBfd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cwogI2VuZGlm
CiBfd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0KKyNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK193a0NURm9udFRyYW5zZm9ybUdseXBocwor
I2VuZGlmCiBfd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lCiBfd2tDb3B5Q0ZVUkxS
ZXNwb25zZVN1Z2dlc3RlZEZpbGVuYW1lCiBfd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAx
MzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw4IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGEKICAgICAgICAgLy8gSWYgdGhlIGNvbXBsZXggdGV4dCBpbXBsZW1lbnRh
dGlvbiBjYW5ub3QgcmV0dXJuIGZhbGxiYWNrIGZvbnRzLCBhdm9pZAogICAgICAgICAvLyByZXR1
cm5pbmcgdGhlbSBmb3Igc2ltcGxlIHRleHQgYXMgd2VsbC4KICAgICAgICAgc3RhdGljIGJvb2wg
cmV0dXJuRmFsbGJhY2tGb250cyA9IGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpOwotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCByZXR1
cm5GYWxsYmFja0ZvbnRzID8gZmFsbGJhY2tGb250cyA6IDAsIGNvZGVQYXRoVG9Vc2UgPT0gU2lt
cGxlV2l0aEdseXBoT3ZlcmZsb3cgfHwgKGdseXBoT3ZlcmZsb3cgJiYgZ2x5cGhPdmVyZmxvdy0+
Y29tcHV0ZUJvdW5kcykgPyBnbHlwaE92ZXJmbG93IDogMCk7CisgICAgICAgIEdseXBoQnVmZmVy
IGdseXBoQnVmZmVyOworICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCAmZ2x5cGhCdWZmZXIsIHJldHVybkZhbGxiYWNrRm9udHMgPyBmYWxsYmFja0ZvbnRzIDogMCwg
Y29kZVBhdGhUb1VzZSA9PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB8fCAoZ2x5cGhPdmVyZmxv
dyAmJiBnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSA/IGdseXBoT3ZlcmZsb3cgOiAwKTsK
ICAgICB9CiAKICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJh
Y2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CkBAIC0zMTQsNyArMzE1LDcgQEAgRm9udDo6Q29kZVBh
dGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5m
ZWF0dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+
c2l6ZSgpID4gMCkKICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAgICAgCi0gICAgaWYgKHJ1bi5s
ZW5ndGgoKSA+IDEgJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpKQorICAgIGlmIChydW4ubGVuZ3Ro
KCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRo
aXMpKQogICAgICAgICByZXR1cm4gQ29tcGxleDsKIAogICAgIGlmICghcnVuLmNoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzMsNyArMzMzLDEwIEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2lt
cGwKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIAogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhp
cywgcnVuLCAwLCBmYWxzZSwgZm9yVGV4dEVtcGhhc2lzKTsKLSAgICBpdC5hZHZhbmNlKGZyb20p
OworICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJl
Zml4IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKKyAgICAvLyBs
aWdhdHVyZXMgYXJlIGVuYWJsZWQuCisgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsK
KyAgICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZv
cmVXaWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhC
dWZmZXIpOwogCkBAIC0zNDQsNyArMzQ3LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JTaW1wbAogCiAgICAgaWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCBmaW5h
bFJvdW5kaW5nV2lkdGggPSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICAgICAgaXQuYWR2
YW5jZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgJmxv
Y2FsR2x5cGhCdWZmZXIpOwogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdX
aWR0aCArIGl0Lm1fcnVuV2lkdGhTb0ZhciAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CkBAIC00ODgsMTUgKzQ5MSwxNiBAQCBm
bG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAKIEZsb2F0UmVjdCBGb250
OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKKyAgICBH
bHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7
Ci0gICAgaXQuYWR2YW5jZShmcm9tKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sICZnbHlwaEJ1ZmZl
cik7CiAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgaXQu
YWR2YW5jZSh0byk7CisgICAgaXQuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKICAgICBmbG9h
dCBhZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogCiAgICAgLy8gVXNpbmcgcm91bmRm
KCkgcmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNl
IHRvIGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nLgogICAgIGlmIChydW4ucnRsKCkp
IHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOworICAgICAgICBpdC5hZHZhbmNl
KHJ1bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9
IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9p
bnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2lu
dC54KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRv
dGFsV2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CiAgICAgfQpAQCAtNTE2LDcgKzUyMCw3IEBAIGlu
dCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICAgICAgd2hpbGUgKDEp
IHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVudENoYXJhY3RlcjsKICAgICAgICAg
ICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywg
JmxvY2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFj
dGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVsdGEgKz0gdzsKICAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykg
ewpAQCAtNTMxLDcgKzUzNSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBs
ZVRleHQKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3Vy
cmVudENoYXJhY3RlcjsKICAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0
LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgJmxvY2FsR2x5cGhCdWZmZXIpKQorICAgICAgICAgICAg
aWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVsdGEgLT0gdzsKICAgICAgICAgICAgIGlm
IChpbmNsdWRlUGFydGlhbEdseXBocykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MywxMSArNjMsMzIgQEAgdHlwZWRlZiBHbHlwaCBHbHlwaEJ1ZmZlckdseXBoOwogLy8gQ0cg
dXNlcyBDR1NpemUgaW5zdGVhZCBvZiBGbG9hdFNpemUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIGFk
dmFuY2VzKCkKIC8vIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0dDb250ZXh0U2hvd0dseXBo
c1dpdGhBZHZhbmNlcyBpbiBGb250TWFjLm1tCiAjaWYgVVNFKENHKSB8fCAoT1MoREFSV0lOKSAm
JiAoUExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkpCi10eXBlZGVmIENHU2l6ZSBH
bHlwaEJ1ZmZlckFkdmFuY2U7CitzdHJ1Y3QgR2x5cGhCdWZmZXJBZHZhbmNlIDogQ0dTaXplIHsK
K3B1YmxpYzoKKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UoQ0dTaXplIHNpemUpIDogQ0dTaXplKHNp
emUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0V2lkdGgoQ0dGbG9hdCB3aWR0aCkgeyB0
aGlzLT5DR1NpemU6OndpZHRoID0gd2lkdGg7IH0KKyAgICBDR0Zsb2F0IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gdGhpcy0+Q0dTaXplOjp3aWR0aDsgfQorfTsKICNlbGlmIE9TKFdJTkNFKQogLy8g
VGhlcmUgaXMgbm8gY3Jvc3MtcGxhdGZvcm0gY29kZSB0aGF0IHVzZXMgdGhlIGhlaWdodCBvZiBH
bHlwaEJ1ZmZlckFkdmFuY2UsCiAvLyBzbyB3ZSBjYW4gc2F2ZSBtZW1vcnkgc3BhY2Ugb24gZW1i
ZWRkZWQgZGV2aWNlcyBieSBzdG9yaW5nIG9ubHkgdGhlIHdpZHRoCi10eXBlZGVmIGZsb2F0IEds
eXBoQnVmZmVyQWR2YW5jZTsKK3N0cnVjdCBHbHlwaEJ1ZmZlckFkdmFuY2UgeworcHVibGljOgor
ICAgIEdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCkKKyAgICAgICAgOiBhZHZhbmNlKHdp
ZHRoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IGFk
dmFuY2UgPSB3aWR0aDsgfQorICAgIGZsb2F0JiB3aWR0aCgpIHsgcmV0dXJuIGFkdmFuY2U7IH0K
KyAgICBjb25zdCBmbG9hdCYgd2lkdGgoKSBjb25zdCB7IHJldHVybiBhZHZhbmNlOyB9CisKK3By
aXZhdGU6CisgICAgZmxvYXQgYWR2YW5jZTsKK307CiAjZWxzZQogdHlwZWRlZiBGbG9hdFNpemUg
R2x5cGhCdWZmZXJBZHZhbmNlOwogI2VuZGlmCkBAIC0xMjYsMTMgKzE0Nyw3IEBAIHB1YmxpYzoK
IAogICAgIGZsb2F0IGFkdmFuY2VBdChpbnQgaW5kZXgpIGNvbnN0CiAgICAgewotI2lmIFVTRShD
RykgfHwgKE9TKERBUldJTikgJiYgKFBMQVRGT1JNKFdYKSB8fCBQTEFURk9STShDSFJPTUlVTSkp
KQotICAgICAgICByZXR1cm4gbV9hZHZhbmNlc1tpbmRleF0ud2lkdGg7Ci0jZWxpZiBPUyhXSU5D
RSkKLSAgICAgICAgcmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdOwotI2Vsc2UKICAgICAgICAgcmV0
dXJuIG1fYWR2YW5jZXNbaW5kZXhdLndpZHRoKCk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBGbG9h
dFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdApAQCAtMTk2LDEzICsyMTEsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgICAgIEdseXBoQnVm
ZmVyQWR2YW5jZSYgbGFzdEFkdmFuY2UgPSBtX2FkdmFuY2VzLmxhc3QoKTsKLSNpZiBVU0UoQ0cp
IHx8IChPUyhEQVJXSU4pICYmIChQTEFURk9STShXWCkgfHwgUExBVEZPUk0oQ0hST01JVU0pKSkK
LSAgICAgICAgbGFzdEFkdmFuY2Uud2lkdGggKz0gd2lkdGg7Ci0jZWxpZiBPUyhXSU5DRSkKLSAg
ICAgICAgbGFzdEFkdmFuY2UgKz0gd2lkdGg7Ci0jZWxzZQotICAgICAgICBsYXN0QWR2YW5jZSAr
PSBGbG9hdFNpemUod2lkdGgsIDApOwotI2VuZGlmCisgICAgICAgIGxhc3RBZHZhbmNlLnNldFdp
ZHRoKGxhc3RBZHZhbmNlLndpZHRoKCkgKyB3aWR0aCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5oCShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJH
bHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKQEAgLTM3LDggKzM4LDEzIEBACiAjaW5jbHVkZSAiVHlw
ZXNldHRpbmdGZWF0dXJlcy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9T
KERBUldJTikpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCkBAIC0xOTAsNiAr
MTk2LDIxIEBAIHB1YmxpYzoKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgogCisgICAgYm9vbCBh
cHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBl
c2V0dGluZ0ZlYXR1cmVzKSBjb25zdAorICAgIHsKKyNpZiAhUExBVEZPUk0oTUFDKSB8fCBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAKKyAgICAgICAgVU5VU0VEX1BBUkFN
KGdseXBocyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShhZHZhbmNlcyk7CisgICAgICAgIFVOVVNF
RF9QQVJBTShnbHlwaENvdW50KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGVzZXR0aW5nRmVh
dHVyZXMpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworI2Vsc2UKKyAgICB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9ICh0eXBl
c2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlv
bmluZyA6IDApIHwgKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBMaWdhdHVyZXMgPyB3a0NURm9udFRy
YW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOworICAgIHJldHVybiB3a0NURm9udFRyYW5zZm9ybUds
eXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCByZWludGVycHJldF9jYXN0PENH
U2l6ZSo+KGFkdmFuY2VzKSwgZ2x5cGhDb3VudCwgb3B0aW9ucyk7CisjZW5kaWYKKyAgICB9CisK
ICNpZiBQTEFURk9STShRVCkKICAgICBRUmF3Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtRGF0YS5yYXdGb250KCk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDEzMTIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIFdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCoKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAg
ICwgbV9pc0FmdGVyRXhwYW5zaW9uKCFydW4uYWxsb3dzTGVhZGluZ0V4cGFuc2lvbigpKQogICAg
ICwgbV9maW5hbFJvdW5kaW5nV2lkdGgoMCkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhm
b250LT50eXBlc2V0dGluZ0ZlYXR1cmVzKCkpCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJh
Y2tGb250cykKICAgICAsIG1fYWNjb3VudEZvckdseXBoQm91bmRzKGFjY291bnRGb3JHbHlwaEJv
dW5kcykKICAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkobnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjptaW4oKSkKQEAgLTg0LDYgKzg1LDY2IEBAIEdseXBoRGF0YSBXaWR0aEl0ZXJhdG9yOjpnbHlw
aERhdGFGb3JDaGEKICAgICByZXR1cm4gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hh
cmFjdGVyLCBtaXJyb3IpOwogfQogCitzdHJ1Y3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3Rl
clRyZWF0ZWRBc1NwYWNlIHsKK3B1YmxpYzoKKyAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFj
dGVyVHJlYXRlZEFzU3BhY2UoYm9vbCBpc1NwYWNlLCBmbG9hdCBhZHZhbmNlQmVmb3JlLCBmbG9h
dCBhZHZhbmNlQXQpCisgICAgICAgIDogY2hhcmFjdGVySXNTcGFjZShpc1NwYWNlKQorICAgICAg
ICAsIGFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIoYWR2YW5jZUJlZm9yZSkKKyAgICAgICAgLCBhZHZh
bmNlQXRDaGFyYWN0ZXIoYWR2YW5jZUF0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNoYXJh
Y3RlcklzU3BhY2U7CisgICAgZmxvYXQgYWR2YW5jZUJlZm9yZUNoYXJhY3RlcjsKKyAgICBmbG9h
dCBhZHZhbmNlQXRDaGFyYWN0ZXI7Cit9OworCit0eXBlZGVmIFZlY3RvcjxwYWlyPGludCwgT3Jp
Z2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZTsKKworc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1z
KEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBl
c2V0dGluZ0ZlYXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkKK3sKKyAgICBBU1NFUlQodHlwZXNldHRpbmdGZWF0dXJlcyAmIChLZXJuaW5n
IHwgTGlnYXR1cmVzKSk7CisKKyAgICBpZiAoIWdseXBoQnVmZmVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGludCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAg
IGlmIChnbHlwaEJ1ZmZlci0+c2l6ZSgpIDw9IGxhc3RHbHlwaENvdW50KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci0+
YWR2YW5jZXMoMCk7CisgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKKyAgICAgICAg
d2lkdGhEaWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoKCk7CisKKyAgICBpZiAoIWx0cikg
eworICAgICAgICBmb3IgKGludCBpID0gMCwgZW5kID0gZ2x5cGhCdWZmZXItPnNpemUoKSAtIDE7
IGkgPCBnbHlwaEJ1ZmZlci0+c2l6ZSgpIC8gMjsgKytpLCAtLWVuZCkKKyAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5zd2FwKGksIGVuZCk7CisgICAgfQorCisgICAgZm9udERhdGEtPmFwcGx5VHJh
bnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBs
YXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0
aW5nRmVhdHVyZXMpOworCisgICAgaWYgKCFsdHIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDAs
IGVuZCA9IGdseXBoQnVmZmVyLT5zaXplKCkgLSAxOyBpIDwgZ2x5cGhCdWZmZXItPnNpemUoKSAv
IDI7ICsraSwgLS1lbmQpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c3dhcChpLCBlbmQpOwor
ICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludCBzcGFjZU9mZnNldCA9IGNoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZVtpXS5maXJzdDsKKyAgICAgICAgY29uc3QgT3JpZ2luYWxBZHZhbmNlc0Zv
ckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlJiBvcmlnaW5hbEFkdmFuY2VzID0gY2hhcmFjdGVyc1Ry
ZWF0ZWRBc1NwYWNlW2ldLnNlY29uZDsKKyAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ICYmICFvcmln
aW5hbEFkdmFuY2VzLmNoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWR2YW5jZXMoc3BhY2VPZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZh
bmNlQmVmb3JlQ2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXItPmFkdmFuY2VzKHNwYWNl
T2Zmc2V0KS0+c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQXRDaGFyYWN0ZXIpOwor
ICAgIH0KKyAgICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuY2xlYXIoKTsKKworICAgIGZvciAo
aW50IGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsgKytpKQorICAgICAg
ICB3aWR0aERpZmZlcmVuY2UgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKworICAgIGxhc3RHbHlw
aENvdW50ID0gZ2x5cGhCdWZmZXJTaXplOworICAgIHJldHVybiB3aWR0aERpZmZlcmVuY2U7Cit9
CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUZXh0SXRlcmF0b3I+CiBpbmxpbmUgdW5zaWduZWQgV2lk
dGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBH
bHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiB7CkBAIC05OSwxMCArMTYwLDExIEBAIGlubGluZSB1
bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KIAogICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKICAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZvbnQ7CisgICAgaW50IGxhc3RHbHlw
aENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVD
aGFyMzIgY2hhcmFjdGVyID0gMDsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKLQor
ICAgIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2U7CiAg
ICAgd2hpbGUgKHRleHRJdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkp
IHsKICAgICAgICAgdW5zaWduZWQgYWR2YW5jZUxlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAg
ICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgcnRsLCB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpLCBhZHZhbmNlTGVu
Z3RoKTsKQEAgLTEzMiw2ICsxOTQsOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm9udERhdGEgIT0gbGFzdEZvbnRE
YXRhICYmIHdpZHRoKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3Jt
cygpKQorICAgICAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zv
cm1zKGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0
YSwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOworCiAg
ICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKICAgICAgICAgICAgIGlmIChtX2Zh
bGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBh
dm9pZGVkIGlmCkBAIC0xODcsNiArMjUyLDEwIEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICBtX2lzQWZ0ZXJFeHBhbnNpb24gPSBmYWxz
ZTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkg
JiYgZ2x5cGhCdWZmZXIgJiYgRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAg
ICAgICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKG1ha2VfcGFpcihnbHlwaEJ1ZmZl
ci0+c2l6ZSgpLAorICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJU
cmVhdGVkQXNTcGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5
cGhCdWZmZXItPmFkdmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkgOiAwLCB3aWR0aCkp
KTsKKwogICAgICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKICAgICAgICAgICAg
IGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBp
ZiAoIXRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpCkBAIC0yMzksNiArMzA4LDkgQEAg
aW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9CiAgICAg
fQogCisgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSkKKyAgICAgICAgbV9ydW5X
aWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigp
LCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMsIGNo
YXJhY3RlcnNUcmVhdGVkQXNTcGFjZSk7CisKICAgICB1bnNpZ25lZCBjb25zdW1lZENoYXJhY3Rl
cnMgPSB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpIC0gbV9jdXJyZW50Q2hhcmFjdGVy
OwogICAgIG1fY3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVy
KCk7CiAgICAgbV9ydW5XaWR0aFNvRmFyICs9IHdpZHRoU2luY2VMYXN0Um91bmRpbmc7CkBAIC0y
NjUsMTUgKzMzNywxNSBAQCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZz
CiAgICAgcmV0dXJuIGFkdmFuY2VJbnRlcm5hbCh0ZXh0SXRlcmF0b3IsIGdseXBoQnVmZmVyKTsK
IH0KIAotYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0
aCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQorYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
T25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewot
ICAgIGludCBvbGRTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKLSAgICBhZHZhbmNlKG1fY3Vy
cmVudENoYXJhY3RlciArIDEsIGdseXBoQnVmZmVyKTsKKyAgICBpbnQgb2xkU2l6ZSA9IGdseXBo
QnVmZmVyLnNpemUoKTsKKyAgICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEsICZnbHlw
aEJ1ZmZlcik7CiAgICAgZmxvYXQgdyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkg
PCBnbHlwaEJ1ZmZlci0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHcgKz0gZ2x5cGhCdWZmZXItPmFk
dmFuY2VBdChpKTsKKyAgICBmb3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNp
emUoKTsgKytpKQorICAgICAgICB3ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKTsKICAgICB3
aWR0aCA9IHc7Ci0gICAgcmV0dXJuIGdseXBoQnVmZmVyLT5zaXplKCkgPiBvbGRTaXplOworICAg
IHJldHVybiBnbHlwaEJ1ZmZlci5zaXplKCkgPiBvbGRTaXplOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCShyZXZp
c2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgV2lkdGhJ
dGVyYXRvcl9oCiAjZGVmaW5lIFdpZHRoSXRlcmF0b3JfaAogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIlNWR0dseXBoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC00MCw4ICs0MSw4IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsK
IHB1YmxpYzoKICAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKLSAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0g
ICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIqID0g
MCk7CisgICAgdW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7CisgICAgYm9v
bCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAg
IGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9y
R2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQogICAgIGZsb2F0
IG1pbkdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhC
b3VuZHMpOyByZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNTcsNiArNTgsMTgg
QEAgcHVibGljOgogICAgIFZlY3RvcjxTVkdHbHlwaDo6QXJhYmljRm9ybT4mIGFyYWJpY0Zvcm1z
KCkgeyByZXR1cm4gbV9hcmFiaWNGb3JtczsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYgZm9udCkKKyAgICB7CisjaWYg
IVBMQVRGT1JNKE1BQykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDgw
CisgICAgICAgIHJldHVybiAhZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisjZWxzZQorICAg
ICAgICBpZiAoIWZvbnQuaXNQcmludGVyRm9udCgpKQorICAgICAgICAgICAgcmV0dXJuICFmb250
LnR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKKworICAgICAgICByZXR1cm4gIShmb250LnR5cGVzZXR0
aW5nRmVhdHVyZXMoKSAmIH4oS2VybmluZyB8IExpZ2F0dXJlcykpOworI2VuZGlmCisgICAgfQor
CiAgICAgY29uc3QgRm9udCogbV9mb250OwogCiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CkBA
IC03OCw2ICs5MSw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVy
YXRvcj4KICAgICBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYs
IEdseXBoQnVmZmVyKik7CiAKKyAgICBib29sIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSBj
b25zdCB7IHJldHVybiBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJl
cyk7IH0KKworICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgbV90eXBlc2V0dGluZ0ZlYXR1cmVzOwog
ICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogICAg
IGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5k
aW5nQm94WTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tCShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQxLDE1ICsyNDEs
MTUgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICBm
bG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwogICAg
ICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVu
J3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZl
LgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5o
ZWlnaHQoKSAqIChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsK
LSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBz
aGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQs
IGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBD
R1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CiAgICAgICAg
IGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93
VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgICAgICBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSks
IG51bUdseXBocyk7CiAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIGZp
bGxDb2xvclNwYWNlKTsKICAgICB9CiAKLSAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50
LCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhw
b2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19j
YXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhz
KTsKICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50
LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50
LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNf
Y2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBo
cyk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQogICAgICAgICBjb250ZXh0LT5zZXRTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFj
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENHV2luLmNwcAkocmV2aXNpb24gMTMxMjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxOSAr
MTk3LDE5IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcKICAgICAg
ICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0
IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4K
ICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWln
aHQoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQtPnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9z
aXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwotICAgICAgICBDR0Nv
bnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAg
Q0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSkpLCBudW1HbHlwaHMpOwogICAgICAgICBpZiAoZm9udC0+c3ludGhldGljQm9sZE9m
ZnNldCgpKSB7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0
LCBwb2ludC54KCkgKyB0cmFuc2xhdGlvbi53aWR0aCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCkg
KyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHRyYW5zbGF0aW9uLmhl
aWdodCgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSks
IGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgICAgICAgICAgQ0dD
b250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSkpLCBudW1HbHlwaHMpOwogICAgICAgICB9CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgfQogCiAg
ICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgdHJhbnNs
YXRpb24ud2lkdGgoKSwgcG9pbnQueSgpICsgdHJhbnNsYXRpb24uaGVpZ2h0KCkpOwotICAgIENH
Q29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlw
aHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgIENH
Q29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlw
aHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2Vz
KGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICBpZiAoZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgp
KSB7CiAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50Lngo
KSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBv
aW50LnkoKSArIHRyYW5zbGF0aW9uLmhlaWdodCgpKTsKLSAgICAgICAgQ0dDb250ZXh0U2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIENHQ29udGV4dFNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSks
IHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwg
bnVtR2x5cGhzKTsKICAgICB9CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oCShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDE3IEBA
IGV4dGVybiBpbnQgKCp3a0dldE5TRXZlbnRNb21lbnR1bVBoYXNlKSgKIAogZXh0ZXJuIENUTGlu
ZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hhciog
KCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGlj
dGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5p
Q2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCopOwogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCitlbnVtIHsKKyAgICB3a0NURm9udFRyYW5zZm9ybUFwcGx5U2hh
cGluZyA9ICgxIDw8IDApLAorICAgIHdrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA9
ICgxIDw8IDEpCit9OworCit0eXBlZGVmIGludCB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnM7CisK
K2V4dGVybiBib29sICgqd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpKENURm9udFJlZiBmb250LCBD
R0dseXBoIGdseXBoc1tdLCBDR1NpemUgYWR2YW5jZXNbXSwgQ0ZJbmRleCBjb3VudCwgd2tDVEZv
bnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMpOworI2VuZGlmCisKICNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwNzAKIAogZXh0ZXJuIENUVHlwZXNldHRlclJlZiAoKndr
Q3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMpKGNvbnN0IFVu
aUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50
LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNv
bnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9u
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMTMxMjA1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEzNiw2ICsxMzYsMTAgQEAgaW50ICgqd2tHZXROU0V2ZW50TW9tZW50dW1QaGFzZSkoTlNFdmVu
dAogI2VuZGlmCiAKIENUTGluZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRl
cikoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4
KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgq
ZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCopOworI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorYm9vbCAoKndrQ1RGb250VHJhbnNm
b3JtR2x5cGhzKShDVEZvbnRSZWYgZm9udCwgQ0dHbHlwaCBnbHlwaHNbXSwgQ0dTaXplIGFkdmFu
Y2VzW10sIENGSW5kZXggY291bnQsIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zKTsK
KyNlbmRpZgorCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCiBD
VFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJB
bmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgs
IENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiks
IHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKiwgQ0ZE
aWN0aW9uYXJ5UmVmIG9wdGlvbnMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxMzEy
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAgYm9vbCBTVkdUZXh0TWV0cmlj
c0J1aWxkZXI6OmFkdmFuY2UoKQogCiB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6YWR2YW5j
ZVNpbXBsZVRleHQoKQogewotICAgIHVuc2lnbmVkIG1ldHJpY3NMZW5ndGggPSBtX3NpbXBsZVdp
ZHRoSXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxKTsKKyAgICBHbHlwaEJ1ZmZl
ciBnbHlwaEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBtZXRyaWNzTGVuZ3RoID0gbV9zaW1wbGVXaWR0
aEl0ZXJhdG9yLT5hZHZhbmNlKG1fdGV4dFBvc2l0aW9uICsgMSwgJmdseXBoQnVmZmVyKTsKICAg
ICBpZiAoIW1ldHJpY3NMZW5ndGgpIHsKICAgICAgICAgbV9jdXJyZW50TWV0cmljcyA9IFNWR1Rl
eHRNZXRyaWNzKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiAxMzEyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsOCBA
QCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQCiBmbG9hdCBTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlw
aE5hbWUpIGNvbnN0CiB7CiAgICAgV2lkdGhJdGVyYXRvciBpdCgmZm9udCwgcnVuKTsKLSAgICBj
aGFyc0NvbnN1bWVkICs9IGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKKyAgICBHbHlwaEJ1ZmZl
ciBnbHlwaEJ1ZmZlcjsKKyAgICBjaGFyc0NvbnN1bWVkICs9IGl0LmFkdmFuY2UocnVuLmxlbmd0
aCgpLCAmZ2x5cGhCdWZmZXIpOwogICAgIGdseXBoTmFtZSA9IGl0Lmxhc3RHbHlwaE5hbWUoKTsK
ICAgICByZXR1cm4gaXQucnVuV2lkdGhTb0ZhcigpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTMxMjA1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTItMTAtMTEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBXZWJLaXQyIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzEyNDcwNjgwPiBG
b2504oCZcyBmYXN0IGNvZGUgcGF0aCBkb2VzbuKAmXQgc3VwcG9ydCBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5
MTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAg
ICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6IEFkZGVkIHdrQ1RGb250VHJhbnNmb3Jt
R2x5cGhzLgorCiAyMDEyLTEwLTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgU3RvcCB1c2luZyBkZXByZWNhdGVkU2VuZCBpbnNpZGUgQ29ubmVjdGlv
bk1hYy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlz
aW9uIDEzMTIwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOSBA
QCB2b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKHZvaWQpCiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgICAgIElOSVQoQ0dDb250ZXh0RHJhd3NX
aXRoQ29ycmVjdFNoYWRvd09mZnNldHMpOwogI2VuZGlmCisjaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgICAgIElOSVQoQ1RGb250VHJhbnNmb3JtR2x5cGhz
KTsKKyNlbmRpZgogICAgICAgICBJTklUKENvcHlDT05ORUNUUHJveHlSZXNwb25zZSk7CiAgICAg
ICAgIElOSVQoQ29weU5TVVJMUmVzcG9uc2VTdGF0dXNMaW5lKTsKICAgICAgICAgSU5JVChDcmVh
dGVDVExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDEzMTIwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTExICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViS2l0L21hYyBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMjQ3
MDY4MD4gRm9udOKAmXMgZmFzdCBjb2RlIHBhdGggZG9lc27igJl0IHN1cHBvcnQga2VybmluZyBh
bmQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05OTExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAoSW5p
dFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UpOiBBZGRlZCB3a0NURm9udFRyYW5zZm9ybUdseXBocy4K
KwogMjAxMi0xMC0xMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgU3dpdGNoIFJlc291cmNlTG9hZGVyOjpyZXNvdXJjZURhdGEoKSBmcm9tIFNoYXJlZEJ1ZmZl
ciB0byBSZXNvdXJjZUJ1ZmZlcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMTMxMjA1KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw5IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2Uodm9pZCkKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
ODAKICAgICBJTklUKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKTsKICNl
bmRpZgorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIElO
SVQoQ1RGb250VHJhbnNmb3JtR2x5cGhzKTsKKyNlbmRpZgogICAgIElOSVQoQ29weUNGTG9jYWxp
emF0aW9uUHJlZmVycmVkTmFtZSk7CiAgICAgSU5JVChDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2Up
OwogICAgIElOSVQoQ29weU5TVVJMUmVzcG9uc2VTdGF0dXNMaW5lKTsK
</data>
<flag name="review"
          id="181447"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>