<?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>125718</bug_id>
          
          <creation_ts>2013-12-13 17:29:15 -0800</creation_ts>
          <short_desc>Faster implementation of text-decoration-skip: ink</short_desc>
          <delta_ts>2014-01-06 15:12:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959715</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-13 17:29:15 -0800</bug_when>
    <thetext>Faster implementation of text-decoration-skip: ink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959716</commentid>
    <comment_count>1</comment_count>
      <attachid>219212</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-13 17:40:43 -0800</bug_when>
    <thetext>Created attachment 219212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959718</commentid>
    <comment_count>2</comment_count>
      <attachid>219212</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-12-13 17:45:42 -0800</bug_when>
    <thetext>Comment on attachment 219212
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Faster implementation of text-decoration-skip: ink

Is it really faster?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959721</commentid>
    <comment_count>3</comment_count>
      <attachid>219212</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-13 17:55:36 -0800</bug_when>
    <thetext>Comment on attachment 219212
Patch

Attachment 219212 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/47508015</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959722</commentid>
    <comment_count>4</comment_count>
      <attachid>219212</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-13 18:01:13 -0800</bug_when>
    <thetext>Comment on attachment 219212
Patch

Attachment 219212 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/47478031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959724</commentid>
    <comment_count>5</comment_count>
      <attachid>219212</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-12-13 18:02:51 -0800</bug_when>
    <thetext>Comment on attachment 219212
Patch

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

&gt; Source/WebCore/platform/graphics/Font.h:104
&gt; +    DashArray getIntersectionPoints(const TextRun&amp;, const FloatPoint&amp; textOrigin, int from, int to, const FloatRect&amp; lineExtents) const;

What are &apos;from&apos; and &apos;to&apos;? Offsets, pixels?

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:333
&gt; +} LMGlyphPathInfo;

