<?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>21033</bug_id>
          
          <creation_ts>2008-09-23 13:01:26 -0700</creation_ts>
          <short_desc>queryCommandValue(&apos;FontSize&apos;) returns pixel values instead of IE font numbers</short_desc>
          <delta_ts>2010-09-09 14:29:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>525.x (Safari 3.1)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug, InRadar, NeedsReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>linda167</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jon</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
    
    <cc>pkasting</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xlyuan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92360</commentid>
    <comment_count>0</comment_count>
    <who name="">linda167</who>
    <bug_when>2008-09-23 13:01:26 -0700</bug_when>
    <thetext>Safari&apos;s execCommand(&apos;FontSize&apos;) takes in the standard browser font sizes (values range from 1-7). However, when calling queryCommandValue for FontSize, Safari gives us back bogus pixel values instead of 1-7. 

These pixel values are also not correct. If you measure the actual pixel of the text, they are much smaller than the pixel values Safari gives us.

The fix should be to return us the correct browser font size values (1-7). IE and Firefox currently does this.

Here&apos;s the table for the bogus pixel values:
Browser font size 1 -&gt; Safari: 10 px (Actual font size: 8 px)
Browser font size 2 -&gt; Safari: 13 px (Actual font size: 10 px)
Browser font size 3 -&gt; Safari: 16 px (Actual font size: 12 px)
Browser font size 4 -&gt; Safari: 18 px (Actual font size: 14 px)
Browser font size 5 -&gt; Safari: 24 px (Actual font size: 18 px)
Browser font size 6 -&gt; Safari: 32 px (Actual font size: 24 px)
Browser font size 7 -&gt; Safari: 48 px (Actual font size: 36 px)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92384</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-23 14:12:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/6240811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106648</commentid>
    <comment_count>2</comment_count>
      <attachid>26941</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-22 14:32:54 -0800</bug_when>
    <thetext>Created attachment 26941
test case

This will be a simple fix.  Here&apos;s a fancy test case I wrote to see what this is actually &quot;supposed&quot; to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106650</commentid>
    <comment_count>3</comment_count>
      <attachid>26942</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-22 14:44:22 -0800</bug_when>
    <thetext>Created attachment 26942
nicer test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109712</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-13 11:28:19 -0800</bug_when>
    <thetext>I&apos;ve not seen the pixel values being &quot;bogus&quot;.   But they aren&apos;t the IE font size numbers which FF and IE return.  I guess we should match them there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115890</commentid>
    <comment_count>5</comment_count>
    <who name="Jon@Chromium">jon</who>
    <bug_when>2009-03-30 14:37:49 -0700</bug_when>
    <thetext>This is causing Chromium Bug 7447.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115892</commentid>
    <comment_count>6</comment_count>
    <who name="Jon@Chromium">jon</who>
    <bug_when>2009-03-30 14:38:26 -0700</bug_when>
    <thetext>*** Bug 24855 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115909</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-30 15:18:36 -0700</bug_when>
    <thetext>The &quot;FontSize&quot; numbers which IE/FF return are pretty useless.  But that&apos;s how this command is &quot;supposed&quot; to work.  Now we just need to find out what pixel values map to what font size values in IE/FF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115916</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-30 15:31:13 -0700</bug_when>
    <thetext>I think the code to do this kind of conversion is found in:
http://mxr.mozilla.org/mozilla-central/source/layout/style/nsStyleUtil.cpp
But I&apos;m not really sure.  Either way, it&apos;s a crazy amount of code for this support.

Gmail certainly can work around this behavior in WebKit by doing their own mapping from px values to IE font sizes (Which TrogEdit already does).

We still should fix this.  I&apos;m just not sure what to fix it to yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115927</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-30 16:24:30 -0700</bug_when>
    <thetext>FontDescription optionally stores an m_keywordSize, which is exactly the size we&apos;d want here.

But we&apos;d have to plumb trough a method like:
String Frame::selectionStartStylePropertyValue(int stylePropertyID) const

which returned a FontDescription or an int keywordSize.

To calculate the keywordSize from the FontDescription, we&apos;d have to test to see if it&apos;s cached first, if it&apos;s not cached on the FontDescription, then we&apos;d have to approximate it based on the font size.  The logic to approximate it may depend on quirks vs. standards mode, and may be rather complicated, I don&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115941</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-30 17:15:40 -0700</bug_when>
    <thetext>Looks like we have some similar mapping code to mozilla in:
float CSSStyleSelector::fontSizeForKeyword(int keyword, bool quirksMode, bool fixed) const

Probably because Hyatt worked on both implementations. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130549</commentid>
    <comment_count>11</comment_count>
    <who name="Jon@Chromium">jon</who>
    <bug_when>2009-07-08 15:42:18 -0700</bug_when>
    <thetext>Eric, I would really like to have this fixed for the 3.0 release of Chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133167</commentid>
    <comment_count>12</comment_count>
    <who name="Jon@Chromium">jon</who>
    <bug_when>2009-07-20 10:35:09 -0700</bug_when>
    <thetext>Ojan or Julie could you pick this up?  This bug is really embarrassing.  I want it fixed for 3.0 and we don&apos;t appear to be making any progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133171</commentid>
    <comment_count>13</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-07-20 10:51:20 -0700</bug_when>
    <thetext>I don&apos;t think this is actually a dupe of https://bugs.webkit.org/show_bug.cgi?id=24855.  Jon, which of these 2 are higher priority?  I believe this one here is worked around properly in all Google products, so is the other one (Gmail users can&apos;t change font size) the higher priority?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133291</commentid>
    <comment_count>14</comment_count>
    <who name="Jon@Chromium">jon</who>
    <bug_when>2009-07-20 16:31:31 -0700</bug_when>
    <thetext>Yes, this is a lower priority that the one for which there is no workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135331</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-28 12:52:13 -0700</bug_when>
    <thetext>My test case broke after changes to execCommand to have it remove uneeded spans.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135334</commentid>
    <comment_count>16</comment_count>
      <attachid>33663</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-28 13:08:31 -0700</bug_when>
    <thetext>Created attachment 33663
updated test case, including results affected by bug 19161</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276107</commentid>
    <comment_count>17</comment_count>
      <attachid>66948</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-08 15:17:58 -0700</bug_when>
    <thetext>Created attachment 66948
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276131</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-08 15:47:06 -0700</bug_when>
    <thetext>Generally looks like a good approach.

Typo: &quot;lagacy&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276171</commentid>
    <comment_count>19</comment_count>
      <attachid>66960</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-08 16:46:41 -0700</bug_when>
    <thetext>Created attachment 66960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276203</commentid>
    <comment_count>20</comment_count>
      <attachid>66960</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-08 17:28:36 -0700</bug_when>
    <thetext>Comment on attachment 66960
Patch

&gt; +    Node* node = m_node.get();
&gt; +    if (!node)
&gt; +        return false;

This can just be:

    if (!m_node)

No need for get() or a local variable.

&gt; +    RefPtr&lt;RenderStyle&gt; style = m_node-&gt;computedStyle(m_pseudoElementSpecifier);
&gt; +    if (!style)
&gt; +        return false;
&gt; +
&gt; +    return style-&gt;fontDescription().useFixedDefaultSize();

I don&apos;t think it makes sense to name this &quot;isFontFixedSize&quot; because it does not answer that question. Instead it should use a name consistent with the name in FontDescription such as &quot;shouldUseFixedDefaultSize&quot;.

&gt; +template&lt;typename T&gt;
&gt; +static int findNearestLegacyFontSize(int size, const T* table, int multiplier)
&gt; +{
&gt; +    // Ignore table[0] because xx-small does not correspond to any legacy font size.
&gt; +    for (int i = 1; i &lt; totalKeywords - 1; i++) {
&gt; +        if (size * 2 &lt; (table[i] + table[i + 1]) * multiplier)
&gt; +            return i;
&gt; +    }
&gt; +    return totalKeywords - 1;
&gt; +}

Is this algorithm the copy of something done elsewhere? Why don&apos;t I see &quot;-&quot; lines in the place where the old code was? Are we making a new copy of the code without making the other copies share the code?

&gt; +        // Given a font size in pixel, this return will return legacy font size between 1-7.

The phrase &quot;between 1-7&quot; is not good wording. You should say &quot;between 1 and 7&quot; or just &quot;1-7&quot;.

&gt; +        static int legacyFontSize(Document* document, int size, bool fixed);

The argument name &quot;document&quot; should be removed.

The argument name &quot;size&quot; is unclear. What kind of size? The function returns a size, so the argument has to be distinguished. Maybe pixelSize would be the right name.

The argument name &quot;fixed&quot; is not right. It should be &quot;shouldUseFixedDefaultSize&quot; I think.

&gt; +    // If the pos is at the end of a text node, then this node is not fully selected.
&gt; +    // Move it to the next deep quivalent position to avoid removing the style from this node.

Typo: &quot;quivalent&quot;.

&gt; +    // e.g. if pos was at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;, we want Position(&quot;world&quot;, 0) instead.
&gt; +    // We only do this for range because caret at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;/b&gt;world should give you font-weight: bold.
&gt; +    Node* posNode = pos.containerNode();
&gt; +    if (selection()-&gt;isRange() &amp;&amp; posNode &amp;&amp; posNode-&gt;isTextNode() &amp;&amp; pos.computeOffsetInContainerNode() == posNode-&gt;maxCharacterOffset())
&gt; +        pos = nextVisuallyDistinctCandidate(pos);

Does the new test cover this case?

I worry that this special case is too specific.

I’ll say review- because I’m sure you’ll want to make at least one of the changes mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276317</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-08 22:42:23 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 66960 [details])
&gt; &gt; +    Node* node = m_node.get();
&gt; &gt; +    if (!node)
&gt; &gt; +        return false;
&gt; 
&gt; This can just be:
&gt; 
&gt;     if (!m_node)
&gt; 
&gt; No need for get() or a local variable.

Right, will fix.

&gt; &gt; +    RefPtr&lt;RenderStyle&gt; style = m_node-&gt;computedStyle(m_pseudoElementSpecifier);
&gt; &gt; +    if (!style)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    return style-&gt;fontDescription().useFixedDefaultSize();
&gt; 
&gt; I don&apos;t think it makes sense to name this &quot;isFontFixedSize&quot; because it does not answer that question. Instead it should use a name consistent with the name in FontDescription such as &quot;shouldUseFixedDefaultSize&quot;.

Sure.  Will rename it to useFixedFontDefaultSize.

&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +static int findNearestLegacyFontSize(int size, const T* table, int multiplier)
&gt; &gt; +{
&gt; &gt; +    // Ignore table[0] because xx-small does not correspond to any legacy font size.
&gt; &gt; +    for (int i = 1; i &lt; totalKeywords - 1; i++) {
&gt; &gt; +        if (size * 2 &lt; (table[i] + table[i + 1]) * multiplier)
&gt; &gt; +            return i;
&gt; &gt; +    }
&gt; &gt; +    return totalKeywords - 1;
&gt; &gt; +}
&gt; 
&gt; Is this algorithm the copy of something done elsewhere? Why don&apos;t I see &quot;-&quot; lines in the place where the old code was? Are we making a new copy of the code without making the other copies share the code?

No, I don&apos;t think this algorithm has been implemented elsewhere.  I&apos;m more than happy to share the code if you can show me other place(s) where the same algorithm is used.

&gt; &gt; +        // Given a font size in pixel, this return will return legacy font size between 1-7.
&gt; 
&gt; The phrase &quot;between 1-7&quot; is not good wording. You should say &quot;between 1 and 7&quot; or just &quot;1-7&quot;.

Right.  Also, &quot;this return will return&quot; should read &quot;this function will return.&quot;  Will fix.

&gt; &gt; +        static int legacyFontSize(Document* document, int size, bool fixed);
&gt; 
&gt; The argument name &quot;document&quot; should be removed.
&gt; 
&gt; The argument name &quot;size&quot; is unclear. What kind of size? The function returns a size, so the argument has to be distinguished. Maybe pixelSize would be the right name.

Good point.  Will rename to pixelFontSize.

&gt; The argument name &quot;fixed&quot; is not right. It should be &quot;shouldUseFixedDefaultSize&quot; I think.

Will fix.

&gt; &gt; +    // If the pos is at the end of a text node, then this node is not fully selected.
&gt; &gt; +    // Move it to the next deep quivalent position to avoid removing the style from this node.
&gt; 
&gt; Typo: &quot;quivalent&quot;.

Will fix.


&gt; &gt; +    // e.g. if pos was at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;, we want Position(&quot;world&quot;, 0) instead.
&gt; &gt; +    // We only do this for range because caret at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;/b&gt;world should give you font-weight: bold.
&gt; &gt; +    Node* posNode = pos.containerNode();
&gt; &gt; +    if (selection()-&gt;isRange() &amp;&amp; posNode &amp;&amp; posNode-&gt;isTextNode() &amp;&amp; pos.computeOffsetInContainerNode() == posNode-&gt;maxCharacterOffset())
&gt; &gt; +        pos = nextVisuallyDistinctCandidate(pos);
&gt; 
&gt; Does the new test cover this case?

Yes, without this change, we&apos;ll get wrong font size for monospace case.

&gt; I worry that this special case is too specific.