Give this a better name.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:354
&gt; +    if (e-&gt;type == kCGPathElementMoveToPoint) {
&gt; +        info-&gt;startingPoint = e-&gt;points[0];
&gt; +        info-&gt;currentPoint = e-&gt;points[0];
&gt; +    } else if (e-&gt;type == kCGPathElementAddLineToPoint) {
&gt; +        doIntersection = true;
&gt; +        point = e-&gt;points[0];
&gt; +    } else if (e-&gt;type == kCGPathElementAddQuadCurveToPoint) {
&gt; +        doIntersection = true;
&gt; +        point = e-&gt;points[1];
&gt; +    } else if (e-&gt;type == kCGPathElementAddCurveToPoint) {
&gt; +        doIntersection = true;
&gt; +        point = e-&gt;points[2];
&gt; +    } else if (e-&gt;type == kCGPathElementCloseSubpath) {
&gt; +        doIntersection = true;
&gt; +        point = info-&gt;startingPoint;

Can this be a switch?

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:356
&gt; +    if (doIntersection) {

Early return.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:360
&gt; +            if (x &lt; info-&gt;minX) info-&gt;minX = x;
&gt; +            if (x &gt; info-&gt;maxX) info-&gt;maxX = x;

Wrap.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:365
&gt; +            if (x &lt; info-&gt;minX) info-&gt;minX = x;
&gt; +            if (x &gt; info-&gt;maxX) info-&gt;maxX = x;

Wrap.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:376
&gt; +    CGAffineTransform translation;

Declare at first use.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:384
&gt; +        LMGlyphPathInfo info = {{0.0, 0.0}, {0.0, 0.0}, lineExtents.y(), lineExtents.y() + lineExtents.height(), 1e7, -1e7};

Why not give it a constructor?

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:385
&gt; +        CGPathRef path = CTFontCreatePathForGlyph(glyphBuffer.fontDataAt(i)-&gt;platformData().ctFont(), glyphBuffer.glyphAt(i), &amp;translation);

RetainPtr?

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:395
&gt; +    return output;  

We normally call this &apos;result&apos;.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:73
&gt; +static DashArray formatTextIntersectionsForSkipInk(const DashArray&amp; intersections, float dilationAmount, float totalWidth)

format -&gt; adjust?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:80
&gt; +        tuples.append(std::make_pair(*i - dilationAmount, *(i+1) + dilationAmount));

Spaces around +

&gt; Source/WebCore/rendering/InlineTextBox.cpp:91
&gt; +            float&amp; secondStart = i-&gt;first;
&gt; +            float&amp; secondEnd = i-&gt;second;

Why references?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:106
&gt; +    DashArray output;

result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959770</commentid>
    <comment_count>6</comment_count>
      <attachid>219212</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-13 21:24:05 -0800</bug_when>
    <thetext>Comment on attachment 219212
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.h:104
&gt;&gt; +    DashArray getIntersectionPoints(const TextRun&amp;, const FloatPoint&amp; textOrigin, int from, int to, const FloatRect&amp; lineExtents) const;
&gt; 
&gt; What are &apos;from&apos; and &apos;to&apos;? Offsets, pixels?

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:333
&gt;&gt; +} LMGlyphPathInfo;
&gt; 
&gt; Give this a better name.

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:354
&gt;&gt; +        point = info-&gt;startingPoint;
&gt; 
&gt; Can this be a switch?

Yep!

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:356
&gt;&gt; +    if (doIntersection) {
&gt; 
&gt; Early return.

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:360
&gt;&gt; +            if (x &gt; info-&gt;maxX) info-&gt;maxX = x;
&gt; 
&gt; Wrap.

Done. I think. If I understand you correctly.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:365
&gt;&gt; +            if (x &gt; info-&gt;maxX) info-&gt;maxX = x;
&gt; 
&gt; Wrap.

Done. I think. If I understand you correctly.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:376
&gt;&gt; +    CGAffineTransform translation;
&gt; 
&gt; Declare at first use.

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:384
&gt;&gt; +        LMGlyphPathInfo info = {{0.0, 0.0}, {0.0, 0.0}, lineExtents.y(), lineExtents.y() + lineExtents.height(), 1e7, -1e7};
&gt; 
&gt; Why not give it a constructor?

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:385
&gt;&gt; +        CGPathRef path = CTFontCreatePathForGlyph(glyphBuffer.fontDataAt(i)-&gt;platformData().ctFont(), glyphBuffer.glyphAt(i), &amp;translation);
&gt; 
&gt; RetainPtr?

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:395
&gt;&gt; +    return output;  
&gt; 
&gt; We normally call this &apos;result&apos;.

Done.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:73
&gt;&gt; +static DashArray formatTextIntersectionsForSkipInk(const DashArray&amp; intersections, float dilationAmount, float totalWidth)
&gt; 
&gt; format -&gt; adjust?

I actually don&apos;t think that&apos;s quite right. The input is the coordinates of the underline intersections, the output is the coordinates of where skip:ink should draw underlines. I&apos;ve renamed it to something that&apos;s hopefully clearer.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:80
&gt;&gt; +        tuples.append(std::make_pair(*i - dilationAmount, *(i+1) + dilationAmount));
&gt; 
&gt; Spaces around +

Done.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:91
&gt;&gt; +            float&amp; secondEnd = i-&gt;second;
&gt; 
&gt; Why references?

firstEnd needs to be, because line 95 writes to it. However, the other two don&apos;t need to be. Done.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:106
&gt;&gt; +    DashArray output;
&gt; 
&gt; result.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959772</commentid>
    <comment_count>7</comment_count>
      <attachid>219233</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-13 21:35:09 -0800</bug_when>
    <thetext>Created attachment 219233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959776</commentid>
    <comment_count>8</comment_count>
      <attachid>219233</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-13 21:43:52 -0800</bug_when>
    <thetext>Comment on attachment 219233
Patch

Attachment 219233 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/49038039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959778</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-13 21:48:50 -0800</bug_when>
    <thetext>What is the benchmark being used to determine relative performance? How much faster is this implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959780</commentid>
    <comment_count>10</comment_count>
      <attachid>219233</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-13 21:54:05 -0800</bug_when>
    <thetext>Comment on attachment 219233
Patch

Attachment 219233 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/47178263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959786</commentid>
    <comment_count>11</comment_count>
      <attachid>219233</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-12-13 22:26:29 -0800</bug_when>
    <thetext>Comment on attachment 219233
Patch

Attachment 219233 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/49038046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959809</commentid>
    <comment_count>12</comment_count>
      <attachid>219245</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-13 23:52:32 -0800</bug_when>
    <thetext>Created attachment 219245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959810</commentid>
    <comment_count>13</comment_count>
      <attachid>219245</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-14 00:46:58 -0800</bug_when>
    <thetext>Comment on attachment 219245
Patch

Attachment 219245 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/47178297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960220</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 14:14:31 -0800</bug_when>
    <thetext>Looks like someone killed the efl-wk2 bot as it was compiling, causing it to show up as red. I&apos;ll resubmit the same patch again to re-trigger that bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960224</commentid>
    <comment_count>15</comment_count>
      <attachid>219352</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 14:32:49 -0800</bug_when>
    <thetext>Created attachment 219352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960239</commentid>
    <comment_count>16</comment_count>
      <attachid>219352</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-16 14:50:13 -0800</bug_when>
    <thetext>Comment on attachment 219352
Patch

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

review- because of the storage leak from forgetting to use adoptCF.

&gt; Source/WebCore/platform/graphics/Font.cpp:317
&gt; +#if !PLATFORM(MAC)
&gt; +DashArray Font::getIntersectionPoints(const TextRun&amp; run, const FloatPoint&amp; textOrigin, int textRunStartIndex, int textRunEndIndex, const FloatRect&amp; lineExtents) const

We shouldn’t do this. This function should just be left out and the call site should also be left out. The only reason this exists is because of the redirection in TextPainter, and if we ifdef that then we’ll be better off.

&gt; Source/WebCore/platform/graphics/Font.cpp:324
&gt; +    UNUSED_PARAM(run);
&gt; +    UNUSED_PARAM(textOrigin);
&gt; +    UNUSED_PARAM(textRunStartIndex);
&gt; +    UNUSED_PARAM(textRunEndIndex);
&gt; +    UNUSED_PARAM(lineExtents);
&gt; +    return DashArray();

I suggest just omitting all the argument names instead of all those UNUSED_PARAM here. But also, don’t we want a compile time error for these other platforms?

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:326
&gt; +typedef struct _GlyphIterationState {

This should just be:

    struct GlyphIterationState

All that stuff with the leading underline and typedef is C-specific stuff that’s not needed in C++.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:327
&gt; +    _GlyphIterationState(CGPoint _startingPoint, CGPoint _currentPoint, CGFloat _y1, CGFloat _y2, CGFloat _minX, CGFloat _maxX)

No need for all these underscores. Everything can just be named normally; no problem having the arguments named the same thing as the members they initialize.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:352
&gt; +    GlyphIterationState *info = (GlyphIterationState *)vinfo;

Idiom for our WebKit C++ code would be:

     auto&amp; state = *static_cast&lt;GlyphIterationState*&gt;(stateAsVoidPointer);

Use a reference, not a pointer. Use static_cast, not a C-style cast. Don’t repeat the type name twice. If the type is named state, then the variable should be named “state”, not “info”.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:391
&gt; +DashArray Font::getIntersectionPoints(const TextRun&amp; run, const FloatPoint&amp; textOrigin, int textRunStartIndex, int textRunEndIndex, const FloatRect&amp; lineExtents) const

This should be named intersectionPoints. We use &quot;get&quot; in function names only when they use out arguments. Functions with return values use noun phrases that describe the return value.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:402
&gt; +    for (int i = 0; i &lt; glyphBuffer.size(); i++) {

Is int the right type here? Also, normally we do ++i.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:404
&gt; +        RetainPtr&lt;CGPathRef&gt; path = CTFontCreatePathForGlyph(glyphBuffer.fontDataAt(i)-&gt;platformData().ctFont(), glyphBuffer.glyphAt(i), &amp;translation);

This leaks the path. Need to use adoptCF to avoid leaking.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:405
&gt; +        CGPathApply(path.get(), (void *)&amp;info, &amp;findPathIntersections);

There should not be a typecast to (void *) needed here.

&gt; Source/WebCore/rendering/TextPainter.h:71
&gt; +    DashArray getIntersectionPoints(const FloatRect&amp; lineExtents, int start, int end);

Since this is currently Mac-only, I suggest putting this inside some kind of #if. Ideally a feature #if for text-decoration-skip support. Or at least PLATFORM(MAC).

Or maybe we could just provide a getter that returns the Font, and sidestep all the rest of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960302</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 16:39:25 -0800</bug_when>
    <thetext>I&apos;m gathering numbers regarding timing drawing code today. Will be done by COB.
(In reply to comment #9)
&gt; What is the benchmark being used to determine relative performance? How much faster is this implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960338</commentid>
    <comment_count>18</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 18:06:04 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; I&apos;m gathering numbers regarding timing drawing code today. Will be done by COB.
&gt; (In reply to comment #9)
&gt; &gt; What is the benchmark being used to determine relative performance? How much faster is this implementation?

To test this stuff I timed how long InlineTextBox::paint() takes on average while drawing a full page of text with skip:ink underlines. Numbers normalized to the no-skipping case:

No skipping: 1x (baseline)
This patch: 2.71x
IOSurface-based masking: 48.32x

If you like I can also run PLT, though I&apos;m not sure if that&apos;s quite as relevant as the above test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960340</commentid>
    <comment_count>19</comment_count>
      <attachid>219352</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 18:23:42 -0800</bug_when>
    <thetext>Comment on attachment 219352
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:317
&gt;&gt; +DashArray Font::getIntersectionPoints(const TextRun&amp; run, const FloatPoint&amp; textOrigin, int textRunStartIndex, int textRunEndIndex, const FloatRect&amp; lineExtents) const
&gt; 
&gt; We shouldn’t do this. This function should just be left out and the call site should also be left out. The only reason this exists is because of the redirection in TextPainter, and if we ifdef that then we’ll be better off.

Done.

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:324
&gt;&gt; +    return DashArray();
&gt; 
&gt; I suggest just omitting all the argument names instead of all those UNUSED_PARAM here. But also, don’t we want a compile time error for these other platforms?

Irrelevant due to above comment

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:326
&gt;&gt; +typedef struct _GlyphIterationState {
&gt; 
&gt; This should just be:
&gt; 
&gt;     struct GlyphIterationState
&gt; 
&gt; All that stuff with the leading underline and typedef is C-specific stuff that’s not needed in C++.

Wow. Yeah. Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:327
&gt;&gt; +    _GlyphIterationState(CGPoint _startingPoint, CGPoint _currentPoint, CGFloat _y1, CGFloat _y2, CGFloat _minX, CGFloat _maxX)
&gt; 
&gt; No need for all these underscores. Everything can just be named normally; no problem having the arguments named the same thing as the members they initialize.

Cool; I didn&apos;t know that. Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:352
&gt;&gt; +    GlyphIterationState *info = (GlyphIterationState *)vinfo;
&gt; 
&gt; Idiom for our WebKit C++ code would be:
&gt; 
&gt;      auto&amp; state = *static_cast&lt;GlyphIterationState*&gt;(stateAsVoidPointer);
&gt; 
&gt; Use a reference, not a pointer. Use static_cast, not a C-style cast. Don’t repeat the type name twice. If the type is named state, then the variable should be named “state”, not “info”.

Cool. Thanks for these tips. Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:391
&gt;&gt; +DashArray Font::getIntersectionPoints(const TextRun&amp; run, const FloatPoint&amp; textOrigin, int textRunStartIndex, int textRunEndIndex, const FloatRect&amp; lineExtents) const
&gt; 
&gt; This should be named intersectionPoints. We use &quot;get&quot; in function names only when they use out arguments. Functions with return values use noun phrases that describe the return value.

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:402
&gt;&gt; +    for (int i = 0; i &lt; glyphBuffer.size(); i++) {
&gt; 
&gt; Is int the right type here? Also, normally we do ++i.

GlyphBuffer::size() returns an int. GlyphBuffer::fontDataAt() takes an int. GlyphBuffer::advanceAt() takes an int as well.

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:404
&gt;&gt; +        RetainPtr&lt;CGPathRef&gt; path = CTFontCreatePathForGlyph(glyphBuffer.fontDataAt(i)-&gt;platformData().ctFont(), glyphBuffer.glyphAt(i), &amp;translation);
&gt; 
&gt; This leaks the path. Need to use adoptCF to avoid leaking.

Done. This is embarrassing.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:405
&gt;&gt; +        CGPathApply(path.get(), (void *)&amp;info, &amp;findPathIntersections);
&gt; 
&gt; There should not be a typecast to (void *) needed here.

Done.

&gt;&gt; Source/WebCore/rendering/TextPainter.h:71
&gt;&gt; +    DashArray getIntersectionPoints(const FloatRect&amp; lineExtents, int start, int end);
&gt; 
&gt; Since this is currently Mac-only, I suggest putting this inside some kind of #if. Ideally a feature #if for text-decoration-skip support. Or at least PLATFORM(MAC).
&gt; 
&gt; Or maybe we could just provide a getter that returns the Font, and sidestep all the rest of this?

Done.

I&apos;m not quite sure what you mean by &quot;a getter that returns the Font.&quot; What do you mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960345</commentid>
    <comment_count>20</comment_count>
      <attachid>219378</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 18:30:49 -0800</bug_when>
    <thetext>Created attachment 219378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960346</commentid>
    <comment_count>21</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 18:32:15 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; I&apos;m gathering numbers regarding timing drawing code today. Will be done by COB.
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; What is the benchmark being used to determine relative performance? How much faster is this implementation?
&gt; 
&gt; To test this stuff I timed how long InlineTextBox::paint() takes on average while drawing a full page of text with skip:ink underlines. Numbers normalized to the no-skipping case:
&gt; 
&gt; No skipping: 1x (baseline)
&gt; This patch: 2.71x
&gt; IOSurface-based masking: 48.32x
&gt; 
&gt; If you like I can also run PLT, though I&apos;m not sure if that&apos;s quite as relevant as the above test.

BTW: 20 page reloads in each of the 3 cases (to make the averages more accurate)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960367</commentid>
    <comment_count>22</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-16 19:50:41 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; I&apos;m gathering numbers regarding timing drawing code today. Will be done by COB.
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; What is the benchmark being used to determine relative performance? How much faster is this implementation?
&gt; &gt; 
&gt; &gt; To test this stuff I timed how long InlineTextBox::paint() takes on average while drawing a full page of text with skip:ink underlines. Numbers normalized to the no-skipping case:
&gt; &gt; 
&gt; &gt; No skipping: 1x (baseline)
&gt; &gt; This patch: 2.71x
&gt; &gt; IOSurface-based masking: 48.32x
&gt; &gt; 
&gt; &gt; If you like I can also run PLT, though I&apos;m not sure if that&apos;s quite as relevant as the above test.
&gt; 
&gt; BTW: 20 page reloads in each of the 3 cases (to make the averages more accurate)

That certainly is quite the speedup over the masking approach.  I would like to see PLT numbers, especially if we are considering turning this on by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960382</commentid>
    <comment_count>23</comment_count>
      <attachid>219378</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-16 20:37:11 -0800</bug_when>
    <thetext>Comment on attachment 219378
Patch

Attachment 219378 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/46338205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960387</commentid>
    <comment_count>24</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 21:20:35 -0800</bug_when>
    <thetext>Updated metrics for synchronous drawing (so I&apos;m not just measuring how long it takes to put commands into a queue)

No skipping: 1x (baseline)
This patch: 2.19x
IOSurface-based masking: 21.38x</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960388</commentid>
    <comment_count>25</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 21:28:40 -0800</bug_when>
    <thetext>For completeness: Using unaccelerated IOSurfaces (bitmaps in main memory): 8.78x</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960409</commentid>
    <comment_count>26</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-12-16 22:15:04 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; For completeness: Using unaccelerated IOSurfaces (bitmaps in main memory): 8.78x

s/IOSurfaces/ImageBuffers/, I hope? There are no unaccelerated IOSurfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960423</commentid>
    <comment_count>27</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 23:52:31 -0800</bug_when>
    <thetext>Oops. Yes, Tim. Unaccelerated ImageBuffers.

PLT has the same performance with this patch (and with skip:ink applied to all underlines) as without this patch (the times are within the error bound). The IOSurface-based approach has a PLT slowdown of 4%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960527</commentid>
    <comment_count>28</comment_count>
      <attachid>219378</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-17 09:09:47 -0800</bug_when>
    <thetext>Comment on attachment 219378
Patch

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

&gt; Source/WebCore/platform/graphics/Font.h:28
&gt; +#include &quot;DashArray.h&quot;

We don’t need to include the DashArray header just to declare a function with a DashArray return type. That can and should be done by just adding a forward declaration to this header.

&gt; Source/WebCore/platform/graphics/Font.h:106
&gt; +#if PLATFORM(MAC)
&gt; +    DashArray intersectionPoints(const TextRun&amp;, const FloatPoint&amp; textOrigin, int from, int to, const FloatRect&amp; lineExtents) const;
&gt; +#endif

I’m not sure everyone else agrees with me, but I prefer to have functions like this be unconditional in the header even when the implementation is not always there. I think it’s tidier to not pollute the header with the conditionals; it does no harm to compile declarations of functions that aren’t defined on a particular platform as long as we don’t try to call the function on platforms where it’s not implemented, the interface itself is platform-independent and we don’t bother compiling an empty function body somewhere.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:132
&gt; +    DashArray intersections;
&gt; +#if PLATFORM(MAC)
&gt; +    intersections = textPainter.intersectionPoints(underlineBoundingBox, m_start, m_start + m_len);
&gt; +#endif
&gt; +    DashArray a = translateIntersectionPointsToSkipInkBoundaries(intersections, underlineBoundingBox.height(), width);

I don’t understand this conditional. Is there a point in compiling the rest of this function if we can’t compute intersection points? Does this function do any good without the intersectionPoints function? If not, then I suggest we put this feature under a more appropriate #if rather than just ENABLE(CSS3_TEXT_DECORATION).

The change log sheds no light on this point.

Generally it’s mixed-up to have the functions needed for “skip ink” to be partly under PLATFORM(MAC) #if and partly under ENABLE(CSS3_TEXT_DECORATION) #if. We should think this through and do something as logical as possible, and as little PLATFORM(MAC)-ish as possible. For example, maybe this should be under a ENABLE(CSS3_TEXT_DECORATION_SKIP_INK) conditional. I’m not saying that conditional needs to be separately configurable on the command line, but rather that we find one place to set it, and then use it elsewhere rather than literally writing PLATFORM(MAC) at each conditional site.

&gt; Source/WebCore/rendering/TextPainter.h:27
&gt; +#include &quot;DashArray.h&quot;

Same thing about not needing an include just to declare a function with a return value.

&gt; Source/WebCore/rendering/TextPainter.h:71
&gt; +#if PLATFORM(MAC)

Same thing about not needing a conditional where a function is declared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960652</commentid>
    <comment_count>29</comment_count>
      <attachid>219378</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-17 13:23:32 -0800</bug_when>
    <thetext>Comment on attachment 219378
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.h:28
&gt;&gt; +#include &quot;DashArray.h&quot;
&gt; 
&gt; We don’t need to include the DashArray header just to declare a function with a DashArray return type. That can and should be done by just adding a forward declaration to this header.

DashArray is a typedef, so it can&apos;t be forward declared.

&gt;&gt; Source/WebCore/platform/graphics/Font.h:106
&gt;&gt; +#endif
&gt; 
&gt; I’m not sure everyone else agrees with me, but I prefer to have functions like this be unconditional in the header even when the implementation is not always there. I think it’s tidier to not pollute the header with the conditionals; it does no harm to compile declarations of functions that aren’t defined on a particular platform as long as we don’t try to call the function on platforms where it’s not implemented, the interface itself is platform-independent and we don’t bother compiling an empty function body somewhere.

Done.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:132
&gt;&gt; +    DashArray a = translateIntersectionPointsToSkipInkBoundaries(intersections, underlineBoundingBox.height(), width);
&gt; 
&gt; I don’t understand this conditional. Is there a point in compiling the rest of this function if we can’t compute intersection points? Does this function do any good without the intersectionPoints function? If not, then I suggest we put this feature under a more appropriate #if rather than just ENABLE(CSS3_TEXT_DECORATION).
&gt; 
&gt; The change log sheds no light on this point.
&gt; 
&gt; Generally it’s mixed-up to have the functions needed for “skip ink” to be partly under PLATFORM(MAC) #if and partly under ENABLE(CSS3_TEXT_DECORATION) #if. We should think this through and do something as logical as possible, and as little PLATFORM(MAC)-ish as possible. For example, maybe this should be under a ENABLE(CSS3_TEXT_DECORATION_SKIP_INK) conditional. I’m not saying that conditional needs to be separately configurable on the command line, but rather that we find one place to set it, and then use it elsewhere rather than literally writing PLATFORM(MAC) at each conditional site.

Good idea. Done.

&gt;&gt; Source/WebCore/rendering/TextPainter.h:27
&gt;&gt; +#include &quot;DashArray.h&quot;
&gt; 
&gt; Same thing about not needing an include just to declare a function with a return value.

DashArray is a typedef, so it can&apos;t be forward declared.

&gt;&gt; Source/WebCore/rendering/TextPainter.h:71
&gt;&gt; +#if PLATFORM(MAC)
&gt; 
&gt; Same thing about not needing a conditional where a function is declared.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960664</commentid>
    <comment_count>30</comment_count>
      <attachid>219450</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-17 14:01:16 -0800</bug_when>
    <thetext>Created attachment 219450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961751</commentid>
    <comment_count>31</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-19 22:44:02 -0800</bug_when>
    <thetext>Darin already r+&apos;ed this, and I have addressed his comments. Is it possible to get a cq+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961754</commentid>
    <comment_count>32</comment_count>
      <attachid>219450</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-12-19 22:53:25 -0800</bug_when>
    <thetext>Comment on attachment 219450
Patch

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

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:350
&gt; +static bool findIntersectionPoint(float y, CGPoint p1, CGPoint p2, CGFloat&amp; x)
&gt; +{
&gt; +    x = p1.x + (y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y);
&gt; +    return (p1.y &lt; y &amp;&amp; p2.y &gt; y) || (p1.y &gt; y &amp;&amp; p2.y &lt; y);
&gt; +}

I wish we had a GeometryUtilities.h :\

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:352
&gt; +static void findPathIntersections(void* stateAsVoidPointer, const CGPathElement* e)

I would like to see a comment saying what this function does. It&apos;s very hard to figure out.

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:393
&gt; +DashArray Font::intersectionPoints(const TextRun&amp; run, const FloatPoint&amp; textOrigin, int textRunStartIndex, int textRunEndIndex, const FloatRect&amp; lineExtents) const

&quot;intersectionPoints&quot;: intersection with what?

&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:405
&gt; +        GlyphIterationState info = GlyphIterationState(CGPointMake(0, 0), CGPointMake(0, 0), lineExtents.y(), lineExtents.y() + lineExtents.height(), 1e7, -1e7);

1e7, -1e7? Don&apos;t we have FLOAT_MAX or CGFLOATMAX you can use?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961803</commentid>
    <comment_count>33</comment_count>
      <attachid>219450</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-12-20 02:57:12 -0800</bug_when>
    <thetext>Comment on attachment 219450
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:350
&gt;&gt; +}
&gt; 
&gt; I wish we had a GeometryUtilities.h :\

There&apos;s a lot of code like this in FloatPoint.cpp. Though more verbose and readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962132</commentid>
    <comment_count>34</comment_count>
      <attachid>219450</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-20 17:39:19 -0800</bug_when>
    <thetext>Comment on attachment 219450
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:352
&gt;&gt; +static void findPathIntersections(void* stateAsVoidPointer, const CGPathElement* e)
&gt; 
&gt; I would like to see a comment saying what this function does. It&apos;s very hard to figure out.

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:393
&gt;&gt; +DashArray Font::intersectionPoints(const TextRun&amp; run, const FloatPoint&amp; textOrigin, int textRunStartIndex, int textRunEndIndex, const FloatRect&amp; lineExtents) const
&gt; 
&gt; &quot;intersectionPoints&quot;: intersection with what?

Done.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontMac.mm:405
&gt;&gt; +        GlyphIterationState info = GlyphIterationState(CGPointMake(0, 0), CGPointMake(0, 0), lineExtents.y(), lineExtents.y() + lineExtents.height(), 1e7, -1e7);
&gt; 
&gt; 1e7, -1e7? Don&apos;t we have FLOAT_MAX or CGFLOATMAX you can use?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964763</commentid>
    <comment_count>35</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-01-06 14:27:36 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/160951</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964774</commentid>
    <comment_count>36</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-01-06 15:12:39 -0800</bug_when>
    <thetext>*** Bug 124394 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219212</attachid>
            <date>2013-12-13 17:40:43 -0800</date>
            <delta_ts>2013-12-13 21:35:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125718-20131213174049.patch</filename>
            <type>text/plain</type>
            <size>16179</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM5ZTZjNTk0NWM4NWQ1
NTNkYTI2YTk3OTAzYmI2NjE2ZDhlNGIzNy4uOTM2NmMyNGY3NzA1YTg2NjA3YmNjNTdkMDFlOWZl
NTQ5NDQ0MDQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTEyLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRmFzdGVyIGlt
cGxlbWVudGF0aW9uIG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IGltcGxlbWVudGF0aW9u
IG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZXh0cmFjdHMKKyAgICAgICAgZWFjaCBnbHlw
aCBpbnRvIGEgcGF0aCwgdGhlbiBkZWNvbXBvc2VzIGVhY2ggcGF0aCBpbnRvIGEgc2VyaWVzCisg
ICAgICAgIG9mIGNvbnRvdXJzLiBJdCB0aGVuIGludGVyc2VjdHMgZWFjaCBjb250b3VyIHdpdGgg
dGhlIHRvcCBhbmQKKyAgICAgICAgYm90dG9tIG9mIHRoZSB1bmRlcmxpbmUgKGJ5IGFwcHJveGlt
YXRpbmcgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUpLgorICAgICAgICBJdCB0aGVuIGRyYXdzIHVu
ZGVybGluZXMgaW4gYmV0d2VlbiB0aGVzZSBpbnRlcnNlY3Rpb24gcmVnaW9ucy4KKworICAgICAg
ICBUZXN0cyBmb3IgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBhbHJlYWR5IGV4aXN0IGluCisg
ICAgICAgIGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1kZWNvcmF0aW9uL3RleHQtZGVjb3JhdGlv
bi1za2lwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50cyk6IE5ldyBkZWZhdWx0IGZ1bmN0
aW9uCisgICAgICAgIHRvIGdldCB0aGUgcGxhY2VzIHdoZXJlIGFuIHVuZGVybGluZSB3b3VsZCBp
bnRlcnNlY3QgYSBUZXh0UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
U2lnbmF0dXJlIG9mIG5ldyBmdW5jdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBhdGhJbnRlcnNlY3Rpb25zKTog
SGFuZGxlcyBhIHNpbmdsZSBjb250b3VyCisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMpOiBJbXBsZW1lbnRzIHRoZSBsb2dpYyBkZXNjcmliZWQKKyAgICAgICAg
YWJvdmUKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlVHVwbGVzKTogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3RkOjpzb3J0
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRUZXh0SW50ZXJzZWN0aW9uc0ZvclNraXBJbmspOiBE
byBzb21lIHBvc3QtcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgaW50ZXJzZWN0aW9uIHJlZ2lv
bnMgKGRpbGF0aW5nIHRoZW0sIGV0Yy4pCisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERyYXdzIGEgc2VxdWVuY2Ugb2YgdW5kZXJsaW5lcyBpbnN0ZWFkCisgICAgICAg
IG9mIG9uZSBsb25nIG9uZQorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKTogQ2FsbCBkcmF3U2tpcElua1VuZGVybGluZQorICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Z2V0SW50
ZXJzZWN0aW9uUG9pbnRzKTogRm9yd2FyZCB0byBXZWJDb3JlOjpGb250CisgICAgICAgIHdpdGgg
c29tZSBpbnRlcm5hbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisKIDIwMTMtMTItMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXBsYWNlIHVzZXMgb2YgV1RGOjpCaXRBcnJheSB3aXRoIHN0ZDo6Yml0c2V0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGEyYjgwYTBlMTc5
MmVkYWQ2YjU4NWNhZmNhZjZhMWIyNTkxYTZjMzQuLmQwZmUwNDQ1YmYxY2FlMTgxNDRhZTE1Y2Vh
NmU1MTBmZmQwZmE1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCkBAIC0zMTMsNiArMzEzLDEzIEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pCiAgICAgcmV0
dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oTUFDKQorRGFzaEFycmF5IEZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50
cyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0Cit7CisgICAg
cmV0dXJuIERhc2hBcnJheSgpOworfQorI2VuZGlmCisKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDlmYjU3OWY2ZDQ3MWMwMGY0OGMzNmVh
ZGFkZjYzMTRkYTZjODMwMTUuLmE1MDQ1NjZiMzcyMGUyOTUzZjYxNWM5OGNkMmIxOTg4ZWUzZDI3
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTI1LDYgKzI1
LDcgQEAKICNpZm5kZWYgRm9udF9oCiAjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRGFzaEFy
cmF5LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBo
cy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCkBAIC0xMDAsNiArMTAxLDggQEAgcHVi
bGljOgogICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwogICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OwogCisgICAgRGFzaEFycmF5IGdldEludGVyc2VjdGlvblBvaW50
cyhjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGZyb20s
IGludCB0bywgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKICAgICBmbG9h
dCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3
aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFt
ZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRNYWMubW0KaW5kZXggNzE4YzE2ZDk2MDU2MTJjOTA4OWQwNDAzZDYwYTAzMWQ4ZjMwNDFmYy4u
ODg5Yjg2NWRmNTJlMDU3NTExMWQxZGQ5ZmFmZTA3ZmJjNWRhNjdhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAgLTMyMyw0ICszMjMs
NzYgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnMKICNlbmRpZgogfQogCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgQ0dQb2ludCBzdGFydGluZ1BvaW50OworICAgIENHUG9pbnQgY3VycmVudFBvaW50
OworICAgIENHRmxvYXQgeTE7CisgICAgQ0dGbG9hdCB5MjsKKyAgICBDR0Zsb2F0IG1pblg7Cisg
ICAgQ0dGbG9hdCBtYXhYOworfSBMTUdseXBoUGF0aEluZm87CisKK3N0YXRpYyB2b2lkIGZpbmRQ
YXRoSW50ZXJzZWN0aW9ucyh2b2lkKiB2aW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCogZSkKK3sK
KyAgICBMTUdseXBoUGF0aEluZm8gKmluZm8gPSAoTE1HbHlwaFBhdGhJbmZvICopdmluZm87Cisg
ICAgYm9vbCBkb0ludGVyc2VjdGlvbiA9IGZhbHNlOworICAgIENHUG9pbnQgcG9pbnQgPSBDR1Bv
aW50WmVybzsKKyAgICBpZiAoZS0+dHlwZSA9PSBrQ0dQYXRoRWxlbWVudE1vdmVUb1BvaW50KSB7
CisgICAgICAgIGluZm8tPnN0YXJ0aW5nUG9pbnQgPSBlLT5wb2ludHNbMF07CisgICAgICAgIGlu
Zm8tPmN1cnJlbnRQb2ludCA9IGUtPnBvaW50c1swXTsKKyAgICB9IGVsc2UgaWYgKGUtPnR5cGUg
PT0ga0NHUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludCkgeworICAgICAgICBkb0ludGVyc2VjdGlv
biA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRzWzBdOworICAgIH0gZWxzZSBpZiAo
ZS0+dHlwZSA9PSBrQ0dQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQpIHsKKyAgICAgICAg
ZG9JbnRlcnNlY3Rpb24gPSB0cnVlOworICAgICAgICBwb2ludCA9IGUtPnBvaW50c1sxXTsKKyAg
ICB9IGVsc2UgaWYgKGUtPnR5cGUgPT0ga0NHUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQpIHsK
KyAgICAgICAgZG9JbnRlcnNlY3Rpb24gPSB0cnVlOworICAgICAgICBwb2ludCA9IGUtPnBvaW50
c1syXTsKKyAgICB9IGVsc2UgaWYgKGUtPnR5cGUgPT0ga0NHUGF0aEVsZW1lbnRDbG9zZVN1YnBh
dGgpIHsKKyAgICAgICAgZG9JbnRlcnNlY3Rpb24gPSB0cnVlOworICAgICAgICBwb2ludCA9IGlu
Zm8tPnN0YXJ0aW5nUG9pbnQ7CisgICAgfQorICAgIGlmIChkb0ludGVyc2VjdGlvbikgeworICAg
ICAgICBpZiAoKGluZm8tPmN1cnJlbnRQb2ludC55IDwgaW5mby0+eTEgJiYgcG9pbnQueSA+IGlu
Zm8tPnkxKSB8fCAoaW5mby0+Y3VycmVudFBvaW50LnkgPiBpbmZvLT55MSAmJiBwb2ludC55IDwg
aW5mby0+eTEpKSB7CisgICAgICAgICAgICBDR0Zsb2F0IHggPSBpbmZvLT5jdXJyZW50UG9pbnQu
eCArIChpbmZvLT55MSAtIGluZm8tPmN1cnJlbnRQb2ludC55KSAqIChwb2ludC54IC0gaW5mby0+
Y3VycmVudFBvaW50LngpIC8gKHBvaW50LnkgLSBpbmZvLT5jdXJyZW50UG9pbnQueSk7CisgICAg
ICAgICAgICBpZiAoeCA8IGluZm8tPm1pblgpIGluZm8tPm1pblggPSB4OworICAgICAgICAgICAg
aWYgKHggPiBpbmZvLT5tYXhYKSBpbmZvLT5tYXhYID0geDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoKGluZm8tPmN1cnJlbnRQb2ludC55IDwgaW5mby0+eTIgJiYgcG9pbnQueSA+IGluZm8tPnky
KSB8fCAoaW5mby0+Y3VycmVudFBvaW50LnkgPiBpbmZvLT55MiAmJiBwb2ludC55IDwgaW5mby0+
eTIpKSB7CisgICAgICAgICAgICBDR0Zsb2F0IHggPSBpbmZvLT5jdXJyZW50UG9pbnQueCArIChp
bmZvLT55MiAtIGluZm8tPmN1cnJlbnRQb2ludC55KSAqIChwb2ludC54IC0gaW5mby0+Y3VycmVu
dFBvaW50LngpIC8gKHBvaW50LnkgLSBpbmZvLT5jdXJyZW50UG9pbnQueSk7CisgICAgICAgICAg
ICBpZiAoeCA8IGluZm8tPm1pblgpIGluZm8tPm1pblggPSB4OworICAgICAgICAgICAgaWYgKHgg
PiBpbmZvLT5tYXhYKSBpbmZvLT5tYXhYID0geDsKKyAgICAgICAgfQorICAgICAgICBpbmZvLT5j
dXJyZW50UG9pbnQgPSBwb2ludDsKKyAgICB9Cit9CisKK0Rhc2hBcnJheSBGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0
T3JpZ2luLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBj
b25zdAoreworICAgIGZsb2F0IGRlbHRhWDsKKyAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
KyAgICBEYXNoQXJyYXkgb3V0cHV0OworICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9u
OworICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXgpCisgICAgICAgIGRlbHRhWCA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZl
cik7CisgICAgZWxzZQorICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNv
bXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyKTsKKyAgICB0cmFuc2xhdGlvbiA9
IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpICsgZGVsdGFY
LCB0ZXh0T3JpZ2luLnkoKSk7CisgICAgdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVNj
YWxlKHRyYW5zbGF0aW9uLCAxLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbHlwaEJ1
ZmZlci5zaXplKCk7IGkrKykgeworICAgICAgICBMTUdseXBoUGF0aEluZm8gaW5mbyA9IHt7MC4w
LCAwLjB9LCB7MC4wLCAwLjB9LCBsaW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSArIGxp
bmVFeHRlbnRzLmhlaWdodCgpLCAxZTcsIC0xZTd9OworICAgICAgICBDR1BhdGhSZWYgcGF0aCA9
IENURm9udENyZWF0ZVBhdGhGb3JHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLT5wbGF0
Zm9ybURhdGEoKS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSwgJnRyYW5zbGF0aW9u
KTsKKyAgICAgICAgQ0dQYXRoQXBwbHkocGF0aCwgKHZvaWQgKikmaW5mbywgJmZpbmRQYXRoSW50
ZXJzZWN0aW9ucyk7CisgICAgICAgIGlmIChpbmZvLm1pblggPCBpbmZvLm1heFgpIHsKKyAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoaW5mby5taW5YIC0gbGluZUV4dGVudHMueCgpKTsKKyAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoaW5mby5tYXhYIC0gbGluZUV4dGVudHMueCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOworICAgICAgICBHbHlwaEJ1ZmZlckFk
dmFuY2UgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKTsKKyAgICAgICAgdHJhbnNs
YXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2xhdGlvbiwgYWR2YW5jZS53
aWR0aCgpLCBhZHZhbmNlLmhlaWdodCgpKTsKKyAgICB9CisgICAgcmV0dXJuIG91dHB1dDsgIAor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXgg
ZDEwNjBlYjZjYjI2ZDBhY2JlMzExYzY3YjQxNDRlNmM4OGQxOTQ0MC4uODhiNDk5MzQ4Yjk0Mjcz
YzYzNThkMDUwODhiNDJlMjYyNWY4M2I1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcApAQCAtNjUsNiArNjUsNzMgQEAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KElubGluZVRleHRCb3gpID09IHNpemVvZihTYW1lU2l6ZUFzSW5saW5lVGV4dEJveCksIElubGlu
ZVQKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBMYXlvdXRSZWN0
PiBJbmxpbmVUZXh0Qm94T3ZlcmZsb3dNYXA7CiBzdGF0aWMgSW5saW5lVGV4dEJveE92ZXJmbG93
TWFwKiBnVGV4dEJveGVzV2l0aE92ZXJmbG93OwogCitzdGF0aWMgYm9vbCBjb21wYXJlVHVwbGVz
KHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGwsIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IHIpCit7
CisgICAgcmV0dXJuIGwuZmlyc3QgPCByLmZpcnN0OworfQorCitzdGF0aWMgRGFzaEFycmF5IGZv
cm1hdFRleHRJbnRlcnNlY3Rpb25zRm9yU2tpcEluayhjb25zdCBEYXNoQXJyYXkmIGludGVyc2Vj
dGlvbnMsIGZsb2F0IGRpbGF0aW9uQW1vdW50LCBmbG9hdCB0b3RhbFdpZHRoKQoreworICAgIEFT
U0VSVCghKGludGVyc2VjdGlvbnMuc2l6ZSgpICUgMikpOworICAgIAorICAgIC8vIFN0ZXAgMTog
TWFrZSBwYWlycyBzbyB3ZSBjYW4gc29ydCBiYXNlZCBvbiByYW5nZSBzdGFydGluZy1wb2ludC4g
V2UgZGlsYXRlIHRoZSByYW5nZXMgaW4gdGhpcyBzdGVwIGFzIHdlbGwuCisgICAgVmVjdG9yPHN0
ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiB0dXBsZXM7CisgICAgZm9yIChhdXRvIGkgPSBpbnRlcnNl
Y3Rpb25zLmJlZ2luKCk7IGkgIT0gaW50ZXJzZWN0aW9ucy5lbmQoKTsgaSsrLCBpKyspCisgICAg
ICAgIHR1cGxlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoKmkgLSBkaWxhdGlvbkFtb3VudCwgKihp
KzEpICsgZGlsYXRpb25BbW91bnQpKTsKKyAgICBzdGQ6OnNvcnQodHVwbGVzLmJlZ2luKCksIHR1
cGxlcy5lbmQoKSwgJmNvbXBhcmVUdXBsZXMpOworCisgICAgLy8gU3RlcCAyOiBEZWFsIHdpdGgg
aW50ZXJzZWN0aW5nIHJhbmdlcy4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+
IGludGVybWVkaWF0ZVR1cGxlczsKKyAgICBpZiAodHVwbGVzLnNpemUoKSA+PSAyKSB7CisgICAg
ICAgIGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQoKnR1cGxlcy5iZWdpbigpKTsKKyAgICAgICAg
YXV0byBsYXN0SW50ZXJtZWRpYXRlID0gaW50ZXJtZWRpYXRlVHVwbGVzLmJlZ2luKCk7CisgICAg
ICAgIGZvciAoYXV0byBpID0gdHVwbGVzLmJlZ2luKCkgKyAxOyBpICE9IHR1cGxlcy5lbmQoKTsg
aSsrKSB7CisgICAgICAgICAgICBmbG9hdCYgZmlyc3RFbmQgPSBsYXN0SW50ZXJtZWRpYXRlLT5z
ZWNvbmQ7CisgICAgICAgICAgICBmbG9hdCYgc2Vjb25kU3RhcnQgPSBpLT5maXJzdDsKKyAgICAg
ICAgICAgIGZsb2F0JiBzZWNvbmRFbmQgPSBpLT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoc2Vj
b25kU3RhcnQgPD0gZmlyc3RFbmQgJiYgc2Vjb25kRW5kIDw9IGZpcnN0RW5kKSB7CisgICAgICAg
ICAgICAgICAgLy8gSWdub3JlIHRoaXMgcmFuZ2UgY29tcGxldGVseQorICAgICAgICAgICAgfSBl
bHNlIGlmIChzZWNvbmRTdGFydCA8PSBmaXJzdEVuZCkKKyAgICAgICAgICAgICAgICBmaXJzdEVu
ZCA9IHNlY29uZEVuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludGVy
bWVkaWF0ZVR1cGxlcy5hcHBlbmQoKmkpOworICAgICAgICAgICAgICAgICsrbGFzdEludGVybWVk
aWF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBpbnRl
cm1lZGlhdGVUdXBsZXMgPSB0dXBsZXM7CisKKyAgICAvLyBTdGVwIDM6IE91dHB1dCB0aGUgc3Bh
Y2UgYmV0d2VlbiB0aGUgcmFuZ2VzLCBidXQgb25seSBpZiB0aGUgc3BhY2Ugd2FycmFudHMgYW4g
dW5kZXJsaW5lLgorICAgIGZsb2F0IHByZXZpb3VzID0gMDsKKyAgICBEYXNoQXJyYXkgb3V0cHV0
OworICAgIGZvciAoYXV0byBpID0gaW50ZXJtZWRpYXRlVHVwbGVzLmJlZ2luKCk7IGkgIT0gaW50
ZXJtZWRpYXRlVHVwbGVzLmVuZCgpOyBpKyspIHsKKyAgICAgICAgaWYgKGktPmZpcnN0IC0gcHJl
dmlvdXMgPiBkaWxhdGlvbkFtb3VudCkgeworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChwcmV2
aW91cyk7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGktPmZpcnN0KTsKKyAgICAgICAgfQor
ICAgICAgICBwcmV2aW91cyA9IGktPnNlY29uZDsKKyAgICB9CisgICAgaWYgKHRvdGFsV2lkdGgg
LSBwcmV2aW91cyA+IGRpbGF0aW9uQW1vdW50KSB7CisgICAgICAgIG91dHB1dC5hcHBlbmQocHJl
dmlvdXMpOworICAgICAgICBvdXRwdXQuYXBwZW5kKHRvdGFsV2lkdGgpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gb3V0cHV0OworfQorCitzdGF0aWMgdm9pZCBkcmF3U2tpcElua1VuZGVybGlu
ZShUZXh0UGFpbnRlciYgdGV4dFBhaW50ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRmxv
YXRQb2ludCBsb2NhbE9yaWdpbiwgZmxvYXQgdW5kZXJsaW5lT2Zmc2V0LCBmbG9hdCB3aWR0aCwg
Ym9vbCBpc1ByaW50aW5nLCBpbnQgbV9zdGFydCwgaW50IG1fbGVuKQoreworICAgIEZsb2F0UG9p
bnQgYWRqdXN0ZWRMb2NhbE9yaWdpbiA9IGxvY2FsT3JpZ2luOworICAgIGFkanVzdGVkTG9jYWxP
cmlnaW4ubW92ZSgwLCB1bmRlcmxpbmVPZmZzZXQpOworICAgIEZsb2F0UmVjdCB1bmRlcmxpbmVC
b3VuZGluZ0JveCA9IGNvbnRleHQuY29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGFkanVzdGVkTG9j
YWxPcmlnaW4sIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICBEYXNoQXJyYXkgaW50ZXJzZWN0aW9u
cyA9IHRleHRQYWludGVyLmdldEludGVyc2VjdGlvblBvaW50cyh1bmRlcmxpbmVCb3VuZGluZ0Jv
eCwgbV9zdGFydCwgbV9zdGFydCArIG1fbGVuKTsKKyAgICBEYXNoQXJyYXkgYSA9IGZvcm1hdFRl
eHRJbnRlcnNlY3Rpb25zRm9yU2tpcEluayhpbnRlcnNlY3Rpb25zLCB1bmRlcmxpbmVCb3VuZGlu
Z0JveC5oZWlnaHQoKSwgd2lkdGgpOworCisgICAgQVNTRVJUKCEoYS5zaXplKCkgJSAyKSk7Cisg
ICAgZm9yIChhdXRvIGkgPSBhLmJlZ2luKCk7IGkgIT0gYS5lbmQoKTsgaSsrLCBpKyspCisgICAg
ICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpICsg
KmksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksICooaSsxKSAtICppLCBpc1By
aW50aW5nKTsKK30KKwogSW5saW5lVGV4dEJveDo6fklubGluZVRleHRCb3goKQogewogICAgIGlm
ICgha25vd25Ub0hhdmVOb092ZXJmbG93KCkgJiYgZ1RleHRCb3hlc1dpdGhPdmVyZmxvdykKQEAg
LTEwNzIsNyArMTEzOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgLy8gT2Zm
c2V0IGJldHdlZW4gbGluZXMgLSBhbHdheXMgbm9uLXplcm8sIHNvIGxpbmVzIG5ldmVyIGNyb3Nz
IGVhY2ggb3RoZXIuCiAgICAgICAgIGZsb2F0IGRvdWJsZU9mZnNldCA9IHRleHREZWNvcmF0aW9u
VGhpY2tuZXNzICsgMTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgY2xpcERlY29yYXRpb25Ub01h
c2sgPSBsaW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lw
SW5rOworICAgICAgICBib29sIGNsaXBEZWNvcmF0aW9uVG9NYXNrID0gZmFsc2U7CiAgICAgICAg
IAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZmFsc2UpOwogICAgICAgICAKQEAgLTExMTUsMTAgKzExODIsMTkgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFBvaW50JgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9h
dFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0
KSwgd2lkdGgsIGlzUHJpbnRpbmcpOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRpb25T
dHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxP
cmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0ICsgZG91YmxlT2Zmc2V0KSwgd2lkdGgsIGlzUHJp
bnRpbmcpOworICAgICAgICAgICAgICAgIGlmIChsaW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lw
KCkgPT0gVGV4dERlY29yYXRpb25Ta2lwSW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRy
YXdTa2lwSW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdpbiwgdW5k
ZXJsaW5lT2Zmc2V0LCB3aWR0aCwgaXNQcmludGluZywgbV9zdGFydCwgbV9sZW4pOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9u
U3R5bGVEb3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRl
cmxpbmUodGV4dFBhaW50ZXIsIGNvbnRleHQsIGxvY2FsT3JpZ2luLCB1bmRlcmxpbmVPZmZzZXQg
KyBkb3VibGVPZmZzZXQsIHdpZHRoLCBpc1ByaW50aW5nLCBtX3N0YXJ0LCBtX2xlbik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngo
KSwgbG9jYWxPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIGlzUHJpbnRpbmcp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29y
YXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xp
bmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1
bmRlcmxpbmVPZmZzZXQgKyBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgICAgIC8vIExlYXZl
IG9uZSBwaXhlbCBvZiB3aGl0ZSBiZXR3ZWVuIHRoZSBiYXNlbGluZSBhbmQgdGhlIHVuZGVybGlu
ZS4KQEAgLTExMzYsMTEgKzEyMTIsMjAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29y
YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBpZiAobGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tpcCgpID09IFRleHRE
ZWNvcmF0aW9uU2tpcEluaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQucGFp
bnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1Vu
ZGVybGluZSh0ZXh0UGFpbnRlciwgY29udGV4dCwgbG9jYWxPcmlnaW4sIDAsIHdpZHRoLCBpc1By
aW50aW5nLCBtX3N0YXJ0LCBtX2xlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1VuZGVybGluZSh0ZXh0UGFpbnRlciwgY29udGV4
dCwgbG9jYWxPcmlnaW4sIC1kb3VibGVPZmZzZXQsIHdpZHRoLCBpc1ByaW50aW5nLCBtX3N0YXJ0
LCBtX2xlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogI2VuZGlmIC8vIENTUzNfVEVYVF9ERUNPUkFUSU9OCi0gICAgICAgICAgICAgICAgY29udGV4
dC5kcmF3TGluZUZvclRleHQobG9jYWxPcmlnaW4sIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQobG9jYWxPcmlnaW4sIHdpZHRo
LCBpc1ByaW50aW5nKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJT04pCi0gICAgICAg
ICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91Ymxl
KQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50
KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpIC0gZG91YmxlT2Zmc2V0KSwgd2lkdGgs
IGlzUHJpbnRpbmcpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09
IFRleHREZWNvcmF0aW9uU3R5bGVEb3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmln
aW4ueSgpIC0gZG91YmxlT2Zmc2V0KSwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICNlbmRpZiAvLyBDU1MzX1RFWFRfREVDT1JBVElPTgogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCBmZTg1
NDljYzU1ZmU4MzIzNTk0M2YxMDMxNWZkNThiNzZlNjIyMTU5Li40N2Q0ZWFlZTJiYmY1NTY3YjRl
NGI5NDYzMDNlNDRkNDg1YTk0ZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5jcHAKQEAgLTE3Niw0ICsxNzYsOSBAQCB2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRJ
bkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbW91bnRUb0luYwogICAg
IG1fc2F2ZWREcmF3aW5nU3RhdGVGb3JNYXNrID0gc2F2ZWREcmF3aW5nU3RhdGVGb3JNYXNrOwog
fQogCitEYXNoQXJyYXkgVGV4dFBhaW50ZXI6OmdldEludGVyc2VjdGlvblBvaW50cyhjb25zdCBG
bG9hdFJlY3QmIGxpbmVFeHRlbnRzLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAgcmV0dXJu
IG1fZm9udC5nZXRJbnRlcnNlY3Rpb25Qb2ludHMobV90ZXh0UnVuLCBtX3RleHRPcmlnaW4sIHN0
YXJ0LCBlbmQsIGxpbmVFeHRlbnRzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAppbmRleCBjZjg1NWE0YWQzNDhjZjdhYTAw
M2YzMDY3MjExODM1ZmM4Nzk3YTBlLi4wYmQ1OGQyN2ZiOWMxMmU4N2Q2OTU2YTBjYmY1ZDQzYzNj
MzE3ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaApAQCAtMjQsNiAr
MjQsNyBAQAogI2RlZmluZSBUZXh0UGFpbnRlcl9oCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDYgKzY4LDggQEAgcHVibGljOgogICAgIHZvaWQg
cGFpbnRUZXh0KCk7CiAgICAgdm9pZCBwYWludFRleHRJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0
JiwgZmxvYXQgYW1vdW50VG9JbmNyZWFzZVN0cm9rZVdpZHRoQnkpOwogCisgICAgRGFzaEFycmF5
IGdldEludGVyc2VjdGlvblBvaW50cyhjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzLCBpbnQg
c3RhcnQsIGludCBlbmQpOworCiBwcml2YXRlOgogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4
dE9ubHk7CiAgICAgYm9vbCBtX3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219233</attachid>
            <date>2013-12-13 21:35:09 -0800</date>
            <delta_ts>2013-12-13 23:52:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125718-20131213213508.patch</filename>
            <type>text/plain</type>
            <size>16781</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMyNTllYmQ2YzVlOTUx
ZjA2OGNkODU0OWFiOTQ5NTc1ZDRjNjVhOS4uM2E2NmRlMGJmZDU0NTUyYTRiZGMwN2IxZmFmMjMy
NmYzOGNlZGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTEyLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRmFzdGVyIGlt
cGxlbWVudGF0aW9uIG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IGltcGxlbWVudGF0aW9u
IG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZXh0cmFjdHMKKyAgICAgICAgZWFjaCBnbHlw
aCBpbnRvIGEgcGF0aCwgdGhlbiBkZWNvbXBvc2VzIGVhY2ggcGF0aCBpbnRvIGEgc2VyaWVzCisg
ICAgICAgIG9mIGNvbnRvdXJzLiBJdCB0aGVuIGludGVyc2VjdHMgZWFjaCBjb250b3VyIHdpdGgg
dGhlIHRvcCBhbmQKKyAgICAgICAgYm90dG9tIG9mIHRoZSB1bmRlcmxpbmUgKGJ5IGFwcHJveGlt
YXRpbmcgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUpLgorICAgICAgICBJdCB0aGVuIGRyYXdzIHVu
ZGVybGluZXMgaW4gYmV0d2VlbiB0aGVzZSBpbnRlcnNlY3Rpb24gcmVnaW9ucy4KKworICAgICAg
ICBUZXN0cyBmb3IgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBhbHJlYWR5IGV4aXN0IGluCisg
ICAgICAgIGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1kZWNvcmF0aW9uL3RleHQtZGVjb3JhdGlv
bi1za2lwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50cyk6IE5ldyBkZWZhdWx0IGZ1bmN0
aW9uCisgICAgICAgIHRvIGdldCB0aGUgcGxhY2VzIHdoZXJlIGFuIHVuZGVybGluZSB3b3VsZCBp
bnRlcnNlY3QgYSBUZXh0UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
U2lnbmF0dXJlIG9mIG5ldyBmdW5jdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBhdGhJbnRlcnNlY3Rpb25zKTog
SGFuZGxlcyBhIHNpbmdsZSBjb250b3VyCisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMpOiBJbXBsZW1lbnRzIHRoZSBsb2dpYyBkZXNjcmliZWQKKyAgICAgICAg
YWJvdmUKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlVHVwbGVzKTogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3RkOjpzb3J0
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRUZXh0SW50ZXJzZWN0aW9uc0ZvclNraXBJbmspOiBE
byBzb21lIHBvc3QtcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgaW50ZXJzZWN0aW9uIHJlZ2lv
bnMgKGRpbGF0aW5nIHRoZW0sIGV0Yy4pCisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERyYXdzIGEgc2VxdWVuY2Ugb2YgdW5kZXJsaW5lcyBpbnN0ZWFkCisgICAgICAg
IG9mIG9uZSBsb25nIG9uZQorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKTogQ2FsbCBkcmF3U2tpcElua1VuZGVybGluZQorICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Z2V0SW50
ZXJzZWN0aW9uUG9pbnRzKTogRm9yd2FyZCB0byBXZWJDb3JlOjpGb250CisgICAgICAgIHdpdGgg
c29tZSBpbnRlcm5hbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisKIDIwMTMtMTItMTEgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHRoZSBDRk5ldHdvcmsgaW1wbGVtZW50YXRpb24gb2YgdGhl
IGFzeW5jaHJvbm91cyBSZXNvdXJjZUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAppbmRleCBhMmI4MGEwZTE3OTJlZGFkNmI1ODVjYWZjYWY2YTFiMjU5MWE2
YzM0Li5jNjJkZGE2MTNiZTYxNmRhNDVmOWY3ZDYzMDZkOTQ5MmY3NWI5MmU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMzEzLDYgKzMxMywxOCBAQCB2
b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaQogICAgIHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4
dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKK0Rhc2hB
cnJheSBGb250OjpnZXRJbnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgdGV4dFJ1blN0YXJ0SW5kZXgsIGludCB0ZXh0
UnVuRW5kSW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0Cit7CisgICAg
VU5VU0VEX1BBUkFNKHJ1bik7CisgICAgVU5VU0VEX1BBUkFNKHRleHRPcmlnaW4pOworICAgIFVO
VVNFRF9QQVJBTSh0ZXh0UnVuU3RhcnRJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRSdW5F
bmRJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVFeHRlbnRzKTsKKyAgICByZXR1cm4gRGFz
aEFycmF5KCk7Cit9CisjZW5kaWYKKwogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKIHsKICAgICBpZiAobG9hZGluZ0N1c3RvbUZvbnRzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKaW5kZXggOWZiNTc5ZjZkNDcxYzAwZjQ4YzM2ZWFkYWRmNjMxNGRh
NmM4MzAxNS4uNTRkMmNkNmU5NGRiMmRlNzY3N2FlMTRlMzcwMDg4MDk5NmVjYWE4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMjUsNiArMjUsNyBAQAogI2lm
bmRlZiBGb250X2gKICNkZWZpbmUgRm9udF9oCiAKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAjaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTEwMCw2ICsxMDEsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAt
MSkgY29uc3Q7CiAKKyAgICBEYXNoQXJyYXkgZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgdGV4dFJ1blN0YXJ0SW5k
ZXgsIGludCB0ZXh0UnVuRW5kSW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNv
bnN0OworCiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwg
U3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCmluZGV4IDcxOGMxNmQ5NjA1NjEyYzkwODlkMDQwM2Q2
MGEwMzFkOGYzMDQxZmMuLjEwYTc2NjI2YTc4YTg1ZWVkMzVjMWUzZmJlM2I5OTlmYjAxNWYyY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1t
CkBAIC0zMjMsNCArMzIzLDk0IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAjZW5kaWYKIH0K
IAordHlwZWRlZiBzdHJ1Y3QgX0dseXBoSXRlcmF0aW9uU3RhdGUgeworICAgIF9HbHlwaEl0ZXJh
dGlvblN0YXRlKENHUG9pbnQgX3N0YXJ0aW5nUG9pbnQsIENHUG9pbnQgX2N1cnJlbnRQb2ludCwg
Q0dGbG9hdCBfeTEsIENHRmxvYXQgX3kyLCBDR0Zsb2F0IF9taW5YLCBDR0Zsb2F0IF9tYXhYKQor
ICAgICAgICA6IHN0YXJ0aW5nUG9pbnQoX3N0YXJ0aW5nUG9pbnQpCisgICAgICAgICwgY3VycmVu
dFBvaW50KF9jdXJyZW50UG9pbnQpCisgICAgICAgICwgeTEoX3kxKQorICAgICAgICAsIHkyKF95
MikKKyAgICAgICAgLCBtaW5YKF9taW5YKQorICAgICAgICAsIG1heFgoX21heFgpCisgICAgewor
ICAgIH0KKyAgICBDR1BvaW50IHN0YXJ0aW5nUG9pbnQ7CisgICAgQ0dQb2ludCBjdXJyZW50UG9p
bnQ7CisgICAgQ0dGbG9hdCB5MTsKKyAgICBDR0Zsb2F0IHkyOworICAgIENHRmxvYXQgbWluWDsK
KyAgICBDR0Zsb2F0IG1heFg7Cit9IEdseXBoSXRlcmF0aW9uU3RhdGU7CisKK3N0YXRpYyBib29s
IGZpbmRJbnRlcnNlY3Rpb25Qb2ludChmbG9hdCB5LCBDR1BvaW50IHAxLCBDR1BvaW50IHAyLCBD
R0Zsb2F0JiB4KQoreworICAgIHggPSBwMS54ICsgKHkgLSBwMS55KSAqIChwMi54IC0gcDEueCkg
LyAocDIueSAtIHAxLnkpOworICAgIHJldHVybiAocDEueSA8IHkgJiYgcDIueSA+IHkpIHx8IChw
MS55ID4geSAmJiBwMi55IDwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRQYXRoSW50ZXJzZWN0
aW9ucyh2b2lkKiB2aW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCogZSkKK3sKKyAgICBHbHlwaEl0
ZXJhdGlvblN0YXRlICppbmZvID0gKEdseXBoSXRlcmF0aW9uU3RhdGUgKil2aW5mbzsKKyAgICBi
b29sIGRvSW50ZXJzZWN0aW9uID0gZmFsc2U7CisgICAgQ0dQb2ludCBwb2ludCA9IENHUG9pbnRa
ZXJvOworICAgIHN3aXRjaCAoZS0+dHlwZSkgeworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3Zl
VG9Qb2ludDoKKyAgICAgICAgaW5mby0+c3RhcnRpbmdQb2ludCA9IGUtPnBvaW50c1swXTsKKyAg
ICAgICAgaW5mby0+Y3VycmVudFBvaW50ID0gZS0+cG9pbnRzWzBdOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgIGRvSW50ZXJz
ZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgcG9pbnQgPSBlLT5wb2ludHNbMF07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgorICAgICAg
ICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRzWzFdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50Ogor
ICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRz
WzJdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRo
OgorICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gaW5mby0+
c3RhcnRpbmdQb2ludDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghZG9JbnRlcnNl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBDR0Zsb2F0IHg7CisgICAgaWYgKGZpbmRJbnRl
cnNlY3Rpb25Qb2ludChpbmZvLT55MSwgaW5mby0+Y3VycmVudFBvaW50LCBwb2ludCwgeCkpIHsK
KyAgICAgICAgaW5mby0+bWluWCA9IHN0ZDo6bWluKGluZm8tPm1pblgsIHgpOworICAgICAgICBp
bmZvLT5tYXhYID0gc3RkOjptYXgoaW5mby0+bWF4WCwgeCk7CisgICAgfQorICAgIGlmIChmaW5k
SW50ZXJzZWN0aW9uUG9pbnQoaW5mby0+eTIsIGluZm8tPmN1cnJlbnRQb2ludCwgcG9pbnQsIHgp
KSB7CisgICAgICAgIGluZm8tPm1pblggPSBzdGQ6Om1pbihpbmZvLT5taW5YLCB4KTsKKyAgICAg
ICAgaW5mby0+bWF4WCA9IHN0ZDo6bWF4KGluZm8tPm1heFgsIHgpOworICAgIH0KKyAgICBpbmZv
LT5jdXJyZW50UG9pbnQgPSBwb2ludDsKK30KKworRGFzaEFycmF5IEZvbnQ6OmdldEludGVyc2Vj
dGlvblBvaW50cyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sIGludCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCwgY29uc3QgRmxv
YXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3QKK3sKKyAgICBmbG9hdCBkZWx0YVg7CisgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCkK
KyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwg
dGV4dFJ1blN0YXJ0SW5kZXgsIHRleHRSdW5FbmRJbmRleCwgZ2x5cGhCdWZmZXIpOworICAgIGVs
c2UKKyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChy
dW4sIHRleHRSdW5TdGFydEluZGV4LCB0ZXh0UnVuRW5kSW5kZXgsIGdseXBoQnVmZmVyKTsKKyAg
ICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRy
YW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CisgICAg
dHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHRyYW5zbGF0aW9uLCAxLCAtMSk7
CisgICAgRGFzaEFycmF5IHJlc3VsdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdseXBoQnVm
ZmVyLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdseXBoSXRlcmF0aW9uU3RhdGUgaW5mbyA9IEds
eXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwgMCksIENHUG9pbnRNYWtlKDAsIDApLCBs
aW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSArIGxpbmVFeHRlbnRzLmhlaWdodCgpLCAx
ZTcsIC0xZTcpOworICAgICAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiBwYXRoID0gQ1RGb250Q3Jl
YXRlUGF0aEZvckdseXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaSktPnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpLCAmdHJhbnNsYXRpb24pOworICAgICAg
ICBDR1BhdGhBcHBseShwYXRoLmdldCgpLCAodm9pZCAqKSZpbmZvLCAmZmluZFBhdGhJbnRlcnNl
Y3Rpb25zKTsKKyAgICAgICAgaWYgKGluZm8ubWluWCA8IGluZm8ubWF4WCkgeworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmZvLm1pblggLSBsaW5lRXh0ZW50cy54KCkpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmZvLm1heFggLSBsaW5lRXh0ZW50cy54KCkpOworICAgICAgICB9
CisgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGkpOworICAgICAgICB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRl
KHRyYW5zbGF0aW9uLCBhZHZhbmNlLndpZHRoKCksIGFkdmFuY2UuaGVpZ2h0KCkpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggZDEwNjBlYjZjYjI2ZDBhY2JlMzExYzY3YjQxNDRlNmM4OGQx
OTQ0MC4uMjljYzNiY2RkZWM3MWM2YTY1ZjRmZGIxOTlhNTU2MWZmMmQwZTRhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtNjUsNiArNjUsNzUgQEAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKElubGluZVRleHRCb3gpID09IHNpemVvZihTYW1lU2l6ZUFz
SW5saW5lVGV4dEJveCksIElubGluZVQKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IElubGlu
ZVRleHRCb3gqLCBMYXlvdXRSZWN0PiBJbmxpbmVUZXh0Qm94T3ZlcmZsb3dNYXA7CiBzdGF0aWMg
SW5saW5lVGV4dEJveE92ZXJmbG93TWFwKiBnVGV4dEJveGVzV2l0aE92ZXJmbG93OwogCitzdGF0
aWMgYm9vbCBjb21wYXJlVHVwbGVzKHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGwsIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IHIpCit7CisgICAgcmV0dXJuIGwuZmlyc3QgPCByLmZpcnN0OworfQor
CisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIERhc2hBcnJheSB0cmFuc2xhdGVJbnRlcnNlY3Rp
b25Qb2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGNvbnN0IERhc2hBcnJheSYgaW50ZXJzZWN0aW9u
cywgZmxvYXQgZGlsYXRpb25BbW91bnQsIGZsb2F0IHRvdGFsV2lkdGgpCit7CisgICAgQVNTRVJU
KCEoaW50ZXJzZWN0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgCisgICAgLy8gU3RlcCAxOiBNYWtl
IHBhaXJzIHNvIHdlIGNhbiBzb3J0IGJhc2VkIG9uIHJhbmdlIHN0YXJ0aW5nLXBvaW50LiBXZSBk
aWxhdGUgdGhlIHJhbmdlcyBpbiB0aGlzIHN0ZXAgYXMgd2VsbC4KKyAgICBWZWN0b3I8c3RkOjpw
YWlyPGZsb2F0LCBmbG9hdD4+IHR1cGxlczsKKyAgICBmb3IgKGF1dG8gaSA9IGludGVyc2VjdGlv
bnMuYmVnaW4oKTsgaSAhPSBpbnRlcnNlY3Rpb25zLmVuZCgpOyBpKyssIGkrKykKKyAgICAgICAg
dHVwbGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigqaSAtIGRpbGF0aW9uQW1vdW50LCAqKGkgKyAx
KSArIGRpbGF0aW9uQW1vdW50KSk7CisgICAgc3RkOjpzb3J0KHR1cGxlcy5iZWdpbigpLCB0dXBs
ZXMuZW5kKCksICZjb21wYXJlVHVwbGVzKTsKKworICAgIC8vIFN0ZXAgMjogRGVhbCB3aXRoIGlu
dGVyc2VjdGluZyByYW5nZXMuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBp
bnRlcm1lZGlhdGVUdXBsZXM7CisgICAgaWYgKHR1cGxlcy5zaXplKCkgPj0gMikgeworICAgICAg
ICBpbnRlcm1lZGlhdGVUdXBsZXMuYXBwZW5kKCp0dXBsZXMuYmVnaW4oKSk7CisgICAgICAgIGF1
dG8gbGFzdEludGVybWVkaWF0ZSA9IGludGVybWVkaWF0ZVR1cGxlcy5iZWdpbigpOworICAgICAg
ICBmb3IgKGF1dG8gaSA9IHR1cGxlcy5iZWdpbigpICsgMTsgaSAhPSB0dXBsZXMuZW5kKCk7IGkr
KykgeworICAgICAgICAgICAgZmxvYXQmIGZpcnN0RW5kID0gbGFzdEludGVybWVkaWF0ZS0+c2Vj
b25kOworICAgICAgICAgICAgZmxvYXQgc2Vjb25kU3RhcnQgPSBpLT5maXJzdDsKKyAgICAgICAg
ICAgIGZsb2F0IHNlY29uZEVuZCA9IGktPnNlY29uZDsKKyAgICAgICAgICAgIGlmIChzZWNvbmRT
dGFydCA8PSBmaXJzdEVuZCAmJiBzZWNvbmRFbmQgPD0gZmlyc3RFbmQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZ25vcmUgdGhpcyByYW5nZSBjb21wbGV0ZWx5CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNlY29uZFN0YXJ0IDw9IGZpcnN0RW5kKQorICAgICAgICAgICAgICAgIGZpcnN0RW5kID0g
c2Vjb25kRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50ZXJtZWRp
YXRlVHVwbGVzLmFwcGVuZCgqaSk7CisgICAgICAgICAgICAgICAgKytsYXN0SW50ZXJtZWRpYXRl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGludGVybWVk
aWF0ZVR1cGxlcyA9IHR1cGxlczsKKworICAgIC8vIFN0ZXAgMzogT3V0cHV0IHRoZSBzcGFjZSBi
ZXR3ZWVuIHRoZSByYW5nZXMsIGJ1dCBvbmx5IGlmIHRoZSBzcGFjZSB3YXJyYW50cyBhbiB1bmRl
cmxpbmUuCisgICAgZmxvYXQgcHJldmlvdXMgPSAwOworICAgIERhc2hBcnJheSByZXN1bHQ7Cisg
ICAgZm9yIChhdXRvIGkgPSBpbnRlcm1lZGlhdGVUdXBsZXMuYmVnaW4oKTsgaSAhPSBpbnRlcm1l
ZGlhdGVUdXBsZXMuZW5kKCk7IGkrKykgeworICAgICAgICBpZiAoaS0+Zmlyc3QgLSBwcmV2aW91
cyA+IGRpbGF0aW9uQW1vdW50KSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHByZXZpb3Vz
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaS0+Zmlyc3QpOworICAgICAgICB9CisgICAg
ICAgIHByZXZpb3VzID0gaS0+c2Vjb25kOworICAgIH0KKyAgICBpZiAodG90YWxXaWR0aCAtIHBy
ZXZpb3VzID4gZGlsYXRpb25BbW91bnQpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwcmV2aW91
cyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodG90YWxXaWR0aCk7CisgICAgfQorICAgIAorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdTa2lwSW5rVW5kZXJsaW5lKFRl
eHRQYWludGVyJiB0ZXh0UGFpbnRlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBGbG9hdFBv
aW50IGxvY2FsT3JpZ2luLCBmbG9hdCB1bmRlcmxpbmVPZmZzZXQsIGZsb2F0IHdpZHRoLCBib29s
IGlzUHJpbnRpbmcsIGludCBtX3N0YXJ0LCBpbnQgbV9sZW4pCit7CisgICAgRmxvYXRQb2ludCBh
ZGp1c3RlZExvY2FsT3JpZ2luID0gbG9jYWxPcmlnaW47CisgICAgYWRqdXN0ZWRMb2NhbE9yaWdp
bi5tb3ZlKDAsIHVuZGVybGluZU9mZnNldCk7CisgICAgRmxvYXRSZWN0IHVuZGVybGluZUJvdW5k
aW5nQm94ID0gY29udGV4dC5jb21wdXRlTGluZUJvdW5kc0ZvclRleHQoYWRqdXN0ZWRMb2NhbE9y
aWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgIERhc2hBcnJheSBpbnRlcnNlY3Rpb25zID0g
dGV4dFBhaW50ZXIuZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKHVuZGVybGluZUJvdW5kaW5nQm94LCBt
X3N0YXJ0LCBtX3N0YXJ0ICsgbV9sZW4pOworICAgIERhc2hBcnJheSBhID0gdHJhbnNsYXRlSW50
ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhpbnRlcnNlY3Rpb25zLCB1bmRlcmxp
bmVCb3VuZGluZ0JveC5oZWlnaHQoKSwgd2lkdGgpOworCisgICAgQVNTRVJUKCEoYS5zaXplKCkg
JSAyKSk7CisgICAgZm9yIChhdXRvIGkgPSBhLmJlZ2luKCk7IGkgIT0gYS5lbmQoKTsgaSsrLCBp
KyspCisgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmln
aW4ueCgpICsgKmksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksICooaSsxKSAt
ICppLCBpc1ByaW50aW5nKTsKK30KKyNlbmRpZgorCiBJbmxpbmVUZXh0Qm94Ojp+SW5saW5lVGV4
dEJveCgpCiB7CiAgICAgaWYgKCFrbm93blRvSGF2ZU5vT3ZlcmZsb3coKSAmJiBnVGV4dEJveGVz
V2l0aE92ZXJmbG93KQpAQCAtMTA3Miw3ICsxMTQxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JgogICAgICAgICAvLyBPZmZzZXQgYmV0d2VlbiBsaW5lcyAtIGFsd2F5cyBub24temVybywgc28g
bGluZXMgbmV2ZXIgY3Jvc3MgZWFjaCBvdGhlci4KICAgICAgICAgZmxvYXQgZG91YmxlT2Zmc2V0
ID0gdGV4dERlY29yYXRpb25UaGlja25lc3MgKyAxOwogICAgICAgICAKLSAgICAgICAgYm9vbCBj
bGlwRGVjb3JhdGlvblRvTWFzayA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBU
ZXh0RGVjb3JhdGlvblNraXBJbms7CisgICAgICAgIGJvb2wgY2xpcERlY29yYXRpb25Ub01hc2sg
PSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CiAgICAgICAgIApAQCAtMTExNSwxMCArMTE4NCwxOSBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGNvbnRleHQuZHJh
d0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkg
KyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVEb3VibGUpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxP
cmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQgKyBkb3VibGVPZmZz
ZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVTdHlsZS50
ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXBJbmspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRlcmxpbmUodGV4dFBhaW50ZXIsIGNvbnRleHQs
IGxvY2FsT3JpZ2luLCB1bmRlcmxpbmVPZmZzZXQsIHdpZHRoLCBpc1ByaW50aW5nLCBtX3N0YXJ0
LCBtX2xlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUg
PT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3U2tpcElua1VuZGVybGluZSh0ZXh0UGFpbnRlciwgY29udGV4dCwgbG9jYWxPcmlnaW4s
IHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9mZnNldCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3Rh
cnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9p
bnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3
aWR0aCwgaXNQcmludGluZyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29yYXRpb25T
dHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxv
Y2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9mZnNldCksIHdpZHRoLCBp
c1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAjZWxzZQogICAg
ICAgICAgICAgLy8gTGVhdmUgb25lIHBpeGVsIG9mIHdoaXRlIGJldHdlZW4gdGhlIGJhc2VsaW5l
IGFuZCB0aGUgdW5kZXJsaW5lLgpAQCAtMTEzNiwxMSArMTIxNCwyMCBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChsaW5lU3R5bGUudGV4dERlY29yYXRp
b25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwSW5rKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdp
biwgMCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91
YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRl
eHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdpbiwgLWRvdWJsZU9mZnNldCwgd2lkdGgsIGlz
UHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYgLy8gQ1NTM19URVhUX0RFQ09SQVRJT04KLSAgICAg
ICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChsb2NhbE9yaWdpbiwgd2lkdGgsIGlz
UHJpbnRpbmcpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChs
b2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOwogI2lmIEVOQUJMRShDU1MzX1RFWFRfREVD
T1JBVElPTikKLSAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNv
cmF0aW9uU3R5bGVEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVG
b3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSBkb3Vi
bGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmln
aW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGlu
Zyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2VuZGlmIC8vIENTUzNfVEVY
VF9ERUNPUkFUSU9OCiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwCmluZGV4IGZlODU0OWNjNTVmZTgzMjM1OTQzZjEwMzE1ZmQ1OGI3NmU2MjIxNTkuLjUx
NDBmY2NlYjhlMTkwYThlZmZjYzIwODJhOWIyYzk0NTdhMTczNTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtMTc2LDQgKzE3Niw5IEBAIHZvaWQgVGV4dFBh
aW50ZXI6OnBhaW50VGV4dEluQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0
IGFtb3VudFRvSW5jCiAgICAgbV9zYXZlZERyYXdpbmdTdGF0ZUZvck1hc2sgPSBzYXZlZERyYXdp
bmdTdGF0ZUZvck1hc2s7CiB9CiAKK0Rhc2hBcnJheSBUZXh0UGFpbnRlcjo6Z2V0SW50ZXJzZWN0
aW9uUG9pbnRzKGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMsIGludCB0ZXh0UnVuU3RhcnRJ
bmRleCwgaW50IHRleHRSdW5FbmRJbmRleCkKK3sKKyAgICByZXR1cm4gbV9mb250LmdldEludGVy
c2VjdGlvblBvaW50cyhtX3RleHRSdW4sIG1fdGV4dE9yaWdpbiwgdGV4dFJ1blN0YXJ0SW5kZXgs
IHRleHRSdW5FbmRJbmRleCwgbGluZUV4dGVudHMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCmluZGV4IGNmODU1YTRhZDM0
OGNmN2FhMDAzZjMwNjcyMTE4MzVmYzg3OTdhMGUuLmRhY2UyNzc5MTY1MTczMTUxOGMwZGM3YTcx
YTk5MzViY2RiNmMwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCkBA
IC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFRleHRQYWludGVyX2gKIAogI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIlJlbmRlclRl
eHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNiArNjgsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwYWludFRleHQoKTsKICAgICB2b2lkIHBhaW50VGV4dEluQ29udGV4dChHcmFwaGlj
c0NvbnRleHQmLCBmbG9hdCBhbW91bnRUb0luY3JlYXNlU3Ryb2tlV2lkdGhCeSk7CiAKKyAgICBE
YXNoQXJyYXkgZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVu
dHMsIGludCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCk7CisKIHByaXZh
dGU6CiAgICAgYm9vbCBtX3BhaW50U2VsZWN0ZWRUZXh0T25seTsKICAgICBib29sIG1fcGFpbnRT
ZWxlY3RlZFRleHRTZXBhcmF0ZWx5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219245</attachid>
            <date>2013-12-13 23:52:32 -0800</date>
            <delta_ts>2013-12-16 14:32:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125718-20131213235232.patch</filename>
            <type>text/plain</type>
            <size>16796</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMyNTllYmQ2YzVlOTUx
ZjA2OGNkODU0OWFiOTQ5NTc1ZDRjNjVhOS4uM2E2NmRlMGJmZDU0NTUyYTRiZGMwN2IxZmFmMjMy
NmYzOGNlZGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTEyLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRmFzdGVyIGlt
cGxlbWVudGF0aW9uIG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IGltcGxlbWVudGF0aW9u
IG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZXh0cmFjdHMKKyAgICAgICAgZWFjaCBnbHlw
aCBpbnRvIGEgcGF0aCwgdGhlbiBkZWNvbXBvc2VzIGVhY2ggcGF0aCBpbnRvIGEgc2VyaWVzCisg
ICAgICAgIG9mIGNvbnRvdXJzLiBJdCB0aGVuIGludGVyc2VjdHMgZWFjaCBjb250b3VyIHdpdGgg
dGhlIHRvcCBhbmQKKyAgICAgICAgYm90dG9tIG9mIHRoZSB1bmRlcmxpbmUgKGJ5IGFwcHJveGlt
YXRpbmcgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUpLgorICAgICAgICBJdCB0aGVuIGRyYXdzIHVu
ZGVybGluZXMgaW4gYmV0d2VlbiB0aGVzZSBpbnRlcnNlY3Rpb24gcmVnaW9ucy4KKworICAgICAg
ICBUZXN0cyBmb3IgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBhbHJlYWR5IGV4aXN0IGluCisg
ICAgICAgIGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1kZWNvcmF0aW9uL3RleHQtZGVjb3JhdGlv
bi1za2lwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50cyk6IE5ldyBkZWZhdWx0IGZ1bmN0
aW9uCisgICAgICAgIHRvIGdldCB0aGUgcGxhY2VzIHdoZXJlIGFuIHVuZGVybGluZSB3b3VsZCBp
bnRlcnNlY3QgYSBUZXh0UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
U2lnbmF0dXJlIG9mIG5ldyBmdW5jdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBhdGhJbnRlcnNlY3Rpb25zKTog
SGFuZGxlcyBhIHNpbmdsZSBjb250b3VyCisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMpOiBJbXBsZW1lbnRzIHRoZSBsb2dpYyBkZXNjcmliZWQKKyAgICAgICAg
YWJvdmUKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlVHVwbGVzKTogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3RkOjpzb3J0
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRUZXh0SW50ZXJzZWN0aW9uc0ZvclNraXBJbmspOiBE
byBzb21lIHBvc3QtcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgaW50ZXJzZWN0aW9uIHJlZ2lv
bnMgKGRpbGF0aW5nIHRoZW0sIGV0Yy4pCisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERyYXdzIGEgc2VxdWVuY2Ugb2YgdW5kZXJsaW5lcyBpbnN0ZWFkCisgICAgICAg
IG9mIG9uZSBsb25nIG9uZQorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKTogQ2FsbCBkcmF3U2tpcElua1VuZGVybGluZQorICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Z2V0SW50
ZXJzZWN0aW9uUG9pbnRzKTogRm9yd2FyZCB0byBXZWJDb3JlOjpGb250CisgICAgICAgIHdpdGgg
c29tZSBpbnRlcm5hbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisKIDIwMTMtMTItMTEgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHRoZSBDRk5ldHdvcmsgaW1wbGVtZW50YXRpb24gb2YgdGhl
IGFzeW5jaHJvbm91cyBSZXNvdXJjZUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAppbmRleCBhMmI4MGEwZTE3OTJlZGFkNmI1ODVjYWZjYWY2YTFiMjU5MWE2
YzM0Li5jNjJkZGE2MTNiZTYxNmRhNDVmOWY3ZDYzMDZkOTQ5MmY3NWI5MmU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMzEzLDYgKzMxMywxOCBAQCB2
b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaQogICAgIHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4
dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKK0Rhc2hB
cnJheSBGb250OjpnZXRJbnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgdGV4dFJ1blN0YXJ0SW5kZXgsIGludCB0ZXh0
UnVuRW5kSW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0Cit7CisgICAg
VU5VU0VEX1BBUkFNKHJ1bik7CisgICAgVU5VU0VEX1BBUkFNKHRleHRPcmlnaW4pOworICAgIFVO
VVNFRF9QQVJBTSh0ZXh0UnVuU3RhcnRJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRSdW5F
bmRJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVFeHRlbnRzKTsKKyAgICByZXR1cm4gRGFz
aEFycmF5KCk7Cit9CisjZW5kaWYKKwogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKIHsKICAgICBpZiAobG9hZGluZ0N1c3RvbUZvbnRzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKaW5kZXggOWZiNTc5ZjZkNDcxYzAwZjQ4YzM2ZWFkYWRmNjMxNGRh
NmM4MzAxNS4uNTRkMmNkNmU5NGRiMmRlNzY3N2FlMTRlMzcwMDg4MDk5NmVjYWE4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMjUsNiArMjUsNyBAQAogI2lm
bmRlZiBGb250X2gKICNkZWZpbmUgRm9udF9oCiAKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAjaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTEwMCw2ICsxMDEsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAt
MSkgY29uc3Q7CiAKKyAgICBEYXNoQXJyYXkgZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgdGV4dFJ1blN0YXJ0SW5k
ZXgsIGludCB0ZXh0UnVuRW5kSW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNv
bnN0OworCiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwg
U3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCmluZGV4IDcxOGMxNmQ5NjA1NjEyYzkwODlkMDQwM2Q2
MGEwMzFkOGYzMDQxZmMuLjEwYTc2NjI2YTc4YTg1ZWVkMzVjMWUzZmJlM2I5OTlmYjAxNWYyY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1t
CkBAIC0zMjMsNCArMzIzLDk0IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAjZW5kaWYKIH0K
IAordHlwZWRlZiBzdHJ1Y3QgX0dseXBoSXRlcmF0aW9uU3RhdGUgeworICAgIF9HbHlwaEl0ZXJh
dGlvblN0YXRlKENHUG9pbnQgX3N0YXJ0aW5nUG9pbnQsIENHUG9pbnQgX2N1cnJlbnRQb2ludCwg
Q0dGbG9hdCBfeTEsIENHRmxvYXQgX3kyLCBDR0Zsb2F0IF9taW5YLCBDR0Zsb2F0IF9tYXhYKQor
ICAgICAgICA6IHN0YXJ0aW5nUG9pbnQoX3N0YXJ0aW5nUG9pbnQpCisgICAgICAgICwgY3VycmVu
dFBvaW50KF9jdXJyZW50UG9pbnQpCisgICAgICAgICwgeTEoX3kxKQorICAgICAgICAsIHkyKF95
MikKKyAgICAgICAgLCBtaW5YKF9taW5YKQorICAgICAgICAsIG1heFgoX21heFgpCisgICAgewor
ICAgIH0KKyAgICBDR1BvaW50IHN0YXJ0aW5nUG9pbnQ7CisgICAgQ0dQb2ludCBjdXJyZW50UG9p
bnQ7CisgICAgQ0dGbG9hdCB5MTsKKyAgICBDR0Zsb2F0IHkyOworICAgIENHRmxvYXQgbWluWDsK
KyAgICBDR0Zsb2F0IG1heFg7Cit9IEdseXBoSXRlcmF0aW9uU3RhdGU7CisKK3N0YXRpYyBib29s
IGZpbmRJbnRlcnNlY3Rpb25Qb2ludChmbG9hdCB5LCBDR1BvaW50IHAxLCBDR1BvaW50IHAyLCBD
R0Zsb2F0JiB4KQoreworICAgIHggPSBwMS54ICsgKHkgLSBwMS55KSAqIChwMi54IC0gcDEueCkg
LyAocDIueSAtIHAxLnkpOworICAgIHJldHVybiAocDEueSA8IHkgJiYgcDIueSA+IHkpIHx8IChw
MS55ID4geSAmJiBwMi55IDwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRQYXRoSW50ZXJzZWN0
aW9ucyh2b2lkKiB2aW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCogZSkKK3sKKyAgICBHbHlwaEl0
ZXJhdGlvblN0YXRlICppbmZvID0gKEdseXBoSXRlcmF0aW9uU3RhdGUgKil2aW5mbzsKKyAgICBi
b29sIGRvSW50ZXJzZWN0aW9uID0gZmFsc2U7CisgICAgQ0dQb2ludCBwb2ludCA9IENHUG9pbnRa
ZXJvOworICAgIHN3aXRjaCAoZS0+dHlwZSkgeworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3Zl
VG9Qb2ludDoKKyAgICAgICAgaW5mby0+c3RhcnRpbmdQb2ludCA9IGUtPnBvaW50c1swXTsKKyAg
ICAgICAgaW5mby0+Y3VycmVudFBvaW50ID0gZS0+cG9pbnRzWzBdOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgIGRvSW50ZXJz
ZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgcG9pbnQgPSBlLT5wb2ludHNbMF07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgorICAgICAg
ICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRzWzFdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50Ogor
ICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRz
WzJdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRo
OgorICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gaW5mby0+
c3RhcnRpbmdQb2ludDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghZG9JbnRlcnNl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBDR0Zsb2F0IHg7CisgICAgaWYgKGZpbmRJbnRl
cnNlY3Rpb25Qb2ludChpbmZvLT55MSwgaW5mby0+Y3VycmVudFBvaW50LCBwb2ludCwgeCkpIHsK
KyAgICAgICAgaW5mby0+bWluWCA9IHN0ZDo6bWluKGluZm8tPm1pblgsIHgpOworICAgICAgICBp
bmZvLT5tYXhYID0gc3RkOjptYXgoaW5mby0+bWF4WCwgeCk7CisgICAgfQorICAgIGlmIChmaW5k
SW50ZXJzZWN0aW9uUG9pbnQoaW5mby0+eTIsIGluZm8tPmN1cnJlbnRQb2ludCwgcG9pbnQsIHgp
KSB7CisgICAgICAgIGluZm8tPm1pblggPSBzdGQ6Om1pbihpbmZvLT5taW5YLCB4KTsKKyAgICAg
ICAgaW5mby0+bWF4WCA9IHN0ZDo6bWF4KGluZm8tPm1heFgsIHgpOworICAgIH0KKyAgICBpbmZv
LT5jdXJyZW50UG9pbnQgPSBwb2ludDsKK30KKworRGFzaEFycmF5IEZvbnQ6OmdldEludGVyc2Vj
dGlvblBvaW50cyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sIGludCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCwgY29uc3QgRmxv
YXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3QKK3sKKyAgICBmbG9hdCBkZWx0YVg7CisgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCkK
KyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwg
dGV4dFJ1blN0YXJ0SW5kZXgsIHRleHRSdW5FbmRJbmRleCwgZ2x5cGhCdWZmZXIpOworICAgIGVs
c2UKKyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChy
dW4sIHRleHRSdW5TdGFydEluZGV4LCB0ZXh0UnVuRW5kSW5kZXgsIGdseXBoQnVmZmVyKTsKKyAg
ICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRy
YW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CisgICAg
dHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHRyYW5zbGF0aW9uLCAxLCAtMSk7
CisgICAgRGFzaEFycmF5IHJlc3VsdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdseXBoQnVm
ZmVyLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdseXBoSXRlcmF0aW9uU3RhdGUgaW5mbyA9IEds
eXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwgMCksIENHUG9pbnRNYWtlKDAsIDApLCBs
aW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSArIGxpbmVFeHRlbnRzLmhlaWdodCgpLCAx
ZTcsIC0xZTcpOworICAgICAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiBwYXRoID0gQ1RGb250Q3Jl
YXRlUGF0aEZvckdseXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaSktPnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpLCAmdHJhbnNsYXRpb24pOworICAgICAg
ICBDR1BhdGhBcHBseShwYXRoLmdldCgpLCAodm9pZCAqKSZpbmZvLCAmZmluZFBhdGhJbnRlcnNl
Y3Rpb25zKTsKKyAgICAgICAgaWYgKGluZm8ubWluWCA8IGluZm8ubWF4WCkgeworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmZvLm1pblggLSBsaW5lRXh0ZW50cy54KCkpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmZvLm1heFggLSBsaW5lRXh0ZW50cy54KCkpOworICAgICAgICB9
CisgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGkpOworICAgICAgICB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRl
KHRyYW5zbGF0aW9uLCBhZHZhbmNlLndpZHRoKCksIGFkdmFuY2UuaGVpZ2h0KCkpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggZDEwNjBlYjZjYjI2ZDBhY2JlMzExYzY3YjQxNDRlNmM4OGQx
OTQ0MC4uMWI2MTVmZWZjN2QwOTE2NzdhMWI1ZjI3ZjYyYjljZTAyZWUwYTUwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtNjUsNiArNjUsNzUgQEAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKElubGluZVRleHRCb3gpID09IHNpemVvZihTYW1lU2l6ZUFz
SW5saW5lVGV4dEJveCksIElubGluZVQKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IElubGlu
ZVRleHRCb3gqLCBMYXlvdXRSZWN0PiBJbmxpbmVUZXh0Qm94T3ZlcmZsb3dNYXA7CiBzdGF0aWMg
SW5saW5lVGV4dEJveE92ZXJmbG93TWFwKiBnVGV4dEJveGVzV2l0aE92ZXJmbG93OwogCisjaWYg
RU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OKQorc3RhdGljIGJvb2wgY29tcGFyZVR1cGxlcyhz
dGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBsLCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiByKQorewor
ICAgIHJldHVybiBsLmZpcnN0IDwgci5maXJzdDsKK30KKworc3RhdGljIERhc2hBcnJheSB0cmFu
c2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGNvbnN0IERhc2hBcnJh
eSYgaW50ZXJzZWN0aW9ucywgZmxvYXQgZGlsYXRpb25BbW91bnQsIGZsb2F0IHRvdGFsV2lkdGgp
Cit7CisgICAgQVNTRVJUKCEoaW50ZXJzZWN0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgCisgICAg
Ly8gU3RlcCAxOiBNYWtlIHBhaXJzIHNvIHdlIGNhbiBzb3J0IGJhc2VkIG9uIHJhbmdlIHN0YXJ0
aW5nLXBvaW50LiBXZSBkaWxhdGUgdGhlIHJhbmdlcyBpbiB0aGlzIHN0ZXAgYXMgd2VsbC4KKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHR1cGxlczsKKyAgICBmb3IgKGF1dG8g
aSA9IGludGVyc2VjdGlvbnMuYmVnaW4oKTsgaSAhPSBpbnRlcnNlY3Rpb25zLmVuZCgpOyBpKyss
IGkrKykKKyAgICAgICAgdHVwbGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigqaSAtIGRpbGF0aW9u
QW1vdW50LCAqKGkgKyAxKSArIGRpbGF0aW9uQW1vdW50KSk7CisgICAgc3RkOjpzb3J0KHR1cGxl
cy5iZWdpbigpLCB0dXBsZXMuZW5kKCksICZjb21wYXJlVHVwbGVzKTsKKworICAgIC8vIFN0ZXAg
MjogRGVhbCB3aXRoIGludGVyc2VjdGluZyByYW5nZXMuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxm
bG9hdCwgZmxvYXQ+PiBpbnRlcm1lZGlhdGVUdXBsZXM7CisgICAgaWYgKHR1cGxlcy5zaXplKCkg
Pj0gMikgeworICAgICAgICBpbnRlcm1lZGlhdGVUdXBsZXMuYXBwZW5kKCp0dXBsZXMuYmVnaW4o
KSk7CisgICAgICAgIGF1dG8gbGFzdEludGVybWVkaWF0ZSA9IGludGVybWVkaWF0ZVR1cGxlcy5i
ZWdpbigpOworICAgICAgICBmb3IgKGF1dG8gaSA9IHR1cGxlcy5iZWdpbigpICsgMTsgaSAhPSB0
dXBsZXMuZW5kKCk7IGkrKykgeworICAgICAgICAgICAgZmxvYXQmIGZpcnN0RW5kID0gbGFzdElu
dGVybWVkaWF0ZS0+c2Vjb25kOworICAgICAgICAgICAgZmxvYXQgc2Vjb25kU3RhcnQgPSBpLT5m
aXJzdDsKKyAgICAgICAgICAgIGZsb2F0IHNlY29uZEVuZCA9IGktPnNlY29uZDsKKyAgICAgICAg
ICAgIGlmIChzZWNvbmRTdGFydCA8PSBmaXJzdEVuZCAmJiBzZWNvbmRFbmQgPD0gZmlyc3RFbmQp
IHsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyByYW5nZSBjb21wbGV0ZWx5CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHNlY29uZFN0YXJ0IDw9IGZpcnN0RW5kKQorICAgICAgICAgICAg
ICAgIGZpcnN0RW5kID0gc2Vjb25kRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaW50ZXJtZWRpYXRlVHVwbGVzLmFwcGVuZCgqaSk7CisgICAgICAgICAgICAgICAgKyts
YXN0SW50ZXJtZWRpYXRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisg
ICAgICAgIGludGVybWVkaWF0ZVR1cGxlcyA9IHR1cGxlczsKKworICAgIC8vIFN0ZXAgMzogT3V0
cHV0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSByYW5nZXMsIGJ1dCBvbmx5IGlmIHRoZSBzcGFjZSB3
YXJyYW50cyBhbiB1bmRlcmxpbmUuCisgICAgZmxvYXQgcHJldmlvdXMgPSAwOworICAgIERhc2hB
cnJheSByZXN1bHQ7CisgICAgZm9yIChhdXRvIGkgPSBpbnRlcm1lZGlhdGVUdXBsZXMuYmVnaW4o
KTsgaSAhPSBpbnRlcm1lZGlhdGVUdXBsZXMuZW5kKCk7IGkrKykgeworICAgICAgICBpZiAoaS0+
Zmlyc3QgLSBwcmV2aW91cyA+IGRpbGF0aW9uQW1vdW50KSB7CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHByZXZpb3VzKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaS0+Zmlyc3QpOwor
ICAgICAgICB9CisgICAgICAgIHByZXZpb3VzID0gaS0+c2Vjb25kOworICAgIH0KKyAgICBpZiAo
dG90YWxXaWR0aCAtIHByZXZpb3VzID4gZGlsYXRpb25BbW91bnQpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChwcmV2aW91cyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodG90YWxXaWR0aCk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdTa2lw
SW5rVW5kZXJsaW5lKFRleHRQYWludGVyJiB0ZXh0UGFpbnRlciwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBGbG9hdFBvaW50IGxvY2FsT3JpZ2luLCBmbG9hdCB1bmRlcmxpbmVPZmZzZXQsIGZs
b2F0IHdpZHRoLCBib29sIGlzUHJpbnRpbmcsIGludCBtX3N0YXJ0LCBpbnQgbV9sZW4pCit7Cisg
ICAgRmxvYXRQb2ludCBhZGp1c3RlZExvY2FsT3JpZ2luID0gbG9jYWxPcmlnaW47CisgICAgYWRq
dXN0ZWRMb2NhbE9yaWdpbi5tb3ZlKDAsIHVuZGVybGluZU9mZnNldCk7CisgICAgRmxvYXRSZWN0
IHVuZGVybGluZUJvdW5kaW5nQm94ID0gY29udGV4dC5jb21wdXRlTGluZUJvdW5kc0ZvclRleHQo
YWRqdXN0ZWRMb2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgIERhc2hBcnJheSBp
bnRlcnNlY3Rpb25zID0gdGV4dFBhaW50ZXIuZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKHVuZGVybGlu
ZUJvdW5kaW5nQm94LCBtX3N0YXJ0LCBtX3N0YXJ0ICsgbV9sZW4pOworICAgIERhc2hBcnJheSBh
ID0gdHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhpbnRlcnNl
Y3Rpb25zLCB1bmRlcmxpbmVCb3VuZGluZ0JveC5oZWlnaHQoKSwgd2lkdGgpOworCisgICAgQVNT
RVJUKCEoYS5zaXplKCkgJSAyKSk7CisgICAgZm9yIChhdXRvIGkgPSBhLmJlZ2luKCk7IGkgIT0g
YS5lbmQoKTsgaSsrLCBpKyspCisgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UG9pbnQobG9jYWxPcmlnaW4ueCgpICsgKmksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9m
ZnNldCksICooaSsxKSAtICppLCBpc1ByaW50aW5nKTsKK30KKyNlbmRpZgorCiBJbmxpbmVUZXh0
Qm94Ojp+SW5saW5lVGV4dEJveCgpCiB7CiAgICAgaWYgKCFrbm93blRvSGF2ZU5vT3ZlcmZsb3co
KSAmJiBnVGV4dEJveGVzV2l0aE92ZXJmbG93KQpAQCAtMTA3Miw3ICsxMTQxLDcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JgogICAgICAgICAvLyBPZmZzZXQgYmV0d2VlbiBsaW5lcyAtIGFsd2F5
cyBub24temVybywgc28gbGluZXMgbmV2ZXIgY3Jvc3MgZWFjaCBvdGhlci4KICAgICAgICAgZmxv
YXQgZG91YmxlT2Zmc2V0ID0gdGV4dERlY29yYXRpb25UaGlja25lc3MgKyAxOwogICAgICAgICAK
LSAgICAgICAgYm9vbCBjbGlwRGVjb3JhdGlvblRvTWFzayA9IGxpbmVTdHlsZS50ZXh0RGVjb3Jh
dGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXBJbms7CisgICAgICAgIGJvb2wgY2xpcERl
Y29yYXRpb25Ub01hc2sgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CiAgICAgICAgIApAQCAtMTEx
NSwxMCArMTE4NCwxOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBs
b2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5
bGVEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZs
b2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZz
ZXQgKyBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAg
aWYgKGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXBJ
bmspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRlcmxpbmUodGV4dFBh
aW50ZXIsIGNvbnRleHQsIGxvY2FsT3JpZ2luLCB1bmRlcmxpbmVPZmZzZXQsIHdpZHRoLCBpc1By
aW50aW5nLCBtX3N0YXJ0LCBtX2xlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1VuZGVybGluZSh0ZXh0UGFpbnRlciwgY29udGV4
dCwgbG9jYWxPcmlnaW4sIHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9mZnNldCwgd2lkdGgsIGlz
UHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVG
b3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRl
cmxpbmVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChsb2Nh
bE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9m
ZnNldCksIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAjZWxzZQogICAgICAgICAgICAgLy8gTGVhdmUgb25lIHBpeGVsIG9mIHdoaXRlIGJldHdl
ZW4gdGhlIGJhc2VsaW5lIGFuZCB0aGUgdW5kZXJsaW5lLgpAQCAtMTEzNiwxMSArMTIxNCwyMCBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChsaW5lU3R5
bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwSW5rKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250
ZXh0LCBsb2NhbE9yaWdpbiwgMCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVj
b3JhdGlvblN0eWxlRG91YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdTa2lw
SW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdpbiwgLWRvdWJsZU9m
ZnNldCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYgLy8gQ1NTM19URVhUX0RF
Q09SQVRJT04KLSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChsb2NhbE9y
aWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRy
YXdMaW5lRm9yVGV4dChsb2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOwogI2lmIEVOQUJM
RShDU1MzX1RFWFRfREVDT1JBVElPTikKLSAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0
eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9y
aWdpbi55KCkgLSBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSBkb3VibGVPZmZzZXQpLCB3
aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2Vu
ZGlmIC8vIENTUzNfVEVYVF9ERUNPUkFUSU9OCiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IGZlODU0OWNjNTVmZTgzMjM1OTQzZjEwMzE1ZmQ1
OGI3NmU2MjIxNTkuLjUxNDBmY2NlYjhlMTkwYThlZmZjYzIwODJhOWIyYzk0NTdhMTczNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtMTc2LDQgKzE3Niw5
IEBAIHZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEluQ29udGV4dChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGZsb2F0IGFtb3VudFRvSW5jCiAgICAgbV9zYXZlZERyYXdpbmdTdGF0ZUZvck1h
c2sgPSBzYXZlZERyYXdpbmdTdGF0ZUZvck1hc2s7CiB9CiAKK0Rhc2hBcnJheSBUZXh0UGFpbnRl
cjo6Z2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMsIGlu
dCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCkKK3sKKyAgICByZXR1cm4g
bV9mb250LmdldEludGVyc2VjdGlvblBvaW50cyhtX3RleHRSdW4sIG1fdGV4dE9yaWdpbiwgdGV4
dFJ1blN0YXJ0SW5kZXgsIHRleHRSdW5FbmRJbmRleCwgbGluZUV4dGVudHMpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCmlu
ZGV4IGNmODU1YTRhZDM0OGNmN2FhMDAzZjMwNjcyMTE4MzVmYzg3OTdhMGUuLmRhY2UyNzc5MTY1
MTczMTUxOGMwZGM3YTcxYTk5MzViY2RiNmMwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0UGFpbnRlci5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFRleHRQYWludGVyX2gKIAog
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNiArNjgs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRleHQoKTsKICAgICB2b2lkIHBhaW50VGV4dElu
Q29udGV4dChHcmFwaGljc0NvbnRleHQmLCBmbG9hdCBhbW91bnRUb0luY3JlYXNlU3Ryb2tlV2lk
dGhCeSk7CiAKKyAgICBEYXNoQXJyYXkgZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMsIGludCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJ
bmRleCk7CisKIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhaW50U2VsZWN0ZWRUZXh0T25seTsKICAg
ICBib29sIG1fcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219352</attachid>
            <date>2013-12-16 14:32:49 -0800</date>
            <delta_ts>2013-12-16 18:30:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125718-20131216143317.patch</filename>
            <type>text/plain</type>
            <size>16715</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM5ZTZjNTk0NWM4NWQ1
NTNkYTI2YTk3OTAzYmI2NjE2ZDhlNGIzNy4uOTM2NmMyNGY3NzA1YTg2NjA3YmNjNTdkMDFlOWZl
NTQ5NDQ0MDQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTEyLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRmFzdGVyIGlt
cGxlbWVudGF0aW9uIG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IGltcGxlbWVudGF0aW9u
IG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZXh0cmFjdHMKKyAgICAgICAgZWFjaCBnbHlw
aCBpbnRvIGEgcGF0aCwgdGhlbiBkZWNvbXBvc2VzIGVhY2ggcGF0aCBpbnRvIGEgc2VyaWVzCisg
ICAgICAgIG9mIGNvbnRvdXJzLiBJdCB0aGVuIGludGVyc2VjdHMgZWFjaCBjb250b3VyIHdpdGgg
dGhlIHRvcCBhbmQKKyAgICAgICAgYm90dG9tIG9mIHRoZSB1bmRlcmxpbmUgKGJ5IGFwcHJveGlt
YXRpbmcgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUpLgorICAgICAgICBJdCB0aGVuIGRyYXdzIHVu
ZGVybGluZXMgaW4gYmV0d2VlbiB0aGVzZSBpbnRlcnNlY3Rpb24gcmVnaW9ucy4KKworICAgICAg
ICBUZXN0cyBmb3IgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBhbHJlYWR5IGV4aXN0IGluCisg
ICAgICAgIGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1kZWNvcmF0aW9uL3RleHQtZGVjb3JhdGlv
bi1za2lwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50cyk6IE5ldyBkZWZhdWx0IGZ1bmN0
aW9uCisgICAgICAgIHRvIGdldCB0aGUgcGxhY2VzIHdoZXJlIGFuIHVuZGVybGluZSB3b3VsZCBp
bnRlcnNlY3QgYSBUZXh0UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
U2lnbmF0dXJlIG9mIG5ldyBmdW5jdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBhdGhJbnRlcnNlY3Rpb25zKTog
SGFuZGxlcyBhIHNpbmdsZSBjb250b3VyCisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMpOiBJbXBsZW1lbnRzIHRoZSBsb2dpYyBkZXNjcmliZWQKKyAgICAgICAg
YWJvdmUKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlVHVwbGVzKTogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3RkOjpzb3J0
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRUZXh0SW50ZXJzZWN0aW9uc0ZvclNraXBJbmspOiBE
byBzb21lIHBvc3QtcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgaW50ZXJzZWN0aW9uIHJlZ2lv
bnMgKGRpbGF0aW5nIHRoZW0sIGV0Yy4pCisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERyYXdzIGEgc2VxdWVuY2Ugb2YgdW5kZXJsaW5lcyBpbnN0ZWFkCisgICAgICAg
IG9mIG9uZSBsb25nIG9uZQorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKTogQ2FsbCBkcmF3U2tpcElua1VuZGVybGluZQorICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Z2V0SW50
ZXJzZWN0aW9uUG9pbnRzKTogRm9yd2FyZCB0byBXZWJDb3JlOjpGb250CisgICAgICAgIHdpdGgg
c29tZSBpbnRlcm5hbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisKIDIwMTMtMTItMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXBsYWNlIHVzZXMgb2YgV1RGOjpCaXRBcnJheSB3aXRoIHN0ZDo6Yml0c2V0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGEyYjgwYTBlMTc5
MmVkYWQ2YjU4NWNhZmNhZjZhMWIyNTkxYTZjMzQuLmM2MmRkYTYxM2JlNjE2ZGE0NWY5ZjdkNjMw
NmQ5NDkyZjc1YjkyZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCkBAIC0zMTMsNiArMzEzLDE4IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pCiAgICAgcmV0
dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oTUFDKQorRGFzaEFycmF5IEZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50
cyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCB0
ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCwgY29uc3QgRmxvYXRSZWN0JiBs
aW5lRXh0ZW50cykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0ocnVuKTsKKyAgICBVTlVTRURf
UEFSQU0odGV4dE9yaWdpbik7CisgICAgVU5VU0VEX1BBUkFNKHRleHRSdW5TdGFydEluZGV4KTsK
KyAgICBVTlVTRURfUEFSQU0odGV4dFJ1bkVuZEluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0obGlu
ZUV4dGVudHMpOworICAgIHJldHVybiBEYXNoQXJyYXkoKTsKK30KKyNlbmRpZgorCiB2b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9u
dHMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA5ZmI1Nzlm
NmQ0NzFjMDBmNDhjMzZlYWRhZGY2MzE0ZGE2YzgzMDE1Li5hNTA0NTY2YjM3MjBlMjk1M2Y2MTVj
OThjZDJiMTk4OGVlM2QyN2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIEZvbnRfaAogI2RlZmluZSBGb250X2gKIAor
I2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgpAQCAtMTAw
LDYgKzEwMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAorICAgIERhc2hBcnJheSBnZXRJ
bnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRP
cmlnaW4sIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNv
bnN0OworCiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwg
U3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCmluZGV4IDcxOGMxNmQ5NjA1NjEyYzkwODlkMDQwM2Q2
MGEwMzFkOGYzMDQxZmMuLjEwYTc2NjI2YTc4YTg1ZWVkMzVjMWUzZmJlM2I5OTlmYjAxNWYyY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1t
CkBAIC0zMjMsNCArMzIzLDk0IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAjZW5kaWYKIH0K
IAordHlwZWRlZiBzdHJ1Y3QgX0dseXBoSXRlcmF0aW9uU3RhdGUgeworICAgIF9HbHlwaEl0ZXJh
dGlvblN0YXRlKENHUG9pbnQgX3N0YXJ0aW5nUG9pbnQsIENHUG9pbnQgX2N1cnJlbnRQb2ludCwg
Q0dGbG9hdCBfeTEsIENHRmxvYXQgX3kyLCBDR0Zsb2F0IF9taW5YLCBDR0Zsb2F0IF9tYXhYKQor
ICAgICAgICA6IHN0YXJ0aW5nUG9pbnQoX3N0YXJ0aW5nUG9pbnQpCisgICAgICAgICwgY3VycmVu
dFBvaW50KF9jdXJyZW50UG9pbnQpCisgICAgICAgICwgeTEoX3kxKQorICAgICAgICAsIHkyKF95
MikKKyAgICAgICAgLCBtaW5YKF9taW5YKQorICAgICAgICAsIG1heFgoX21heFgpCisgICAgewor
ICAgIH0KKyAgICBDR1BvaW50IHN0YXJ0aW5nUG9pbnQ7CisgICAgQ0dQb2ludCBjdXJyZW50UG9p
bnQ7CisgICAgQ0dGbG9hdCB5MTsKKyAgICBDR0Zsb2F0IHkyOworICAgIENHRmxvYXQgbWluWDsK
KyAgICBDR0Zsb2F0IG1heFg7Cit9IEdseXBoSXRlcmF0aW9uU3RhdGU7CisKK3N0YXRpYyBib29s
IGZpbmRJbnRlcnNlY3Rpb25Qb2ludChmbG9hdCB5LCBDR1BvaW50IHAxLCBDR1BvaW50IHAyLCBD
R0Zsb2F0JiB4KQoreworICAgIHggPSBwMS54ICsgKHkgLSBwMS55KSAqIChwMi54IC0gcDEueCkg
LyAocDIueSAtIHAxLnkpOworICAgIHJldHVybiAocDEueSA8IHkgJiYgcDIueSA+IHkpIHx8IChw
MS55ID4geSAmJiBwMi55IDwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRQYXRoSW50ZXJzZWN0
aW9ucyh2b2lkKiB2aW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCogZSkKK3sKKyAgICBHbHlwaEl0
ZXJhdGlvblN0YXRlICppbmZvID0gKEdseXBoSXRlcmF0aW9uU3RhdGUgKil2aW5mbzsKKyAgICBi
b29sIGRvSW50ZXJzZWN0aW9uID0gZmFsc2U7CisgICAgQ0dQb2ludCBwb2ludCA9IENHUG9pbnRa
ZXJvOworICAgIHN3aXRjaCAoZS0+dHlwZSkgeworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3Zl
VG9Qb2ludDoKKyAgICAgICAgaW5mby0+c3RhcnRpbmdQb2ludCA9IGUtPnBvaW50c1swXTsKKyAg
ICAgICAgaW5mby0+Y3VycmVudFBvaW50ID0gZS0+cG9pbnRzWzBdOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgIGRvSW50ZXJz
ZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgcG9pbnQgPSBlLT5wb2ludHNbMF07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgorICAgICAg
ICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRzWzFdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50Ogor
ICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRz
WzJdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRo
OgorICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gaW5mby0+
c3RhcnRpbmdQb2ludDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghZG9JbnRlcnNl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBDR0Zsb2F0IHg7CisgICAgaWYgKGZpbmRJbnRl
cnNlY3Rpb25Qb2ludChpbmZvLT55MSwgaW5mby0+Y3VycmVudFBvaW50LCBwb2ludCwgeCkpIHsK
KyAgICAgICAgaW5mby0+bWluWCA9IHN0ZDo6bWluKGluZm8tPm1pblgsIHgpOworICAgICAgICBp
bmZvLT5tYXhYID0gc3RkOjptYXgoaW5mby0+bWF4WCwgeCk7CisgICAgfQorICAgIGlmIChmaW5k
SW50ZXJzZWN0aW9uUG9pbnQoaW5mby0+eTIsIGluZm8tPmN1cnJlbnRQb2ludCwgcG9pbnQsIHgp
KSB7CisgICAgICAgIGluZm8tPm1pblggPSBzdGQ6Om1pbihpbmZvLT5taW5YLCB4KTsKKyAgICAg
ICAgaW5mby0+bWF4WCA9IHN0ZDo6bWF4KGluZm8tPm1heFgsIHgpOworICAgIH0KKyAgICBpbmZv
LT5jdXJyZW50UG9pbnQgPSBwb2ludDsKK30KKworRGFzaEFycmF5IEZvbnQ6OmdldEludGVyc2Vj
dGlvblBvaW50cyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sIGludCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCwgY29uc3QgRmxv
YXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3QKK3sKKyAgICBmbG9hdCBkZWx0YVg7CisgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCkK
KyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwg
dGV4dFJ1blN0YXJ0SW5kZXgsIHRleHRSdW5FbmRJbmRleCwgZ2x5cGhCdWZmZXIpOworICAgIGVs
c2UKKyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChy
dW4sIHRleHRSdW5TdGFydEluZGV4LCB0ZXh0UnVuRW5kSW5kZXgsIGdseXBoQnVmZmVyKTsKKyAg
ICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRy
YW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CisgICAg
dHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHRyYW5zbGF0aW9uLCAxLCAtMSk7
CisgICAgRGFzaEFycmF5IHJlc3VsdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdseXBoQnVm
ZmVyLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdseXBoSXRlcmF0aW9uU3RhdGUgaW5mbyA9IEds
eXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwgMCksIENHUG9pbnRNYWtlKDAsIDApLCBs
aW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSArIGxpbmVFeHRlbnRzLmhlaWdodCgpLCAx
ZTcsIC0xZTcpOworICAgICAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiBwYXRoID0gQ1RGb250Q3Jl
YXRlUGF0aEZvckdseXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaSktPnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpLCAmdHJhbnNsYXRpb24pOworICAgICAg
ICBDR1BhdGhBcHBseShwYXRoLmdldCgpLCAodm9pZCAqKSZpbmZvLCAmZmluZFBhdGhJbnRlcnNl
Y3Rpb25zKTsKKyAgICAgICAgaWYgKGluZm8ubWluWCA8IGluZm8ubWF4WCkgeworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmZvLm1pblggLSBsaW5lRXh0ZW50cy54KCkpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpbmZvLm1heFggLSBsaW5lRXh0ZW50cy54KCkpOworICAgICAgICB9
CisgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGkpOworICAgICAgICB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRl
KHRyYW5zbGF0aW9uLCBhZHZhbmNlLndpZHRoKCksIGFkdmFuY2UuaGVpZ2h0KCkpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggZDEwNjBlYjZjYjI2ZDBhY2JlMzExYzY3YjQxNDRlNmM4OGQx
OTQ0MC4uMWI2MTVmZWZjN2QwOTE2NzdhMWI1ZjI3ZjYyYjljZTAyZWUwYTUwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtNjUsNiArNjUsNzUgQEAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKElubGluZVRleHRCb3gpID09IHNpemVvZihTYW1lU2l6ZUFz
SW5saW5lVGV4dEJveCksIElubGluZVQKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IElubGlu
ZVRleHRCb3gqLCBMYXlvdXRSZWN0PiBJbmxpbmVUZXh0Qm94T3ZlcmZsb3dNYXA7CiBzdGF0aWMg
SW5saW5lVGV4dEJveE92ZXJmbG93TWFwKiBnVGV4dEJveGVzV2l0aE92ZXJmbG93OwogCisjaWYg
RU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OKQorc3RhdGljIGJvb2wgY29tcGFyZVR1cGxlcyhz
dGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBsLCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiByKQorewor
ICAgIHJldHVybiBsLmZpcnN0IDwgci5maXJzdDsKK30KKworc3RhdGljIERhc2hBcnJheSB0cmFu
c2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGNvbnN0IERhc2hBcnJh
eSYgaW50ZXJzZWN0aW9ucywgZmxvYXQgZGlsYXRpb25BbW91bnQsIGZsb2F0IHRvdGFsV2lkdGgp
Cit7CisgICAgQVNTRVJUKCEoaW50ZXJzZWN0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgCisgICAg
Ly8gU3RlcCAxOiBNYWtlIHBhaXJzIHNvIHdlIGNhbiBzb3J0IGJhc2VkIG9uIHJhbmdlIHN0YXJ0
aW5nLXBvaW50LiBXZSBkaWxhdGUgdGhlIHJhbmdlcyBpbiB0aGlzIHN0ZXAgYXMgd2VsbC4KKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHR1cGxlczsKKyAgICBmb3IgKGF1dG8g
aSA9IGludGVyc2VjdGlvbnMuYmVnaW4oKTsgaSAhPSBpbnRlcnNlY3Rpb25zLmVuZCgpOyBpKyss
IGkrKykKKyAgICAgICAgdHVwbGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigqaSAtIGRpbGF0aW9u
QW1vdW50LCAqKGkgKyAxKSArIGRpbGF0aW9uQW1vdW50KSk7CisgICAgc3RkOjpzb3J0KHR1cGxl
cy5iZWdpbigpLCB0dXBsZXMuZW5kKCksICZjb21wYXJlVHVwbGVzKTsKKworICAgIC8vIFN0ZXAg
MjogRGVhbCB3aXRoIGludGVyc2VjdGluZyByYW5nZXMuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxm
bG9hdCwgZmxvYXQ+PiBpbnRlcm1lZGlhdGVUdXBsZXM7CisgICAgaWYgKHR1cGxlcy5zaXplKCkg
Pj0gMikgeworICAgICAgICBpbnRlcm1lZGlhdGVUdXBsZXMuYXBwZW5kKCp0dXBsZXMuYmVnaW4o
KSk7CisgICAgICAgIGF1dG8gbGFzdEludGVybWVkaWF0ZSA9IGludGVybWVkaWF0ZVR1cGxlcy5i
ZWdpbigpOworICAgICAgICBmb3IgKGF1dG8gaSA9IHR1cGxlcy5iZWdpbigpICsgMTsgaSAhPSB0
dXBsZXMuZW5kKCk7IGkrKykgeworICAgICAgICAgICAgZmxvYXQmIGZpcnN0RW5kID0gbGFzdElu
dGVybWVkaWF0ZS0+c2Vjb25kOworICAgICAgICAgICAgZmxvYXQgc2Vjb25kU3RhcnQgPSBpLT5m
aXJzdDsKKyAgICAgICAgICAgIGZsb2F0IHNlY29uZEVuZCA9IGktPnNlY29uZDsKKyAgICAgICAg
ICAgIGlmIChzZWNvbmRTdGFydCA8PSBmaXJzdEVuZCAmJiBzZWNvbmRFbmQgPD0gZmlyc3RFbmQp
IHsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyByYW5nZSBjb21wbGV0ZWx5CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHNlY29uZFN0YXJ0IDw9IGZpcnN0RW5kKQorICAgICAgICAgICAg
ICAgIGZpcnN0RW5kID0gc2Vjb25kRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaW50ZXJtZWRpYXRlVHVwbGVzLmFwcGVuZCgqaSk7CisgICAgICAgICAgICAgICAgKyts
YXN0SW50ZXJtZWRpYXRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisg
ICAgICAgIGludGVybWVkaWF0ZVR1cGxlcyA9IHR1cGxlczsKKworICAgIC8vIFN0ZXAgMzogT3V0
cHV0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSByYW5nZXMsIGJ1dCBvbmx5IGlmIHRoZSBzcGFjZSB3
YXJyYW50cyBhbiB1bmRlcmxpbmUuCisgICAgZmxvYXQgcHJldmlvdXMgPSAwOworICAgIERhc2hB
cnJheSByZXN1bHQ7CisgICAgZm9yIChhdXRvIGkgPSBpbnRlcm1lZGlhdGVUdXBsZXMuYmVnaW4o
KTsgaSAhPSBpbnRlcm1lZGlhdGVUdXBsZXMuZW5kKCk7IGkrKykgeworICAgICAgICBpZiAoaS0+
Zmlyc3QgLSBwcmV2aW91cyA+IGRpbGF0aW9uQW1vdW50KSB7CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHByZXZpb3VzKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaS0+Zmlyc3QpOwor
ICAgICAgICB9CisgICAgICAgIHByZXZpb3VzID0gaS0+c2Vjb25kOworICAgIH0KKyAgICBpZiAo
dG90YWxXaWR0aCAtIHByZXZpb3VzID4gZGlsYXRpb25BbW91bnQpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChwcmV2aW91cyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodG90YWxXaWR0aCk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdTa2lw
SW5rVW5kZXJsaW5lKFRleHRQYWludGVyJiB0ZXh0UGFpbnRlciwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBGbG9hdFBvaW50IGxvY2FsT3JpZ2luLCBmbG9hdCB1bmRlcmxpbmVPZmZzZXQsIGZs
b2F0IHdpZHRoLCBib29sIGlzUHJpbnRpbmcsIGludCBtX3N0YXJ0LCBpbnQgbV9sZW4pCit7Cisg
ICAgRmxvYXRQb2ludCBhZGp1c3RlZExvY2FsT3JpZ2luID0gbG9jYWxPcmlnaW47CisgICAgYWRq
dXN0ZWRMb2NhbE9yaWdpbi5tb3ZlKDAsIHVuZGVybGluZU9mZnNldCk7CisgICAgRmxvYXRSZWN0
IHVuZGVybGluZUJvdW5kaW5nQm94ID0gY29udGV4dC5jb21wdXRlTGluZUJvdW5kc0ZvclRleHQo
YWRqdXN0ZWRMb2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgIERhc2hBcnJheSBp
bnRlcnNlY3Rpb25zID0gdGV4dFBhaW50ZXIuZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKHVuZGVybGlu
ZUJvdW5kaW5nQm94LCBtX3N0YXJ0LCBtX3N0YXJ0ICsgbV9sZW4pOworICAgIERhc2hBcnJheSBh
ID0gdHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhpbnRlcnNl
Y3Rpb25zLCB1bmRlcmxpbmVCb3VuZGluZ0JveC5oZWlnaHQoKSwgd2lkdGgpOworCisgICAgQVNT
RVJUKCEoYS5zaXplKCkgJSAyKSk7CisgICAgZm9yIChhdXRvIGkgPSBhLmJlZ2luKCk7IGkgIT0g
YS5lbmQoKTsgaSsrLCBpKyspCisgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UG9pbnQobG9jYWxPcmlnaW4ueCgpICsgKmksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9m
ZnNldCksICooaSsxKSAtICppLCBpc1ByaW50aW5nKTsKK30KKyNlbmRpZgorCiBJbmxpbmVUZXh0
Qm94Ojp+SW5saW5lVGV4dEJveCgpCiB7CiAgICAgaWYgKCFrbm93blRvSGF2ZU5vT3ZlcmZsb3co
KSAmJiBnVGV4dEJveGVzV2l0aE92ZXJmbG93KQpAQCAtMTA3Miw3ICsxMTQxLDcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JgogICAgICAgICAvLyBPZmZzZXQgYmV0d2VlbiBsaW5lcyAtIGFsd2F5
cyBub24temVybywgc28gbGluZXMgbmV2ZXIgY3Jvc3MgZWFjaCBvdGhlci4KICAgICAgICAgZmxv
YXQgZG91YmxlT2Zmc2V0ID0gdGV4dERlY29yYXRpb25UaGlja25lc3MgKyAxOwogICAgICAgICAK
LSAgICAgICAgYm9vbCBjbGlwRGVjb3JhdGlvblRvTWFzayA9IGxpbmVTdHlsZS50ZXh0RGVjb3Jh
dGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXBJbms7CisgICAgICAgIGJvb2wgY2xpcERl
Y29yYXRpb25Ub01hc2sgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CiAgICAgICAgIApAQCAtMTEx
NSwxMCArMTE4NCwxOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBs
b2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5
bGVEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZs
b2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZz
ZXQgKyBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAg
aWYgKGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXBJ
bmspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRlcmxpbmUodGV4dFBh
aW50ZXIsIGNvbnRleHQsIGxvY2FsT3JpZ2luLCB1bmRlcmxpbmVPZmZzZXQsIHdpZHRoLCBpc1By
aW50aW5nLCBtX3N0YXJ0LCBtX2xlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1VuZGVybGluZSh0ZXh0UGFpbnRlciwgY29udGV4
dCwgbG9jYWxPcmlnaW4sIHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9mZnNldCwgd2lkdGgsIGlz
UHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVG
b3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRl
cmxpbmVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChsb2Nh
bE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9m
ZnNldCksIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAjZWxzZQogICAgICAgICAgICAgLy8gTGVhdmUgb25lIHBpeGVsIG9mIHdoaXRlIGJldHdl
ZW4gdGhlIGJhc2VsaW5lIGFuZCB0aGUgdW5kZXJsaW5lLgpAQCAtMTEzNiwxMSArMTIxNCwyMCBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChsaW5lU3R5
bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwSW5rKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250
ZXh0LCBsb2NhbE9yaWdpbiwgMCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVj
b3JhdGlvblN0eWxlRG91YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdTa2lw
SW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdpbiwgLWRvdWJsZU9m
ZnNldCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYgLy8gQ1NTM19URVhUX0RF
Q09SQVRJT04KLSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChsb2NhbE9y
aWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRy
YXdMaW5lRm9yVGV4dChsb2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOwogI2lmIEVOQUJM
RShDU1MzX1RFWFRfREVDT1JBVElPTikKLSAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0
eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9y
aWdpbi55KCkgLSBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSBkb3VibGVPZmZzZXQpLCB3
aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2Vu
ZGlmIC8vIENTUzNfVEVYVF9ERUNPUkFUSU9OCiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IGZlODU0OWNjNTVmZTgzMjM1OTQzZjEwMzE1ZmQ1
OGI3NmU2MjIxNTkuLjUxNDBmY2NlYjhlMTkwYThlZmZjYzIwODJhOWIyYzk0NTdhMTczNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtMTc2LDQgKzE3Niw5
IEBAIHZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEluQ29udGV4dChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGZsb2F0IGFtb3VudFRvSW5jCiAgICAgbV9zYXZlZERyYXdpbmdTdGF0ZUZvck1h
c2sgPSBzYXZlZERyYXdpbmdTdGF0ZUZvck1hc2s7CiB9CiAKK0Rhc2hBcnJheSBUZXh0UGFpbnRl
cjo6Z2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMsIGlu
dCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCkKK3sKKyAgICByZXR1cm4g
bV9mb250LmdldEludGVyc2VjdGlvblBvaW50cyhtX3RleHRSdW4sIG1fdGV4dE9yaWdpbiwgdGV4
dFJ1blN0YXJ0SW5kZXgsIHRleHRSdW5FbmRJbmRleCwgbGluZUV4dGVudHMpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCmlu
ZGV4IGNmODU1YTRhZDM0OGNmN2FhMDAzZjMwNjcyMTE4MzVmYzg3OTdhMGUuLjBiZDU4ZDI3ZmI5
YzEyZTg3ZDY5NTZhMGNiZjVkNDNjM2MzMTdlODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0UGFpbnRlci5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFRleHRQYWludGVyX2gKIAog
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNiArNjgs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRleHQoKTsKICAgICB2b2lkIHBhaW50VGV4dElu
Q29udGV4dChHcmFwaGljc0NvbnRleHQmLCBmbG9hdCBhbW91bnRUb0luY3JlYXNlU3Ryb2tlV2lk
dGhCeSk7CiAKKyAgICBEYXNoQXJyYXkgZ2V0SW50ZXJzZWN0aW9uUG9pbnRzKGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMsIGludCBzdGFydCwgaW50IGVuZCk7CisKIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3BhaW50U2VsZWN0ZWRUZXh0T25seTsKICAgICBib29sIG1fcGFpbnRTZWxlY3RlZFRl
eHRTZXBhcmF0ZWx5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219378</attachid>
            <date>2013-12-16 18:30:49 -0800</date>
            <delta_ts>2013-12-17 14:01:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125718-20131216183118.patch</filename>
            <type>text/plain</type>
            <size>15802</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM5ZTZjNTk0NWM4NWQ1
NTNkYTI2YTk3OTAzYmI2NjE2ZDhlNGIzNy4uOTM2NmMyNGY3NzA1YTg2NjA3YmNjNTdkMDFlOWZl
NTQ5NDQ0MDQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTEyLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRmFzdGVyIGlt
cGxlbWVudGF0aW9uIG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IGltcGxlbWVudGF0aW9u
IG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZXh0cmFjdHMKKyAgICAgICAgZWFjaCBnbHlw
aCBpbnRvIGEgcGF0aCwgdGhlbiBkZWNvbXBvc2VzIGVhY2ggcGF0aCBpbnRvIGEgc2VyaWVzCisg
ICAgICAgIG9mIGNvbnRvdXJzLiBJdCB0aGVuIGludGVyc2VjdHMgZWFjaCBjb250b3VyIHdpdGgg
dGhlIHRvcCBhbmQKKyAgICAgICAgYm90dG9tIG9mIHRoZSB1bmRlcmxpbmUgKGJ5IGFwcHJveGlt
YXRpbmcgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUpLgorICAgICAgICBJdCB0aGVuIGRyYXdzIHVu
ZGVybGluZXMgaW4gYmV0d2VlbiB0aGVzZSBpbnRlcnNlY3Rpb24gcmVnaW9ucy4KKworICAgICAg
ICBUZXN0cyBmb3IgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBhbHJlYWR5IGV4aXN0IGluCisg
ICAgICAgIGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1kZWNvcmF0aW9uL3RleHQtZGVjb3JhdGlv
bi1za2lwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50cyk6IE5ldyBkZWZhdWx0IGZ1bmN0
aW9uCisgICAgICAgIHRvIGdldCB0aGUgcGxhY2VzIHdoZXJlIGFuIHVuZGVybGluZSB3b3VsZCBp
bnRlcnNlY3QgYSBUZXh0UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
U2lnbmF0dXJlIG9mIG5ldyBmdW5jdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBhdGhJbnRlcnNlY3Rpb25zKTog
SGFuZGxlcyBhIHNpbmdsZSBjb250b3VyCisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMpOiBJbXBsZW1lbnRzIHRoZSBsb2dpYyBkZXNjcmliZWQKKyAgICAgICAg
YWJvdmUKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlVHVwbGVzKTogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3RkOjpzb3J0
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRUZXh0SW50ZXJzZWN0aW9uc0ZvclNraXBJbmspOiBE
byBzb21lIHBvc3QtcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgaW50ZXJzZWN0aW9uIHJlZ2lv
bnMgKGRpbGF0aW5nIHRoZW0sIGV0Yy4pCisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERyYXdzIGEgc2VxdWVuY2Ugb2YgdW5kZXJsaW5lcyBpbnN0ZWFkCisgICAgICAg
IG9mIG9uZSBsb25nIG9uZQorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKTogQ2FsbCBkcmF3U2tpcElua1VuZGVybGluZQorICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Z2V0SW50
ZXJzZWN0aW9uUG9pbnRzKTogRm9yd2FyZCB0byBXZWJDb3JlOjpGb250CisgICAgICAgIHdpdGgg
c29tZSBpbnRlcm5hbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisKIDIwMTMtMTItMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXBsYWNlIHVzZXMgb2YgV1RGOjpCaXRBcnJheSB3aXRoIHN0ZDo6Yml0c2V0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggOWZiNTc5ZjZkNDcxYzAw
ZjQ4YzM2ZWFkYWRmNjMxNGRhNmM4MzAxNS4uZGM1NjNlNzE0NTQyNDJkMjI4NmIwNjUwNWMzMDBh
MGRiNDdhMzM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAt
MjUsNiArMjUsNyBAQAogI2lmbmRlZiBGb250X2gKICNkZWZpbmUgRm9udF9oCiAKKyNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJG
b250R2x5cGhzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTEwMCw2ICsxMDEs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0
OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIERh
c2hBcnJheSBpbnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmIHRleHRPcmlnaW4sIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4
dGVudHMpIGNvbnN0OworI2VuZGlmCisKICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50
JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KaW5kZXggNzE4YzE2ZDk2
MDU2MTJjOTA4OWQwNDAzZDYwYTAzMWQ4ZjMwNDFmYy4uOTdjMDU2NDNkNDU3N2I2OTQ5YmZkY2Ux
ZWY2MWJiZDg5MzU5NjZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRNYWMubW0KQEAgLTMyMyw0ICszMjMsOTQgQEAgdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnMKICNlbmRpZgogfQogCitzdHJ1Y3QgR2x5cGhJdGVyYXRpb25TdGF0ZSB7CisgICAgR2x5
cGhJdGVyYXRpb25TdGF0ZShDR1BvaW50IHN0YXJ0aW5nUG9pbnQsIENHUG9pbnQgY3VycmVudFBv
aW50LCBDR0Zsb2F0IHkxLCBDR0Zsb2F0IHkyLCBDR0Zsb2F0IG1pblgsIENHRmxvYXQgbWF4WCkK
KyAgICAgICAgOiBzdGFydGluZ1BvaW50KHN0YXJ0aW5nUG9pbnQpCisgICAgICAgICwgY3VycmVu
dFBvaW50KGN1cnJlbnRQb2ludCkKKyAgICAgICAgLCB5MSh5MSkKKyAgICAgICAgLCB5Mih5MikK
KyAgICAgICAgLCBtaW5YKG1pblgpCisgICAgICAgICwgbWF4WChtYXhYKQorICAgIHsKKyAgICB9
CisgICAgQ0dQb2ludCBzdGFydGluZ1BvaW50OworICAgIENHUG9pbnQgY3VycmVudFBvaW50Owor
ICAgIENHRmxvYXQgeTE7CisgICAgQ0dGbG9hdCB5MjsKKyAgICBDR0Zsb2F0IG1pblg7CisgICAg
Q0dGbG9hdCBtYXhYOworfTsKKworc3RhdGljIGJvb2wgZmluZEludGVyc2VjdGlvblBvaW50KGZs
b2F0IHksIENHUG9pbnQgcDEsIENHUG9pbnQgcDIsIENHRmxvYXQmIHgpCit7CisgICAgeCA9IHAx
LnggKyAoeSAtIHAxLnkpICogKHAyLnggLSBwMS54KSAvIChwMi55IC0gcDEueSk7CisgICAgcmV0
dXJuIChwMS55IDwgeSAmJiBwMi55ID4geSkgfHwgKHAxLnkgPiB5ICYmIHAyLnkgPCB5KTsKK30K
Kworc3RhdGljIHZvaWQgZmluZFBhdGhJbnRlcnNlY3Rpb25zKHZvaWQqIHN0YXRlQXNWb2lkUG9p
bnRlciwgY29uc3QgQ0dQYXRoRWxlbWVudCogZSkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0
aWNfY2FzdDxHbHlwaEl0ZXJhdGlvblN0YXRlKj4oc3RhdGVBc1ZvaWRQb2ludGVyKTsKKyAgICBi
b29sIGRvSW50ZXJzZWN0aW9uID0gZmFsc2U7CisgICAgQ0dQb2ludCBwb2ludCA9IENHUG9pbnRa
ZXJvOworICAgIHN3aXRjaCAoZS0+dHlwZSkgeworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3Zl
VG9Qb2ludDoKKyAgICAgICAgc3RhdGUuc3RhcnRpbmdQb2ludCA9IGUtPnBvaW50c1swXTsKKyAg
ICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0gZS0+cG9pbnRzWzBdOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgIGRvSW50ZXJz
ZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgcG9pbnQgPSBlLT5wb2ludHNbMF07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgorICAgICAg
ICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRzWzFdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50Ogor
ICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gZS0+cG9pbnRz
WzJdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRo
OgorICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgIHBvaW50ID0gc3RhdGUu
c3RhcnRpbmdQb2ludDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghZG9JbnRlcnNl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBDR0Zsb2F0IHg7CisgICAgaWYgKGZpbmRJbnRl
cnNlY3Rpb25Qb2ludChzdGF0ZS55MSwgc3RhdGUuY3VycmVudFBvaW50LCBwb2ludCwgeCkpIHsK
KyAgICAgICAgc3RhdGUubWluWCA9IHN0ZDo6bWluKHN0YXRlLm1pblgsIHgpOworICAgICAgICBz
dGF0ZS5tYXhYID0gc3RkOjptYXgoc3RhdGUubWF4WCwgeCk7CisgICAgfQorICAgIGlmIChmaW5k
SW50ZXJzZWN0aW9uUG9pbnQoc3RhdGUueTIsIHN0YXRlLmN1cnJlbnRQb2ludCwgcG9pbnQsIHgp
KSB7CisgICAgICAgIHN0YXRlLm1pblggPSBzdGQ6Om1pbihzdGF0ZS5taW5YLCB4KTsKKyAgICAg
ICAgc3RhdGUubWF4WCA9IHN0ZDo6bWF4KHN0YXRlLm1heFgsIHgpOworICAgIH0KKyAgICBzdGF0
ZS5jdXJyZW50UG9pbnQgPSBwb2ludDsKK30KKworRGFzaEFycmF5IEZvbnQ6OmludGVyc2VjdGlv
blBvaW50cyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4s
IGludCB0ZXh0UnVuU3RhcnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCwgY29uc3QgRmxvYXRS
ZWN0JiBsaW5lRXh0ZW50cykgY29uc3QKK3sKKyAgICBmbG9hdCBkZWx0YVg7CisgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCkKKyAg
ICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwgdGV4
dFJ1blN0YXJ0SW5kZXgsIHRleHRSdW5FbmRJbmRleCwgZ2x5cGhCdWZmZXIpOworICAgIGVsc2UK
KyAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4s
IHRleHRSdW5TdGFydEluZGV4LCB0ZXh0UnVuRW5kSW5kZXgsIGdseXBoQnVmZmVyKTsKKyAgICBD
R0FmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5z
bGF0aW9uKHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CisgICAgdHJh
bnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHRyYW5zbGF0aW9uLCAxLCAtMSk7Cisg
ICAgRGFzaEFycmF5IHJlc3VsdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdseXBoQnVmZmVy
LnNpemUoKTsgKytpKSB7CisgICAgICAgIEdseXBoSXRlcmF0aW9uU3RhdGUgaW5mbyA9IEdseXBo
SXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwgMCksIENHUG9pbnRNYWtlKDAsIDApLCBsaW5l
RXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSArIGxpbmVFeHRlbnRzLmhlaWdodCgpLCAxZTcs
IC0xZTcpOworICAgICAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiBwYXRoID0gYWRvcHRDRihDVEZv
bnRDcmVhdGVQYXRoRm9yR2x5cGgoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpKS0+cGxhdGZvcm1E
YXRhKCkuY3RGb250KCksIGdseXBoQnVmZmVyLmdseXBoQXQoaSksICZ0cmFuc2xhdGlvbikpOwor
ICAgICAgICBDR1BhdGhBcHBseShwYXRoLmdldCgpLCAmaW5mbywgJmZpbmRQYXRoSW50ZXJzZWN0
aW9ucyk7CisgICAgICAgIGlmIChpbmZvLm1pblggPCBpbmZvLm1heFgpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaW5mby5taW5YIC0gbGluZUV4dGVudHMueCgpKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaW5mby5tYXhYIC0gbGluZUV4dGVudHMueCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VB
dChpKTsKKyAgICAgICAgdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZSh0
cmFuc2xhdGlvbiwgYWR2YW5jZS53aWR0aCgpLCBhZHZhbmNlLmhlaWdodCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCmluZGV4IGQxMDYwZWI2Y2IyNmQwYWNiZTMxMWM2N2I0MTQ0ZTZjODhkMTk0
NDAuLmE4NTBlMWE1YzlmMjcyZjNjYmJhOGZiNmJkNDg5NmQyZGI5ZmYyNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTY1LDYgKzY1LDc4IEBAIENP
TVBJTEVfQVNTRVJUKHNpemVvZihJbmxpbmVUZXh0Qm94KSA9PSBzaXplb2YoU2FtZVNpemVBc0lu
bGluZVRleHRCb3gpLCBJbmxpbmVUCiB0eXBlZGVmIFdURjo6SGFzaE1hcDxjb25zdCBJbmxpbmVU
ZXh0Qm94KiwgTGF5b3V0UmVjdD4gSW5saW5lVGV4dEJveE92ZXJmbG93TWFwOwogc3RhdGljIElu
bGluZVRleHRCb3hPdmVyZmxvd01hcCogZ1RleHRCb3hlc1dpdGhPdmVyZmxvdzsKIAorI2lmIEVO
QUJMRShDU1MzX1RFWFRfREVDT1JBVElPTikKK3N0YXRpYyBib29sIGNvbXBhcmVUdXBsZXMoc3Rk
OjpwYWlyPGZsb2F0LCBmbG9hdD4gbCwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gcikKK3sKKyAg
ICByZXR1cm4gbC5maXJzdCA8IHIuZmlyc3Q7Cit9CisKK3N0YXRpYyBEYXNoQXJyYXkgdHJhbnNs
YXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhjb25zdCBEYXNoQXJyYXkm
IGludGVyc2VjdGlvbnMsIGZsb2F0IGRpbGF0aW9uQW1vdW50LCBmbG9hdCB0b3RhbFdpZHRoKQor
eworICAgIEFTU0VSVCghKGludGVyc2VjdGlvbnMuc2l6ZSgpICUgMikpOworICAgIAorICAgIC8v
IFN0ZXAgMTogTWFrZSBwYWlycyBzbyB3ZSBjYW4gc29ydCBiYXNlZCBvbiByYW5nZSBzdGFydGlu
Zy1wb2ludC4gV2UgZGlsYXRlIHRoZSByYW5nZXMgaW4gdGhpcyBzdGVwIGFzIHdlbGwuCisgICAg
VmVjdG9yPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiB0dXBsZXM7CisgICAgZm9yIChhdXRvIGkg
PSBpbnRlcnNlY3Rpb25zLmJlZ2luKCk7IGkgIT0gaW50ZXJzZWN0aW9ucy5lbmQoKTsgaSsrLCBp
KyspCisgICAgICAgIHR1cGxlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoKmkgLSBkaWxhdGlvbkFt
b3VudCwgKihpICsgMSkgKyBkaWxhdGlvbkFtb3VudCkpOworICAgIHN0ZDo6c29ydCh0dXBsZXMu
YmVnaW4oKSwgdHVwbGVzLmVuZCgpLCAmY29tcGFyZVR1cGxlcyk7CisKKyAgICAvLyBTdGVwIDI6
IERlYWwgd2l0aCBpbnRlcnNlY3RpbmcgcmFuZ2VzLgorICAgIFZlY3RvcjxzdGQ6OnBhaXI8Zmxv
YXQsIGZsb2F0Pj4gaW50ZXJtZWRpYXRlVHVwbGVzOworICAgIGlmICh0dXBsZXMuc2l6ZSgpID49
IDIpIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlVHVwbGVzLmFwcGVuZCgqdHVwbGVzLmJlZ2luKCkp
OworICAgICAgICBhdXRvIGxhc3RJbnRlcm1lZGlhdGUgPSBpbnRlcm1lZGlhdGVUdXBsZXMuYmVn
aW4oKTsKKyAgICAgICAgZm9yIChhdXRvIGkgPSB0dXBsZXMuYmVnaW4oKSArIDE7IGkgIT0gdHVw
bGVzLmVuZCgpOyBpKyspIHsKKyAgICAgICAgICAgIGZsb2F0JiBmaXJzdEVuZCA9IGxhc3RJbnRl
cm1lZGlhdGUtPnNlY29uZDsKKyAgICAgICAgICAgIGZsb2F0IHNlY29uZFN0YXJ0ID0gaS0+Zmly
c3Q7CisgICAgICAgICAgICBmbG9hdCBzZWNvbmRFbmQgPSBpLT5zZWNvbmQ7CisgICAgICAgICAg
ICBpZiAoc2Vjb25kU3RhcnQgPD0gZmlyc3RFbmQgJiYgc2Vjb25kRW5kIDw9IGZpcnN0RW5kKSB7
CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoaXMgcmFuZ2UgY29tcGxldGVseQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChzZWNvbmRTdGFydCA8PSBmaXJzdEVuZCkKKyAgICAgICAgICAgICAg
ICBmaXJzdEVuZCA9IHNlY29uZEVuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQoKmkpOworICAgICAgICAgICAgICAgICsrbGFz
dEludGVybWVkaWF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICBpbnRlcm1lZGlhdGVUdXBsZXMgPSB0dXBsZXM7CisKKyAgICAvLyBTdGVwIDM6IE91dHB1
dCB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgcmFuZ2VzLCBidXQgb25seSBpZiB0aGUgc3BhY2Ugd2Fy
cmFudHMgYW4gdW5kZXJsaW5lLgorICAgIGZsb2F0IHByZXZpb3VzID0gMDsKKyAgICBEYXNoQXJy
YXkgcmVzdWx0OworICAgIGZvciAoYXV0byBpID0gaW50ZXJtZWRpYXRlVHVwbGVzLmJlZ2luKCk7
IGkgIT0gaW50ZXJtZWRpYXRlVHVwbGVzLmVuZCgpOyBpKyspIHsKKyAgICAgICAgaWYgKGktPmZp
cnN0IC0gcHJldmlvdXMgPiBkaWxhdGlvbkFtb3VudCkgeworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChwcmV2aW91cyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGktPmZpcnN0KTsKKyAg
ICAgICAgfQorICAgICAgICBwcmV2aW91cyA9IGktPnNlY29uZDsKKyAgICB9CisgICAgaWYgKHRv
dGFsV2lkdGggLSBwcmV2aW91cyA+IGRpbGF0aW9uQW1vdW50KSB7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQocHJldmlvdXMpOworICAgICAgICByZXN1bHQuYXBwZW5kKHRvdGFsV2lkdGgpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBkcmF3U2tpcElu
a1VuZGVybGluZShUZXh0UGFpbnRlciYgdGV4dFBhaW50ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgRmxvYXRQb2ludCBsb2NhbE9yaWdpbiwgZmxvYXQgdW5kZXJsaW5lT2Zmc2V0LCBmbG9h
dCB3aWR0aCwgYm9vbCBpc1ByaW50aW5nLCBpbnQgbV9zdGFydCwgaW50IG1fbGVuKQoreworICAg
IEZsb2F0UG9pbnQgYWRqdXN0ZWRMb2NhbE9yaWdpbiA9IGxvY2FsT3JpZ2luOworICAgIGFkanVz
dGVkTG9jYWxPcmlnaW4ubW92ZSgwLCB1bmRlcmxpbmVPZmZzZXQpOworICAgIEZsb2F0UmVjdCB1
bmRlcmxpbmVCb3VuZGluZ0JveCA9IGNvbnRleHQuY29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGFk
anVzdGVkTG9jYWxPcmlnaW4sIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICBEYXNoQXJyYXkgaW50
ZXJzZWN0aW9uczsKKyNpZiBQTEFURk9STShNQUMpCisgICAgaW50ZXJzZWN0aW9ucyA9IHRleHRQ
YWludGVyLmludGVyc2VjdGlvblBvaW50cyh1bmRlcmxpbmVCb3VuZGluZ0JveCwgbV9zdGFydCwg
bV9zdGFydCArIG1fbGVuKTsKKyNlbmRpZgorICAgIERhc2hBcnJheSBhID0gdHJhbnNsYXRlSW50
ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhpbnRlcnNlY3Rpb25zLCB1bmRlcmxp
bmVCb3VuZGluZ0JveC5oZWlnaHQoKSwgd2lkdGgpOworCisgICAgQVNTRVJUKCEoYS5zaXplKCkg
JSAyKSk7CisgICAgZm9yIChhdXRvIGkgPSBhLmJlZ2luKCk7IGkgIT0gYS5lbmQoKTsgaSsrLCBp
KyspCisgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmln
aW4ueCgpICsgKmksIGxvY2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksICooaSsxKSAt
ICppLCBpc1ByaW50aW5nKTsKK30KKyNlbmRpZgorCiBJbmxpbmVUZXh0Qm94Ojp+SW5saW5lVGV4
dEJveCgpCiB7CiAgICAgaWYgKCFrbm93blRvSGF2ZU5vT3ZlcmZsb3coKSAmJiBnVGV4dEJveGVz
V2l0aE92ZXJmbG93KQpAQCAtMTA3Miw3ICsxMTQ0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JgogICAgICAgICAvLyBPZmZzZXQgYmV0d2VlbiBsaW5lcyAtIGFsd2F5cyBub24temVybywgc28g
bGluZXMgbmV2ZXIgY3Jvc3MgZWFjaCBvdGhlci4KICAgICAgICAgZmxvYXQgZG91YmxlT2Zmc2V0
ID0gdGV4dERlY29yYXRpb25UaGlja25lc3MgKyAxOwogICAgICAgICAKLSAgICAgICAgYm9vbCBj
bGlwRGVjb3JhdGlvblRvTWFzayA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBU
ZXh0RGVjb3JhdGlvblNraXBJbms7CisgICAgICAgIGJvb2wgY2xpcERlY29yYXRpb25Ub01hc2sg
PSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CiAgICAgICAgIApAQCAtMTExNSwxMCArMTE4NywxOSBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGNvbnRleHQuZHJh
d0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkg
KyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVEb3VibGUpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxP
cmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQgKyBkb3VibGVPZmZz
ZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVTdHlsZS50
ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXBJbmspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRlcmxpbmUodGV4dFBhaW50ZXIsIGNvbnRleHQs
IGxvY2FsT3JpZ2luLCB1bmRlcmxpbmVPZmZzZXQsIHdpZHRoLCBpc1ByaW50aW5nLCBtX3N0YXJ0
LCBtX2xlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUg
PT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3U2tpcElua1VuZGVybGluZSh0ZXh0UGFpbnRlciwgY29udGV4dCwgbG9jYWxPcmlnaW4s
IHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9mZnNldCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3Rh
cnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9p
bnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3
aWR0aCwgaXNQcmludGluZyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29yYXRpb25T
dHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxv
Y2FsT3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCArIGRvdWJsZU9mZnNldCksIHdpZHRoLCBp
c1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAjZWxzZQogICAg
ICAgICAgICAgLy8gTGVhdmUgb25lIHBpeGVsIG9mIHdoaXRlIGJldHdlZW4gdGhlIGJhc2VsaW5l
IGFuZCB0aGUgdW5kZXJsaW5lLgpAQCAtMTEzNiwxMSArMTIxNywyMCBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChsaW5lU3R5bGUudGV4dERlY29yYXRp
b25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwSW5rKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdp
biwgMCwgd2lkdGgsIGlzUHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91
YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRl
eHRQYWludGVyLCBjb250ZXh0LCBsb2NhbE9yaWdpbiwgLWRvdWJsZU9mZnNldCwgd2lkdGgsIGlz
UHJpbnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYgLy8gQ1NTM19URVhUX0RFQ09SQVRJT04KLSAgICAg
ICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChsb2NhbE9yaWdpbiwgd2lkdGgsIGlz
UHJpbnRpbmcpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChs
b2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOwogI2lmIEVOQUJMRShDU1MzX1RFWFRfREVD
T1JBVElPTikKLSAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNv
cmF0aW9uU3R5bGVEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVG
b3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSBkb3Vi
bGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmln
aW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQcmludGlu
Zyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2VuZGlmIC8vIENTUzNfVEVY
VF9ERUNPUkFUSU9OCiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwCmluZGV4IGZlODU0OWNjNTVmZTgzMjM1OTQzZjEwMzE1ZmQ1OGI3NmU2MjIxNTkuLjA0
Y2QyZDZlMjU5ZGIyNjY0M2UyOGU0Y2VhNTBiYmIwMWZkNmU4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtMTc2LDQgKzE3NiwxMSBAQCB2b2lkIFRleHRQ
YWludGVyOjpwYWludFRleHRJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbW91bnRUb0luYwogICAgIG1fc2F2ZWREcmF3aW5nU3RhdGVGb3JNYXNrID0gc2F2ZWREcmF3
aW5nU3RhdGVGb3JNYXNrOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQorRGFzaEFycmF5IFRleHRQ
YWludGVyOjppbnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cywg
aW50IHRleHRSdW5TdGFydEluZGV4LCBpbnQgdGV4dFJ1bkVuZEluZGV4KQoreworICAgIHJldHVy
biBtX2ZvbnQuaW50ZXJzZWN0aW9uUG9pbnRzKG1fdGV4dFJ1biwgbV90ZXh0T3JpZ2luLCB0ZXh0
UnVuU3RhcnRJbmRleCwgdGV4dFJ1bkVuZEluZGV4LCBsaW5lRXh0ZW50cyk7Cit9CisjZW5kaWYK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuaAppbmRleCBjZjg1NWE0YWQzNDhjZjdhYTAwM2YzMDY3MjExODM1ZmM4Nzk3YTBlLi4yMGIz
YTExZGYxNjlhNDE1YzFmZjE3ZTNkYTg3NTNiOWQ1M2E3ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBUZXh0UGFpbnRl
cl9oCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEYXNoQXJyYXku
aCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3
LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50VGV4dCgpOwogICAgIHZvaWQgcGFp
bnRUZXh0SW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIGZsb2F0IGFtb3VudFRvSW5jcmVhc2VT
dHJva2VXaWR0aEJ5KTsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBEYXNoQXJyYXkgaW50ZXJz
ZWN0aW9uUG9pbnRzKGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMsIGludCB0ZXh0UnVuU3Rh
cnRJbmRleCwgaW50IHRleHRSdW5FbmRJbmRleCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBi
b29sIG1fcGFpbnRTZWxlY3RlZFRleHRPbmx5OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4
dFNlcGFyYXRlbHk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219450</attachid>
            <date>2013-12-17 14:01:16 -0800</date>
            <delta_ts>2013-12-20 17:39:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125718-20131217140114.patch</filename>
            <type>text/plain</type>
            <size>16837</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM5ZTZjNTk0NWM4NWQ1
NTNkYTI2YTk3OTAzYmI2NjE2ZDhlNGIzNy4uOTM2NmMyNGY3NzA1YTg2NjA3YmNjNTdkMDFlOWZl
NTQ5NDQ0MDQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTEyLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRmFzdGVyIGlt
cGxlbWVudGF0aW9uIG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IGltcGxlbWVudGF0aW9u
IG9mIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZXh0cmFjdHMKKyAgICAgICAgZWFjaCBnbHlw
aCBpbnRvIGEgcGF0aCwgdGhlbiBkZWNvbXBvc2VzIGVhY2ggcGF0aCBpbnRvIGEgc2VyaWVzCisg
ICAgICAgIG9mIGNvbnRvdXJzLiBJdCB0aGVuIGludGVyc2VjdHMgZWFjaCBjb250b3VyIHdpdGgg
dGhlIHRvcCBhbmQKKyAgICAgICAgYm90dG9tIG9mIHRoZSB1bmRlcmxpbmUgKGJ5IGFwcHJveGlt
YXRpbmcgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUpLgorICAgICAgICBJdCB0aGVuIGRyYXdzIHVu
ZGVybGluZXMgaW4gYmV0d2VlbiB0aGVzZSBpbnRlcnNlY3Rpb24gcmVnaW9ucy4KKworICAgICAg
ICBUZXN0cyBmb3IgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBhbHJlYWR5IGV4aXN0IGluCisg
ICAgICAgIGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1kZWNvcmF0aW9uL3RleHQtZGVjb3JhdGlv
bi1za2lwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdldEludGVyc2VjdGlvblBvaW50cyk6IE5ldyBkZWZhdWx0IGZ1bmN0
aW9uCisgICAgICAgIHRvIGdldCB0aGUgcGxhY2VzIHdoZXJlIGFuIHVuZGVybGluZSB3b3VsZCBp
bnRlcnNlY3QgYSBUZXh0UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
U2lnbmF0dXJlIG9mIG5ldyBmdW5jdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBhdGhJbnRlcnNlY3Rpb25zKTog
SGFuZGxlcyBhIHNpbmdsZSBjb250b3VyCisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRJbnRl
cnNlY3Rpb25Qb2ludHMpOiBJbXBsZW1lbnRzIHRoZSBsb2dpYyBkZXNjcmliZWQKKyAgICAgICAg
YWJvdmUKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlVHVwbGVzKTogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3RkOjpzb3J0
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRUZXh0SW50ZXJzZWN0aW9uc0ZvclNraXBJbmspOiBE
byBzb21lIHBvc3QtcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgaW50ZXJzZWN0aW9uIHJlZ2lv
bnMgKGRpbGF0aW5nIHRoZW0sIGV0Yy4pCisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERyYXdzIGEgc2VxdWVuY2Ugb2YgdW5kZXJsaW5lcyBpbnN0ZWFkCisgICAgICAg
IG9mIG9uZSBsb25nIG9uZQorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKTogQ2FsbCBkcmF3U2tpcElua1VuZGVybGluZQorICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Z2V0SW50
ZXJzZWN0aW9uUG9pbnRzKTogRm9yd2FyZCB0byBXZWJDb3JlOjpGb250CisgICAgICAgIHdpdGgg
c29tZSBpbnRlcm5hbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisKIDIwMTMtMTItMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXBsYWNlIHVzZXMgb2YgV1RGOjpCaXRBcnJheSB3aXRoIHN0ZDo6Yml0c2V0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAppbmRleCAyMDI5OTM1ZmZhZDEyMWM5YzFhODQyMzUyZTU4MmMwMDdkNTY2YmI0Li4w
MjA5Njk1NzMwMzYyMWM0MDNhOGFjNjYyZjEwMGRmNGViZDA1NTNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAg
LTEwNTIsNCArMTA1Miw4IEBACiAjZGVmaW5lIEVOQUJMRV9PUEVOVFlQRV9WRVJUSUNBTCAxCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTikgJiYgUExBVEZPUk0oTUFD
KQorI2RlZmluZSBFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9JTksgMQorI2VuZGlm
CisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCmluZGV4IDlmYjU3OWY2ZDQ3MWMwMGY0OGMzNmVhZGFkZjYzMTRkYTZjODMw
MTUuLmNhYzFhYzNhNzk0NTgxOWRiYWQ0NGE0MDJiZWZmODAyMTgzYWIxZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYg
Rm9udF9oCiAjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCkBAIC0xMDAsNiArMTAxLDggQEAgcHVibGljOgogICAgIHZvaWQg
ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNv
bnN0OwogCisgICAgRGFzaEFycmF5IGludGVyc2VjdGlvblBvaW50cyhjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxv
YXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVu
JiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KaW5kZXggNzE4
YzE2ZDk2MDU2MTJjOTA4OWQwNDAzZDYwYTAzMWQ4ZjMwNDFmYy4uZjkxZjE3NDY2MDYwMTU2MjYx
OWY4NDFkYTlhZjI4YWE0MGQ4ZDIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAgLTIzLDYgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiRm9udC5oIgogCisjaW1wb3J0ICJEYXNoQXJyYXkuaCIKICNpbXBvcnQg
IkdseXBoQnVmZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKQEAgLTMyMyw0ICszMjQsOTYgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnMKICNl
bmRpZgogfQogCisjaWYgRU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OX1NLSVBfSU5LKQorc3Ry
dWN0IEdseXBoSXRlcmF0aW9uU3RhdGUgeworICAgIEdseXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2lu
dCBzdGFydGluZ1BvaW50LCBDR1BvaW50IGN1cnJlbnRQb2ludCwgQ0dGbG9hdCB5MSwgQ0dGbG9h
dCB5MiwgQ0dGbG9hdCBtaW5YLCBDR0Zsb2F0IG1heFgpCisgICAgICAgIDogc3RhcnRpbmdQb2lu
dChzdGFydGluZ1BvaW50KQorICAgICAgICAsIGN1cnJlbnRQb2ludChjdXJyZW50UG9pbnQpCisg
ICAgICAgICwgeTEoeTEpCisgICAgICAgICwgeTIoeTIpCisgICAgICAgICwgbWluWChtaW5YKQor
ICAgICAgICAsIG1heFgobWF4WCkKKyAgICB7CisgICAgfQorICAgIENHUG9pbnQgc3RhcnRpbmdQ
b2ludDsKKyAgICBDR1BvaW50IGN1cnJlbnRQb2ludDsKKyAgICBDR0Zsb2F0IHkxOworICAgIENH
RmxvYXQgeTI7CisgICAgQ0dGbG9hdCBtaW5YOworICAgIENHRmxvYXQgbWF4WDsKK307CisKK3N0
YXRpYyBib29sIGZpbmRJbnRlcnNlY3Rpb25Qb2ludChmbG9hdCB5LCBDR1BvaW50IHAxLCBDR1Bv
aW50IHAyLCBDR0Zsb2F0JiB4KQoreworICAgIHggPSBwMS54ICsgKHkgLSBwMS55KSAqIChwMi54
IC0gcDEueCkgLyAocDIueSAtIHAxLnkpOworICAgIHJldHVybiAocDEueSA8IHkgJiYgcDIueSA+
IHkpIHx8IChwMS55ID4geSAmJiBwMi55IDwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRQYXRo
SW50ZXJzZWN0aW9ucyh2b2lkKiBzdGF0ZUFzVm9pZFBvaW50ZXIsIGNvbnN0IENHUGF0aEVsZW1l
bnQqIGUpCit7CisgICAgYXV0byYgc3RhdGUgPSAqc3RhdGljX2Nhc3Q8R2x5cGhJdGVyYXRpb25T
dGF0ZSo+KHN0YXRlQXNWb2lkUG9pbnRlcik7CisgICAgYm9vbCBkb0ludGVyc2VjdGlvbiA9IGZh
bHNlOworICAgIENHUG9pbnQgcG9pbnQgPSBDR1BvaW50WmVybzsKKyAgICBzd2l0Y2ggKGUtPnR5
cGUpIHsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50TW92ZVRvUG9pbnQ6CisgICAgICAgIHN0YXRl
LnN0YXJ0aW5nUG9pbnQgPSBlLT5wb2ludHNbMF07CisgICAgICAgIHN0YXRlLmN1cnJlbnRQb2lu
dCA9IGUtPnBvaW50c1swXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVu
dEFkZExpbmVUb1BvaW50OgorICAgICAgICBkb0ludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAg
IHBvaW50ID0gZS0+cG9pbnRzWzBdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhF
bGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgZG9JbnRlcnNlY3Rpb24gPSB0cnVl
OworICAgICAgICBwb2ludCA9IGUtPnBvaW50c1sxXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBrQ0dQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgZG9JbnRlcnNlY3Rpb24g
PSB0cnVlOworICAgICAgICBwb2ludCA9IGUtPnBvaW50c1syXTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBrQ0dQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKKyAgICAgICAgZG9JbnRlcnNlY3Rp
b24gPSB0cnVlOworICAgICAgICBwb2ludCA9IHN0YXRlLnN0YXJ0aW5nUG9pbnQ7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBpZiAoIWRvSW50ZXJzZWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgQ0dGbG9hdCB4OworICAgIGlmIChmaW5kSW50ZXJzZWN0aW9uUG9pbnQoc3RhdGUueTEs
IHN0YXRlLmN1cnJlbnRQb2ludCwgcG9pbnQsIHgpKSB7CisgICAgICAgIHN0YXRlLm1pblggPSBz
dGQ6Om1pbihzdGF0ZS5taW5YLCB4KTsKKyAgICAgICAgc3RhdGUubWF4WCA9IHN0ZDo6bWF4KHN0
YXRlLm1heFgsIHgpOworICAgIH0KKyAgICBpZiAoZmluZEludGVyc2VjdGlvblBvaW50KHN0YXRl
LnkyLCBzdGF0ZS5jdXJyZW50UG9pbnQsIHBvaW50LCB4KSkgeworICAgICAgICBzdGF0ZS5taW5Y
ID0gc3RkOjptaW4oc3RhdGUubWluWCwgeCk7CisgICAgICAgIHN0YXRlLm1heFggPSBzdGQ6Om1h
eChzdGF0ZS5tYXhYLCB4KTsKKyAgICB9CisgICAgc3RhdGUuY3VycmVudFBvaW50ID0gcG9pbnQ7
Cit9CisKK0Rhc2hBcnJheSBGb250OjppbnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgdGV4dFJ1blN0YXJ0SW5kZXgs
IGludCB0ZXh0UnVuRW5kSW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0
Cit7CisgICAgZmxvYXQgZGVsdGFYOworICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAg
IGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXgpCisgICAgICAgIGRlbHRhWCA9IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIHRleHRSdW5TdGFydEluZGV4LCB0ZXh0UnVu
RW5kSW5kZXgsIGdseXBoQnVmZmVyKTsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWCA9IGdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCB0ZXh0UnVuU3RhcnRJbmRleCwgdGV4
dFJ1bkVuZEluZGV4LCBnbHlwaEJ1ZmZlcik7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNs
YXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbih0ZXh0T3JpZ2luLngoKSAr
IGRlbHRhWCwgdGV4dE9yaWdpbi55KCkpOworICAgIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFu
c2Zvcm1TY2FsZSh0cmFuc2xhdGlvbiwgMSwgLTEpOworICAgIERhc2hBcnJheSByZXN1bHQ7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAg
ICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKENHUG9pbnRN
YWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwgbGluZUV4dGVudHMueSgpLCBsaW5lRXh0ZW50
cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwgMWU3LCAtMWU3KTsKKyAgICAgICAgUmV0YWlu
UHRyPENHUGF0aFJlZj4gcGF0aCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKGds
eXBoQnVmZmVyLmZvbnREYXRhQXQoaSktPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlwaEJ1
ZmZlci5nbHlwaEF0KGkpLCAmdHJhbnNsYXRpb24pKTsKKyAgICAgICAgQ0dQYXRoQXBwbHkocGF0
aC5nZXQoKSwgJmluZm8sICZmaW5kUGF0aEludGVyc2VjdGlvbnMpOworICAgICAgICBpZiAoaW5m
by5taW5YIDwgaW5mby5tYXhYKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluZm8ubWlu
WCAtIGxpbmVFeHRlbnRzLngoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluZm8ubWF4
WCAtIGxpbmVFeHRlbnRzLngoKSk7CisgICAgICAgIH0KKyAgICAgICAgR2x5cGhCdWZmZXJBZHZh
bmNlIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSk7CisgICAgICAgIHRyYW5zbGF0
aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNsYXRpb24sIGFkdmFuY2Uud2lk
dGgoKSwgYWR2YW5jZS5oZWlnaHQoKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Cisj
ZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmlu
ZGV4IGQxMDYwZWI2Y2IyNmQwYWNiZTMxMWM2N2I0MTQ0ZTZjODhkMTk0NDAuLmUxZjYyMWI5OWNm
ZDFjY2U2NDQwMmE2NGRmMGYzM2JhYjU1NzgyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkNocm9t
ZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCkBAIC02NSw2ICs2Niw3NiBAQCBDT01QSUxFX0FTU0VS
VChzaXplb2YoSW5saW5lVGV4dEJveCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNJbmxpbmVUZXh0Qm94
KSwgSW5saW5lVAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIExh
eW91dFJlY3Q+IElubGluZVRleHRCb3hPdmVyZmxvd01hcDsKIHN0YXRpYyBJbmxpbmVUZXh0Qm94
T3ZlcmZsb3dNYXAqIGdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3c7CiAKKyNpZiBFTkFCTEUoQ1NTM19U
RVhUX0RFQ09SQVRJT05fU0tJUF9JTkspCitzdGF0aWMgYm9vbCBjb21wYXJlVHVwbGVzKHN0ZDo6
cGFpcjxmbG9hdCwgZmxvYXQ+IGwsIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IHIpCit7CisgICAg
cmV0dXJuIGwuZmlyc3QgPCByLmZpcnN0OworfQorCitzdGF0aWMgRGFzaEFycmF5IHRyYW5zbGF0
ZUludGVyc2VjdGlvblBvaW50c1RvU2tpcElua0JvdW5kYXJpZXMoY29uc3QgRGFzaEFycmF5JiBp
bnRlcnNlY3Rpb25zLCBmbG9hdCBkaWxhdGlvbkFtb3VudCwgZmxvYXQgdG90YWxXaWR0aCkKK3sK
KyAgICBBU1NFUlQoIShpbnRlcnNlY3Rpb25zLnNpemUoKSAlIDIpKTsKKyAgICAKKyAgICAvLyBT
dGVwIDE6IE1ha2UgcGFpcnMgc28gd2UgY2FuIHNvcnQgYmFzZWQgb24gcmFuZ2Ugc3RhcnRpbmct
cG9pbnQuIFdlIGRpbGF0ZSB0aGUgcmFuZ2VzIGluIHRoaXMgc3RlcCBhcyB3ZWxsLgorICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gdHVwbGVzOworICAgIGZvciAoYXV0byBpID0g
aW50ZXJzZWN0aW9ucy5iZWdpbigpOyBpICE9IGludGVyc2VjdGlvbnMuZW5kKCk7IGkrKywgaSsr
KQorICAgICAgICB0dXBsZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCppIC0gZGlsYXRpb25BbW91
bnQsICooaSArIDEpICsgZGlsYXRpb25BbW91bnQpKTsKKyAgICBzdGQ6OnNvcnQodHVwbGVzLmJl
Z2luKCksIHR1cGxlcy5lbmQoKSwgJmNvbXBhcmVUdXBsZXMpOworCisgICAgLy8gU3RlcCAyOiBE
ZWFsIHdpdGggaW50ZXJzZWN0aW5nIHJhbmdlcy4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPGZsb2F0
LCBmbG9hdD4+IGludGVybWVkaWF0ZVR1cGxlczsKKyAgICBpZiAodHVwbGVzLnNpemUoKSA+PSAy
KSB7CisgICAgICAgIGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQoKnR1cGxlcy5iZWdpbigpKTsK
KyAgICAgICAgYXV0byBsYXN0SW50ZXJtZWRpYXRlID0gaW50ZXJtZWRpYXRlVHVwbGVzLmJlZ2lu
KCk7CisgICAgICAgIGZvciAoYXV0byBpID0gdHVwbGVzLmJlZ2luKCkgKyAxOyBpICE9IHR1cGxl
cy5lbmQoKTsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCYgZmlyc3RFbmQgPSBsYXN0SW50ZXJt
ZWRpYXRlLT5zZWNvbmQ7CisgICAgICAgICAgICBmbG9hdCBzZWNvbmRTdGFydCA9IGktPmZpcnN0
OworICAgICAgICAgICAgZmxvYXQgc2Vjb25kRW5kID0gaS0+c2Vjb25kOworICAgICAgICAgICAg
aWYgKHNlY29uZFN0YXJ0IDw9IGZpcnN0RW5kICYmIHNlY29uZEVuZCA8PSBmaXJzdEVuZCkgewor
ICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIHJhbmdlIGNvbXBsZXRlbHkKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2Vjb25kU3RhcnQgPD0gZmlyc3RFbmQpCisgICAgICAgICAgICAgICAg
Zmlyc3RFbmQgPSBzZWNvbmRFbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpbnRlcm1lZGlhdGVUdXBsZXMuYXBwZW5kKCppKTsKKyAgICAgICAgICAgICAgICArK2xhc3RJ
bnRlcm1lZGlhdGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgaW50ZXJtZWRpYXRlVHVwbGVzID0gdHVwbGVzOworCisgICAgLy8gU3RlcCAzOiBPdXRwdXQg
dGhlIHNwYWNlIGJldHdlZW4gdGhlIHJhbmdlcywgYnV0IG9ubHkgaWYgdGhlIHNwYWNlIHdhcnJh
bnRzIGFuIHVuZGVybGluZS4KKyAgICBmbG9hdCBwcmV2aW91cyA9IDA7CisgICAgRGFzaEFycmF5
IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8gaSA9IGludGVybWVkaWF0ZVR1cGxlcy5iZWdpbigpOyBp
ICE9IGludGVybWVkaWF0ZVR1cGxlcy5lbmQoKTsgaSsrKSB7CisgICAgICAgIGlmIChpLT5maXJz
dCAtIHByZXZpb3VzID4gZGlsYXRpb25BbW91bnQpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocHJldmlvdXMpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpLT5maXJzdCk7CisgICAg
ICAgIH0KKyAgICAgICAgcHJldmlvdXMgPSBpLT5zZWNvbmQ7CisgICAgfQorICAgIGlmICh0b3Rh
bFdpZHRoIC0gcHJldmlvdXMgPiBkaWxhdGlvbkFtb3VudCkgeworICAgICAgICByZXN1bHQuYXBw
ZW5kKHByZXZpb3VzKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh0b3RhbFdpZHRoKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZHJhd1NraXBJbmtV
bmRlcmxpbmUoVGV4dFBhaW50ZXImIHRleHRQYWludGVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIEZsb2F0UG9pbnQgbG9jYWxPcmlnaW4sIGZsb2F0IHVuZGVybGluZU9mZnNldCwgZmxvYXQg
d2lkdGgsIGJvb2wgaXNQcmludGluZywgaW50IG1fc3RhcnQsIGludCBtX2xlbikKK3sKKyAgICBG
bG9hdFBvaW50IGFkanVzdGVkTG9jYWxPcmlnaW4gPSBsb2NhbE9yaWdpbjsKKyAgICBhZGp1c3Rl
ZExvY2FsT3JpZ2luLm1vdmUoMCwgdW5kZXJsaW5lT2Zmc2V0KTsKKyAgICBGbG9hdFJlY3QgdW5k
ZXJsaW5lQm91bmRpbmdCb3ggPSBjb250ZXh0LmNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dChhZGp1
c3RlZExvY2FsT3JpZ2luLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgRGFzaEFycmF5IGludGVy
c2VjdGlvbnM7CisgICAgaW50ZXJzZWN0aW9ucyA9IHRleHRQYWludGVyLmludGVyc2VjdGlvblBv
aW50cyh1bmRlcmxpbmVCb3VuZGluZ0JveCwgbV9zdGFydCwgbV9zdGFydCArIG1fbGVuKTsKKyAg
ICBEYXNoQXJyYXkgYSA9IHRyYW5zbGF0ZUludGVyc2VjdGlvblBvaW50c1RvU2tpcElua0JvdW5k
YXJpZXMoaW50ZXJzZWN0aW9ucywgdW5kZXJsaW5lQm91bmRpbmdCb3guaGVpZ2h0KCksIHdpZHRo
KTsKKworICAgIEFTU0VSVCghKGEuc2l6ZSgpICUgMikpOworICAgIGZvciAoYXV0byBpID0gYS5i
ZWdpbigpOyBpICE9IGEuZW5kKCk7IGkrKywgaSsrKQorICAgICAgICBjb250ZXh0LmRyYXdMaW5l
Rm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSArICppLCBsb2NhbE9yaWdpbi55KCkg
KyB1bmRlcmxpbmVPZmZzZXQpLCAqKGkrMSkgLSAqaSwgaXNQcmludGluZyk7Cit9CisjZW5kaWYK
KwogSW5saW5lVGV4dEJveDo6fklubGluZVRleHRCb3goKQogewogICAgIGlmICgha25vd25Ub0hh
dmVOb092ZXJmbG93KCkgJiYgZ1RleHRCb3hlc1dpdGhPdmVyZmxvdykKQEAgLTEwNzIsNyArMTE0
Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgLy8gT2Zmc2V0IGJldHdlZW4g
bGluZXMgLSBhbHdheXMgbm9uLXplcm8sIHNvIGxpbmVzIG5ldmVyIGNyb3NzIGVhY2ggb3RoZXIu
CiAgICAgICAgIGZsb2F0IGRvdWJsZU9mZnNldCA9IHRleHREZWNvcmF0aW9uVGhpY2tuZXNzICsg
MTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgY2xpcERlY29yYXRpb25Ub01hc2sgPSBsaW5lU3R5
bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwSW5rOworICAgICAg
ICBib29sIGNsaXBEZWNvcmF0aW9uVG9NYXNrID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZmFsc2UpOwogICAg
ICAgICAKQEAgLTExMTUsMTAgKzExODYsMjMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERl
Y29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2Fs
T3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIGlz
UHJpbnRpbmcpOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0
RGVjb3JhdGlvblN0eWxlRG91YmxlKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdM
aW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsg
dW5kZXJsaW5lT2Zmc2V0ICsgZG91YmxlT2Zmc2V0KSwgd2lkdGgsIGlzUHJpbnRpbmcpOworI2lm
IEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lOSykKKyAgICAgICAgICAgICAgICBp
ZiAobGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tpcCgpID09IFRleHREZWNvcmF0aW9uU2tpcElu
aykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1VuZGVybGluZSh0ZXh0UGFp
bnRlciwgY29udGV4dCwgbG9jYWxPcmlnaW4sIHVuZGVybGluZU9mZnNldCwgd2lkdGgsIGlzUHJp
bnRpbmcsIG1fc3RhcnQsIG1fbGVuKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRl
Y29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKHRleHRQYWludGVyLCBjb250ZXh0
LCBsb2NhbE9yaWdpbiwgdW5kZXJsaW5lT2Zmc2V0ICsgZG91YmxlT2Zmc2V0LCB3aWR0aCwgaXNQ
cmludGluZywgbV9zdGFydCwgbV9sZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvLyBDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lO
SworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50
KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lk
dGgsIGlzUHJpbnRpbmcpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5
bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2Nh
bE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQgKyBkb3VibGVPZmZzZXQpLCB3aWR0aCwgaXNQ
cmludGluZyk7CisjaWYgRU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OX1NLSVBfSU5LKQorICAg
ICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgICAg
IC8vIExlYXZlIG9uZSBwaXhlbCBvZiB3aGl0ZSBiZXR3ZWVuIHRoZSBiYXNlbGluZSBhbmQgdGhl
IHVuZGVybGluZS4KQEAgLTExMzYsMTEgKzEyMjAsMjQgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVm
YXVsdDoKKyNpZiBFTkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9JTkspCisgICAgICAg
ICAgICAgICAgaWYgKGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3Jh
dGlvblNraXBJbmspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5n
RGlzYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRlcmxp
bmUodGV4dFBhaW50ZXIsIGNvbnRleHQsIGxvY2FsT3JpZ2luLCAwLCB3aWR0aCwgaXNQcmludGlu
ZywgbV9zdGFydCwgbV9sZW4pOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb3Jh
dGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVEb3VibGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1NraXBJbmtVbmRlcmxpbmUodGV4dFBhaW50ZXIsIGNvbnRleHQsIGxv
Y2FsT3JpZ2luLCAtZG91YmxlT2Zmc2V0LCB3aWR0aCwgaXNQcmludGluZywgbV9zdGFydCwgbV9s
ZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNl
bmRpZiAvLyBDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lOSwogI2VuZGlmIC8vIENTUzNfVEVY
VF9ERUNPUkFUSU9OCi0gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQobG9j
YWxPcmlnaW4sIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kcmF3TGluZUZvclRleHQobG9jYWxPcmlnaW4sIHdpZHRoLCBpc1ByaW50aW5nKTsKICNpZiBF
TkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJT04pCi0gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRp
b25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9j
YWxPcmlnaW4ueSgpIC0gZG91YmxlT2Zmc2V0KSwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVE
b3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChG
bG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpIC0gZG91YmxlT2Zmc2V0
KSwgd2lkdGgsIGlzUHJpbnRpbmcpOworI2lmIEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9T
S0lQX0lOSykKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIH0KICNlbmRp
ZiAvLyBDU1MzX1RFWFRfREVDT1JBVElPTgogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludGVyLmNwcAppbmRleCBmZTg1NDljYzU1ZmU4MzIzNTk0M2YxMDMxNWZkNThi
NzZlNjIyMTU5Li5jMzY0OTA1OWRhMTYzOGM0MTU3ZWU2OWEwNGYyNjQ0OTA5YzJmM2U4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTE3Niw0ICsxNzYsMTEg
QEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0SW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgZmxvYXQgYW1vdW50VG9JbmMKICAgICBtX3NhdmVkRHJhd2luZ1N0YXRlRm9yTWFz
ayA9IHNhdmVkRHJhd2luZ1N0YXRlRm9yTWFzazsKIH0KIAorI2lmIEVOQUJMRShDU1MzX1RFWFRf
REVDT1JBVElPTl9TS0lQX0lOSykKK0Rhc2hBcnJheSBUZXh0UGFpbnRlcjo6aW50ZXJzZWN0aW9u
UG9pbnRzKGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMsIGludCB0ZXh0UnVuU3RhcnRJbmRl
eCwgaW50IHRleHRSdW5FbmRJbmRleCkKK3sKKyAgICByZXR1cm4gbV9mb250LmludGVyc2VjdGlv
blBvaW50cyhtX3RleHRSdW4sIG1fdGV4dE9yaWdpbiwgdGV4dFJ1blN0YXJ0SW5kZXgsIHRleHRS
dW5FbmRJbmRleCwgbGluZUV4dGVudHMpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmgKaW5kZXggY2Y4NTVhNGFk
MzQ4Y2Y3YWEwMDNmMzA2NzIxMTgzNWZjODc5N2EwZS4uOTdkNjM4NDQ5MzNlMTllNTRkYzgzZGFi
ZTU0ZDZiMTBkNjNlMzQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmgK
QEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgVGV4dFBhaW50ZXJfaAogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Nyw2ICs2OCw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHBhaW50VGV4dCgpOwogICAgIHZvaWQgcGFpbnRUZXh0SW5Db250ZXh0KEdyYXBo
aWNzQ29udGV4dCYsIGZsb2F0IGFtb3VudFRvSW5jcmVhc2VTdHJva2VXaWR0aEJ5KTsKIAorICAg
IERhc2hBcnJheSBpbnRlcnNlY3Rpb25Qb2ludHMoY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50
cywgaW50IHRleHRSdW5TdGFydEluZGV4LCBpbnQgdGV4dFJ1bkVuZEluZGV4KTsKKwogcHJpdmF0
ZToKICAgICBib29sIG1fcGFpbnRTZWxlY3RlZFRleHRPbmx5OwogICAgIGJvb2wgbV9wYWludFNl
bGVjdGVkVGV4dFNlcGFyYXRlbHk7Cg==
</data>
<flag name="review"
          id="243080"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="243081"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>