The problem is that when we have &lt;b&gt;hello&lt;/b&gt;world, and caret is at the boundary of hello and world, we want the queryCommandState(&apos;bold&apos;) to return true because when a user starts typing text, the text is bolded in this case.  However, if user had selected &quot;world&quot; and started typing text, the text that replaces &quot;world&quot; is not bolded.  As far as I&apos;m concerned, the only way to distinguish this difference is to check whether the current selection is caret or not.  But I&apos;m more than happy to take a different approach you know a better way of dealing with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276319</commentid>
    <comment_count>22</comment_count>
      <attachid>66997</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-08 23:04:46 -0700</bug_when>
    <thetext>Created attachment 66997
fixed per Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276588</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 11:02:51 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; &gt; +    // e.g. if pos was at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;, we want Position(&quot;world&quot;, 0) instead.
&gt; &gt; &gt; +    // We only do this for range because caret at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;/b&gt;world should give you font-weight: bold.
&gt; &gt; &gt; +    Node* posNode = pos.containerNode();
&gt; &gt; &gt; +    if (selection()-&gt;isRange() &amp;&amp; posNode &amp;&amp; posNode-&gt;isTextNode() &amp;&amp; pos.computeOffsetInContainerNode() == posNode-&gt;maxCharacterOffset())
&gt; &gt; &gt; +        pos = nextVisuallyDistinctCandidate(pos);
&gt; &gt; 
&gt; &gt; Does the new test cover this case?
&gt; 
&gt; Yes, without this change, we&apos;ll get wrong font size for monospace case.
&gt; 
&gt; &gt; I worry that this special case is too specific.
&gt; 
&gt; [...] As far as I&apos;m concerned, the only way to distinguish this difference is to check whether the current selection is caret or not.

I was more worried about the way the rest of the test expression was written, not the isRange part. Specifically checking that the offset is the maximum offset within a text node. There’s an equivalent position just after the text node. Perhaps that’s taken care of by the “deep equivalent” concept?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276593</commentid>
    <comment_count>24</comment_count>
      <attachid>66997</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 11:05:29 -0700</bug_when>
    <thetext>Comment on attachment 66997
fixed per Darin&apos;s comments

&gt; +    bool useFixedFontDefaultSize() const;

I’m glad you renamed this to be more specific. For the future, it’s not great to have functions that sound like they will take an action such as &quot;use the fixed-font default size&quot; that really mean the caller &quot;should use the fixed-font default size&quot;. That’s why you’ll often see the word “should” in the name of boolean-returning functions. The word “use” makes the function be a verb phrase and sound like it will take action.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276638</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-09 11:48:02 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #23)
&gt; (In reply to comment #21)
&gt; &gt; &gt; I worry that this special case is too specific.
&gt; &gt; 
&gt; &gt; [...] As far as I&apos;m concerned, the only way to distinguish this difference is to check whether the current selection is caret or not.
&gt; 
&gt; I was more worried about the way the rest of the test expression was written, not the isRange part. Specifically checking that the offset is the maximum offset within a text node. There’s an equivalent position just after the text node. Perhaps that’s taken care of by the “deep equivalent” concept?

Yes, pos can&apos;t be at an equivalent position right after the text node if we had canonicalized the position correctly.

(In reply to comment #24)
&gt; (From update of attachment 66997 [details])
&gt; &gt; +    bool useFixedFontDefaultSize() const;
&gt; 
&gt; I’m glad you renamed this to be more specific. For the future, it’s not great to have functions that sound like they will take an action such as &quot;use the fixed-font default size&quot; that really mean the caller &quot;should use the fixed-font default size&quot;. That’s why you’ll often see the word “should” in the name of boolean-returning functions. The word “use” makes the function be a verb phrase and sound like it will take action.

Sure.  I do agree in general.  But in this specific case, we&apos;re asking it to computed style, which represents the current style of an element obtained from its render style. I couldn&apos;t make semantic sense in asking whether nor not we &quot;should&quot; use fixed font default size.  Because after all, the render object is the one using a fixed font size, and we&apos;re asking the question of whether or not a fixed font size was used to render the object.  On the other hand, caller of this function is presumably using the value for something, and in that sense, &quot;should&quot; caller use or not makes sense.  At that point, I just decided to stick with useFixedFontDefaultSize() since it matches the function name in fontDescription.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276644</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-09 11:55:27 -0700</bug_when>
    <thetext>Committed r67102: &lt;http://trac.webkit.org/changeset/67102&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276659</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 12:17:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67102 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/67101
http://trac.webkit.org/changeset/67102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276767</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 14:29:36 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I just decided to stick with useFixedFontDefaultSize() since it matches the function name in fontDescription.

Yes, I want to rename it in FontDescription and here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276768</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 14:29:47 -0700</bug_when>
    <thetext>In the future.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26941</attachid>
            <date>2009-01-22 14:32:54 -0800</date>
            <delta_ts>2009-01-22 14:44:22 -0800</delta_ts>
            <desc>test case</desc>
            <filename>fontsize.html</filename>
            <type>text/html</type>
            <size>2505</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PGJvZHk+CjxzY3JpcHQ+CgpmdW5jdGlvbiBhZGRSb3codGFibGUpCnsKICAgIHZhciB0YWJsZVJv
dyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICB0YWJsZS5hcHBlbmRDaGlsZCh0
YWJsZVJvdyk7CiAgICByZXR1cm4gdGFibGVSb3c7Cn0KCmZ1bmN0aW9uIGFkZENlbGxXaXRoTm9k
ZUNvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKewogICAgdmFyIHRhYmxlQ2VsbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICB0YWJsZUNlbGwuYXBwZW5kQ2hpbGQoY29udGVu
dHMpOwogICAgdGFibGVSb3cuYXBwZW5kQ2hpbGQodGFibGVDZWxsKTsKICAgIHJldHVybiB0YWJs
ZUNlbGw7Cn0KCmZ1bmN0aW9uIGFkZENlbGxXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb250
ZW50cykKewogICAgcmV0dXJuIGFkZENlbGxXaXRoTm9kZUNvbnRlbnRzKHRhYmxlUm93LCBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50cykpOwp9CgpmdW5jdGlvbiBhZGRIZWFkZXJXaXRo
VGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKewogICAgdmFyIHRhYmxlQ2VsbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7ICAgIAogICAgdGFibGVDZWxsLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnRzKSk7CiAgICB0YWJsZVJvdy5hcHBlbmRD
aGlsZCh0YWJsZUNlbGwpOwogICAgcmV0dXJuIHRhYmxlQ2VsbDsKfQoKZnVuY3Rpb24gc2V0Rm9u
dFNpemVPbkNvbnRlbnQoY29udGVudCwgc2l6ZSkKewogICAgZWRpdGFibGVEaXYuaW5uZXJIVE1M
ID0gInRlc3QiOwogICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGVk
aXRhYmxlRGl2KTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJGb250U2l6ZSIsIGZhbHNlLCBz
aXplKTsKICAgIHJldHVybiBlZGl0YWJsZURpdi5maXJzdENoaWxkOwp9CgpmdW5jdGlvbiByZXBv
cnRTaXplRm9yU3BhbihzcGFuLCBzaXplKQp7CiAgICB2YXIgdGFibGVSb3cgPSBhZGRSb3codGFi
bGUpOwogICAgYWRkQ2VsbFdpdGhUZXh0Q29udGVudHModGFibGVSb3csIHNpemUpOwogICAgd2lu
ZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKHNwYW4ucGFyZW50Tm9kZSk7CiAg
ICBhZGRDZWxsV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgIiIgKyBkb2N1bWVudC5xdWVyeUNv
bW1hbmRWYWx1ZSgiRm9udFNpemUiKSk7CiAgICBhZGRDZWxsV2l0aFRleHRDb250ZW50cyh0YWJs
ZVJvdywgIiIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzcGFuLCBudWxsKS5mb250U2l6ZSk7
Cn0KCmZ1bmN0aW9uIHRlc3RFeGVjQ29tbWFuZEZvbnRTaXplKHNpemUpCnsKICAgIHZhciBzaXpl
ZENvbnRlbnQgPSBzZXRGb250U2l6ZU9uQ29udGVudCgidGVzdCIsIHNpemUpOwogICAgdmFyIHNp
emVTdHJpbmcgPSAodHlwZW9mKHNpemUpID09ICJzdHJpbmciKSA/ICgiJyIgKyBzaXplICsgIici
KSA6IHNpemU7CiAgICByZXBvcnRTaXplRm9yU3BhbihzaXplZENvbnRlbnQsICJleGVjQ29tbWFu
ZCgnRm9udFNpemUnLCAiICsgc2l6ZVN0cmluZyArICIpIik7Cn0KCmZ1bmN0aW9uIHRlc3RNYW51
YWxGb250U2l6ZShzaXplKQp7CiAgICBlZGl0YWJsZURpdi5pbm5lckhUTUwgPSAiPHNwYW4gc3R5
bGU9J2ZvbnQtc2l6ZTogIiArIHNpemUgKyAiJz50ZXN0PC9zcGFuPiI7CiAgICByZXBvcnRTaXpl
Rm9yU3BhbihlZGl0YWJsZURpdi5maXJzdENoaWxkLCBlZGl0YWJsZURpdi5pbm5lckhUTUwpOwp9
Cgp2YXIgZWRpdGFibGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKZWRpdGFi
bGVEaXYuY29udGVudEVkaXRhYmxlID0gdHJ1ZTsKZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChl
ZGl0YWJsZURpdik7Cgp2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIp
Owp0YWJsZS5ib3JkZXIgPSAiMXB4IjsKdGFibGUud2lkdGggPSAiMTAwJSI7CmRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQodGFibGUpOwoKdmFyIHRhYmxlUm93ID0gYWRkUm93KHRhYmxlKTsKYWRk
SGVhZGVyV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgIkZvbnRTaXplIik7CmFkZEhlYWRlcldp
dGhUZXh0Q29udGVudHModGFibGVSb3csICJxdWVyeUNvbW1hbmRWYWx1ZSByZXN1bHQiKTsKYWRk
SGVhZGVyV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgImdldENvbXB1dGVkU3R5bGUgcmVzdWx0
Iik7Cgpmb3IgKHZhciBzaXplID0gLTI7IHNpemUgPCA4OyBzaXplKyspIHsKICAgIHRlc3RFeGVj
Q29tbWFuZEZvbnRTaXplKHNpemUpOwp9CnRlc3RFeGVjQ29tbWFuZEZvbnRTaXplKCI4cHgiKTsK
dGVzdEV4ZWNDb21tYW5kRm9udFNpemUoIjJweCIpOwoKdGVzdE1hbnVhbEZvbnRTaXplKCIxN3B4
Iik7CnRlc3RNYW51YWxGb250U2l6ZSgiMzFweCIpOwp0ZXN0TWFudWFsRm9udFNpemUoIjEwcHgi
KTsKCmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWRpdGFibGVEaXYpOwoKPC9zY3JpcHQ+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26942</attachid>
            <date>2009-01-22 14:44:22 -0800</date>
            <delta_ts>2009-07-28 13:08:31 -0700</delta_ts>
            <desc>nicer test case</desc>
            <filename>fontsize.html</filename>
            <type>text/html</type>
            <size>2661</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PGJvZHk+CjxzY3JpcHQ+CgpmdW5jdGlvbiBhZGRSb3codGFibGUpCnsKICAgIHZhciB0YWJsZVJv
dyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICB0YWJsZS5hcHBlbmRDaGlsZCh0
YWJsZVJvdyk7CiAgICByZXR1cm4gdGFibGVSb3c7Cn0KCmZ1bmN0aW9uIGFkZENlbGxXaXRoTm9k
ZUNvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKewogICAgdmFyIHRhYmxlQ2VsbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICB0YWJsZUNlbGwuYXBwZW5kQ2hpbGQoY29udGVu
dHMpOwogICAgdGFibGVSb3cuYXBwZW5kQ2hpbGQodGFibGVDZWxsKTsKICAgIHJldHVybiB0YWJs
ZUNlbGw7Cn0KCmZ1bmN0aW9uIGFkZENlbGxXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb250
ZW50cykKewogICAgcmV0dXJuIGFkZENlbGxXaXRoTm9kZUNvbnRlbnRzKHRhYmxlUm93LCBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50cykpOwp9CgpmdW5jdGlvbiBhZGRIZWFkZXJXaXRo
VGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKewogICAgdmFyIHRhYmxlQ2VsbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7ICAgIAogICAgdGFibGVDZWxsLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnRzKSk7CiAgICB0YWJsZVJvdy5hcHBlbmRD
aGlsZCh0YWJsZUNlbGwpOwogICAgcmV0dXJuIHRhYmxlQ2VsbDsKfQoKZnVuY3Rpb24gc2V0Rm9u
dFNpemVPbkNvbnRlbnQoY29udGVudCwgc2l6ZSkKewogICAgZWRpdGFibGVEaXYuaW5uZXJIVE1M
ID0gInRlc3QiOwogICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGVk
aXRhYmxlRGl2KTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJGb250U2l6ZSIsIGZhbHNlLCBz
aXplKTsKICAgIHJldHVybiBlZGl0YWJsZURpdi5maXJzdENoaWxkOwp9CgpmdW5jdGlvbiByZXBv
cnRTaXplRm9yU3BhbihzcGFuLCBjb21tZW50KQp7CiAgICB2YXIgdGFibGVSb3cgPSBhZGRSb3co
dGFibGUpOwogICAgYWRkQ2VsbFdpdGhUZXh0Q29udGVudHModGFibGVSb3csIGNvbW1lbnQpOwog
ICAgYWRkQ2VsbFdpdGhUZXh0Q29udGVudHModGFibGVSb3csIHNwYW4ucGFyZW50Tm9kZS5pbm5l
ckhUTUwpOyAvLyBzaWxsIEZGIGhhcyBubyBvdXRlckhUTUwKICAgIAogICAgd2luZG93LmdldFNl
bGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKHNwYW4ucGFyZW50Tm9kZSk7CiAgICBhZGRDZWxs
V2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgIiIgKyBkb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1
ZSgiRm9udFNpemUiKSk7CiAgICBhZGRDZWxsV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgIiIg
KyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzcGFuLCBudWxsKS5mb250U2l6ZSk7Cn0KCmZ1bmN0
aW9uIHRlc3RFeGVjQ29tbWFuZEZvbnRTaXplKHNpemUpCnsKICAgIHZhciBzaXplZENvbnRlbnQg
PSBzZXRGb250U2l6ZU9uQ29udGVudCgidGVzdCIsIHNpemUpOwogICAgdmFyIHNpemVTdHJpbmcg
PSAodHlwZW9mKHNpemUpID09ICJzdHJpbmciKSA/ICgiJyIgKyBzaXplICsgIiciKSA6IHNpemU7
CiAgICByZXBvcnRTaXplRm9yU3BhbihzaXplZENvbnRlbnQsICJleGVjQ29tbWFuZCgnRm9udFNp
emUnLCAiICsgc2l6ZVN0cmluZyArICIpIik7Cn0KCmZ1bmN0aW9uIHRlc3RNYW51YWxGb250U2l6
ZShzaXplKQp7CiAgICBlZGl0YWJsZURpdi5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2ZvbnQt
c2l6ZTogIiArIHNpemUgKyAiJz50ZXN0PC9zcGFuPiI7CiAgICByZXBvcnRTaXplRm9yU3Bhbihl
ZGl0YWJsZURpdi5maXJzdENoaWxkLCAibWFudWFsIENTUyBmb250LXNpemU6ICIgKyBzaXplKTsK
fQoKdmFyIGVkaXRhYmxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CmVkaXRh
YmxlRGl2LmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZWRpdGFibGVEaXYpOwoKdmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUi
KTsKdGFibGUuYm9yZGVyID0gIjFweCI7CnRhYmxlLndpZHRoID0gIjEwMCUiOwpkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKHRhYmxlKTsKCnZhciB0YWJsZVJvdyA9IGFkZFJvdyh0YWJsZSk7CmFk
ZEhlYWRlcldpdGhUZXh0Q29udGVudHModGFibGVSb3csICJ0ZXN0Iik7CmFkZEhlYWRlcldpdGhU
ZXh0Q29udGVudHModGFibGVSb3csICJodG1sIik7CmFkZEhlYWRlcldpdGhUZXh0Q29udGVudHMo
dGFibGVSb3csICJxdWVyeUNvbW1hbmRWYWx1ZSByZXN1bHQiKTsKYWRkSGVhZGVyV2l0aFRleHRD
b250ZW50cyh0YWJsZVJvdywgImdldENvbXB1dGVkU3R5bGUgcmVzdWx0Iik7Cgpmb3IgKHZhciBz
aXplID0gLTI7IHNpemUgPCA4OyBzaXplKyspIHsKICAgIHRlc3RFeGVjQ29tbWFuZEZvbnRTaXpl
KHNpemUpOwp9CnRlc3RFeGVjQ29tbWFuZEZvbnRTaXplKCI4cHgiKTsKdGVzdEV4ZWNDb21tYW5k
Rm9udFNpemUoIjJweCIpOwoKdGVzdE1hbnVhbEZvbnRTaXplKCIxN3B4Iik7CnRlc3RNYW51YWxG
b250U2l6ZSgiMzFweCIpOwp0ZXN0TWFudWFsRm9udFNpemUoIjEwcHgiKTsKCmRvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQoZWRpdGFibGVEaXYpOwoKPC9zY3JpcHQ+
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33663</attachid>
            <date>2009-07-28 13:08:31 -0700</date>
            <delta_ts>2009-07-28 13:08:31 -0700</delta_ts>
            <desc>updated test case, including results affected by bug 19161</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>3581</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PGJvZHk+CjxzY3JpcHQ+CgpmdW5jdGlvbiBhZGRSb3codGFibGUpCnsKICAgIHZhciB0YWJsZVJv
dyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICB0YWJsZS5hcHBlbmRDaGlsZCh0
YWJsZVJvdyk7CiAgICByZXR1cm4gdGFibGVSb3c7Cn0KCmZ1bmN0aW9uIGFkZENlbGxXaXRoTm9k
ZUNvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKewogICAgdmFyIHRhYmxlQ2VsbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICB0YWJsZUNlbGwuYXBwZW5kQ2hpbGQoY29udGVu
dHMpOwogICAgdGFibGVSb3cuYXBwZW5kQ2hpbGQodGFibGVDZWxsKTsKICAgIHJldHVybiB0YWJs
ZUNlbGw7Cn0KCmZ1bmN0aW9uIGFkZENlbGxXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb250
ZW50cykKewogICAgcmV0dXJuIGFkZENlbGxXaXRoTm9kZUNvbnRlbnRzKHRhYmxlUm93LCBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50cykpOwp9CgpmdW5jdGlvbiBhZGRIZWFkZXJXaXRo
VGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKewogICAgdmFyIHRhYmxlQ2VsbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7ICAgIAogICAgdGFibGVDZWxsLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnRzKSk7CiAgICB0YWJsZVJvdy5hcHBlbmRD
aGlsZCh0YWJsZUNlbGwpOwogICAgcmV0dXJuIHRhYmxlQ2VsbDsKfQoKZnVuY3Rpb24gc2V0Rm9u
dFNpemVPbkNvbnRlbnQoc2l6ZSkKewogICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFs
bENoaWxkcmVuKGVkaXRhYmxlRGl2KTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJGb250U2l6
ZSIsIGZhbHNlLCBzaXplKTsKICAgIHJldHVybiBlZGl0YWJsZURpdi5maXJzdENoaWxkOwp9Cgpm
dW5jdGlvbiBzZXRGb250RmFtaWx5T25Db250ZW50KGZvbnRGYW1pbHkpCnsKICAgIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihlZGl0YWJsZURpdik7CiAgICBkb2N1bWVu
dC5leGVjQ29tbWFuZCgiRm9udE5hbWUiLCBmYWxzZSwgZm9udEZhbWlseSk7CiAgICByZXR1cm4g
ZWRpdGFibGVEaXYuZmlyc3RDaGlsZDsKfQoKZnVuY3Rpb24gd3JhcEluU3BhbklmTmVlZGVkKHNo
b3VsZEJlU3BhbikKewogICAgLy8gU29tZXRpbWVzIHRoZSByZXN1bHQgb2YgdGhlIEV4ZWNDb21t
YW5kIHdpbGwgbm90IGhhdmUgYSB3cmFwcGluZyA8c3Bhbj4KICAgIGlmICghc2hvdWxkQmVTcGFu
LmxvY2FsTmFtZSB8fCBzaG91bGRCZVNwYW4ubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkgIT0gInNw
YW4iKSB7CiAgICAgICAgc2hvdWxkQmVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOwogICAgICAgIHNob3VsZEJlU3Bhbi5hcHBlbmRDaGlsZChlZGl0YWJsZURpdi5maXJzdENo
aWxkKTsKICAgICAgICBlZGl0YWJsZURpdi5hcHBlbmRDaGlsZChzaG91bGRCZVNwYW4pOwogICAg
fQogICAgcmV0dXJuIHNob3VsZEJlU3BhbjsKfQoKZnVuY3Rpb24gcmVwb3J0U2l6ZUZvclNwYW4o
c3BhbiwgY29tbWVudCkKewogICAgdmFyIHRhYmxlUm93ID0gYWRkUm93KHRhYmxlKTsKICAgIGFk
ZENlbGxXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb21tZW50KTsKICAgIGFkZENlbGxXaXRo
VGV4dENvbnRlbnRzKHRhYmxlUm93LCBzcGFuLnBhcmVudE5vZGUuaW5uZXJIVE1MKTsgLy8gc2ls
bCBGRiBoYXMgbm8gb3V0ZXJIVE1MCiAgICAKICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxl
Y3RBbGxDaGlsZHJlbihzcGFuLnBhcmVudE5vZGUpOwogICAgYWRkQ2VsbFdpdGhUZXh0Q29udGVu
dHModGFibGVSb3csICIiICsgZG9jdW1lbnQucXVlcnlDb21tYW5kVmFsdWUoIkZvbnRTaXplIikp
OwogICAgYWRkQ2VsbFdpdGhUZXh0Q29udGVudHModGFibGVSb3csICIiICsgd2luZG93LmdldENv
bXB1dGVkU3R5bGUoc3BhbiwgbnVsbCkuZm9udFNpemUpOwp9CgpmdW5jdGlvbiB0ZXN0RXhlY0Nv
bW1hbmRGb250U2l6ZShzaXplLCBmb250RmFtaWx5KQp7CiAgICBlZGl0YWJsZURpdi5pbm5lckhU
TUwgPSAidGVzdCI7CiAgICB2YXIgc2l6ZWRDb250ZW50ID0gc2V0Rm9udFNpemVPbkNvbnRlbnQo
c2l6ZSk7CiAgICBzaXplZENvbnRlbnQgPSB3cmFwSW5TcGFuSWZOZWVkZWQoc2l6ZWRDb250ZW50
KTsKICAgIGlmIChmb250RmFtaWx5KQogICAgICAgIHNpemVkQ29udGVudCA9IHNldEZvbnRGYW1p
bHlPbkNvbnRlbnQoZm9udEZhbWlseSk7CiAgICB2YXIgc2l6ZVN0cmluZyA9ICh0eXBlb2Yoc2l6
ZSkgPT0gInN0cmluZyIpID8gKCInIiArIHNpemUgKyAiJyIpIDogc2l6ZTsKICAgIHJlcG9ydFNp
emVGb3JTcGFuKHNpemVkQ29udGVudCwgImV4ZWNDb21tYW5kKCdGb250U2l6ZScsICIgKyBzaXpl
U3RyaW5nICsgIikiKTsKfQoKZnVuY3Rpb24gdGVzdE1hbnVhbEZvbnRTaXplKHNpemUpCnsKICAg
IGVkaXRhYmxlRGl2LmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nZm9udC1zaXplOiAiICsgc2l6
ZSArICInPnRlc3Q8L3NwYW4+IjsKICAgIHJlcG9ydFNpemVGb3JTcGFuKGVkaXRhYmxlRGl2LmZp
cnN0Q2hpbGQsICJtYW51YWwgQ1NTIGZvbnQtc2l6ZTogIiArIHNpemUpOwp9Cgp2YXIgZWRpdGFi
bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKZWRpdGFibGVEaXYuY29udGVu
dEVkaXRhYmxlID0gdHJ1ZTsKZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlZGl0YWJsZURpdik7
Cgp2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwp0YWJsZS5ib3Jk
ZXIgPSAiMXB4IjsKdGFibGUud2lkdGggPSAiMTAwJSI7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQodGFibGUpOwoKdmFyIHRhYmxlUm93ID0gYWRkUm93KHRhYmxlKTsKYWRkSGVhZGVyV2l0aFRl
eHRDb250ZW50cyh0YWJsZVJvdywgInRlc3QiKTsKYWRkSGVhZGVyV2l0aFRleHRDb250ZW50cyh0
YWJsZVJvdywgImh0bWwiKTsKYWRkSGVhZGVyV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgInF1
ZXJ5Q29tbWFuZFZhbHVlIHJlc3VsdCIpOwphZGRIZWFkZXJXaXRoVGV4dENvbnRlbnRzKHRhYmxl
Um93LCAiZ2V0Q29tcHV0ZWRTdHlsZSByZXN1bHQiKTsKCmZvciAodmFyIHNpemUgPSAtMjsgc2l6
ZSA8IDg7IHNpemUrKykgewogICAgdGVzdEV4ZWNDb21tYW5kRm9udFNpemUoc2l6ZSk7Cn0KdGVz
dEV4ZWNDb21tYW5kRm9udFNpemUoIjhweCIpOwp0ZXN0RXhlY0NvbW1hbmRGb250U2l6ZSgiMnB4
Iik7Cgp0ZXN0TWFudWFsRm9udFNpemUoIjE3cHgiKTsKdGVzdE1hbnVhbEZvbnRTaXplKCIzMXB4
Iik7CnRlc3RNYW51YWxGb250U2l6ZSgiMTBweCIpOwoKdGFibGVSb3cgPSBhZGRSb3codGFibGUp
OwphZGRIZWFkZXJXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCAibW9ub3NwYWNlIHRlc3RzIHRv
IHNob3cgYnVnIDE5MTYxIik7Cgpmb3IgKHZhciBzaXplID0gLTI7IHNpemUgPCA4OyBzaXplKysp
IHsKICAgIHRlc3RFeGVjQ29tbWFuZEZvbnRTaXplKHNpemUsICdtb25vc3BhY2UnKTsKfQoKZG9j
dW1lbnQuYm9keS5yZW1vdmVDaGlsZChlZGl0YWJsZURpdik7Cgo8L3NjcmlwdD4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66948</attachid>
            <date>2010-09-08 15:17:58 -0700</date>
            <delta_ts>2010-09-08 16:46:37 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>attempt-21033</filename>
            <type>text/plain</type>
            <size>5936</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA2Njk5MykKKysrIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiQ29tcG9zaXRpb25FdmVudC5oIgpAQCAtOTM4LDcgKzkzOSw3IEBACiBTdHJpbmcgRWRpdG9y
OjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpCiB7CiAgICAg
Tm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzZWxl
Y3Rpb25TdHlsZSA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3Zl
KTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25TdHls
ZSA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3ZlKTsKICAgICBp
ZiAoIXNlbGVjdGlvblN0eWxlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTk2NSw2
ICs5NjYsMTUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIFdlIG5lZWQgdG8gcmV0dXJu
IGxlZ2FjeSBmb250IHNpemUuCisgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250
U2l6ZSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc2VsZWN0aW9uU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSk7CisgICAgICAgIEFTU0VS
VCh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgaW50IGZvbnRQaXhlbFNpemUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SW50VmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgIGludCBzaXplID0gQ1NTU3R5
bGVTZWxlY3Rvcjo6bGFnYWN5Rm9udFNpemUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgZm9udFBpeGVs
U2l6ZSwgc2VsZWN0aW9uU3R5bGUtPmlzRm9udEZpeGVkU2l6ZSgpKTsKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6bnVtYmVyKHNpemUpOworICAgIH0KKwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJ
bmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCShyZXZpc2lvbiA2Njk5MykKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc0NSw2ICs3NDUsMTMgQEAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
KHNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBQb3NpdGlvbiBwb3MgPSBy
YW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKTsKIAorICAgIC8vIElmIHRoZSBwb3MgaXMgYXQg
dGhlIGVuZCBvZiBhIHRleHQgbm9kZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVj
dGVkLgorICAgIC8vIE1vdmUgaXQgdG8gdGhlIG5leHQgZGVlcCBxdWl2YWxlbnQgcG9zaXRpb24g
dG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxlIGZyb20gdGhpcyBub2RlLgorICAgIC8vIGUuZy4g
aWYgcG9zIHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29ybGQ8
L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGluc3RlYWQuCisgICAgTm9k
ZSogcG9zTm9kZSA9IHBvcy5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKHBvc05vZGUgJiYgcG9z
Tm9kZS0+aXNUZXh0Tm9kZSgpICYmIHBvcy5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
PT0gcG9zTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgICAgIHBvcyA9IG5leHRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKHBvcyk7CisgICAgCiAgICAgRWxlbWVudCAqZWxlbSA9IHBv
cy5lbGVtZW50KCk7CiAgICAgaWYgKCFlbGVtKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA2Njk5MykKKysrIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzE4LDYgKzYzMTgsMzMgQEAK
ICAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9yc1trZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxs
XSptZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7CiB9CiAKK2ludCBDU1NTdHlsZVNlbGVjdG9y
OjpsYWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGludCBzaXplLCBib29sIGZpeGVk
KQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAg
IGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAxOworCisgICAgYm9vbCBxdWlya3NNb2Rl
ID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOworICAgIGludCBtZWRpdW1TaXplID0gZml4ZWQg
PyBzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSA6IHNldHRpbmdzLT5kZWZhdWx0Rm9u
dFNpemUoKTsKKyAgICBpZiAobWVkaXVtU2l6ZSA+PSBmb250U2l6ZVRhYmxlTWluICYmIG1lZGl1
bVNpemUgPD0gZm9udFNpemVUYWJsZU1heCkgeworICAgICAgICAvLyBMb29rIHVwIHRoZSBlbnRy
eSBpbiB0aGUgdGFibGUuCisgICAgICAgIGludCByb3cgPSBtZWRpdW1TaXplIC0gZm9udFNpemVU
YWJsZU1pbjsKKyAgICAgICAgY29uc3QgaW50KiB0YWJsZSA9IHF1aXJrc01vZGUgPyBxdWlya3NG
b250U2l6ZVRhYmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd107CisgICAgICAgIGZv
ciAoaW50IGkgPSAyOyBpIDwgdG90YWxLZXl3b3JkczsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
dGFibGVbaS0xXSA8PSBzaXplICYmIHNpemUgPD0gdGFibGVbaV0pIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2l6ZSAtIHRhYmxlW2ktMV0gPCB0YWJsZVtpXSAtIHNpemUgPyBpIC0gMSA6IGk7
IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzaXplIDwgdGFibGVbMV0p
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKHNpemUgPiB0YWJsZVt0b3RhbEtl
eXdvcmRzIC0gMV0pCisgICAgICAgICAgICByZXR1cm4gdG90YWxLZXl3b3JkczsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCiBmbG9h
dCBDU1NTdHlsZVNlbGVjdG9yOjpsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUg
cmFuZ2VzICh4eC1zbWFsbCB0byB4eHgtbGFyZ2UpIGFuZCBzY2FsZSB1cCB0bwpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gNjY5OTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOSBAQAogICAgICAgICBQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgYm9v
bCBhdXRob3JPbmx5KTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcHNldWRvU3R5
bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIFBzZXVkb0lkLCBib29sIGF1dGhvck9ubHkpOwog
CisgICAgICAgIC8vIEdpdmVuIGEgZm9udCBzaXplIGluIHBpeGVsLCB0aGlzIHJldHVybiB3aWxs
IHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMS03LgorICAgICAgICBzdGF0aWMgaW50
IGxhZ2FjeUZvbnRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgaW50IHNpemUsIGJvb2wgZml4ZWQp
OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUg
cmFuZ2UgKHh4LXNtYWxsIHRvIC13ZWJraXQteHh4LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxs
IHJldHVybgogICAgICAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZl
IHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiA2Njk5MykKKysrIFdlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw3IEBACiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBnZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmluZ0tleXdvcmQoKSBjb25zdDsKKyAgICBi
b29sIGlzRm9udEZpeGVkU2l6ZSgpIGNvbnN0OwogI2lmIEVOQUJMRShTVkcpCiAgICAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gZ2V0U1ZHUHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCwgRVVw
ZGF0ZUxheW91dCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gNjY5OTMpCisrKyBXZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsNiAr
NTcxLDE5IEBACiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXplKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpOwogfQogCitib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXNGb250Rml4
ZWRTaXplKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gbV9ub2RlLmdldCgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
OworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkudXNlRml4ZWREZWZhdWx0U2l6ZSgpOworfQorCiBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZhbHVlRm9yU2hh
ZG93KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgaW50IGlkKSBjb25zdAogewogICAgIGlmICgh
c2hhZG93KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66960</attachid>
            <date>2010-09-08 16:46:41 -0700</date>
            <delta_ts>2010-09-08 23:04:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-21033-20100908164639.patch</filename>
            <type>text/plain</type>
            <size>17467</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDktMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXVl
cnlDb21tYW5kVmFsdWUoJ0ZvbnRTaXplJykgcmV0dXJucyBwaXhlbCB2YWx1ZXMgaW5zdGVhZCBv
ZiBJRSBmb250IG51bWJlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMDMzCisKKyAgICAgICAgTW9kaWZpZWQgc2VsZWN0aW9uU3RhcnRDU1NQcm9w
ZXJ0eVZhbHVlIHRvIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGluc3RlYWQgb2YgcGl4ZWwgc2l6
ZS4KKyAgICAgICAgVG8gaW1wbGVtZW50IHRoZSBjb252ZXJzaW9uIGJldHdlZW4gcGl4ZWwgZm9u
dCBzaXplIGFuZCBsZWdhY3kgZm9udCBzaXplLAorICAgICAgICBhZGRlZCBsZWdhY3lGb250U2l6
ZSB0byBDU1NTdHlsZVNlbGVjdG9yIHdpdGggYSBoZWxwZXIgc3RhdGljIGZ1bmN0aW9uIGZpbmRO
ZWFyZXN0TGVnYWN5Rm9udFNpemUuCisKKyAgICAgICAgRml4ZWQgYSBidWcgaW4gc2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZSB3aGVyZSBpdCBvYnRhaW5zIHRoZSBzdHlsZSBvZiB0aGUgcHJldmlvdXMg
ZWRpdGluZyBwb3NpdGlvbgorICAgICAgICBldmVuIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBhIHJh
bmdlLiBUaGlzIGNoYW5nZSByZXZlYWxlZCBhIGNyYXNoIGluIGV4ZWN1dGVUb2dnbGVTdHlsZUlu
TGlzdCwKKyAgICAgICAgd2hpY2ggd2FzIGFsc28gZml4ZWQuCisKKyAgICAgICAgVGVzdDogZWRp
dGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb250LXNpemUuaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb246OmlzRm9udEZpeGVkU2l6ZSk6IEFkZGVkLgorICAgICAgICAq
IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTmVhcmVzdExlZ2FjeUZvbnRT
aXplKTogQWRkZWQsIGEgaGVscGVyIGZvciBsZWdhY3lGb250U2l6ZS4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxlZ2FjeUZvbnRTaXplKTogQWRkZWQuCisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6
IEFkZGVkIGEgY29udmVyc2lvbiBmcm9tIHBpeGVsIHRvIGxlZ2FjeSBmb250IHNpemUuCisgICAg
ICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1
dGVUb2dnbGVTdHlsZUluTGlzdCk6IENyYXNoIGZpeC4KKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKTogU2Vl
IGFib3ZlLgorCiAyMDEwLTA5LTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuaWVsIEJhdGVzLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA2Njk5MykKKysrIFdlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3MSw2ICs1NzEsMTkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURl
YwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
IH0KIAorYm9vbCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmlzRm9udEZpeGVkU2l6ZSgp
IGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IG1fbm9kZS5nZXQoKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUg
PSBtX25vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICBp
ZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKK30KKwogUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2YWx1ZUZvclNoYWRvdyhjb25z
dCBTaGFkb3dEYXRhKiBzaGFkb3csIGludCBpZCkgY29uc3QKIHsKICAgICBpZiAoIXNoYWRvdykK
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biA2Njk5MykKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQsIEVVcGRhdGVMYXlv
dXQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldEZvbnRTaXplQ1NTVmFsdWVQ
cmVmZXJyaW5nS2V5d29yZCgpIGNvbnN0OworICAgIGJvb2wgaXNGb250Rml4ZWRTaXplKCkgY29u
c3Q7CiAjaWYgRU5BQkxFKFNWRykKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRTVkdQcm9w
ZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDY2OTkzKQorKysgV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMTgsNiAr
NjMxOCwzMyBAQCBmbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpmb250U2l6ZUZvcktleXdvCiAgICAg
cmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVk
aXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Rh
dGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplKGludCBzaXplLCBjb25zdCBUKiB0YWJs
ZSwgaW50IG11bHRpcGxpZXIpCit7CisgICAgLy8gSWdub3JlIHRhYmxlWzBdIGJlY2F1c2UgeHgt
c21hbGwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgbGVnYWN5IGZvbnQgc2l6ZS4KKyAgICBm
b3IgKGludCBpID0gMTsgaSA8IHRvdGFsS2V5d29yZHMgLSAxOyBpKyspIHsKKyAgICAgICAgaWYg
KHNpemUgKiAyIDwgKHRhYmxlW2ldICsgdGFibGVbaSArIDFdKSAqIG11bHRpcGxpZXIpCisgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsS2V5d29yZHMgLSAxOwor
fQorCitpbnQgQ1NTU3R5bGVTZWxlY3Rvcjo6bGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBpbnQgc2l6ZSwgYm9vbCBmaXhlZCkKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBk
b2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4g
MTsKKworICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3VtZW50LT5pblF1aXJrc01vZGUoKTsKKyAg
ICBpbnQgbWVkaXVtU2l6ZSA9IGZpeGVkID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXpl
KCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0g
Zm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAg
ICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOworICAgICAgICBy
ZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZTxpbnQ+KHNpemUsIHF1aXJrc01vZGUgPyBx
dWlya3NGb250U2l6ZVRhYmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10sIDEpOwor
ICAgIH0KKworICAgIHJldHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0PihzaXpl
LCBmb250U2l6ZUZhY3RvcnMsIG1lZGl1bVNpemUpOworfQorCiBmbG9hdCBDU1NTdHlsZVNlbGVj
dG9yOjpsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBGaWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFs
bCB0byB4eHgtbGFyZ2UpIGFuZCBzY2FsZSB1cCB0bwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
aAkocmV2aXNpb24gNjY5OTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOSBAQCBwdWJsaWM6CiAgICAgICAgIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBib29sIGF1dGhv
ck9ubHkpOwogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBwc2V1ZG9TdHlsZVJ1bGVz
Rm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIGJvb2wgYXV0aG9yT25seSk7CiAKKyAgICAg
ICAgLy8gR2l2ZW4gYSBmb250IHNpemUgaW4gcGl4ZWwsIHRoaXMgcmV0dXJuIHdpbGwgcmV0dXJu
IGxlZ2FjeSBmb250IHNpemUgYmV0d2VlbiAxLTcuCisgICAgICAgIHN0YXRpYyBpbnQgbGVnYWN5
Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgc2l6ZSwgYm9vbCBmaXhlZCk7CisKICAg
ICBwcml2YXRlOgogICAgICAgICAvLyBHaXZlbiBhIENTUyBrZXl3b3JkIGluIHRoZSByYW5nZSAo
eHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJu
CiAgICAgICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhl
IHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDY2
OTkzKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRFdmVudC5o
IgpAQCAtOTM4LDcgKzkzOSw3IEBAIHN0YXRpYyBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3Vu
ZENvbG8KIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZShpbnQg
cHJvcGVydHlJRCkKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgUmVmUHRyPENTU1N0
eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29tcHV0
ZWRTdHlsZShub2RlVG9SZW1vdmUpOworICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IHNlbGVjdGlvblN0eWxlID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIApAQCAtOTY1LDYgKzk2NiwxNCBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25T
dGFydENTU1Byb3BlcnR5CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAocHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eUZvbnRTaXplKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBzZWxlY3Rpb25TdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICBp
bnQgZm9udFBpeGVsU2l6ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUu
Z2V0KCkpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAg
aW50IHNpemUgPSBDU1NTdHlsZVNlbGVjdG9yOjpsZWdhY3lGb250U2l6ZShtX2ZyYW1lLT5kb2N1
bWVudCgpLCBmb250UGl4ZWxTaXplLCBzZWxlY3Rpb25TdHlsZS0+aXNGb250Rml4ZWRTaXplKCkp
OworICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIoc2l6ZSk7CisgICAgfQorCiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lv
biA2Njk5MykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDYgKzEzMyw5IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZUlu
TGlzdChGcmEKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBOb2RlKiBub2RlVG9SZW1v
dmUgPSAwOwogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlv
blN0eWxlID0gZnJhbWUtPnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3ZlKTsKKyAg
ICBpZiAoIXNlbGVjdGlvblN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHNlbGVjdGVkQ1NTVmFsdWUgPSBzZWxlY3Rpb25TdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICBTdHJpbmcgbmV3U3R5bGUgPSAibm9uZSI7CiAg
ICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2
aXNpb24gNjY5OTMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NDUsNiArNzQ1LDE0IEBAIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
PiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlKHNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKICAgICBQb3NpdGlvbiBwb3MgPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKTsK
IAorICAgIC8vIElmIHRoZSBwb3MgaXMgYXQgdGhlIGVuZCBvZiBhIHRleHQgbm9kZSwgdGhlbiB0
aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLgorICAgIC8vIE1vdmUgaXQgdG8gdGhlIG5l
eHQgZGVlcCBxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxlIGZy
b20gdGhpcyBub2RlLgorICAgIC8vIGUuZy4gaWYgcG9zIHdhcyBhdCBQb3NpdGlvbigiaGVsbG8i
LCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3
b3JsZCIsIDApIGluc3RlYWQuCisgICAgLy8gV2Ugb25seSBkbyB0aGlzIGZvciByYW5nZSBiZWNh
dXNlIGNhcmV0IGF0IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGluIDxiPmhlbGxvPC9iPndvcmxkIHNo
b3VsZCBnaXZlIHlvdSBmb250LXdlaWdodDogYm9sZC4KKyAgICBOb2RlKiBwb3NOb2RlID0gcG9z
LmNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoc2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiBwb3NO
b2RlICYmIHBvc05vZGUtPmlzVGV4dE5vZGUoKSAmJiBwb3MuY29tcHV0ZU9mZnNldEluQ29udGFp
bmVyTm9kZSgpID09IHBvc05vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKQorICAgICAgICBwb3Mg
PSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwb3MpOworCiAgICAgRWxlbWVudCAqZWxl
bSA9IHBvcy5lbGVtZW50KCk7CiAgICAgaWYgKCFlbGVtKQogICAgICAgICByZXR1cm4gMDsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY3MDI2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDktMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgcXVlcnlDb21tYW5kVmFsdWUoJ0ZvbnRTaXplJykgcmV0dXJucyBwaXhlbCB2YWx1ZXMg
aW5zdGVhZCBvZiBJRSBmb250IG51bWJlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDMzCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVuc3Vy
ZSBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9udFNpemUnKSByZXR1cm5zIGxlZ2FjeSBmb250IHNpemUK
KyAgICAgICAgZm9yIGJvdGggdmFyaWFibGUgd2lkdGggYW5kIGZpeGVkIHdpZHRoIGZvbnRzLgor
CisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb250LXNpemUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvbnQtc2l6
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NlcmlhbGl6ZXI6IEFkZGVkLgorCiAyMDEw
LTA5LTA4ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAg
TGF5b3V0VGVzdCByZWdyZXNzaW9ucyBkdWUgdG8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvNjcwMDEKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnkt
Zm9udC1zaXplLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL3F1ZXJ5LWZvbnQtc2l6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvbnQtc2l6ZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKK3Rlc3QJaHRtbAlxdWVyeUNvbW1h
bmRWYWx1ZSByZXN1bHQJZ2V0Q29tcHV0ZWRTdHlsZSByZXN1bHQKK2V4ZWNDb21tYW5kKCdGb250
U2l6ZScsIC0yKQk8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6
ZTogeC1zbWFsbDsiPnRlc3Q8L3NwYW4+CTEJMTBweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywg
LTEpCTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiBzbWFs
bDsiPnRlc3Q8L3NwYW4+CTIJMTNweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgMCkJPHNwYW4+
dGVzdDwvc3Bhbj4JMwkxNnB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAxKQk8c3BhbiBjbGFz
cz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogeC1zbWFsbDsiPnRlc3Q8L3Nw
YW4+CTEJMTBweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgMikJPHNwYW4gY2xhc3M9IkFwcGxl
LXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+dGVzdDwvc3Bhbj4JMgkxM3B4
CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAzKQk8c3Bhbj50ZXN0PC9zcGFuPgkzCTE2cHgKK2V4
ZWNDb21tYW5kKCdGb250U2l6ZScsIDQpCTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBz
dHlsZT0iZm9udC1zaXplOiBsYXJnZTsiPnRlc3Q8L3NwYW4+CTQJMThweAorZXhlY0NvbW1hbmQo
J0ZvbnRTaXplJywgNSkJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250
LXNpemU6IHgtbGFyZ2U7Ij50ZXN0PC9zcGFuPgk1CTI0cHgKK2V4ZWNDb21tYW5kKCdGb250U2l6
ZScsIDYpCTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiB4
eC1sYXJnZTsiPnRlc3Q8L3NwYW4+CTYJMzJweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgNykJ
PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IC13ZWJraXQt
eHh4LWxhcmdlOyI+dGVzdDwvc3Bhbj4JNwk0OHB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAn
OHB4JykJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IC13
ZWJraXQteHh4LWxhcmdlOyI+dGVzdDwvc3Bhbj4JNwk0OHB4CitleGVjQ29tbWFuZCgnRm9udFNp
emUnLCAnMnB4JykJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNp
emU6IHNtYWxsOyI+dGVzdDwvc3Bhbj4JMgkxM3B4CittYW51YWwgQ1NTIGZvbnQtc2l6ZTogM3B4
CTxzcGFuIHN0eWxlPSJmb250LXNpemU6IDNweCI+dGVzdDwvc3Bhbj4JMQkzcHgKK21hbnVhbCBD
U1MgZm9udC1zaXplOiAwLjJlbQk8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAwLjJlbSI+dGVzdDwv
c3Bhbj4JMQk5cHgKK21hbnVhbCBDU1MgZm9udC1zaXplOiAxN3B4CTxzcGFuIHN0eWxlPSJmb250
LXNpemU6IDE3cHgiPnRlc3Q8L3NwYW4+CTQJMTdweAorbWFudWFsIENTUyBmb250LXNpemU6IDMx
cHgJPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMzFweCI+dGVzdDwvc3Bhbj4JNgkzMXB4CittYW51
YWwgQ1NTIGZvbnQtc2l6ZTogNTBweAk8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA1MHB4Ij50ZXN0
PC9zcGFuPgk3CTUwcHgKK21hbnVhbCBDU1MgZm9udC1zaXplOiA1ZW0JPHNwYW4gc3R5bGU9ImZv
bnQtc2l6ZTogNWVtIj50ZXN0PC9zcGFuPgk3CTgwcHgKK21hbnVhbCBDU1MgZm9udC1zaXplOiAx
MHB4CTxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHgiPnRlc3Q8L3NwYW4+CTEJMTBweAorbW9u
b3NwYWNlIHRlc3RzIHRvIHNob3cgYnVnIDE5MTYxCitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAt
MikJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHgtc21h
bGw7Ij48Zm9udCBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0
PC9mb250Pjwvc3Bhbj4JMQkxMHB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAtMSkJPHNwYW4g
Y2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+PGZvbnQg
Y2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIGZhY2U9Im1vbm9zcGFjZSI+dGVzdDwvZm9udD48L3Nw
YW4+CTIJMTNweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgMCkJPHNwYW4+PGZvbnQgY2xhc3M9
IkFwcGxlLXN0eWxlLXNwYW4iIGZhY2U9Im1vbm9zcGFjZSI+dGVzdDwvZm9udD48L3NwYW4+CTMJ
MTZweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgMSkJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxl
LXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHgtc21hbGw7Ij48Zm9udCBjbGFzcz0iQXBwbGUtc3R5
bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0PC9mb250Pjwvc3Bhbj4JMQkxMHB4CitleGVj
Q29tbWFuZCgnRm9udFNpemUnLCAyKQk8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5
bGU9ImZvbnQtc2l6ZTogc21hbGw7Ij48Zm9udCBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFj
ZT0ibW9ub3NwYWNlIj50ZXN0PC9mb250Pjwvc3Bhbj4JMgkxM3B4CitleGVjQ29tbWFuZCgnRm9u
dFNpemUnLCAzKQk8c3Bhbj48Zm9udCBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFjZT0ibW9u
b3NwYWNlIj50ZXN0PC9mb250Pjwvc3Bhbj4JMwkxNnB4CitleGVjQ29tbWFuZCgnRm9udFNpemUn
LCA0KQk8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogbGFy
Z2U7Ij48Zm9udCBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0
PC9mb250Pjwvc3Bhbj4JNAkxOHB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCA1KQk8c3BhbiBj
bGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogeC1sYXJnZTsiPjxmb250
IGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBmYWNlPSJtb25vc3BhY2UiPnRlc3Q8L2ZvbnQ+PC9z
cGFuPgk1CTI0cHgKK2V4ZWNDb21tYW5kKCdGb250U2l6ZScsIDYpCTxzcGFuIGNsYXNzPSJBcHBs
ZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiB4eC1sYXJnZTsiPjxmb250IGNsYXNzPSJB
cHBsZS1zdHlsZS1zcGFuIiBmYWNlPSJtb25vc3BhY2UiPnRlc3Q8L2ZvbnQ+PC9zcGFuPgk2CTMy
cHgKK2V4ZWNDb21tYW5kKCdGb250U2l6ZScsIDcpCTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1z
cGFuIiBzdHlsZT0iZm9udC1zaXplOiAtd2Via2l0LXh4eC1sYXJnZTsiPjxmb250IGNsYXNzPSJB
cHBsZS1zdHlsZS1zcGFuIiBmYWNlPSJtb25vc3BhY2UiPnRlc3Q8L2ZvbnQ+PC9zcGFuPgk3CTQ4
cHgKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9udC1zaXpl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9xdWVy
eS1mb250LXNpemUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvcXVlcnktZm9udC1zaXplLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2
IEBACis8Ym9keT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGFkZFJvdyh0YWJsZSkKK3sKKyAgICB2
YXIgdGFibGVSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOworICAgIHRhYmxlLmFw
cGVuZENoaWxkKHRhYmxlUm93KTsKKyAgICByZXR1cm4gdGFibGVSb3c7Cit9CisKK2Z1bmN0aW9u
IGFkZENlbGxXaXRoTm9kZUNvbnRlbnRzKHRhYmxlUm93LCBjb250ZW50cykKK3sKKyAgICB2YXIg
dGFibGVDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICB0YWJsZUNlbGwu
YXBwZW5kQ2hpbGQoY29udGVudHMpOworICAgIHRhYmxlUm93LmFwcGVuZENoaWxkKHRhYmxlQ2Vs
bCk7CisgICAgcmV0dXJuIHRhYmxlQ2VsbDsKK30KKworZnVuY3Rpb24gYWRkQ2VsbFdpdGhUZXh0
Q29udGVudHModGFibGVSb3csIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZGRDZWxsV2l0aE5v
ZGVDb250ZW50cyh0YWJsZVJvdywgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudHMpKTsK
K30KKworZnVuY3Rpb24gYWRkSGVhZGVyV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgY29udGVu
dHMpCit7CisgICAgdmFyIHRhYmxlQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7
ICAgCisgICAgdGFibGVDZWxsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNv
bnRlbnRzKSk7CisgICAgdGFibGVSb3cuYXBwZW5kQ2hpbGQodGFibGVDZWxsKTsKKyAgICByZXR1
cm4gdGFibGVDZWxsOworfQorCitmdW5jdGlvbiBzZXRGb250U2l6ZU9uQ29udGVudChzaXplKQor
eworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihlZGl0YWJsZURp
dik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkZvbnRTaXplIiwgZmFsc2UsIHNpemUpOwor
ICAgIHJldHVybiBlZGl0YWJsZURpdi5maXJzdENoaWxkOworfQorCitmdW5jdGlvbiBzZXRGb250
RmFtaWx5T25Db250ZW50KGZvbnRGYW1pbHkpCit7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigp
LnNlbGVjdEFsbENoaWxkcmVuKGVkaXRhYmxlRGl2KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgiRm9udE5hbWUiLCBmYWxzZSwgZm9udEZhbWlseSk7CisgICAgcmV0dXJuIGVkaXRhYmxlRGl2
LmZpcnN0Q2hpbGQ7Cit9CisKK2Z1bmN0aW9uIHdyYXBJblNwYW5JZk5lZWRlZChzaG91bGRCZVNw
YW4pCit7CisgICAgLy8gU29tZXRpbWVzIHRoZSByZXN1bHQgb2YgdGhlIEV4ZWNDb21tYW5kIHdp
bGwgbm90IGhhdmUgYSB3cmFwcGluZyA8c3Bhbj4KKyAgICBpZiAoIXNob3VsZEJlU3Bhbi5sb2Nh
bE5hbWUgfHwgc2hvdWxkQmVTcGFuLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpICE9ICJzcGFuIikg
eworICAgICAgICBzaG91bGRCZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
CisgICAgICAgIHNob3VsZEJlU3Bhbi5hcHBlbmRDaGlsZChlZGl0YWJsZURpdi5maXJzdENoaWxk
KTsKKyAgICAgICAgZWRpdGFibGVEaXYuYXBwZW5kQ2hpbGQoc2hvdWxkQmVTcGFuKTsKKyAgICB9
CisgICAgcmV0dXJuIHNob3VsZEJlU3BhbjsKK30KKworZnVuY3Rpb24gcmVwb3J0U2l6ZUZvclNw
YW4oc3BhbiwgY29tbWVudCkKK3sKKyAgICB2YXIgdGFibGVSb3cgPSBhZGRSb3codGFibGUpOwor
ICAgIGFkZENlbGxXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCBjb21tZW50KTsKKyAgICBhZGRD
ZWxsV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgc3Bhbi5wYXJlbnROb2RlLmlubmVySFRNTCk7
IC8vIHNpbGwgRkYgaGFzIG5vIG91dGVySFRNTAorICAgCisgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLnNlbGVjdEFsbENoaWxkcmVuKHNwYW4ucGFyZW50Tm9kZSk7CisgICAgYWRkQ2VsbFdpdGhU
ZXh0Q29udGVudHModGFibGVSb3csICIiICsgZG9jdW1lbnQucXVlcnlDb21tYW5kVmFsdWUoIkZv
bnRTaXplIikpOworICAgIGFkZENlbGxXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCAiIiArIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKHNwYW4sIG51bGwpLmZvbnRTaXplKTsKK30KKworZnVuY3Rp
b24gdGVzdEV4ZWNDb21tYW5kRm9udFNpemUoc2l6ZSwgZm9udEZhbWlseSkKK3sKKyAgICBlZGl0
YWJsZURpdi5pbm5lckhUTUwgPSAidGVzdCI7CisgICAgdmFyIHNpemVkQ29udGVudCA9IHNldEZv
bnRTaXplT25Db250ZW50KHNpemUpOworICAgIHNpemVkQ29udGVudCA9IHdyYXBJblNwYW5JZk5l
ZWRlZChzaXplZENvbnRlbnQpOworICAgIGlmIChmb250RmFtaWx5KQorICAgICAgICBzaXplZENv
bnRlbnQgPSBzZXRGb250RmFtaWx5T25Db250ZW50KGZvbnRGYW1pbHkpOworICAgIHZhciBzaXpl
U3RyaW5nID0gKHR5cGVvZihzaXplKSA9PSAic3RyaW5nIikgPyAoIiciICsgc2l6ZSArICInIikg
OiBzaXplOworICAgIHJlcG9ydFNpemVGb3JTcGFuKHNpemVkQ29udGVudCwgImV4ZWNDb21tYW5k
KCdGb250U2l6ZScsICIgKyBzaXplU3RyaW5nICsgIikiKTsKK30KKworZnVuY3Rpb24gdGVzdE1h
bnVhbEZvbnRTaXplKHNpemUpCit7CisgICAgZWRpdGFibGVEaXYuaW5uZXJIVE1MID0gIjxzcGFu
IHN0eWxlPSdmb250LXNpemU6ICIgKyBzaXplICsgIic+dGVzdDwvc3Bhbj4iOworICAgIHJlcG9y
dFNpemVGb3JTcGFuKGVkaXRhYmxlRGl2LmZpcnN0Q2hpbGQsICJtYW51YWwgQ1NTIGZvbnQtc2l6
ZTogIiArIHNpemUpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBlZGl0YWJs
ZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZWRpdGFibGVEaXYuY29udGVu
dEVkaXRhYmxlID0gdHJ1ZTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWRpdGFibGVEaXYp
OworCit2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwordGFibGUu
Ym9yZGVyID0gIjFweCI7Cit0YWJsZS53aWR0aCA9ICIxMDAlIjsKK2RvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGFibGUpOworCit2YXIgdGFibGVSb3cgPSBhZGRSb3codGFibGUpOworYWRkSGVh
ZGVyV2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgInRlc3QiKTsKK2FkZEhlYWRlcldpdGhUZXh0
Q29udGVudHModGFibGVSb3csICJodG1sIik7CithZGRIZWFkZXJXaXRoVGV4dENvbnRlbnRzKHRh
YmxlUm93LCAicXVlcnlDb21tYW5kVmFsdWUgcmVzdWx0Iik7CithZGRIZWFkZXJXaXRoVGV4dENv
bnRlbnRzKHRhYmxlUm93LCAiZ2V0Q29tcHV0ZWRTdHlsZSByZXN1bHQiKTsKKworZm9yICh2YXIg
c2l6ZSA9IC0yOyBzaXplIDwgODsgc2l6ZSsrKSB7CisgICAgdGVzdEV4ZWNDb21tYW5kRm9udFNp
emUoc2l6ZSk7Cit9Cit0ZXN0RXhlY0NvbW1hbmRGb250U2l6ZSgiOHB4Iik7Cit0ZXN0RXhlY0Nv
bW1hbmRGb250U2l6ZSgiMnB4Iik7CisKK3Rlc3RNYW51YWxGb250U2l6ZSgiM3B4Iik7Cit0ZXN0
TWFudWFsRm9udFNpemUoIjAuMmVtIik7Cit0ZXN0TWFudWFsRm9udFNpemUoIjE3cHgiKTsKK3Rl
c3RNYW51YWxGb250U2l6ZSgiMzFweCIpOwordGVzdE1hbnVhbEZvbnRTaXplKCI1MHB4Iik7Cit0
ZXN0TWFudWFsRm9udFNpemUoIjVlbSIpOwordGVzdE1hbnVhbEZvbnRTaXplKCIxMHB4Iik7CisK
K3RhYmxlUm93ID0gYWRkUm93KHRhYmxlKTsKK2FkZEhlYWRlcldpdGhUZXh0Q29udGVudHModGFi
bGVSb3csICJtb25vc3BhY2UgdGVzdHMgdG8gc2hvdyBidWcgMTkxNjEiKTsKKworZm9yICh2YXIg
c2l6ZSA9IC0yOyBzaXplIDwgODsgc2l6ZSsrKSB7CisgICAgdGVzdEV4ZWNDb21tYW5kRm9udFNp
emUoc2l6ZSwgJ21vbm9zcGFjZScpOworfQorCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVk
aXRhYmxlRGl2KTsKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66997</attachid>
            <date>2010-09-08 23:04:46 -0700</date>
            <delta_ts>2010-09-09 11:05:29 -0700</delta_ts>
            <desc>fixed per Darin&apos;s comments</desc>
            <filename>bug-21033-20100908230445.patch</filename>
            <type>text/plain</type>
            <size>19666</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDktMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXVl
cnlDb21tYW5kVmFsdWUoJ0ZvbnRTaXplJykgcmV0dXJucyBwaXhlbCB2YWx1ZXMgaW5zdGVhZCBv
ZiBJRSBmb250IG51bWJlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMDMzCisKKyAgICAgICAgTW9kaWZpZWQgc2VsZWN0aW9uU3RhcnRDU1NQcm9w
ZXJ0eVZhbHVlIHRvIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGluc3RlYWQgb2YgcGl4ZWwgc2l6
ZS4KKyAgICAgICAgVG8gaW1wbGVtZW50IHRoZSBjb252ZXJzaW9uIGJldHdlZW4gcGl4ZWwgZm9u
dCBzaXplIGFuZCBsZWdhY3kgZm9udCBzaXplLAorICAgICAgICBhZGRlZCBsZWdhY3lGb250U2l6
ZSB0byBDU1NTdHlsZVNlbGVjdG9yIHdpdGggYSBoZWxwZXIgc3RhdGljIGZ1bmN0aW9uIGZpbmRO
ZWFyZXN0TGVnYWN5Rm9udFNpemUuCisKKyAgICAgICAgRml4ZWQgYSBidWcgaW4gc2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZSB3aGVyZSBpdCBvYnRhaW5zIHRoZSBzdHlsZSBvZiB0aGUgcHJldmlvdXMg
ZWRpdGluZyBwb3NpdGlvbgorICAgICAgICBldmVuIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBhIHJh
bmdlLiBUaGlzIGNoYW5nZSByZXZlYWxlZCBhIGNyYXNoIGluIGV4ZWN1dGVUb2dnbGVTdHlsZUlu
TGlzdCwKKyAgICAgICAgd2hpY2ggd2FzIGFsc28gZml4ZWQuCisKKyAgICAgICAgVGVzdDogZWRp
dGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb250LXNpemUuaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb246OmdldEZvbnRTaXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29y
ZCk6IENvcnJlY3RlZCBzdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6dXNlRml4ZWRGb250RGVmYXVsdFNpemUpOiBBZGRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Zm9udFNp
emVGb3JLZXl3b3JkKTogUmVuYW1lZCBmaXhlZC9tb25vc3BhY2UgdG8gc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0U2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemUp
OiBBZGRlZCwgYSBoZWxwZXIgZm9yIGxlZ2FjeUZvbnRTaXplLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bGVnYWN5Rm9udFNpemUpOiBBZGRlZC4KKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKTogQWRk
ZWQgYSBjb252ZXJzaW9uIGZyb20gcGl4ZWwgdG8gbGVnYWN5IGZvbnQgc2l6ZS4KKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRv
Z2dsZVN0eWxlSW5MaXN0KTogQ3Jhc2ggZml4LgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUpOiBTZWUgYWJv
dmUuCisKIDIwMTAtMDktMDggIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDY2OTkzKQorKysgV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU1
LDEzICs1NTUsMTIgQEAgc3RhdGljIGludCBjc3NJZGVudGlmaWVyRm9yRm9udFNpemVLZXl3bwog
CiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldEZv
bnRTaXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29yZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9k
ZSA9IG1fbm9kZS5nZXQoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKCFtX25vZGUpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9ub2RlLT5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3Bz
ZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC01NzEsNiArNTcwLDE4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVk
U3R5bGVEZWMKICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7CiB9CiAKK2Jvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp1c2VGaXhlZEZv
bnREZWZhdWx0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX25vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBtX25vZGUtPmNvbXB1
dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICBpZiAoIXN0eWxlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
LnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKK30KKwogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2YWx1ZUZvclNoYWRvdyhjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3csIGludCBpZCkgY29uc3QKIHsKICAgICBpZiAoIXNoYWRvdykKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiA2Njk5MykKKysrIFdl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFBy
b3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQpIGNvbnN0OwogICAg
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldEZvbnRTaXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29y
ZCgpIGNvbnN0OworICAgIGJvb2wgdXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSBjb25zdDsKICNp
ZiBFTkFCTEUoU1ZHKQogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFNWR1Byb3BlcnR5Q1NT
VmFsdWUoaW50IHByb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQpIGNvbnN0OwogI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNjY5OTMpCisrKyBXZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI5OCwxNCArNjI5OCwx
NCBAQCBzdGF0aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9uCiAvLyBmYWN0b3Jz
IGZvciBlYWNoIGtleXdvcmQgdmFsdWUuCiBzdGF0aWMgY29uc3QgZmxvYXQgZm9udFNpemVGYWN0
b3JzW3RvdGFsS2V5d29yZHNdID0geyAwLjYwZiwgMC43NWYsIDAuODlmLCAxLjBmLCAxLjJmLCAx
LjVmLCAyLjBmLCAzLjBmIH07CiAKLWZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmZvbnRTaXplRm9y
S2V5d29yZChEb2N1bWVudCogZG9jdW1lbnQsIGludCBrZXl3b3JkLCBib29sIGZpeGVkKQorZmxv
YXQgQ1NTU3R5bGVTZWxlY3Rvcjo6Zm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiBkb2N1bWVu
dCwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKIHsKICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRp
bmdzKQogICAgICAgICByZXR1cm4gMS4wZjsKIAogICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3Vt
ZW50LT5pblF1aXJrc01vZGUoKTsKLSAgICBpbnQgbWVkaXVtU2l6ZSA9IGZpeGVkID8gc2V0dGlu
Z3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7
CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0dGlu
Z3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7
CiAgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9
IGZvbnRTaXplVGFibGVNYXgpIHsKICAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4gdGhl
IHRhYmxlLgogICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVNaW47
CkBAIC02MzE4LDYgKzYzMTgsMzMgQEAgZmxvYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6Zm9udFNpemVG
b3JLZXl3bwogICAgIHJldHVybiBtYXgoZm9udFNpemVGYWN0b3JzW2tleXdvcmQgLSBDU1NWYWx1
ZVh4U21hbGxdKm1lZGl1bVNpemUsIG1pbkxvZ2ljYWxTaXplKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0YXRpYyBpbnQgZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZShpbnQgcGl4ZWxG
b250U2l6ZSwgY29uc3QgVCogdGFibGUsIGludCBtdWx0aXBsaWVyKQoreworICAgIC8vIElnbm9y
ZSB0YWJsZVswXSBiZWNhdXNlIHh4LXNtYWxsIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IGxl
Z2FjeSBmb250IHNpemUuCisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCB0b3RhbEtleXdvcmRzIC0g
MTsgaSsrKSB7CisgICAgICAgIGlmIChwaXhlbEZvbnRTaXplICogMiA8ICh0YWJsZVtpXSArIHRh
YmxlW2kgKyAxXSkgKiBtdWx0aXBsaWVyKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQor
ICAgIHJldHVybiB0b3RhbEtleXdvcmRzIC0gMTsKK30KKworaW50IENTU1N0eWxlU2VsZWN0b3I6
OmxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgaW50IHBpeGVsRm9udFNpemUsIGJv
b2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1
cm4gMTsKKworICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3VtZW50LT5pblF1aXJrc01vZGUoKTsK
KyAgICBpbnQgbWVkaXVtU2l6ZSA9IHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUgPyBzZXR0aW5n
cy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSA6IHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsK
KyAgICBpZiAobWVkaXVtU2l6ZSA+PSBmb250U2l6ZVRhYmxlTWluICYmIG1lZGl1bVNpemUgPD0g
Zm9udFNpemVUYWJsZU1heCkgeworICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRT
aXplVGFibGVNaW47CisgICAgICAgIHJldHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGlu
dD4ocGl4ZWxGb250U2l6ZSwgcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XSA6
IHN0cmljdEZvbnRTaXplVGFibGVbcm93XSwgMSk7CisgICAgfQorCisgICAgcmV0dXJuIGZpbmRO
ZWFyZXN0TGVnYWN5Rm9udFNpemU8ZmxvYXQ+KHBpeGVsRm9udFNpemUsIGZvbnRTaXplRmFjdG9y
cywgbWVkaXVtU2l6ZSk7Cit9CisKIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmxhcmdlckZvbnRT
aXplKGZsb2F0IHNpemUsIGJvb2wpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
d2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkg
YW5kIHNjYWxlIHVwIHRvCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiA2Njk5
MykKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIyLDEwICsxMjIsMTMgQEAgcHVibGljOgogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgYm9vbCBhdXRob3JPbmx5KTsKICAgICAg
ICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCosIFBzZXVkb0lkLCBib29sIGF1dGhvck9ubHkpOwogCisgICAgICAgIC8vIEdpdmVuIGEg
Zm9udCBzaXplIGluIHBpeGVsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGxlZ2FjeSBmb250
IHNpemUgYmV0d2VlbiAxIGFuZCA3LgorICAgICAgICBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXpl
KERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0
U2l6ZSk7CisKICAgICBwcml2YXRlOgogICAgICAgICAvLyBHaXZlbiBhIENTUyBrZXl3b3JkIGlu
IHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgcmV0dXJuCiAgICAgICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQgcmVs
YXRpdmUgdG8gdGhlIHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgotICAgICAgICBzdGF0aWMgZmxv
YXQgZm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgbW9ub3Nw
YWNlKTsKKyAgICAgICAgc3RhdGljIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCos
IGludCBrZXl3b3JkLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwogCiAgICAgICAg
IC8vIFdoZW4gdGhlIENTUyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24g
d2lsbCBhdHRlbXB0IHRvIG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZAogICAgICAgICAvLyB0YWJs
ZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDY2OTkzKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNp
bmNsdWRlICJDbGlwYm9hcmRFdmVudC5oIgpAQCAtOTM4LDcgKzkzOSw3IEBAIHN0YXRpYyBib29s
IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG8KIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvblN0
YXJ0Q1NTUHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkKIHsKICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7Ci0gICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0g
bV9mcmFtZS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOworICAgIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0gbV9mcmFtZS0+
c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOwogICAgIGlmICghc2VsZWN0aW9u
U3R5bGUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtOTY1LDYgKzk2NiwxNCBAQCBT
dHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUZvbnRTaXplKSB7CisgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzZWxlY3Rpb25TdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpOworICAgICAgICBpbnQgZm9udFBpeGVsU2l6ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgaW50IHNpemUgPSBDU1NTdHlsZVNlbGVjdG9yOjpsZWdh
Y3lGb250U2l6ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBmb250UGl4ZWxTaXplLCBzZWxlY3Rpb25T
dHlsZS0+dXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6
Om51bWJlcihzaXplKTsKKyAgICB9CisKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2OTkzKQorKysgV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDkgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KEZyYQogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IDA7CiAgICAgUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBmcmFtZS0+c2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOworICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc2VsZWN0ZWRDU1NW
YWx1ZSA9IHNlbGVjdGlvblN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwog
ICAgIFN0cmluZyBuZXdTdHlsZSA9ICJub25lIjsKICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZS0+
aXNWYWx1ZUxpc3QoKSkgewpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA2Njk5MykKKysrIFdlYkNvcmUv
cGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw2ICs3NDUsMTQgQEAgUGFzc1Jl
ZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IAogICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2Uoc2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIFBvc2l0aW9uIHBvcyA9
IHJhbmdlLT5lZGl0aW5nU3RhcnRQb3NpdGlvbigpOwogCisgICAgLy8gSWYgdGhlIHBvcyBpcyBh
dCB0aGUgZW5kIG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBpcyBub3QgZnVsbHkgc2Vs
ZWN0ZWQuCisgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIGVxdWl2YWxlbnQgcG9zaXRp
b24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxlIGZyb20gdGhpcyBub2RlLgorICAgIC8vIGUu
Zy4gaWYgcG9zIHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29y
bGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGluc3RlYWQuCisgICAg
Ly8gV2Ugb25seSBkbyB0aGlzIGZvciByYW5nZSBiZWNhdXNlIGNhcmV0IGF0IFBvc2l0aW9uKCJo
ZWxsbyIsIDUpIGluIDxiPmhlbGxvPC9iPndvcmxkIHNob3VsZCBnaXZlIHlvdSBmb250LXdlaWdo
dDogYm9sZC4KKyAgICBOb2RlKiBwb3NOb2RlID0gcG9zLmNvbnRhaW5lck5vZGUoKTsKKyAgICBp
ZiAoc2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiBwb3NOb2RlICYmIHBvc05vZGUtPmlzVGV4dE5v
ZGUoKSAmJiBwb3MuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IHBvc05vZGUtPm1h
eENoYXJhY3Rlck9mZnNldCgpKQorICAgICAgICBwb3MgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShwb3MpOworCiAgICAgRWxlbWVudCAqZWxlbSA9IHBvcy5lbGVtZW50KCk7CiAgICAg
aWYgKCFlbGVtKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3MDI2KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDktMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcXVlcnlDb21tYW5kVmFsdWUo
J0ZvbnRTaXplJykgcmV0dXJucyBwaXhlbCB2YWx1ZXMgaW5zdGVhZCBvZiBJRSBmb250IG51bWJl
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDMz
CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVuc3VyZSBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9u
dFNpemUnKSByZXR1cm5zIGxlZ2FjeSBmb250IHNpemUKKyAgICAgICAgZm9yIGJvdGggdmFyaWFi
bGUgd2lkdGggYW5kIGZpeGVkIHdpZHRoIGZvbnRzLgorCisgICAgICAgICogZWRpdGluZy9leGVj
Q29tbWFuZC9xdWVyeS1mb250LXNpemUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBl
ZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvbnQtc2l6ZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3NlcmlhbGl6ZXI6IEFkZGVkLgorCiAyMDEwLTA5LTA4ICBDc2FiYSBPc3p0cm9nb27D
oWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTGF5b3V0VGVzdCByZWdyZXNzaW9ucyBk
dWUgdG8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNjcwMDEKSW5kZXg6IExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9udC1zaXplLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvbnQt
c2l6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL3F1ZXJ5LWZvbnQtc2l6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzEgQEAKK3Rlc3QJaHRtbAlxdWVyeUNvbW1hbmRWYWx1ZSByZXN1bHQJZ2V0Q29tcHV0
ZWRTdHlsZSByZXN1bHQKK2V4ZWNDb21tYW5kKCdGb250U2l6ZScsIC0yKQk8c3BhbiBjbGFzcz0i
QXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogeC1zbWFsbDsiPnRlc3Q8L3NwYW4+
CTEJMTBweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgLTEpCTxzcGFuIGNsYXNzPSJBcHBsZS1z
dHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiBzbWFsbDsiPnRlc3Q8L3NwYW4+CTIJMTNweAor
ZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgMCkJPHNwYW4+dGVzdDwvc3Bhbj4JMwkxNnB4CitleGVj
Q29tbWFuZCgnRm9udFNpemUnLCAxKQk8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5
bGU9ImZvbnQtc2l6ZTogeC1zbWFsbDsiPnRlc3Q8L3NwYW4+CTEJMTBweAorZXhlY0NvbW1hbmQo
J0ZvbnRTaXplJywgMikJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250
LXNpemU6IHNtYWxsOyI+dGVzdDwvc3Bhbj4JMgkxM3B4CitleGVjQ29tbWFuZCgnRm9udFNpemUn
LCAzKQk8c3Bhbj50ZXN0PC9zcGFuPgkzCTE2cHgKK2V4ZWNDb21tYW5kKCdGb250U2l6ZScsIDQp
CTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiBsYXJnZTsi
PnRlc3Q8L3NwYW4+CTQJMThweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgNSkJPHNwYW4gY2xh
c3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHgtbGFyZ2U7Ij50ZXN0PC9z
cGFuPgk1CTI0cHgKK2V4ZWNDb21tYW5kKCdGb250U2l6ZScsIDYpCTxzcGFuIGNsYXNzPSJBcHBs
ZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiB4eC1sYXJnZTsiPnRlc3Q8L3NwYW4+CTYJ
MzJweAorZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgNykJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxl
LXNwYW4iIHN0eWxlPSJmb250LXNpemU6IC13ZWJraXQteHh4LWxhcmdlOyI+dGVzdDwvc3Bhbj4J
Nwk0OHB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAnOHB4JykJPHNwYW4gY2xhc3M9IkFwcGxl
LXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IC13ZWJraXQteHh4LWxhcmdlOyI+dGVzdDwv
c3Bhbj4JNwk0OHB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAnMnB4JykJPHNwYW4gY2xhc3M9
IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+dGVzdDwvc3Bhbj4J
MgkxM3B4CittYW51YWwgQ1NTIGZvbnQtc2l6ZTogM3B4CTxzcGFuIHN0eWxlPSJmb250LXNpemU6
IDNweCI+dGVzdDwvc3Bhbj4JMQkzcHgKK21hbnVhbCBDU1MgZm9udC1zaXplOiAwLjJlbQk8c3Bh
biBzdHlsZT0iZm9udC1zaXplOiAwLjJlbSI+dGVzdDwvc3Bhbj4JMQk5cHgKK21hbnVhbCBDU1Mg
Zm9udC1zaXplOiAxN3B4CTxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE3cHgiPnRlc3Q8L3NwYW4+
CTQJMTdweAorbWFudWFsIENTUyBmb250LXNpemU6IDMxcHgJPHNwYW4gc3R5bGU9ImZvbnQtc2l6
ZTogMzFweCI+dGVzdDwvc3Bhbj4JNgkzMXB4CittYW51YWwgQ1NTIGZvbnQtc2l6ZTogNTBweAk8
c3BhbiBzdHlsZT0iZm9udC1zaXplOiA1MHB4Ij50ZXN0PC9zcGFuPgk3CTUwcHgKK21hbnVhbCBD
U1MgZm9udC1zaXplOiA1ZW0JPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogNWVtIj50ZXN0PC9zcGFu
Pgk3CTgwcHgKK21hbnVhbCBDU1MgZm9udC1zaXplOiAxMHB4CTxzcGFuIHN0eWxlPSJmb250LXNp
emU6IDEwcHgiPnRlc3Q8L3NwYW4+CTEJMTBweAorbW9ub3NwYWNlIHRlc3RzIHRvIHNob3cgYnVn
IDE5MTYxCitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAtMikJPHNwYW4gY2xhc3M9IkFwcGxlLXN0
eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6IHgtc21hbGw7Ij48Zm9udCBjbGFzcz0iQXBwbGUt
c3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0PC9mb250Pjwvc3Bhbj4JMQkxMHB4Citl
eGVjQ29tbWFuZCgnRm9udFNpemUnLCAtMSkJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4i
IHN0eWxlPSJmb250LXNpemU6IHNtYWxsOyI+PGZvbnQgY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4i
IGZhY2U9Im1vbm9zcGFjZSI+dGVzdDwvZm9udD48L3NwYW4+CTIJMTNweAorZXhlY0NvbW1hbmQo
J0ZvbnRTaXplJywgMCkJPHNwYW4+PGZvbnQgY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIGZhY2U9
Im1vbm9zcGFjZSI+dGVzdDwvZm9udD48L3NwYW4+CTMJMTZweAorZXhlY0NvbW1hbmQoJ0ZvbnRT
aXplJywgMSkJPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXNpemU6
IHgtc21hbGw7Ij48Zm9udCBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNl
Ij50ZXN0PC9mb250Pjwvc3Bhbj4JMQkxMHB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAyKQk8
c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogc21hbGw7Ij48
Zm9udCBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0PC9mb250
Pjwvc3Bhbj4JMgkxM3B4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCAzKQk8c3Bhbj48Zm9udCBj
bGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0PC9mb250Pjwvc3Bh
bj4JMwkxNnB4CitleGVjQ29tbWFuZCgnRm9udFNpemUnLCA0KQk8c3BhbiBjbGFzcz0iQXBwbGUt
c3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogbGFyZ2U7Ij48Zm9udCBjbGFzcz0iQXBwbGUt
c3R5bGUtc3BhbiIgZmFjZT0ibW9ub3NwYWNlIj50ZXN0PC9mb250Pjwvc3Bhbj4JNAkxOHB4Citl
eGVjQ29tbWFuZCgnRm9udFNpemUnLCA1KQk8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIg
c3R5bGU9ImZvbnQtc2l6ZTogeC1sYXJnZTsiPjxmb250IGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFu
IiBmYWNlPSJtb25vc3BhY2UiPnRlc3Q8L2ZvbnQ+PC9zcGFuPgk1CTI0cHgKK2V4ZWNDb21tYW5k
KCdGb250U2l6ZScsIDYpCTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9u
dC1zaXplOiB4eC1sYXJnZTsiPjxmb250IGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBmYWNlPSJt
b25vc3BhY2UiPnRlc3Q8L2ZvbnQ+PC9zcGFuPgk2CTMycHgKK2V4ZWNDb21tYW5kKCdGb250U2l6
ZScsIDcpCTxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zaXplOiAt
d2Via2l0LXh4eC1sYXJnZTsiPjxmb250IGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBmYWNlPSJt
b25vc3BhY2UiPnRlc3Q8L2ZvbnQ+PC9zcGFuPgk3CTQ4cHgKSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9udC1zaXplLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb250LXNpemUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9udC1zaXpl
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACis8Ym9keT4KKzxzY3JpcHQ+CisK
K2Z1bmN0aW9uIGFkZFJvdyh0YWJsZSkKK3sKKyAgICB2YXIgdGFibGVSb3cgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJ0ciIpOworICAgIHRhYmxlLmFwcGVuZENoaWxkKHRhYmxlUm93KTsKKyAg
ICByZXR1cm4gdGFibGVSb3c7Cit9CisKK2Z1bmN0aW9uIGFkZENlbGxXaXRoTm9kZUNvbnRlbnRz
KHRhYmxlUm93LCBjb250ZW50cykKK3sKKyAgICB2YXIgdGFibGVDZWxsID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgidGQiKTsKKyAgICB0YWJsZUNlbGwuYXBwZW5kQ2hpbGQoY29udGVudHMpOwor
ICAgIHRhYmxlUm93LmFwcGVuZENoaWxkKHRhYmxlQ2VsbCk7CisgICAgcmV0dXJuIHRhYmxlQ2Vs
bDsKK30KKworZnVuY3Rpb24gYWRkQ2VsbFdpdGhUZXh0Q29udGVudHModGFibGVSb3csIGNvbnRl
bnRzKQoreworICAgIHJldHVybiBhZGRDZWxsV2l0aE5vZGVDb250ZW50cyh0YWJsZVJvdywgZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudHMpKTsKK30KKworZnVuY3Rpb24gYWRkSGVhZGVy
V2l0aFRleHRDb250ZW50cyh0YWJsZVJvdywgY29udGVudHMpCit7CisgICAgdmFyIHRhYmxlQ2Vs
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7ICAgCisgICAgdGFibGVDZWxsLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnRzKSk7CisgICAgdGFibGVSb3cu
YXBwZW5kQ2hpbGQodGFibGVDZWxsKTsKKyAgICByZXR1cm4gdGFibGVDZWxsOworfQorCitmdW5j
dGlvbiBzZXRGb250U2l6ZU9uQ29udGVudChzaXplKQoreworICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZWxlY3RBbGxDaGlsZHJlbihlZGl0YWJsZURpdik7CisgICAgZG9jdW1lbnQuZXhlY0Nv
bW1hbmQoIkZvbnRTaXplIiwgZmFsc2UsIHNpemUpOworICAgIHJldHVybiBlZGl0YWJsZURpdi5m
aXJzdENoaWxkOworfQorCitmdW5jdGlvbiBzZXRGb250RmFtaWx5T25Db250ZW50KGZvbnRGYW1p
bHkpCit7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGVkaXRh
YmxlRGl2KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiRm9udE5hbWUiLCBmYWxzZSwgZm9u
dEZhbWlseSk7CisgICAgcmV0dXJuIGVkaXRhYmxlRGl2LmZpcnN0Q2hpbGQ7Cit9CisKK2Z1bmN0
aW9uIHdyYXBJblNwYW5JZk5lZWRlZChzaG91bGRCZVNwYW4pCit7CisgICAgLy8gU29tZXRpbWVz
IHRoZSByZXN1bHQgb2YgdGhlIEV4ZWNDb21tYW5kIHdpbGwgbm90IGhhdmUgYSB3cmFwcGluZyA8
c3Bhbj4KKyAgICBpZiAoIXNob3VsZEJlU3Bhbi5sb2NhbE5hbWUgfHwgc2hvdWxkQmVTcGFuLmxv
Y2FsTmFtZS50b0xvd2VyQ2FzZSgpICE9ICJzcGFuIikgeworICAgICAgICBzaG91bGRCZVNwYW4g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHNob3VsZEJlU3Bhbi5h
cHBlbmRDaGlsZChlZGl0YWJsZURpdi5maXJzdENoaWxkKTsKKyAgICAgICAgZWRpdGFibGVEaXYu
YXBwZW5kQ2hpbGQoc2hvdWxkQmVTcGFuKTsKKyAgICB9CisgICAgcmV0dXJuIHNob3VsZEJlU3Bh
bjsKK30KKworZnVuY3Rpb24gcmVwb3J0U2l6ZUZvclNwYW4oc3BhbiwgY29tbWVudCkKK3sKKyAg
ICB2YXIgdGFibGVSb3cgPSBhZGRSb3codGFibGUpOworICAgIGFkZENlbGxXaXRoVGV4dENvbnRl
bnRzKHRhYmxlUm93LCBjb21tZW50KTsKKyAgICBhZGRDZWxsV2l0aFRleHRDb250ZW50cyh0YWJs
ZVJvdywgc3Bhbi5wYXJlbnROb2RlLmlubmVySFRNTCk7IC8vIHNpbGwgRkYgaGFzIG5vIG91dGVy
SFRNTAorICAgCisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKHNw
YW4ucGFyZW50Tm9kZSk7CisgICAgYWRkQ2VsbFdpdGhUZXh0Q29udGVudHModGFibGVSb3csICIi
ICsgZG9jdW1lbnQucXVlcnlDb21tYW5kVmFsdWUoIkZvbnRTaXplIikpOworICAgIGFkZENlbGxX
aXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCAiIiArIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNw
YW4sIG51bGwpLmZvbnRTaXplKTsKK30KKworZnVuY3Rpb24gdGVzdEV4ZWNDb21tYW5kRm9udFNp
emUoc2l6ZSwgZm9udEZhbWlseSkKK3sKKyAgICBlZGl0YWJsZURpdi5pbm5lckhUTUwgPSAidGVz
dCI7CisgICAgdmFyIHNpemVkQ29udGVudCA9IHNldEZvbnRTaXplT25Db250ZW50KHNpemUpOwor
ICAgIHNpemVkQ29udGVudCA9IHdyYXBJblNwYW5JZk5lZWRlZChzaXplZENvbnRlbnQpOworICAg
IGlmIChmb250RmFtaWx5KQorICAgICAgICBzaXplZENvbnRlbnQgPSBzZXRGb250RmFtaWx5T25D
b250ZW50KGZvbnRGYW1pbHkpOworICAgIHZhciBzaXplU3RyaW5nID0gKHR5cGVvZihzaXplKSA9
PSAic3RyaW5nIikgPyAoIiciICsgc2l6ZSArICInIikgOiBzaXplOworICAgIHJlcG9ydFNpemVG
b3JTcGFuKHNpemVkQ29udGVudCwgImV4ZWNDb21tYW5kKCdGb250U2l6ZScsICIgKyBzaXplU3Ry
aW5nICsgIikiKTsKK30KKworZnVuY3Rpb24gdGVzdE1hbnVhbEZvbnRTaXplKHNpemUpCit7Cisg
ICAgZWRpdGFibGVEaXYuaW5uZXJIVE1MID0gIjxzcGFuIHN0eWxlPSdmb250LXNpemU6ICIgKyBz
aXplICsgIic+dGVzdDwvc3Bhbj4iOworICAgIHJlcG9ydFNpemVGb3JTcGFuKGVkaXRhYmxlRGl2
LmZpcnN0Q2hpbGQsICJtYW51YWwgQ1NTIGZvbnQtc2l6ZTogIiArIHNpemUpOworfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBlZGl0YWJsZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworZWRpdGFibGVEaXYuY29udGVudEVkaXRhYmxlID0gdHJ1ZTsKK2RvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWRpdGFibGVEaXYpOworCit2YXIgdGFibGUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwordGFibGUuYm9yZGVyID0gIjFweCI7Cit0YWJsZS53
aWR0aCA9ICIxMDAlIjsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGFibGUpOworCit2YXIg
dGFibGVSb3cgPSBhZGRSb3codGFibGUpOworYWRkSGVhZGVyV2l0aFRleHRDb250ZW50cyh0YWJs
ZVJvdywgInRlc3QiKTsKK2FkZEhlYWRlcldpdGhUZXh0Q29udGVudHModGFibGVSb3csICJodG1s
Iik7CithZGRIZWFkZXJXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCAicXVlcnlDb21tYW5kVmFs
dWUgcmVzdWx0Iik7CithZGRIZWFkZXJXaXRoVGV4dENvbnRlbnRzKHRhYmxlUm93LCAiZ2V0Q29t
cHV0ZWRTdHlsZSByZXN1bHQiKTsKKworZm9yICh2YXIgc2l6ZSA9IC0yOyBzaXplIDwgODsgc2l6
ZSsrKSB7CisgICAgdGVzdEV4ZWNDb21tYW5kRm9udFNpemUoc2l6ZSk7Cit9Cit0ZXN0RXhlY0Nv
bW1hbmRGb250U2l6ZSgiOHB4Iik7Cit0ZXN0RXhlY0NvbW1hbmRGb250U2l6ZSgiMnB4Iik7CisK
K3Rlc3RNYW51YWxGb250U2l6ZSgiM3B4Iik7Cit0ZXN0TWFudWFsRm9udFNpemUoIjAuMmVtIik7
Cit0ZXN0TWFudWFsRm9udFNpemUoIjE3cHgiKTsKK3Rlc3RNYW51YWxGb250U2l6ZSgiMzFweCIp
OwordGVzdE1hbnVhbEZvbnRTaXplKCI1MHB4Iik7Cit0ZXN0TWFudWFsRm9udFNpemUoIjVlbSIp
OwordGVzdE1hbnVhbEZvbnRTaXplKCIxMHB4Iik7CisKK3RhYmxlUm93ID0gYWRkUm93KHRhYmxl
KTsKK2FkZEhlYWRlcldpdGhUZXh0Q29udGVudHModGFibGVSb3csICJtb25vc3BhY2UgdGVzdHMg
dG8gc2hvdyBidWcgMTkxNjEiKTsKKworZm9yICh2YXIgc2l6ZSA9IC0yOyBzaXplIDwgODsgc2l6
ZSsrKSB7CisgICAgdGVzdEV4ZWNDb21tYW5kRm9udFNpemUoc2l6ZSwgJ21vbm9zcGFjZScpOwor
fQorCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVkaXRhYmxlRGl2KTsKKworPC9zY3JpcHQ+
Cg==
</data>
<flag name="review"
          id="56166"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>