<?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>57871</bug_id>
          
          <creation_ts>2011-04-05 12:16:41 -0700</creation_ts>
          <short_desc>update DRT to embed checksums in png files</short_desc>
          <delta_ts>2011-04-07 15:22:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>56286</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Chang">tony</reporter>
          <assigned_to name="Tony Chang">tony</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>eric</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379794</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-05 12:16:41 -0700</bug_when>
    <thetext>update DRT to embed checksums in png files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379795</commentid>
    <comment_count>1</comment_count>
      <attachid>88291</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-05 12:18:06 -0700</bug_when>
    <thetext>Created attachment 88291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380501</commentid>
    <comment_count>2</comment_count>
      <attachid>88451</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 09:45:39 -0700</bug_when>
    <thetext>Created attachment 88451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380503</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 09:46:42 -0700</bug_when>
    <thetext>Not sure who a good reviewer for this would be.  Just guessing based on what appears to be authors of the pixel dumping code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380627</commentid>
    <comment_count>4</comment_count>
      <attachid>88451</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 10:59:37 -0700</bug_when>
    <thetext>Comment on attachment 88451
Patch

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

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:40
&gt; +/*
&gt; + * makeCrcTable and computeCrc are conversions of the JS methods in pnglib.js.
&gt; + *
&gt; + * A handy class to calculate color values.
&gt; + *
&gt; + * @version 1.0
&gt; + * @author Robert Eisele &lt;robert@xarg.org&gt;
&gt; + * @copyright Copyright (c) 2010, Robert Eisele
&gt; + * @link
&gt; + * http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/
&gt; + * @license http://www.opensource.org/licenses/bsd-license.php BSD License
&gt; + *
&gt; + */

Just put them in their own file, then we don&apos;t have to have this strangeness here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380648</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 11:14:11 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; Just put them in their own file, then we don&apos;t have to have this strangeness here.

I&apos;m happy to move these two functions to their own file, but just to be clear, the strangeness we&apos;re trying to avoid is having 2 licenses in a single file?  Even when in it&apos;s own file, I think I would still need both licenses since I authored a derivative work of the original code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380729</commentid>
    <comment_count>6</comment_count>
      <attachid>88488</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 12:36:00 -0700</bug_when>
    <thetext>Created attachment 88488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380730</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 12:36:51 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=88488) [details]
&gt; Patch

Here&apos;s a version with a separate .h/.cpp for the ported methods.

Also, this doesn&apos;t work with QT yet because it doesn&apos;t use PixelDumpSupport.*.  I&apos;ll fix that in a follow up change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381538</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 11:48:44 -0700</bug_when>
    <thetext>adding more reviewers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381547</commentid>
    <comment_count>9</comment_count>
      <attachid>88488</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-07 11:57:27 -0700</bug_when>
    <thetext>Comment on attachment 88488
Patch

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

&gt; Tools/ChangeLog:8
&gt; +         We insert the bytes for the comment in printPNG rather than at encode

indent problem?

&gt; Tools/DumpRenderTree/PNGUtil.h:32
&gt; +#ifndef PNGUtil_h
&gt; +#define PNGUtil_h

WebKit generally frowns upon things with &quot;util&quot; in their name.  Why not CyclicRedundancyCheck.h ?

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:88
&gt; +    bytesToAdd.resize(prefixLength + checksumLength + crcLength);
&gt; +    memcpy(bytesToAdd.data(), textCommentPrefix, prefixLength);
&gt; +    memcpy(bytesToAdd.data() + prefixLength, checksum, checksumLength);

Why not just use append ?

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:110
&gt; +    const unsigned char* idatPosition = std::search(data, data + dataLength, idat, idat + 4);

Does this always work?  For example, is there some reason IDAT can&apos;t appear in an ICC profile?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381549</commentid>
    <comment_count>10</comment_count>
      <attachid>88488</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-07 11:58:13 -0700</bug_when>
    <thetext>Comment on attachment 88488
Patch

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

did you forget to add to gypi build?

In general this looks good, but I think we should go another round....

&gt; Tools/ChangeLog:6
&gt; +        update DRT to embed checksums in png files
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=57871

tabs? spaceing?

&gt; Tools/DumpRenderTree/PNGUtil.cpp:40
&gt; + * @license http://www.opensource.org/licenses/bsd-license.php BSD License

Why not just inline the license like we do normally?  This license block feels very non-standard.

&gt; Tools/DumpRenderTree/PNGUtil.cpp:52
&gt; +            if (c &amp; 1)

Is this how we normally check for odd?

&gt; Tools/DumpRenderTree/PNGUtil.cpp:53
&gt; +                c = -306674912 ^ ((c &gt;&gt; 1) &amp; 0x7fffffff);

This seems needlessly mysterious.

&gt; Tools/DumpRenderTree/PNGUtil.cpp:61
&gt; +unsigned long computeCrc(unsigned char* buffer, size_t size)

I would just pass in a vector.

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:82
&gt; +    static const size_t prefixLength = 17;

sizeof(textCommentPrefix)?

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:91
&gt; +    dataToCrc.append(textCommentPrefix + 4, prefixLength - 4); // Don&apos;t include the length in the crc.

You have crcLength in a local, why not use it?

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:98
&gt; +    bytesToAdd[prefixLength + checksumLength] = ((crc32 &gt;&gt; 24) &amp; 0xff);
&gt; +    bytesToAdd[prefixLength + checksumLength + 1] = ((crc32 &gt;&gt; 16) &amp; 0xff);
&gt; +    bytesToAdd[prefixLength + checksumLength + 2] = ((crc32 &gt;&gt; 8) &amp; 0xff);
&gt; +    bytesToAdd[prefixLength + checksumLength + 3] = (crc32 &amp; 0xff);

I&apos;m not sure why we&apos;re operating in bytes here.

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:116
&gt; +    fwrite(bytesToAdd.data(), 1, bytesToAdd.size(), stdout);

I&apos;m confused why we use bytesToAdd and write in chunks of chars instead of operating with ints since it seems we are using ints?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381552</commentid>
    <comment_count>11</comment_count>
      <attachid>88488</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-07 12:02:38 -0700</bug_when>
    <thetext>Comment on attachment 88488
Patch

It looks like whoever wrote the JS one copied it directly from teh spec: http://www.libpng.org/pub/png/spec/1.2/PNG-CRCAppendix.html  I love how we&apos;ve round-tripped the language a couple times now. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381584</commentid>
    <comment_count>12</comment_count>
      <attachid>88673</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 12:42:38 -0700</bug_when>
    <thetext>Created attachment 88673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381588</commentid>
    <comment_count>13</comment_count>
      <attachid>88488</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 12:48:28 -0700</bug_when>
    <thetext>Comment on attachment 88488
Patch

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

&gt;&gt; Tools/ChangeLog:8
&gt;&gt; +         We insert the bytes for the comment in printPNG rather than at encode
&gt; 
&gt; indent problem?

Fixed

&gt;&gt; Tools/DumpRenderTree/PNGUtil.cpp:40
&gt;&gt; + * @license http://www.opensource.org/licenses/bsd-license.php BSD License
&gt; 
&gt; Why not just inline the license like we do normally?  This license block feels very non-standard.

Don&apos;t I have to copy the license/copyright verbatim as part of the BSD License?

&gt;&gt; Tools/DumpRenderTree/PNGUtil.cpp:53
&gt;&gt; +                c = -306674912 ^ ((c &gt;&gt; 1) &amp; 0x7fffffff);
&gt; 
&gt; This seems needlessly mysterious.

I&apos;m just copying the code from the source.  If we want to improve on it, maybe in a follow up, but I don&apos;t think that is necessary here.

&gt;&gt; Tools/DumpRenderTree/PNGUtil.cpp:61
&gt;&gt; +unsigned long computeCrc(unsigned char* buffer, size_t size)
&gt; 
&gt; I would just pass in a vector.

Done.

&gt;&gt; Tools/DumpRenderTree/PNGUtil.h:32
&gt;&gt; +#define PNGUtil_h
&gt; 
&gt; WebKit generally frowns upon things with &quot;util&quot; in their name.  Why not CyclicRedundancyCheck.h ?

Renamed.

&gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:82
&gt;&gt; +    static const size_t prefixLength = 17;
&gt; 
&gt; sizeof(textCommentPrefix)?

Won&apos;t that give me the size of a pointer?

&gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:88
&gt;&gt; +    memcpy(bytesToAdd.data() + prefixLength, checksum, checksumLength);
&gt; 
&gt; Why not just use append ?

Done.

&gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:91
&gt;&gt; +    dataToCrc.append(textCommentPrefix + 4, prefixLength - 4); // Don&apos;t include the length in the crc.
&gt; 
&gt; You have crcLength in a local, why not use it?

Sorry, updated the comment to mean the chunk length, not the crc length.

&gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:98
&gt;&gt; +    bytesToAdd[prefixLength + checksumLength + 3] = (crc32 &amp; 0xff);
&gt; 
&gt; I&apos;m not sure why we&apos;re operating in bytes here.

I think endianness matters.

&gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:110
&gt;&gt; +    const unsigned char* idatPosition = std::search(data, data + dataLength, idat, idat + 4);
&gt; 
&gt; Does this always work?  For example, is there some reason IDAT can&apos;t appear in an ICC profile?

IDAT is the section of the png that contains the actual pixels.  It is a required part of all pngs.

&gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:116
&gt;&gt; +    fwrite(bytesToAdd.data(), 1, bytesToAdd.size(), stdout);
&gt; 
&gt; I&apos;m confused why we use bytesToAdd and write in chunks of chars instead of operating with ints since it seems we are using ints?

I don&apos;t understand this question.  bytesToAdd has both text (e.g., the checksum) and ints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381637</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-07 13:34:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 88488 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88488&amp;action=review
&gt; &gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:110
&gt; &gt;&gt; +    const unsigned char* idatPosition = std::search(data, data + dataLength, idat, idat + 4);
&gt; &gt; 
&gt; &gt; Does this always work?  For example, is there some reason IDAT can&apos;t appear in an ICC profile?
&gt; 
&gt; IDAT is the section of the png that contains the actual pixels.  It is a required part of all pngs.

Oh, I meant that those characters might randomly appear in an ICC profile and you might corrupt the PNG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381647</commentid>
    <comment_count>15</comment_count>
      <attachid>88673</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-07 13:38:19 -0700</bug_when>
    <thetext>Comment on attachment 88673
Patch

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

I still love the change.  I still think this direct byte-stream, c-style code is kinda ugly.  But I&apos;m not sure I have a lot of better suggestions.

&gt; Tools/DumpRenderTree/CyclicRedundancyCheck.cpp:40
&gt; + * @license http://www.opensource.org/licenses/bsd-license.php BSD License

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

I don&apos;t think that means the @link stuff.  In fact, I suspect that we&apos;re more likely violating this by putting in our own Google version of the license.

I would jsut delete all this and put Copyright 2010 Robert Eisele &lt;robert@xarg.org&gt; at the top of one of our normal BSD licenses.  The version stuff and the link isn&apos;t very useful.  I&apos;m also not sure ohw much sense it makes for him to be able to copyright this since clearly he copied it directly from the spec I linked earlier.

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:82
&gt; +    static const size_t prefixLength = 17;

I was thinking of:  const char[] foo = &quot;foo&quot;;  sizeof(foo) which does work as expected.

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:90
&gt; +    FILE* f = fopen(&quot;/tmp/logzzz&quot;, &quot;w&quot;);
&gt; +    fprintf(f, &quot;%d\n&quot;, (int)bytesToAdd.size());
&gt; +    fclose(f);

Um..

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:101
&gt; +    bytesToAdd[prefixLength + checksumLength] = ((crc32 &gt;&gt; 24) &amp; 0xff);
&gt; +    bytesToAdd[prefixLength + checksumLength + 1] = ((crc32 &gt;&gt; 16) &amp; 0xff);
&gt; +    bytesToAdd[prefixLength + checksumLength + 2] = ((crc32 &gt;&gt; 8) &amp; 0xff);
&gt; +    bytesToAdd[prefixLength + checksumLength + 3] = (crc32 &amp; 0xff);

This is fine, but I would hav emade this a helper function.  appendInt(vector, int) or similar.

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:113
&gt; +    const unsigned char* idatPosition = std::search(data, data + dataLength, idat, idat + 4);

magic 4?

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:115
&gt; +    ASSERT(idatPosition - data &gt; 4);

magic 4?

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:117
&gt; +    size_t insertOffset = (idatPosition - data) - 4;

What&apos;s the magic 4?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381650</commentid>
    <comment_count>16</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 13:39:34 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 88488 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88488&amp;action=review
&gt; &gt; &gt;&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:110
&gt; &gt; &gt;&gt; +    const unsigned char* idatPosition = std::search(data, data + dataLength, idat, idat + 4);
&gt; &gt; &gt; 
&gt; &gt; &gt; Does this always work?  For example, is there some reason IDAT can&apos;t appear in an ICC profile?
&gt; &gt; 
&gt; &gt; IDAT is the section of the png that contains the actual pixels.  It is a required part of all pngs.
&gt; 
&gt; Oh, I meant that those characters might randomly appear in an ICC profile and you might corrupt the PNG.

Ah, right.  Yes, you&apos;re right.  I think it&apos;ll be safer to inject the bytes right after the IHDR chunk.  Let me try that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381701</commentid>
    <comment_count>17</comment_count>
      <attachid>88696</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 14:24:44 -0700</bug_when>
    <thetext>Created attachment 88696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381702</commentid>
    <comment_count>18</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 14:25:58 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 88673 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88673&amp;action=review
&gt; 
&gt; I still love the change.  I still think this direct byte-stream, c-style code is kinda ugly.  But I&apos;m not sure I have a lot of better suggestions.

Lots of iterations does not bother me.

&gt; &gt; Tools/DumpRenderTree/CyclicRedundancyCheck.cpp:40
&gt; &gt; + * @license http://www.opensource.org/licenses/bsd-license.php BSD License
&gt; 
&gt; I would jsut delete all this and put Copyright 2010 Robert Eisele &lt;robert@xarg.org&gt; at the top of one of our normal BSD licenses.  The version stuff and the link isn&apos;t very useful.  I&apos;m also not sure ohw much sense it makes for him to be able to copyright this since clearly he copied it directly from the spec I linked earlier.

Done.

&gt; &gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:82
&gt; &gt; +    static const size_t prefixLength = 17;
&gt; 
&gt; I was thinking of:  const char[] foo = &quot;foo&quot;;  sizeof(foo) which does work as expected.

Done (but had to subtract 1 for the null).

&gt; &gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:90
&gt; &gt; +    FILE* f = fopen(&quot;/tmp/logzzz&quot;, &quot;w&quot;);
&gt; &gt; +    fprintf(f, &quot;%d\n&quot;, (int)bytesToAdd.size());
&gt; &gt; +    fclose(f);
&gt; 
&gt; Um..

Oops! Deleted.

&gt; &gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:101
&gt; &gt; +    bytesToAdd[prefixLength + checksumLength] = ((crc32 &gt;&gt; 24) &amp; 0xff);
&gt; &gt; +    bytesToAdd[prefixLength + checksumLength + 1] = ((crc32 &gt;&gt; 16) &amp; 0xff);
&gt; &gt; +    bytesToAdd[prefixLength + checksumLength + 2] = ((crc32 &gt;&gt; 8) &amp; 0xff);
&gt; &gt; +    bytesToAdd[prefixLength + checksumLength + 3] = (crc32 &amp; 0xff);
&gt; 
&gt; This is fine, but I would hav emade this a helper function.  appendInt(vector, int) or similar.

Done.

&gt; &gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:113
&gt; &gt; +    const unsigned char* idatPosition = std::search(data, data + dataLength, idat, idat + 4);

Removed since we insert at a different point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381706</commentid>
    <comment_count>19</comment_count>
      <attachid>88698</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 14:28:24 -0700</bug_when>
    <thetext>Created attachment 88698
update changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381755</commentid>
    <comment_count>20</comment_count>
      <attachid>88698</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-07 15:02:52 -0700</bug_when>
    <thetext>Comment on attachment 88698
update changelog

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

Looks great.  I&apos;m glad you don&apos;t mind iterating. :)  This looks much better than the first version to me.

&gt; Tools/DumpRenderTree/PixelDumpSupport.cpp:91
&gt; +    static const size_t prefixLength = sizeof(textCommentPrefix) - 1;

I would comment that the -1 is for the null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381774</commentid>
    <comment_count>21</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 15:22:22 -0700</bug_when>
    <thetext>Committed r83219: &lt;http://trac.webkit.org/changeset/83219&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88291</attachid>
            <date>2011-04-05 12:18:06 -0700</date>
            <delta_ts>2011-04-06 09:45:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57871-20110405121805.patch</filename>
            <type>text/plain</type>
            <size>9774</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI3NDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5OTY4NTI4MWQ2MGZjMTE5ODYzZjcxOGEyMGU2MmQzOGVk
M2U0NDZhLi43YzA0MTE4Zjk5Y2Q2NDg5OTc4ZWRhODc1MmY3ZjU0NDg3NTk2ODNlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTEtMDQtMDUgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgRFJUIHRvIGVt
YmVkIGNoZWNrc3VtcyBpbiBwbmcgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3ODcxCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9QaXhl
bER1bXBTdXBwb3J0LmNwcDoKKyAgICAgICAgKGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJl
V2l0aEV4cGVjdGVkKToKKyAgICAgICAgKG1ha2VDcmNUYWJsZSk6IFBvcnRlZCBmcm9tIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9wbmdsaWIuanMKKyAgICAgICAgKGNv
bXB1dGVDcmMpOiBQb3J0ZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNv
dXJjZXMvcG5nbGliLmpzCisgICAgICAgIChjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQpOgor
ICAgICAgICAocHJpbnRQTkcpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1
cHBvcnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0
Q2Fpcm8uY3BwOgorICAgICAgICAocHJpbnRQTkcpOgorICAgICAgICAoZHVtcEJpdG1hcCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcDoKKyAgICAg
ICAgKHByaW50UE5HKToKKyAgICAgICAgKGR1bXBCaXRtYXApOgorCiAyMDExLTA0LTAxICBEaXJr
IFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRv
bnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBw
b3J0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCmluZGV4
IDM1MmVhYWE2YjIzMjYzN2ZlYjY3ZmRlZjRmYThjNmE3MDI5MWFlY2YuLjMwOGM0MjAwNTkyY2Rm
MGM3ZTAyZTQwZjQ4NWE0Zjk1NmZhMmMwMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVs
RHVtcFN1cHBvcnQuY3BwCkBAIC0yNSwxNSArMjUsMzAgQEAKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgog
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLworLyoKKyAqIG1ha2VDcmNUYWJsZSBhbmQgY29tcHV0ZUNyYyBhcmUg
Y29udmVyc2lvbnMgb2YgdGhlIEpTIG1ldGhvZHMgaW4gcG5nbGliLmpzLgorICoKKyAqIEEgaGFu
ZHkgY2xhc3MgdG8gY2FsY3VsYXRlIGNvbG9yIHZhbHVlcy4KKyAqCisgKiBAdmVyc2lvbiAxLjAK
KyAqIEBhdXRob3IgUm9iZXJ0IEVpc2VsZSA8cm9iZXJ0QHhhcmcub3JnPgorICogQGNvcHlyaWdo
dCBDb3B5cmlnaHQgKGMpIDIwMTAsIFJvYmVydCBFaXNlbGUKKyAqIEBsaW5rCisgKiBodHRwOi8v
d3d3Lnhhcmcub3JnLzIwMTAvMDMvZ2VuZXJhdGUtY2xpZW50LXNpZGUtcG5nLWZpbGVzLXVzaW5n
LWphdmFzY3JpcHQvCisgKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vu
c2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQorICoKKyAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgogCiAjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWUuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAj
aWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENHLmgiCkBAIC02OSwx
NiArODQsODIgQEAgdm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3Rl
ZChjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRIYXNoKQogICAgIH0KICAgICAKICAgICBpZiAo
ZHVtcEltYWdlKQotICAgICAgZHVtcEJpdG1hcChjb250ZXh0LmdldCgpKTsKKyAgICAgIGR1bXBC
aXRtYXAoY29udGV4dC5nZXQoKSwgYWN0dWFsSGFzaCk7Cit9CisKKworc3RhdGljIHZvaWQgbWFr
ZUNyY1RhYmxlKHVuc2lnbmVkIGxvbmcgY3JjVGFibGVbMjU2XSkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGxvbmcgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBsb25nIGMg
PSBpOworICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgeworICAgICAgICAgICAg
aWYgKGMgJiAxKQorICAgICAgICAgICAgICAgIGMgPSAtMzA2Njc0OTEyIF4gKChjID4+IDEpICYg
MHg3ZmZmZmZmZik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYyA9IGMgPj4g
MTsKKyAgICAgICAgfQorICAgICAgICBjcmNUYWJsZVtpXSA9IGM7CisgICAgfQorfQorCit1bnNp
Z25lZCBsb25nIGNvbXB1dGVDcmModW5zaWduZWQgY2hhciogYnVmZmVyLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcmNUYWJsZVsyNTZdOworICAgIHN0YXRpYyBi
b29sIGNyY1RhYmxlQ29tcHV0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWNyY1RhYmxlQ29tcHV0ZWQp
IHsKKyAgICAgICAgbWFrZUNyY1RhYmxlKGNyY1RhYmxlKTsKKyAgICAgICAgY3JjVGFibGVDb21w
dXRlZCA9IHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9uZyBjcmMgPSAweGZmZmZmZmZm
TDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgY3JjID0g
Y3JjVGFibGVbKGNyYyBeIGJ1ZmZlcltpXSkgJiAweGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZm
ZmZmZkwpOworICAgIHJldHVybiBjcmMgXiAweGZmZmZmZmZmTDsKK30KKworc3RhdGljIHZvaWQg
Y29udmVydENoZWNrc3VtVG9QTkdDb21tZW50KGNvbnN0IGNoYXIqIGNoZWNrc3VtLCBWZWN0b3I8
dW5zaWduZWQgY2hhcj4mIGJ5dGVzVG9BZGQpCit7CisgICAgLy8gQ2h1bmtzIG9mIFBORyBmaWxl
cyBhcmUgPGxlbmd0aD4sIDx0eXBlPiwgPGRhdGE+LCA8Y3JjPi4KKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdGV4dENvbW1lbnRQcmVmaXggPSAiXHgwMFx4MDBceDAwXHgyOXRFWHRjaGVja3N1bVx4
MDAiOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlZml4TGVuZ3RoID0gMTc7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjaGVja3N1bUxlbmd0aCA9IDMyOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY3JjTGVuZ3RoID0gNDsKKworICAgIGJ5dGVzVG9BZGQucmVzaXplKHByZWZpeExlbmd0
aCArIGNoZWNrc3VtTGVuZ3RoICsgY3JjTGVuZ3RoKTsKKyAgICBtZW1jcHkoYnl0ZXNUb0FkZC5k
YXRhKCksIHRleHRDb21tZW50UHJlZml4LCBwcmVmaXhMZW5ndGgpOworICAgIG1lbWNweShieXRl
c1RvQWRkLmRhdGEoKSArIHByZWZpeExlbmd0aCwgY2hlY2tzdW0sIGNoZWNrc3VtTGVuZ3RoKTsK
KworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkYXRhVG9DcmM7CisgICAgZGF0YVRvQ3JjLmFw
cGVuZCh0ZXh0Q29tbWVudFByZWZpeCArIDQsIHByZWZpeExlbmd0aCAtIDQpOyAvLyBEb24ndCBp
bmNsdWRlIHRoZSBsZW5ndGggaW4gdGhlIGNyYy4KKyAgICBkYXRhVG9DcmMuYXBwZW5kKGNoZWNr
c3VtLCBjaGVja3N1bUxlbmd0aCk7CisgICAgdW5zaWduZWQgbG9uZyBjcmMzMiA9IGNvbXB1dGVD
cmMoZGF0YVRvQ3JjLmRhdGEoKSwgZGF0YVRvQ3JjLnNpemUoKSk7CisKKyAgICBieXRlc1RvQWRk
W3ByZWZpeExlbmd0aCArIGNoZWNrc3VtTGVuZ3RoXSA9ICgoY3JjMzIgPj4gMjQpICYgMHhmZik7
CisgICAgYnl0ZXNUb0FkZFtwcmVmaXhMZW5ndGggKyBjaGVja3N1bUxlbmd0aCArIDFdID0gKChj
cmMzMiA+PiAxNikgJiAweGZmKTsKKyAgICBieXRlc1RvQWRkW3ByZWZpeExlbmd0aCArIGNoZWNr
c3VtTGVuZ3RoICsgMl0gPSAoKGNyYzMyID4+IDgpICYgMHhmZik7CisgICAgYnl0ZXNUb0FkZFtw
cmVmaXhMZW5ndGggKyBjaGVja3N1bUxlbmd0aCArIDNdID0gKGNyYzMyICYgMHhmZik7CiB9CiAK
LXZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3Qgc2l6ZV90IGRh
dGFMZW5ndGgpCit2b2lkIHByaW50UE5HKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0
IHNpemVfdCBkYXRhTGVuZ3RoLCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKKyAgICBWZWN0b3I8
dW5zaWduZWQgY2hhcj4gYnl0ZXNUb0FkZDsKKyAgICBjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1l
bnQoY2hlY2tzdW0sIGJ5dGVzVG9BZGQpOworCiAgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6ICVz
XG4iLCAiaW1hZ2UvcG5nIik7Ci0gICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihkYXRhTGVuZ3RoKSk7CisgICAgcHJpbnRmKCJDb250
ZW50LUxlbmd0aDogJWx1XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihkYXRhTGVuZ3Ro
ICsgYnl0ZXNUb0FkZC5zaXplKCkpKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
IGlkYXRbNF0gPSB7J0knLCAnRCcsICdBJywgJ1QnfTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBpZGF0UG9zaXRpb24gPSBzdGQ6OnNlYXJjaChkYXRhLCBkYXRhICsgZGF0YUxlbmd0aCwgaWRh
dCwgaWRhdCArIDQpOworICAgIEFTU0VSVChpZGF0UG9zaXRpb24gIT0gZGF0YSArIGRhdGFMZW5n
dGgpOworICAgIEFTU0VSVChpZGF0UG9zaXRpb24gLSBkYXRhID4gNCk7CisKKyAgICBzaXplX3Qg
aW5zZXJ0T2Zmc2V0ID0gKGlkYXRQb3NpdGlvbiAtIGRhdGEpIC0gNDsKKyAgICBmd3JpdGUoZGF0
YSwgMSwgaW5zZXJ0T2Zmc2V0LCBzdGRvdXQpOworICAgIGZ3cml0ZShieXRlc1RvQWRkLmRhdGEo
KSwgMSwgYnl0ZXNUb0FkZC5zaXplKCksIHN0ZG91dCk7CiAKICAgICBjb25zdCBzaXplX3QgYnl0
ZXNUb1dyaXRlSW5PbmVDaHVuayA9IDEgPDwgMTU7Ci0gICAgc2l6ZV90IGRhdGFSZW1haW5pbmdU
b1dyaXRlID0gZGF0YUxlbmd0aDsKKyAgICBkYXRhICs9IGluc2VydE9mZnNldDsKKyAgICBzaXpl
X3QgZGF0YVJlbWFpbmluZ1RvV3JpdGUgPSBkYXRhTGVuZ3RoIC0gaW5zZXJ0T2Zmc2V0OwogICAg
IHdoaWxlIChkYXRhUmVtYWluaW5nVG9Xcml0ZSkgewogICAgICAgICBzaXplX3QgYnl0ZXNUb1dy
aXRlSW5UaGlzQ2h1bmsgPSBzdGQ6Om1pbihkYXRhUmVtYWluaW5nVG9Xcml0ZSwgYnl0ZXNUb1dy
aXRlSW5PbmVDaHVuayk7CiAgICAgICAgIHNpemVfdCBieXRlc1dyaXR0ZW4gPSBmd3JpdGUoZGF0
YSwgMSwgYnl0ZXNUb1dyaXRlSW5UaGlzQ2h1bmssIHN0ZG91dCk7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9QaXhlbER1bXBTdXBwb3J0LmgKaW5kZXggZTE3MmE4MzEzMWFkZDYwMjg3NDdhMmIyZmQxYTYw
Yjk5YjJkMjRmYy4uODdlNjQwMjQzNTY2NTYzZTJhODczNmEwYTdkNjE4MTY3ODM5NTI3OSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5oCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuaApAQCAtMzgsOSArMzgsOSBAQCBj
bGFzcyBCaXRtYXBDb250ZXh0Owogdm9pZCBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckJpdG1hcENv
bnRleHQoQml0bWFwQ29udGV4dCosIGNoYXIgaGFzaFN0cmluZ1szM10pOwogUGFzc1JlZlB0cjxC
aXRtYXBDb250ZXh0PiBjcmVhdGVQYWdlZEJpdG1hcENvbnRleHQoKTsKIFBhc3NSZWZQdHI8Qml0
bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KGJvb2wgb25zY3JlZW4s
IGJvb2wgaW5jcmVtZW50YWxSZXBhaW50LCBib29sIHN3ZWVwSG9yaXpvbnRhbGx5LCBib29sIGRy
YXdTZWxlY3Rpb25SZWN0KTsKLXZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0Kik7Cit2b2lk
IGR1bXBCaXRtYXAoQml0bWFwQ29udGV4dCosIGNvbnN0IGNoYXIqIGNoZWNrc3VtKTsKIHZvaWQg
ZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoY29uc3Qgc3RkOjpzdHJp
bmcmIGV4cGVjdGVkSGFzaCk7Ci12b2lkIHByaW50UE5HKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoKTsKK3ZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWdu
ZWQgY2hhciogZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFMZW5ndGgsIGNvbnN0IGNoYXIqIGNoZWNr
c3VtKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAKaW5kZXggN2RlMDE5ZGYwYTg1MmY4
NzEzZDNhN2VkNWVjMTQ1OTEwOTVmYWNiNy4uYzEwYTNhN2RjY2NmYWE5MTAwYzA4OTM5NTlkNTcx
YjY2Y2RhMzU4NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxE
dW1wU3VwcG9ydENhaXJvLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhl
bER1bXBTdXBwb3J0Q2Fpcm8uY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBjYWlyb19zdGF0
dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuCiAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwogfQogCi1zdGF0aWMgdm9p
ZCBwcmludFBORyhjYWlyb19zdXJmYWNlX3QqIGltYWdlKQorc3RhdGljIHZvaWQgcHJpbnRQTkco
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7CiAgICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IHBpeGVsRGF0YTsKICAgICAvLyBPbmx5IFBORyBvdXRwdXQgaXMg
c3VwcG9ydGVkIGZvciBub3cuCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyB2b2lkIHByaW50UE5H
KGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCiAgICAgY29uc3Qgc2l6ZV90IGRhdGFMZW5ndGggPSBw
aXhlbERhdGEuc2l6ZSgpOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBwaXhlbERh
dGEuZGF0YSgpOwogCi0gICAgcHJpbnRQTkcoZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgcHJpbnRQ
TkcoZGF0YSwgZGF0YUxlbmd0aCwgY2hlY2tzdW0pOwogfQogCiB2b2lkIGNvbXB1dGVNRDVIYXNo
U3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hT
dHJpbmdbMzNdKQpAQCAtODYsOCArODYsOCBAQCB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9y
Qml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbgogICAg
ICAgICBoYXNoWzhdLCBoYXNoWzldLCBoYXNoWzEwXSwgaGFzaFsxMV0sIGhhc2hbMTJdLCBoYXNo
WzEzXSwgaGFzaFsxNF0sIGhhc2hbMTVdKTsKIH0KIAotdm9pZCBkdW1wQml0bWFwKEJpdG1hcENv
bnRleHQqIGNvbnRleHQpCit2b2lkIGR1bXBCaXRtYXAoQml0bWFwQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogY2hlY2tzdW0pCiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0g
Y2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0LT5jYWlyb0NvbnRleHQoKSk7Ci0gICAgcHJpbnRQTkco
c3VyZmFjZSk7CisgICAgcHJpbnRQTkcoc3VyZmFjZSwgY2hlY2tzdW0pOwogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKaW5kZXggNWNmMzJmMTNk
YWZiNmE5MDliZjA4NTgzNzdjNTYwMmRhZDg3M2I0OC4uYmY1OWIwM2VjM2YzMDI3OWMzYmEyNzll
MzRmZTIxZjU3NDU3YzJkYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4
ZWxEdW1wU3VwcG9ydENHLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1
bXBTdXBwb3J0Q0cuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBz
dGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7
CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcHJpbnRQTkcoQ0dJbWFnZVJlZiBpbWFnZSkKK3N0YXRp
YyB2b2lkIHByaW50UE5HKENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQog
ewogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBpbWFnZURhdGEoQWRvcHRDRiwgQ0ZE
YXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlv
blJlZj4gaW1hZ2VEZXN0KEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRh
KGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOwpAQCAtNjUsNyArNjUsNyBAQCBz
dGF0aWMgdm9pZCBwcmludFBORyhDR0ltYWdlUmVmIGltYWdlKQogICAgIGNvbnN0IFVJbnQ4KiBk
YXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihpbWFnZURhdGEuZ2V0KCkpOwogICAgIENGSW5kZXggZGF0
YUxlbmd0aCA9IENGRGF0YUdldExlbmd0aChpbWFnZURhdGEuZ2V0KCkpOwogCi0gICAgcHJpbnRQ
Tkcoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGRhdGFMZW5ndGgpKTsKKyAgICBwcmludFBORyhzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oZGF0YSksIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YUxlbmd0aCksIGNoZWNr
c3VtKTsKIH0KIAogdm9pZCBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQoQml0
bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNoU3RyaW5nWzMzXSkKQEAgLTEwNiw4ICsxMDYs
OCBAQCB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250
ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbgogICAgICAgICBzbnByaW50ZihoYXNoU3RyaW5n
LCAzMywgIiVzJTAyeCIsIGhhc2hTdHJpbmcsIGhhc2hbaV0pOwogfQogCi12b2lkIGR1bXBCaXRt
YXAoQml0bWFwQ29udGV4dCogY29udGV4dCkKK3ZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC0+
Y2dDb250ZXh0KCkpKTsKLSAgICBwcmludFBORyhpbWFnZS5nZXQoKSk7CisgICAgcHJpbnRQTkco
aW1hZ2UuZ2V0KCksIGNoZWNrc3VtKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88451</attachid>
            <date>2011-04-06 09:45:39 -0700</date>
            <delta_ts>2011-04-06 12:35:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57871-20110406094538.patch</filename>
            <type>text/plain</type>
            <size>10406</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjYmQ4OTY1OGY1NTM0ZGFiNWI1MzdiNzFhZmQxMGRlZTIx
ODIxZGMzLi40MzU2MGJmZjRiYjBkZTFhMzkwMTNhYWFkMmEzNmZiODk1YjY0NmFmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgRFJUIHRvIGVt
YmVkIGNoZWNrc3VtcyBpbiBwbmcgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3ODcxCisKKyAgICAgICAgV2UgaW5zZXJ0IHRoZSBieXRlcyBm
b3IgdGhlIGNvbW1lbnQgaW4gcHJpbnRQTkcgcmF0aGVyIHRoYW4gYXQgZW5jb2RlCisgICAgICAg
IHRpbWUgYmVjYXVzZSBlYWNoIHBsYXRmb3JtIGRvZXMgaXRzIG93biBQTkcgZW5jb2RpbmcgKGVp
dGhlciB1c2luZyBDRworICAgICAgICBvciBjYWlybykuICBQdXR0aW5nIHRoaXMgaW4gcHJpbmdQ
TkcgYXZvaWRzIGhhdmluZyB0byBkdXBsaWNhdGUgdGhpcworICAgICAgICBjb2RlLCBhbHRob3Vn
aCBpdCdzIG5vdCBhcyBjbGVhbiBhcyBkb2luZyBpdCBhdCBlbmNvZGluZyB0aW1lLgorCisgICAg
ICAgIFdlIGluc2VydCB0aGUgY29tbWVudCBiZWZvcmUgdGhlIGZpcnN0IElEQVQgc2VjdGlvbiBv
ZiB0aGUgUE5HLiAgSW4KKyAgICAgICAgdGhlIGNhaXJvIGdlbmVyYXRlZCBQTkdzLCB0aGlzIGlz
IGFyb3VuZCB0aGUgNzUgYnl0ZXMgaW4uICBJbiBDRworICAgICAgICBnZW5lcmF0ZWQgUE5Hcywg
dGhpcyBpcyBhYm91dCA4MDAgYnl0ZXMgaW4gYmVjYXVzZSBvZiB0aGUgSUNDIHByb2ZpbGUuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcDoKKyAgICAgICAg
KGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKToKKyAgICAgICAgKG1h
a2VDcmNUYWJsZSk6IFBvcnRlZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jl
c291cmNlcy9wbmdsaWIuanMKKyAgICAgICAgKGNvbXB1dGVDcmMpOiBQb3J0ZWQgZnJvbSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzCisgICAgICAgIChj
b252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQpOiBHZW5lcmF0ZSB0aGUgYnl0ZXMgdG8gaW5zZXJ0
LgorICAgICAgICAocHJpbnRQTkcpOiBJbnNlcnQgdGhlIHBuZyBjb21tZW50IGJlZm9yZSB0aGUg
Zmlyc3QgSURBVCBzZWN0aW9uLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1
cHBvcnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0
Q2Fpcm8uY3BwOgorICAgICAgICAocHJpbnRQTkcpOgorICAgICAgICAoZHVtcEJpdG1hcCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcDoKKyAgICAg
ICAgKHByaW50UE5HKToKKyAgICAgICAgKGR1bXBCaXRtYXApOgorCiAyMDExLTA0LTA2ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVt
cFN1cHBvcnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAK
aW5kZXggMzUyZWFhYTZiMjMyNjM3ZmViNjdmZGVmNGZhOGM2YTcwMjkxYWVjZi4uMzA4YzQyMDA1
OTJjZGYwYzdlMDJlNDBmNDg1YTRmOTU2ZmEyYzAzOSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
UGl4ZWxEdW1wU3VwcG9ydC5jcHAKQEAgLTI1LDE1ICsyNSwzMCBAQAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCisvKgorICogbWFrZUNyY1RhYmxlIGFuZCBjb21wdXRlQ3Jj
IGFyZSBjb252ZXJzaW9ucyBvZiB0aGUgSlMgbWV0aG9kcyBpbiBwbmdsaWIuanMuCisgKgorICog
QSBoYW5keSBjbGFzcyB0byBjYWxjdWxhdGUgY29sb3IgdmFsdWVzLgorICoKKyAqIEB2ZXJzaW9u
IDEuMAorICogQGF1dGhvciBSb2JlcnQgRWlzZWxlIDxyb2JlcnRAeGFyZy5vcmc+CisgKiBAY29w
eXJpZ2h0IENvcHlyaWdodCAoYykgMjAxMCwgUm9iZXJ0IEVpc2VsZQorICogQGxpbmsKKyAqIGh0
dHA6Ly93d3cueGFyZy5vcmcvMjAxMC8wMy9nZW5lcmF0ZS1jbGllbnQtc2lkZS1wbmctZmlsZXMt
dXNpbmctamF2YXNjcmlwdC8KKyAqIEBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwIEJTRCBMaWNlbnNlCisgKgorICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0LmgiCiAKICNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKICNpZiBQTEFURk9STShDRykKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKQEAg
LTY5LDE2ICs4NCw4MiBAQCB2b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4
cGVjdGVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZEhhc2gpCiAgICAgfQogICAgIAogICAg
IGlmIChkdW1wSW1hZ2UpCi0gICAgICBkdW1wQml0bWFwKGNvbnRleHQuZ2V0KCkpOworICAgICAg
ZHVtcEJpdG1hcChjb250ZXh0LmdldCgpLCBhY3R1YWxIYXNoKTsKK30KKworCitzdGF0aWMgdm9p
ZCBtYWtlQ3JjVGFibGUodW5zaWduZWQgbG9uZyBjcmNUYWJsZVsyNTZdKQoreworICAgIGZvciAo
dW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgYyA9IGk7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7CisgICAgICAg
ICAgICBpZiAoYyAmIDEpCisgICAgICAgICAgICAgICAgYyA9IC0zMDY2NzQ5MTIgXiAoKGMgPj4g
MSkgJiAweDdmZmZmZmZmKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjID0g
YyA+PiAxOworICAgICAgICB9CisgICAgICAgIGNyY1RhYmxlW2ldID0gYzsKKyAgICB9Cit9CisK
K3Vuc2lnbmVkIGxvbmcgY29tcHV0ZUNyYyh1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHNpemVfdCBz
aXplKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNyY1RhYmxlWzI1Nl07CisgICAgc3Rh
dGljIGJvb2wgY3JjVGFibGVDb21wdXRlZCA9IGZhbHNlOworICAgIGlmICghY3JjVGFibGVDb21w
dXRlZCkgeworICAgICAgICBtYWtlQ3JjVGFibGUoY3JjVGFibGUpOworICAgICAgICBjcmNUYWJs
ZUNvbXB1dGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb25nIGNyYyA9IDB4ZmZm
ZmZmZmZMOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBj
cmMgPSBjcmNUYWJsZVsoY3JjIF4gYnVmZmVyW2ldKSAmIDB4ZmZdIF4gKChjcmMgPj4gOCkgJiAw
eDAwZmZmZmZmTCk7CisgICAgcmV0dXJuIGNyYyBeIDB4ZmZmZmZmZmZMOworfQorCitzdGF0aWMg
dm9pZCBjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQoY29uc3QgY2hhciogY2hlY2tzdW0sIFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiYgYnl0ZXNUb0FkZCkKK3sKKyAgICAvLyBDaHVua3Mgb2YgUE5H
IGZpbGVzIGFyZSA8bGVuZ3RoPiwgPHR5cGU+LCA8ZGF0YT4sIDxjcmM+LgorICAgIHN0YXRpYyBj
b25zdCBjaGFyKiB0ZXh0Q29tbWVudFByZWZpeCA9ICJceDAwXHgwMFx4MDBceDI5dEVYdGNoZWNr
c3VtXHgwMCI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwcmVmaXhMZW5ndGggPSAxNzsKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNoZWNrc3VtTGVuZ3RoID0gMzI7CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBjcmNMZW5ndGggPSA0OworCisgICAgYnl0ZXNUb0FkZC5yZXNpemUocHJlZml4
TGVuZ3RoICsgY2hlY2tzdW1MZW5ndGggKyBjcmNMZW5ndGgpOworICAgIG1lbWNweShieXRlc1Rv
QWRkLmRhdGEoKSwgdGV4dENvbW1lbnRQcmVmaXgsIHByZWZpeExlbmd0aCk7CisgICAgbWVtY3B5
KGJ5dGVzVG9BZGQuZGF0YSgpICsgcHJlZml4TGVuZ3RoLCBjaGVja3N1bSwgY2hlY2tzdW1MZW5n
dGgpOworCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGRhdGFUb0NyYzsKKyAgICBkYXRhVG9D
cmMuYXBwZW5kKHRleHRDb21tZW50UHJlZml4ICsgNCwgcHJlZml4TGVuZ3RoIC0gNCk7IC8vIERv
bid0IGluY2x1ZGUgdGhlIGxlbmd0aCBpbiB0aGUgY3JjLgorICAgIGRhdGFUb0NyYy5hcHBlbmQo
Y2hlY2tzdW0sIGNoZWNrc3VtTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBsb25nIGNyYzMyID0gY29t
cHV0ZUNyYyhkYXRhVG9DcmMuZGF0YSgpLCBkYXRhVG9DcmMuc2l6ZSgpKTsKKworICAgIGJ5dGVz
VG9BZGRbcHJlZml4TGVuZ3RoICsgY2hlY2tzdW1MZW5ndGhdID0gKChjcmMzMiA+PiAyNCkgJiAw
eGZmKTsKKyAgICBieXRlc1RvQWRkW3ByZWZpeExlbmd0aCArIGNoZWNrc3VtTGVuZ3RoICsgMV0g
PSAoKGNyYzMyID4+IDE2KSAmIDB4ZmYpOworICAgIGJ5dGVzVG9BZGRbcHJlZml4TGVuZ3RoICsg
Y2hlY2tzdW1MZW5ndGggKyAyXSA9ICgoY3JjMzIgPj4gOCkgJiAweGZmKTsKKyAgICBieXRlc1Rv
QWRkW3ByZWZpeExlbmd0aCArIGNoZWNrc3VtTGVuZ3RoICsgM10gPSAoY3JjMzIgJiAweGZmKTsK
IH0KIAotdm9pZCBwcmludFBORyhjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBzaXpl
X3QgZGF0YUxlbmd0aCkKK3ZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
Y29uc3Qgc2l6ZV90IGRhdGFMZW5ndGgsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogeworICAgIFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiBieXRlc1RvQWRkOworICAgIGNvbnZlcnRDaGVja3N1bVRvUE5H
Q29tbWVudChjaGVja3N1bSwgYnl0ZXNUb0FkZCk7CisKICAgICBwcmludGYoIkNvbnRlbnQtVHlw
ZTogJXNcbiIsICJpbWFnZS9wbmciKTsKLSAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVc
biIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGRhdGFMZW5ndGgpKTsKKyAgICBwcmludGYo
IkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGRhdGFM
ZW5ndGggKyBieXRlc1RvQWRkLnNpemUoKSkpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNoYXIgaWRhdFs0XSA9IHsnSScsICdEJywgJ0EnLCAnVCd9OworICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGlkYXRQb3NpdGlvbiA9IHN0ZDo6c2VhcmNoKGRhdGEsIGRhdGEgKyBkYXRhTGVuZ3Ro
LCBpZGF0LCBpZGF0ICsgNCk7CisgICAgQVNTRVJUKGlkYXRQb3NpdGlvbiAhPSBkYXRhICsgZGF0
YUxlbmd0aCk7CisgICAgQVNTRVJUKGlkYXRQb3NpdGlvbiAtIGRhdGEgPiA0KTsKKworICAgIHNp
emVfdCBpbnNlcnRPZmZzZXQgPSAoaWRhdFBvc2l0aW9uIC0gZGF0YSkgLSA0OworICAgIGZ3cml0
ZShkYXRhLCAxLCBpbnNlcnRPZmZzZXQsIHN0ZG91dCk7CisgICAgZndyaXRlKGJ5dGVzVG9BZGQu
ZGF0YSgpLCAxLCBieXRlc1RvQWRkLnNpemUoKSwgc3Rkb3V0KTsKIAogICAgIGNvbnN0IHNpemVf
dCBieXRlc1RvV3JpdGVJbk9uZUNodW5rID0gMSA8PCAxNTsKLSAgICBzaXplX3QgZGF0YVJlbWFp
bmluZ1RvV3JpdGUgPSBkYXRhTGVuZ3RoOworICAgIGRhdGEgKz0gaW5zZXJ0T2Zmc2V0OworICAg
IHNpemVfdCBkYXRhUmVtYWluaW5nVG9Xcml0ZSA9IGRhdGFMZW5ndGggLSBpbnNlcnRPZmZzZXQ7
CiAgICAgd2hpbGUgKGRhdGFSZW1haW5pbmdUb1dyaXRlKSB7CiAgICAgICAgIHNpemVfdCBieXRl
c1RvV3JpdGVJblRoaXNDaHVuayA9IHN0ZDo6bWluKGRhdGFSZW1haW5pbmdUb1dyaXRlLCBieXRl
c1RvV3JpdGVJbk9uZUNodW5rKTsKICAgICAgICAgc2l6ZV90IGJ5dGVzV3JpdHRlbiA9IGZ3cml0
ZShkYXRhLCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywgc3Rkb3V0KTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuaAppbmRleCBlMTcyYTgzMTMxYWRkNjAyODc0N2EyYjJm
ZDFhNjBiOTliMmQyNGZjLi44N2U2NDAyNDM1NjY1NjNlMmE4NzM2YTBhN2Q2MTgxNjc4Mzk1Mjc5
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmgKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5oCkBAIC0zOCw5ICszOCw5
IEBAIGNsYXNzIEJpdG1hcENvbnRleHQ7CiB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0
bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiwgY2hhciBoYXNoU3RyaW5nWzMzXSk7CiBQYXNzUmVm
UHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZVBhZ2VkQml0bWFwQ29udGV4dCgpOwogUGFzc1JlZlB0
cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCBvbnNj
cmVlbiwgYm9vbCBpbmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHksIGJv
b2wgZHJhd1NlbGVjdGlvblJlY3QpOwotdm9pZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQqKTsK
K3ZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiwgY29uc3QgY2hhciogY2hlY2tzdW0pOwog
dm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBzdGQ6
OnN0cmluZyYgZXhwZWN0ZWRIYXNoKTsKLXZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hh
ciogZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFMZW5ndGgpOwordm9pZCBwcmludFBORyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBzaXplX3QgZGF0YUxlbmd0aCwgY29uc3QgY2hhciog
Y2hlY2tzdW0pOwogCiAjaWYgUExBVEZPUk0oTUFDKQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAppbmRleCA3ZGUwMTlkZjBh
ODUyZjg3MTNkM2E3ZWQ1ZWMxNDU5MTA5NWZhY2I3Li5jMTBhM2E3ZGNjY2ZhYTkxMDBjMDg5Mzk1
OWQ1NzFiNjZjZGEzNTg2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9Q
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJv
L1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGNhaXJv
X3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogY2xvc3VyZSwgY29uc3QgdW5zaWduZWQgY2hh
ciogZGF0YSwgdW4KICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLXN0YXRp
YyB2b2lkIHByaW50UE5HKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCitzdGF0aWMgdm9pZCBwcmlu
dFBORyhjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKICAg
ICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcGl4ZWxEYXRhOwogICAgIC8vIE9ubHkgUE5HIG91dHB1
dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIHZvaWQgcHJp
bnRQTkcoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKICAgICBjb25zdCBzaXplX3QgZGF0YUxlbmd0
aCA9IHBpeGVsRGF0YS5zaXplKCk7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSA9IHBp
eGVsRGF0YS5kYXRhKCk7CiAKLSAgICBwcmludFBORyhkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBw
cmludFBORyhkYXRhLCBkYXRhTGVuZ3RoLCBjaGVja3N1bSk7CiB9CiAKIHZvaWQgY29tcHV0ZU1E
NUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIg
aGFzaFN0cmluZ1szM10pCkBAIC04Niw4ICs4Niw4IEBAIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJp
bmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmlu
CiAgICAgICAgIGhhc2hbOF0sIGhhc2hbOV0sIGhhc2hbMTBdLCBoYXNoWzExXSwgaGFzaFsxMl0s
IGhhc2hbMTNdLCBoYXNoWzE0XSwgaGFzaFsxNV0pOwogfQogCi12b2lkIGR1bXBCaXRtYXAoQml0
bWFwQ29udGV4dCogY29udGV4dCkKK3ZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQtPmNhaXJvQ29udGV4dCgpKTsKLSAgICBwcmlu
dFBORyhzdXJmYWNlKTsKKyAgICBwcmludFBORyhzdXJmYWNlLCBjaGVja3N1bSk7CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAppbmRleCA1Y2Yz
MmYxM2RhZmI2YTkwOWJmMDg1ODM3N2M1NjAyZGFkODczYjQ4Li5iZjU5YjAzZWMzZjMwMjc5YzNi
YTI3OWUzNGZlMjFmNTc0NTdjMmRhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
Zy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1Bp
eGVsRHVtcFN1cHBvcnRDRy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5w
bmciKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBwcmludFBORyhDR0ltYWdlUmVmIGltYWdlKQor
c3RhdGljIHZvaWQgcHJpbnRQTkcoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgY2hhciogY2hlY2tz
dW0pCiB7CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGltYWdlRGF0YShBZG9wdENG
LCBDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3Rp
bmF0aW9uUmVmPiBpbWFnZURlc3QoQWRvcHRDRiwgQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0
aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CkBAIC02NSw3ICs2NSw3
IEBAIHN0YXRpYyB2b2lkIHByaW50UE5HKENHSW1hZ2VSZWYgaW1hZ2UpCiAgICAgY29uc3QgVUlu
dDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKGltYWdlRGF0YS5nZXQoKSk7CiAgICAgQ0ZJbmRl
eCBkYXRhTGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSk7CiAKLSAgICBw
cmludFBORyhzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIHN0YXRpY19j
YXN0PHNpemVfdD4oZGF0YUxlbmd0aCkpOworICAgIHByaW50UE5HKHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhTGVuZ3RoKSwg
Y2hlY2tzdW0pOwogfQogCiB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4
dChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbmdbMzNdKQpAQCAtMTA2LDgg
KzEwNiw4IEBAIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1h
cENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmluCiAgICAgICAgIHNucHJpbnRmKGhhc2hT
dHJpbmcsIDMzLCAiJXMlMDJ4IiwgaGFzaFN0cmluZywgaGFzaFtpXSk7CiB9CiAKLXZvaWQgZHVt
cEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250ZXh0KQordm9pZCBkdW1wQml0bWFwKEJpdG1hcENv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogewogICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0LT5jZ0NvbnRleHQoKSkpOwotICAgIHByaW50UE5HKGltYWdlLmdldCgpKTsKKyAgICBwcmlu
dFBORyhpbWFnZS5nZXQoKSwgY2hlY2tzdW0pOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88488</attachid>
            <date>2011-04-06 12:36:00 -0700</date>
            <delta_ts>2011-04-07 12:48:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57871-20110406123559.patch</filename>
            <type>text/plain</type>
            <size>20097</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjYmQ4OTY1OGY1NTM0ZGFiNWI1MzdiNzFhZmQxMGRlZTIx
ODIxZGMzLi43ZTY2NTFjOTI2N2I0ZGZjZDUzMGVjNzNkODRlNTAxYzIzNmY3NGFmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzgg
QEAKKzIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgRFJUIHRvIGVt
YmVkIGNoZWNrc3VtcyBpbiBwbmcgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3ODcxCisKKyAgICAgICAgIFdlIGluc2VydCB0aGUgYnl0ZXMg
Zm9yIHRoZSBjb21tZW50IGluIHByaW50UE5HIHJhdGhlciB0aGFuIGF0IGVuY29kZQorICAgICAg
ICAgdGltZSBiZWNhdXNlIGVhY2ggcGxhdGZvcm0gZG9lcyBpdHMgb3duIFBORyBlbmNvZGluZyAo
ZWl0aGVyIHVzaW5nIENHCisgICAgICAgICBvciBjYWlybykuICBQdXR0aW5nIHRoaXMgaW4gcHJp
bmdQTkcgYXZvaWRzIGhhdmluZyB0byBkdXBsaWNhdGUgdGhpcworICAgICAgICAgY29kZSwgYWx0
aG91Z2ggaXQncyBub3QgYXMgY2xlYW4gYXMgZG9pbmcgaXQgYXQgZW5jb2RpbmcgdGltZS4KKwor
ICAgICAgICAgV2UgaW5zZXJ0IHRoZSBjb21tZW50IGJlZm9yZSB0aGUgZmlyc3QgSURBVCBzZWN0
aW9uIG9mIHRoZSBQTkcuICBJbgorICAgICAgICAgdGhlIGNhaXJvIGdlbmVyYXRlZCBQTkdzLCB0
aGlzIGlzIGFyb3VuZCB0aGUgNzUgYnl0ZXMgaW4uICBJbiBDRworICAgICAgICAgZ2VuZXJhdGVk
IFBOR3MsIHRoaXMgaXMgYWJvdXQgODAwIGJ5dGVzIGluIGJlY2F1c2Ugb2YgdGhlIElDQyBwcm9m
aWxlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9QTkdVdGlsLmNwcDog
QWRkZWQuCisgICAgICAgIChtYWtlQ3JjVGFibGUpOiBQb3J0ZWQgZnJvbSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzCisgICAgICAgIChjb21wdXRlQ3Jj
KTogUG9ydGVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3Bu
Z2xpYi5qcworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BOR1V0aWwuaDogQWRkZWQuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHA6CisgICAgICAgIChkdW1w
V2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZCk6CisgICAgICAgIChjb252ZXJ0
Q2hlY2tzdW1Ub1BOR0NvbW1lbnQpOiBHZW5lcmF0ZSB0aGUgYnl0ZXMgdG8gaW5zZXJ0LgorICAg
ICAgICAocHJpbnRQTkcpOiBJbnNlcnQgdGhlIHBuZyBjb21tZW50IGJlZm9yZSB0aGUgZmlyc3Qg
SURBVCBzZWN0aW9uLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQu
aDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8u
Y3BwOgorICAgICAgICAocHJpbnRQTkcpOgorICAgICAgICAoZHVtcEJpdG1hcCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcDoKKyAgICAgICAgKHBy
aW50UE5HKToKKyAgICAgICAgKGR1bXBCaXRtYXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisK
IDIwMTEtMDQtMDYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggN2NjNGM5Yzk0MGU0NDk3ZWVmNzRkOTUwMTVkNTFmOTMzZTU4NGZmNi4uZTRhMTI1NTZh
MWRjMmZhNDBjMTA2YmRiZmU0MDA1MjNkYzkxNmU5MCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC01OSw2ICs1OSw4IEBACiAJCTQ0Mzc3MzBGMTI1Q0JDNEQwMEFBRTAyQyAvKiBXZWJB
cmNoaXZlRHVtcFN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0QTk5NzgyMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBv
cnQuaCAqLzsgfTsKIAkJNTE4NUY2QjIxMDcxNEUwNzAwN0FBMzkzIC8qIEhpc3RvcnlEZWxlZ2F0
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODVG
NjlGMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0gKi87IH07CiAJCTUxODVG
NkIzMTA3MTRFMTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODVGNjlFMTA3MTRBNTcwMDdBQTM5MyAv
KiBIaXN0b3J5RGVsZWdhdGUuaCAqLzsgfTsKKwkJNTNDQkI3RjgxMzRDRjE4MjAwMUNFNkE0IC8q
IFBOR1V0aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNDQkI3RjYxMzRDRjE4MjAwMUNFNkE0IC8qIFBOR1V0aWwuY3BwICovOyB9OworCQk1M0NC
QjdGOTEzNENGMTgyMDAxQ0U2QTQgLyogUE5HVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDQkI3RjcxMzRDRjE4MjAwMUNFNkE0IC8qIFBOR1V0
aWwuaCAqLzsgfTsKIAkJNURCOUFDOTcwRjcyMkMzNjAwNjg0NjQxIC8qIEFIRU1fX19fLlRURiBp
biBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3
RjEwQzIwQ0IzQzEwMzAwMDNCREM5IC8qIEFIRU1fX19fLlRURiAqLzsgfTsKIAkJNURCOUFDOTgw
RjcyMkMzNjAwNjg0NjQxIC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmIGluIENvcHkgRm9u
dCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3MTBEQUMz
Q0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYgKi87IH07CiAJCTVEQjlB
Qzk5MEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiBpbiBDb3B5
IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzIw
REFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmICovOyB9OwpAQCAt
MjQzLDYgKzI0NSw4IEBACiAJCTQ0QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZl
RHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
QXJjaGl2ZUR1bXBTdXBwb3J0LmNwcDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVEdW1wU3VwcG9ydC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODVGNjlFMTA3MTRBNTcwMDdBQTM5
MyAvKiBIaXN0b3J5RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SGlzdG9yeURlbGVnYXRlLmg7IHBhdGggPSBtYWMvSGlzdG9yeURlbGVnYXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODVGNjlGMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0b3J5
RGVsZWdhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgbmFtZSA9IEhpc3Rv
cnlEZWxlZ2F0ZS5tbTsgcGF0aCA9IG1hYy9IaXN0b3J5RGVsZWdhdGUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzQ0JCN0Y2MTM0Q0YxODIwMDFDRTZBNCAvKiBQTkdVdGlsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBOR1V0aWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0NCQjdGNzEzNENGMTgyMDAxQ0U2QTQgLyogUE5H
VXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQTkdVdGlsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjVFMkM2MEZGQThERjIwMDNCODM0MiAvKiBQaXhl
bER1bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
aXhlbER1bXBTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzNTQz
NUYwM0Q3NTUwMjAwODYzNUNFIC8qIFdlYktpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9
IFdlYktpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CTkzM0JGNUE5MEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYWluVGV4dENvbnRyb2xsZXIuaDsgcGF0aCA9
IG1hYy9QbGFpblRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01ODcsNiArNTkxLDggQEAKIAkJCQlCQ0IyODQ4ODBDRkE4MjAyMDA3RTUzM0UgLyogUGl4ZWxE
dW1wU3VwcG9ydENHLmNwcCAqLywKIAkJCQlCQ0IyODQ4OTBDRkE4MjAyMDA3RTUzM0UgLyogUGl4
ZWxEdW1wU3VwcG9ydENHLmggKi8sCiAJCQkJQkNCMjg0OEMwQ0ZBODIyMTAwN0U1MzNFIC8qIFBp
eGVsRHVtcFN1cHBvcnRNYWMubW0gKi8sCisJCQkJNTNDQkI3RjYxMzRDRjE4MjAwMUNFNkE0IC8q
IFBOR1V0aWwuY3BwICovLAorCQkJCTUzQ0JCN0Y3MTM0Q0YxODIwMDFDRTZBNCAvKiBQTkdVdGls
LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFBpeGVsRHVtcDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC02MzAsNiArNjM2LDcgQEAKIAkJCQlCQ0IyODRDNzBDRkE4M0M0MDA3RTUzM0Ug
LyogUGl4ZWxEdW1wU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMjg0RDAwQ0ZBODND
QzAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnRDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
QkY1QUIwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzQ0JCN0Y5MTM0Q0YxODIwMDFDRTZBNCAvKiBQTkdVdGlsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0ExOEI2NTBDOUIwOEMyMDAxMTQzNjkgLyogUG9saWN5RGVsZWdhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQTE4QjY3MEM5QjA4QzIwMDExNDM2OSAvKiBSZXNvdXJjZUxv
YWREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMThCM0MwQzlCMDI0OTAwMTE0MzY5
IC8qIFRleHRJbnB1dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODIwLDYgKzgyNyw3
IEBACiAJCQkJQkNCMjg0Q0QwQ0ZBODNDODAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnRDRy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IyODRENjBDRkE4M0QxMDA3RTUzM0UgLyogUGl4ZWxE
dW1wU3VwcG9ydE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzM0JGNUFDMEY5M0ZBNUMwMDBG
MDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTNDQkI3
RjgxMzRDRjE4MjAwMUNFNkE0IC8qIFBOR1V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNB
MThCNjYwQzlCMDhDMjAwMTE0MzY5IC8qIFBvbGljeURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNBMThCNjgwQzlCMDhDMjAwMTE0MzY5IC8qIFJlc291cmNlTG9hZERlbGVnYXRlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCNDkwQzlCMDJDNDAwMTE0MzY5IC8qIFRleHRJbnB1
dENvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvUE5HVXRpbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9QTkdVdGlsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NDI1Nzk3NjI2Mzg4Y2U3NzNmYTFlZmFjMjQ5ZmY3N2YyNzQ3NDgyCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUE5HVXRpbC5jcHAKQEAgLTAsMCArMSw3
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisvKgorICogbWFrZUNyY1RhYmxlIGFuZCBjb21wdXRlQ3JjIGFyZSBjb252ZXJzaW9ucyBvZiB0
aGUgSlMgbWV0aG9kcyBpbiBwbmdsaWIuanMuCisgKgorICogQSBoYW5keSBjbGFzcyB0byBjYWxj
dWxhdGUgY29sb3IgdmFsdWVzLgorICoKKyAqIEB2ZXJzaW9uIDEuMAorICogQGF1dGhvciBSb2Jl
cnQgRWlzZWxlIDxyb2JlcnRAeGFyZy5vcmc+CisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykg
MjAxMCwgUm9iZXJ0IEVpc2VsZQorICogQGxpbmsKKyAqIGh0dHA6Ly93d3cueGFyZy5vcmcvMjAx
MC8wMy9nZW5lcmF0ZS1jbGllbnQtc2lkZS1wbmctZmlsZXMtdXNpbmctamF2YXNjcmlwdC8KKyAq
IEBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu
cGhwIEJTRCBMaWNlbnNlCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQTkdVdGlsLmgiCisKK3N0YXRpYyB2b2lkIG1ha2VDcmNUYWJsZSh1bnNpZ25lZCBsb25nIGNy
Y1RhYmxlWzI1Nl0pCit7CisgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgMjU2OyBp
KyspIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjID0gaTsKKyAgICAgICAgZm9yIChpbnQgayA9
IDA7IGsgPCA4OyBrKyspIHsKKyAgICAgICAgICAgIGlmIChjICYgMSkKKyAgICAgICAgICAgICAg
ICBjID0gLTMwNjY3NDkxMiBeICgoYyA+PiAxKSAmIDB4N2ZmZmZmZmYpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGMgPSBjID4+IDE7CisgICAgICAgIH0KKyAgICAgICAgY3Jj
VGFibGVbaV0gPSBjOworICAgIH0KK30KKwordW5zaWduZWQgbG9uZyBjb21wdXRlQ3JjKHVuc2ln
bmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgY3JjVGFibGVbMjU2XTsKKyAgICBzdGF0aWMgYm9vbCBjcmNUYWJsZUNvbXB1dGVkID0gZmFs
c2U7CisgICAgaWYgKCFjcmNUYWJsZUNvbXB1dGVkKSB7CisgICAgICAgIG1ha2VDcmNUYWJsZShj
cmNUYWJsZSk7CisgICAgICAgIGNyY1RhYmxlQ29tcHV0ZWQgPSB0cnVlOworICAgIH0KKworICAg
IHVuc2lnbmVkIGxvbmcgY3JjID0gMHhmZmZmZmZmZkw7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIGNyYyA9IGNyY1RhYmxlWyhjcmMgXiBidWZmZXJbaV0p
ICYgMHhmZl0gXiAoKGNyYyA+PiA4KSAmIDB4MDBmZmZmZmZMKTsKKyAgICByZXR1cm4gY3JjIF4g
MHhmZmZmZmZmZkw7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BOR1V0
aWwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BOR1V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzMyNDIz
MGUzMDIzMDYyZmU1OTNiOTIwODRjMTYyNTVkZGMzNDgwCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvUE5HVXRpbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBOR1V0
aWxfaAorI2RlZmluZSBQTkdVdGlsX2gKKworI2luY2x1ZGUgPGNzdGRsaWI+CisKK3Vuc2lnbmVk
IGxvbmcgY29tcHV0ZUNyYyh1bnNpZ25lZCBjaGFyKiwgc2l6ZV90KTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCmluZGV4IDM1MmVhYWE2YjIzMjYz
N2ZlYjY3ZmRlZjRmYThjNmE3MDI5MWFlY2YuLjgyMGU2ZGQ5ODUzY2UyNDU2MmZlNjNmMWYyMDY5
NThkMzEzZThlZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1
cHBvcnQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3Bw
CkBAIC0zMSw5ICszMSwxMiBAQAogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNs
dWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBOR1V0aWwuaCIKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogI2lmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDRy5oIgpAQCAt
NjksMTYgKzcyLDUyIEBAIHZvaWQgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhw
ZWN0ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkSGFzaCkKICAgICB9CiAgICAgCiAgICAg
aWYgKGR1bXBJbWFnZSkKLSAgICAgIGR1bXBCaXRtYXAoY29udGV4dC5nZXQoKSk7CisgICAgICBk
dW1wQml0bWFwKGNvbnRleHQuZ2V0KCksIGFjdHVhbEhhc2gpOwogfQogCi12b2lkIHByaW50UE5H
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoKQorc3Rh
dGljIHZvaWQgY29udmVydENoZWNrc3VtVG9QTkdDb21tZW50KGNvbnN0IGNoYXIqIGNoZWNrc3Vt
LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIGJ5dGVzVG9BZGQpCiB7CisgICAgLy8gQ2h1bmtzIG9m
IFBORyBmaWxlcyBhcmUgPGxlbmd0aD4sIDx0eXBlPiwgPGRhdGE+LCA8Y3JjPi4KKyAgICBzdGF0
aWMgY29uc3QgY2hhciogdGV4dENvbW1lbnRQcmVmaXggPSAiXHgwMFx4MDBceDAwXHgyOXRFWHRj
aGVja3N1bVx4MDAiOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlZml4TGVuZ3RoID0gMTc7
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjaGVja3N1bUxlbmd0aCA9IDMyOworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY3JjTGVuZ3RoID0gNDsKKworICAgIGJ5dGVzVG9BZGQucmVzaXplKHBy
ZWZpeExlbmd0aCArIGNoZWNrc3VtTGVuZ3RoICsgY3JjTGVuZ3RoKTsKKyAgICBtZW1jcHkoYnl0
ZXNUb0FkZC5kYXRhKCksIHRleHRDb21tZW50UHJlZml4LCBwcmVmaXhMZW5ndGgpOworICAgIG1l
bWNweShieXRlc1RvQWRkLmRhdGEoKSArIHByZWZpeExlbmd0aCwgY2hlY2tzdW0sIGNoZWNrc3Vt
TGVuZ3RoKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkYXRhVG9DcmM7CisgICAgZGF0
YVRvQ3JjLmFwcGVuZCh0ZXh0Q29tbWVudFByZWZpeCArIDQsIHByZWZpeExlbmd0aCAtIDQpOyAv
LyBEb24ndCBpbmNsdWRlIHRoZSBsZW5ndGggaW4gdGhlIGNyYy4KKyAgICBkYXRhVG9DcmMuYXBw
ZW5kKGNoZWNrc3VtLCBjaGVja3N1bUxlbmd0aCk7CisgICAgdW5zaWduZWQgbG9uZyBjcmMzMiA9
IGNvbXB1dGVDcmMoZGF0YVRvQ3JjLmRhdGEoKSwgZGF0YVRvQ3JjLnNpemUoKSk7CisKKyAgICBi
eXRlc1RvQWRkW3ByZWZpeExlbmd0aCArIGNoZWNrc3VtTGVuZ3RoXSA9ICgoY3JjMzIgPj4gMjQp
ICYgMHhmZik7CisgICAgYnl0ZXNUb0FkZFtwcmVmaXhMZW5ndGggKyBjaGVja3N1bUxlbmd0aCAr
IDFdID0gKChjcmMzMiA+PiAxNikgJiAweGZmKTsKKyAgICBieXRlc1RvQWRkW3ByZWZpeExlbmd0
aCArIGNoZWNrc3VtTGVuZ3RoICsgMl0gPSAoKGNyYzMyID4+IDgpICYgMHhmZik7CisgICAgYnl0
ZXNUb0FkZFtwcmVmaXhMZW5ndGggKyBjaGVja3N1bUxlbmd0aCArIDNdID0gKGNyYzMyICYgMHhm
Zik7Cit9CisKK3ZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3Qg
c2l6ZV90IGRhdGFMZW5ndGgsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQoreworICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBieXRlc1RvQWRkOworICAgIGNvbnZlcnRDaGVja3N1bVRvUE5HQ29tbWVu
dChjaGVja3N1bSwgYnl0ZXNUb0FkZCk7CisKICAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogJXNc
biIsICJpbWFnZS9wbmciKTsKLSAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGRhdGFMZW5ndGgpKTsKKyAgICBwcmludGYoIkNvbnRl
bnQtTGVuZ3RoOiAlbHVcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGRhdGFMZW5ndGgg
KyBieXRlc1RvQWRkLnNpemUoKSkpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
aWRhdFs0XSA9IHsnSScsICdEJywgJ0EnLCAnVCd9OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGlkYXRQb3NpdGlvbiA9IHN0ZDo6c2VhcmNoKGRhdGEsIGRhdGEgKyBkYXRhTGVuZ3RoLCBpZGF0
LCBpZGF0ICsgNCk7CisgICAgQVNTRVJUKGlkYXRQb3NpdGlvbiAhPSBkYXRhICsgZGF0YUxlbmd0
aCk7CisgICAgQVNTRVJUKGlkYXRQb3NpdGlvbiAtIGRhdGEgPiA0KTsKKworICAgIHNpemVfdCBp
bnNlcnRPZmZzZXQgPSAoaWRhdFBvc2l0aW9uIC0gZGF0YSkgLSA0OworICAgIGZ3cml0ZShkYXRh
LCAxLCBpbnNlcnRPZmZzZXQsIHN0ZG91dCk7CisgICAgZndyaXRlKGJ5dGVzVG9BZGQuZGF0YSgp
LCAxLCBieXRlc1RvQWRkLnNpemUoKSwgc3Rkb3V0KTsKIAogICAgIGNvbnN0IHNpemVfdCBieXRl
c1RvV3JpdGVJbk9uZUNodW5rID0gMSA8PCAxNTsKLSAgICBzaXplX3QgZGF0YVJlbWFpbmluZ1Rv
V3JpdGUgPSBkYXRhTGVuZ3RoOworICAgIGRhdGEgKz0gaW5zZXJ0T2Zmc2V0OworICAgIHNpemVf
dCBkYXRhUmVtYWluaW5nVG9Xcml0ZSA9IGRhdGFMZW5ndGggLSBpbnNlcnRPZmZzZXQ7CiAgICAg
d2hpbGUgKGRhdGFSZW1haW5pbmdUb1dyaXRlKSB7CiAgICAgICAgIHNpemVfdCBieXRlc1RvV3Jp
dGVJblRoaXNDaHVuayA9IHN0ZDo6bWluKGRhdGFSZW1haW5pbmdUb1dyaXRlLCBieXRlc1RvV3Jp
dGVJbk9uZUNodW5rKTsKICAgICAgICAgc2l6ZV90IGJ5dGVzV3JpdHRlbiA9IGZ3cml0ZShkYXRh
LCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywgc3Rkb3V0KTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1BpeGVsRHVtcFN1cHBvcnQuaAppbmRleCBlMTcyYTgzMTMxYWRkNjAyODc0N2EyYjJmZDFhNjBi
OTliMmQyNGZjLi44N2U2NDAyNDM1NjY1NjNlMmE4NzM2YTBhN2Q2MTgxNjc4Mzk1Mjc5IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5oCkBAIC0zOCw5ICszOCw5IEBAIGNs
YXNzIEJpdG1hcENvbnRleHQ7CiB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29u
dGV4dChCaXRtYXBDb250ZXh0KiwgY2hhciBoYXNoU3RyaW5nWzMzXSk7CiBQYXNzUmVmUHRyPEJp
dG1hcENvbnRleHQ+IGNyZWF0ZVBhZ2VkQml0bWFwQ29udGV4dCgpOwogUGFzc1JlZlB0cjxCaXRt
YXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCBvbnNjcmVlbiwg
Ym9vbCBpbmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHksIGJvb2wgZHJh
d1NlbGVjdGlvblJlY3QpOwotdm9pZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQqKTsKK3ZvaWQg
ZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiwgY29uc3QgY2hhciogY2hlY2tzdW0pOwogdm9pZCBk
dW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBzdGQ6OnN0cmlu
ZyYgZXhwZWN0ZWRIYXNoKTsKLXZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgY29uc3Qgc2l6ZV90IGRhdGFMZW5ndGgpOwordm9pZCBwcmludFBORyhjb25zdCB1bnNpZ25l
ZCBjaGFyKiBkYXRhLCBjb25zdCBzaXplX3QgZGF0YUxlbmd0aCwgY29uc3QgY2hhciogY2hlY2tz
dW0pOwogCiAjaWYgUExBVEZPUk0oTUFDKQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAppbmRleCA3ZGUwMTlkZjBhODUyZjg3
MTNkM2E3ZWQ1ZWMxNDU5MTA5NWZhY2I3Li5jMTBhM2E3ZGNjY2ZhYTkxMDBjMDg5Mzk1OWQ1NzFi
NjZjZGEzNTg2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1
bXBTdXBwb3J0Q2Fpcm8uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVs
RHVtcFN1cHBvcnRDYWlyby5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGNhaXJvX3N0YXR1
c190IHdyaXRlRnVuY3Rpb24odm9pZCogY2xvc3VyZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgdW4KICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lk
IHByaW50UE5HKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCitzdGF0aWMgdm9pZCBwcmludFBORyhj
YWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKICAgICBWZWN0
b3I8dW5zaWduZWQgY2hhcj4gcGl4ZWxEYXRhOwogICAgIC8vIE9ubHkgUE5HIG91dHB1dCBpcyBz
dXBwb3J0ZWQgZm9yIG5vdy4KQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRQTkco
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKICAgICBjb25zdCBzaXplX3QgZGF0YUxlbmd0aCA9IHBp
eGVsRGF0YS5zaXplKCk7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSA9IHBpeGVsRGF0
YS5kYXRhKCk7CiAKLSAgICBwcmludFBORyhkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBwcmludFBO
RyhkYXRhLCBkYXRhTGVuZ3RoLCBjaGVja3N1bSk7CiB9CiAKIHZvaWQgY29tcHV0ZU1ENUhhc2hT
dHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0
cmluZ1szM10pCkBAIC04Niw4ICs4Niw4IEBAIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdGb3JC
aXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmluCiAgICAg
ICAgIGhhc2hbOF0sIGhhc2hbOV0sIGhhc2hbMTBdLCBoYXNoWzExXSwgaGFzaFsxMl0sIGhhc2hb
MTNdLCBoYXNoWzE0XSwgaGFzaFsxNV0pOwogfQogCi12b2lkIGR1bXBCaXRtYXAoQml0bWFwQ29u
dGV4dCogY29udGV4dCkKK3ZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBjaGVja3N1bSkKIHsKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBj
YWlyb19nZXRfdGFyZ2V0KGNvbnRleHQtPmNhaXJvQ29udGV4dCgpKTsKLSAgICBwcmludFBORyhz
dXJmYWNlKTsKKyAgICBwcmludFBORyhzdXJmYWNlLCBjaGVja3N1bSk7CiB9CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAppbmRleCA1Y2YzMmYxM2Rh
ZmI2YTkwOWJmMDg1ODM3N2M1NjAyZGFkODczYjQ4Li5iZjU5YjAzZWMzZjMwMjc5YzNiYTI3OWUz
NGZlMjFmNTc0NTdjMmRhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhl
bER1bXBTdXBwb3J0Q0cuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsK
ICNlbmRpZgogCi1zdGF0aWMgdm9pZCBwcmludFBORyhDR0ltYWdlUmVmIGltYWdlKQorc3RhdGlj
IHZvaWQgcHJpbnRQTkcoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7
CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGltYWdlRGF0YShBZG9wdENGLCBDRkRh
dGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9u
UmVmPiBpbWFnZURlc3QoQWRvcHRDRiwgQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
aW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CkBAIC02NSw3ICs2NSw3IEBAIHN0
YXRpYyB2b2lkIHByaW50UE5HKENHSW1hZ2VSZWYgaW1hZ2UpCiAgICAgY29uc3QgVUludDgqIGRh
dGEgPSBDRkRhdGFHZXRCeXRlUHRyKGltYWdlRGF0YS5nZXQoKSk7CiAgICAgQ0ZJbmRleCBkYXRh
TGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSk7CiAKLSAgICBwcmludFBO
RyhzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIHN0YXRpY19jYXN0PHNp
emVfdD4oZGF0YUxlbmd0aCkpOworICAgIHByaW50UE5HKHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihkYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhTGVuZ3RoKSwgY2hlY2tz
dW0pOwogfQogCiB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRt
YXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbmdbMzNdKQpAQCAtMTA2LDggKzEwNiw4
IEBAIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRl
eHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmluCiAgICAgICAgIHNucHJpbnRmKGhhc2hTdHJpbmcs
IDMzLCAiJXMlMDJ4IiwgaGFzaFN0cmluZywgaGFzaFtpXSk7CiB9CiAKLXZvaWQgZHVtcEJpdG1h
cChCaXRtYXBDb250ZXh0KiBjb250ZXh0KQordm9pZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogewogICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LT5j
Z0NvbnRleHQoKSkpOwotICAgIHByaW50UE5HKGltYWdlLmdldCgpKTsKKyAgICBwcmludFBORyhp
bWFnZS5nZXQoKSwgY2hlY2tzdW0pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvaiBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9E
dW1wUmVuZGVyVHJlZS52Y3Byb2oKaW5kZXggMzlkMmRmMjI3ZGVlODY5YjZlNWI4N2JjM2FkYzJj
MjhkYWQ2ZWJlZi4uZGNhNzEwMTdlNDQyM2M3MWExZTc0NTY3NjNlNzljMjE1NWM3MGYwYSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCkBAIC01
ODMsNiArNTgzLDE0IEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0
aD0iLi5cUE5HVXRpbC5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZl
UGF0aD0iLi5cUE5HVXRpbC5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGNhaXJvXFBpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAiCiAJCQk+CiAJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMv
R05VbWFrZWZpbGUuYW0KaW5kZXggNmRlMWFmNTlhZDM0NzA0ZTk3ZGY2NGY3NTAyOGQ5NjJjYjEw
MDE1Yy4uZWFiYzczNzY4Y2YyNzZiNjQ2ZWYzOWRiYjE5ZDMwMzI4YTkxMTM5NCAxMDA2NDQKLS0t
IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYz
LDYgKzYzLDggQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIFwKIAlUb29scy9EdW1wUmVuZGVy
VHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxE
dW1wU3VwcG9ydC5oIFwKKwlUb29scy9EdW1wUmVuZGVyVHJlZS9QTkdVdGlsLmNwcCBcCisJVG9v
bHMvRHVtcFJlbmRlclRyZWUvUE5HVXRpbC5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9Xb3Jr
UXVldWUuY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuaCBcCiAJVG9vbHMv
RHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlSXRlbS5oIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88673</attachid>
            <date>2011-04-07 12:42:38 -0700</date>
            <delta_ts>2011-04-07 14:24:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57871-20110407124237.patch</filename>
            <type>text/plain</type>
            <size>20745</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxMjAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4NDU4M2U3NGFjZjAyMzc1MmYyYjNkOWUxM2U1ZDJkODAz
YzIzZDJhLi4zM2I1YTFmY2NhMzU3ZTJiYzQ5MzcwMWRmNTU2ZDdkNGIyOTE3YTUzIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDAg
QEAKIDIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgRFJUIHRvIGVt
YmVkIGNoZWNrc3VtcyBpbiBwbmcgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3ODcxCisKKyAgICAgICAgV2UgaW5zZXJ0IHRoZSBieXRlcyBm
b3IgdGhlIGNvbW1lbnQgaW4gcHJpbnRQTkcgcmF0aGVyIHRoYW4gYXQgZW5jb2RlCisgICAgICAg
IHRpbWUgYmVjYXVzZSBlYWNoIHBsYXRmb3JtIGRvZXMgaXRzIG93biBQTkcgZW5jb2RpbmcgKGVp
dGhlciB1c2luZyBDRworICAgICAgICBvciBjYWlybykuICBQdXR0aW5nIHRoaXMgaW4gcHJpbmdQ
TkcgYXZvaWRzIGhhdmluZyB0byBkdXBsaWNhdGUgdGhpcworICAgICAgICBjb2RlLCBhbHRob3Vn
aCBpdCdzIG5vdCBhcyBjbGVhbiBhcyBkb2luZyBpdCBhdCBlbmNvZGluZyB0aW1lLgorCisgICAg
ICAgIFdlIGluc2VydCB0aGUgY29tbWVudCBiZWZvcmUgdGhlIGZpcnN0IElEQVQgc2VjdGlvbiBv
ZiB0aGUgUE5HLiAgSW4KKyAgICAgICAgdGhlIGNhaXJvIGdlbmVyYXRlZCBQTkdzLCB0aGlzIGlz
IGFyb3VuZCB0aGUgNzUgYnl0ZXMgaW4uICBJbiBDRworICAgICAgICBnZW5lcmF0ZWQgUE5Hcywg
dGhpcyBpcyBhYm91dCA4MDAgYnl0ZXMgaW4gYmVjYXVzZSBvZiB0aGUgSUNDIHByb2ZpbGUuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVj
ay5jcHA6IEFkZGVkLgorICAgICAgICAobWFrZUNyY1RhYmxlKTogUG9ydGVkIGZyb20gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3BuZ2xpYi5qcworICAgICAgICAoY29t
cHV0ZUNyYyk6IFBvcnRlZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy9wbmdsaWIuanMKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5
Q2hlY2suaDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9y
dC5jcHA6CisgICAgICAgIChkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3Rl
ZCk6CisgICAgICAgIChjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQpOiBHZW5lcmF0ZSB0aGUg
Ynl0ZXMgdG8gaW5zZXJ0LgorICAgICAgICAocHJpbnRQTkcpOiBJbnNlcnQgdGhlIHBuZyBjb21t
ZW50IGJlZm9yZSB0aGUgZmlyc3QgSURBVCBzZWN0aW9uLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL1BpeGVsRHVtcFN1cHBvcnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWlyby9Q
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwOgorICAgICAgICAocHJpbnRQTkcpOgorICAgICAgICAo
ZHVtcEJpdG1hcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9y
dENHLmNwcDoKKyAgICAgICAgKHByaW50UE5HKToKKyAgICAgICAgKGR1bXBCaXRtYXApOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisKKzIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KIAogICAgICAgICB0
ZWFjaCBydW4td2Via2l0LXRlc3RzIHRvIHJlYWQgY2hlY2tzdW1zIGZyb20gcG5nIGZpbGVzCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZDRkMWE2MDA4ZjBjNmUzMDgzOWVjNGM1YjdhY2VkZjI5N2QxNWIyCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcApA
QCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKy8qCisgKiBtYWtlQ3JjVGFibGUgYW5kIGNvbXB1dGVDcmMgYXJlIGNvbnZl
cnNpb25zIG9mIHRoZSBKUyBtZXRob2RzIGluIHBuZ2xpYi5qcy4KKyAqCisgKiBBIGhhbmR5IGNs
YXNzIHRvIGNhbGN1bGF0ZSBjb2xvciB2YWx1ZXMuCisgKgorICogQHZlcnNpb24gMS4wCisgKiBA
YXV0aG9yIFJvYmVydCBFaXNlbGUgPHJvYmVydEB4YXJnLm9yZz4KKyAqIEBjb3B5cmlnaHQgQ29w
eXJpZ2h0IChjKSAyMDEwLCBSb2JlcnQgRWlzZWxlCisgKiBAbGluaworICogaHR0cDovL3d3dy54
YXJnLm9yZy8yMDEwLzAzL2dlbmVyYXRlLWNsaWVudC1zaWRlLXBuZy1maWxlcy11c2luZy1qYXZh
c2NyaXB0LworICogQGxpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i
c2QtbGljZW5zZS5waHAgQlNEIExpY2Vuc2UKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oIgorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCitzdGF0aWMgdm9pZCBtYWtlQ3JjVGFibGUodW5zaWduZWQgbG9uZyBjcmNUYWJs
ZVsyNTZdKQoreworICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IDI1NjsgaSsrKSB7
CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYyA9IGk7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBr
IDwgODsgaysrKSB7CisgICAgICAgICAgICBpZiAoYyAmIDEpCisgICAgICAgICAgICAgICAgYyA9
IC0zMDY2NzQ5MTIgXiAoKGMgPj4gMSkgJiAweDdmZmZmZmZmKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBjID0gYyA+PiAxOworICAgICAgICB9CisgICAgICAgIGNyY1RhYmxl
W2ldID0gYzsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGxvbmcgY29tcHV0ZUNyYyhjb25zdCBWZWN0
b3I8dW5zaWduZWQgY2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBj
cmNUYWJsZVsyNTZdOworICAgIHN0YXRpYyBib29sIGNyY1RhYmxlQ29tcHV0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoIWNyY1RhYmxlQ29tcHV0ZWQpIHsKKyAgICAgICAgbWFrZUNyY1RhYmxlKGNyY1Rh
YmxlKTsKKyAgICAgICAgY3JjVGFibGVDb21wdXRlZCA9IHRydWU7CisgICAgfQorCisgICAgdW5z
aWduZWQgbG9uZyBjcmMgPSAweGZmZmZmZmZmTDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJ1ZmZlci5zaXplKCk7ICsraSkKKyAgICAgICAgY3JjID0gY3JjVGFibGVbKGNyYyBeIGJ1ZmZl
cltpXSkgJiAweGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZmZmZmZkwpOworICAgIHJldHVybiBj
cmMgXiAweGZmZmZmZmZmTDsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Q3ljbGljUmVkdW5kYW5jeUNoZWNrLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1
bmRhbmN5Q2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2E3MzlkYzc1OTJhOWQ4OTViYTdlZDRmNjI3NmMw
ZDNhMzY5ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGlj
UmVkdW5kYW5jeUNoZWNrLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3ljbGljUmVkdW5kYW5j
eUNoZWNrX2gKKyNkZWZpbmUgQ3ljbGljUmVkdW5kYW5jeUNoZWNrX2gKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKwordW5zaWduZWQgbG9uZyBjb21wdXRlQ3JjKGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdj
YzRjOWM5NDBlNDQ5N2VlZjc0ZDk1MDE1ZDUxZjkzM2U1ODRmZjYuLjJmODc2NTFhYjQ2MDBmM2Q2
NzE5MzcyMjVhODVkYTc5MDQwYTJiYWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NTksNiArNTksOCBAQAogCQk0NDM3NzMwRjEyNUNCQzREMDBBQUUwMkMgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NEE5OTc4MjBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmggKi87
IH07CiAJCTUxODVGNkIyMTA3MTRFMDcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1RjY5RjEwNzE0
QTU3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1tICovOyB9OwogCQk1MTg1RjZCMzEwNzE0
RTEyMDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1RjY5RTEwNzE0QTU3MDA3QUEzOTMgLyogSGlzdG9y
eURlbGVnYXRlLmggKi87IH07CisJCTUzQ0JCODMyMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNS
ZWR1bmRhbmN5Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNDQkI4MzAxMzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVj
ay5jcHAgKi87IH07CisJCTUzQ0JCODMzMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRh
bmN5Q2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzQ0JCODMxMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCAqLzsg
fTsKIAkJNURCOUFDOTcwRjcyMkMzNjAwNjg0NjQxIC8qIEFIRU1fX19fLlRURiBpbiBDb3B5IEZv
bnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3RjEwQzIwQ0Iz
QzEwMzAwMDNCREM5IC8qIEFIRU1fX19fLlRURiAqLzsgfTsKIAkJNURCOUFDOTgwRjcyMkMzNjAw
Njg0NjQxIC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3MTBEQUMzQ0I2MDBDOEI0
RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYgKi87IH07CiAJCTVEQjlBQzk5MEY3MjJD
MzYwMDY4NDY0MSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiBpbiBDb3B5IEZvbnQgRmls
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzIwREFDM0NCNjAw
QzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmICovOyB9OwpAQCAtMjQzLDYgKzI0
NSw4IEBACiAJCTQ0QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBv
cnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmNwcDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODVGNjlFMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0
b3J5RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSGlzdG9yeURl
bGVnYXRlLmg7IHBhdGggPSBtYWMvSGlzdG9yeURlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxODVGNjlGMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgbmFtZSA9IEhpc3RvcnlEZWxlZ2F0
ZS5tbTsgcGF0aCA9IG1hYy9IaXN0b3J5RGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzQ0JCODMwMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hl
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3ljbGljUmVkdW5k
YW5jeUNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDQkI4MzExMzRF
NDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBv
cnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsRHVtcFN1
cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM1NDM1RjAzRDc1NTAy
MDA4NjM1Q0UgLyogV2ViS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViS2l0LmZy
YW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOTMzQkY1QTkw
RjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGxhaW5UZXh0Q29udHJvbGxlci5oOyBwYXRoID0gbWFjL1BsYWlu
VGV4dENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4MSw2ICs1
ODUsOCBAQAogCQlCQ0IyODQ4NzBDRkE4MUVEMDA3RTUzM0UgLyogUGl4ZWxEdW1wICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1M0NCQjgzMDEzNEU0MkYz
MDAxQ0U2QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcCAqLywKKwkJCQk1M0NCQjgzMTEz
NEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmggKi8sCiAJCQkJQkNCMjg0
RjMwQ0ZBODRGMjAwN0U1MzNFIC8qIEltYWdlRGlmZkNHLmNwcCAqLywKIAkJCQk4NDY1RTJDNjBG
RkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi8sCiAJCQkJQkNCMjg0OEEw
Q0ZBODIwRjAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnQuaCAqLywKQEAgLTYxMSw2ICs2MTcs
NyBAQAogCQkJCUJDMEUyNEUwMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ExOEIzODBDOUIwMjE5MDAxMTQzNjkgLyogQXBw
bGVTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEI5MUJGRjBDRjUyMkI0
MDA4RjkxRkYgLyogQ2hlY2tlZE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNDQkI4MzMx
MzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNBMThCN0EwQzlCMDhGMTAwMTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEQ3OUNFQTBGQzI4QjJDMDA0QUM4RkUgLyogRHVt
cFJlbmRlclRyZWVGaWxlRHJhZ2dpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTE4
QzBCMEM5QjU5RUYwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZU1hYy5oIGluIEhlYWRlcnMgKi8s
CkBAIC03OTksNiArODA2LDcgQEAKIAkJCQlCQzBFMjYxNTBFMkRBNEM2MDAxQjZCQzIgLyogQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjM5MEM5
QjAyMTkwMDExNDM2OSAvKiBBcHBsZVNjcmlwdENvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAog
CQkJCUE4QjkxQkZEMENGNTIyQjQwMDhGOTFGRiAvKiBDaGVja2VkTWFsbG9jLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUzQ0JCODMyMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThDNDcwQzlCNUI5NDAwMTE0MzY5IC8q
IER1bXBSZW5kZXJUcmVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCN0IwQzlCMDhGMTAw
MTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThENzlDRUIwRkMyOEIyQzAwNEFDOEZFIC8qIER1bXBSZW5kZXJUcmVlRmlsZURyYWdnaW5n
U291cmNlLm0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1BpeGVsRHVtcFN1cHBvcnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3Vw
cG9ydC5jcHAKaW5kZXggMzUyZWFhYTZiMjMyNjM3ZmViNjdmZGVmNGZhOGM2YTcwMjkxYWVjZi4u
ZmQ4MDE5Mjg3YjI3MDdkOGJkYjkzZjU3NjQ4MWY4ZWNkNmEyMTRiMyAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKQEAgLTI5LDExICsyOSwxNCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKIAorI2luY2x1ZGUg
IkN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAj
aW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENH
KQogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDRy5oIgpAQCAtNjksMTYgKzcyLDU1IEBAIHZv
aWQgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoY29uc3Qgc3RkOjpz
dHJpbmcmIGV4cGVjdGVkSGFzaCkKICAgICB9CiAgICAgCiAgICAgaWYgKGR1bXBJbWFnZSkKLSAg
ICAgIGR1bXBCaXRtYXAoY29udGV4dC5nZXQoKSk7CisgICAgICBkdW1wQml0bWFwKGNvbnRleHQu
Z2V0KCksIGFjdHVhbEhhc2gpOwogfQogCi12b2lkIHByaW50UE5HKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGljIHZvaWQgY29udmVydENo
ZWNrc3VtVG9QTkdDb21tZW50KGNvbnN0IGNoYXIqIGNoZWNrc3VtLCBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4mIGJ5dGVzVG9BZGQpCiB7CisgICAgLy8gQ2h1bmtzIG9mIFBORyBmaWxlcyBhcmUgPGxl
bmd0aD4sIDx0eXBlPiwgPGRhdGE+LCA8Y3JjPi4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGV4
dENvbW1lbnRQcmVmaXggPSAiXHgwMFx4MDBceDAwXHgyOXRFWHRjaGVja3N1bVx4MDAiOworICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgcHJlZml4TGVuZ3RoID0gMTc7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjaGVja3N1bUxlbmd0aCA9IDMyOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY3Jj
TGVuZ3RoID0gNDsKKworICAgIGJ5dGVzVG9BZGQuYXBwZW5kKHRleHRDb21tZW50UHJlZml4LCBw
cmVmaXhMZW5ndGgpOworICAgIGJ5dGVzVG9BZGQuYXBwZW5kKGNoZWNrc3VtLCBjaGVja3N1bUxl
bmd0aCk7CisgICAgRklMRSogZiA9IGZvcGVuKCIvdG1wL2xvZ3p6eiIsICJ3Iik7CisgICAgZnBy
aW50ZihmLCAiJWRcbiIsIChpbnQpYnl0ZXNUb0FkZC5zaXplKCkpOworICAgIGZjbG9zZShmKTsK
KworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkYXRhVG9DcmM7CisgICAgZGF0YVRvQ3JjLmFw
cGVuZCh0ZXh0Q29tbWVudFByZWZpeCArIDQsIHByZWZpeExlbmd0aCAtIDQpOyAvLyBEb24ndCBp
bmNsdWRlIHRoZSBjaHVuayBsZW5ndGggaW4gdGhlIGNyYy4KKyAgICBkYXRhVG9DcmMuYXBwZW5k
KGNoZWNrc3VtLCBjaGVja3N1bUxlbmd0aCk7CisgICAgdW5zaWduZWQgbG9uZyBjcmMzMiA9IGNv
bXB1dGVDcmMoZGF0YVRvQ3JjKTsKKworICAgIGJ5dGVzVG9BZGQuZ3JvdyhieXRlc1RvQWRkLnNp
emUoKSArIGNyY0xlbmd0aCk7CisgICAgYnl0ZXNUb0FkZFtwcmVmaXhMZW5ndGggKyBjaGVja3N1
bUxlbmd0aF0gPSAoKGNyYzMyID4+IDI0KSAmIDB4ZmYpOworICAgIGJ5dGVzVG9BZGRbcHJlZml4
TGVuZ3RoICsgY2hlY2tzdW1MZW5ndGggKyAxXSA9ICgoY3JjMzIgPj4gMTYpICYgMHhmZik7Cisg
ICAgYnl0ZXNUb0FkZFtwcmVmaXhMZW5ndGggKyBjaGVja3N1bUxlbmd0aCArIDJdID0gKChjcmMz
MiA+PiA4KSAmIDB4ZmYpOworICAgIGJ5dGVzVG9BZGRbcHJlZml4TGVuZ3RoICsgY2hlY2tzdW1M
ZW5ndGggKyAzXSA9IChjcmMzMiAmIDB4ZmYpOworfQorCit2b2lkIHByaW50UE5HKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoLCBjb25zdCBjaGFyKiBj
aGVja3N1bSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gYnl0ZXNUb0FkZDsKKyAgICBj
b252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQoY2hlY2tzdW0sIGJ5dGVzVG9BZGQpOworCiAgICAg
cHJpbnRmKCJDb250ZW50LVR5cGU6ICVzXG4iLCAiaW1hZ2UvcG5nIik7Ci0gICAgcHJpbnRmKCJD
b250ZW50LUxlbmd0aDogJWx1XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihkYXRhTGVu
Z3RoKSk7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihkYXRhTGVuZ3RoICsgYnl0ZXNUb0FkZC5zaXplKCkpKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlkYXRbNF0gPSB7J0knLCAnRCcsICdBJywgJ1QnfTsK
KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpZGF0UG9zaXRpb24gPSBzdGQ6OnNlYXJjaChkYXRh
LCBkYXRhICsgZGF0YUxlbmd0aCwgaWRhdCwgaWRhdCArIDQpOworICAgIEFTU0VSVChpZGF0UG9z
aXRpb24gIT0gZGF0YSArIGRhdGFMZW5ndGgpOworICAgIEFTU0VSVChpZGF0UG9zaXRpb24gLSBk
YXRhID4gNCk7CisKKyAgICBzaXplX3QgaW5zZXJ0T2Zmc2V0ID0gKGlkYXRQb3NpdGlvbiAtIGRh
dGEpIC0gNDsKKyAgICBmd3JpdGUoZGF0YSwgMSwgaW5zZXJ0T2Zmc2V0LCBzdGRvdXQpOworICAg
IGZ3cml0ZShieXRlc1RvQWRkLmRhdGEoKSwgMSwgYnl0ZXNUb0FkZC5zaXplKCksIHN0ZG91dCk7
CiAKICAgICBjb25zdCBzaXplX3QgYnl0ZXNUb1dyaXRlSW5PbmVDaHVuayA9IDEgPDwgMTU7Ci0g
ICAgc2l6ZV90IGRhdGFSZW1haW5pbmdUb1dyaXRlID0gZGF0YUxlbmd0aDsKKyAgICBkYXRhICs9
IGluc2VydE9mZnNldDsKKyAgICBzaXplX3QgZGF0YVJlbWFpbmluZ1RvV3JpdGUgPSBkYXRhTGVu
Z3RoIC0gaW5zZXJ0T2Zmc2V0OwogICAgIHdoaWxlIChkYXRhUmVtYWluaW5nVG9Xcml0ZSkgewog
ICAgICAgICBzaXplX3QgYnl0ZXNUb1dyaXRlSW5UaGlzQ2h1bmsgPSBzdGQ6Om1pbihkYXRhUmVt
YWluaW5nVG9Xcml0ZSwgYnl0ZXNUb1dyaXRlSW5PbmVDaHVuayk7CiAgICAgICAgIHNpemVfdCBi
eXRlc1dyaXR0ZW4gPSBmd3JpdGUoZGF0YSwgMSwgYnl0ZXNUb1dyaXRlSW5UaGlzQ2h1bmssIHN0
ZG91dCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmgKaW5kZXggZTE3MmE4
MzEzMWFkZDYwMjg3NDdhMmIyZmQxYTYwYjk5YjJkMjRmYy4uODdlNjQwMjQzNTY2NTYzZTJhODcz
NmEwYTdkNjE4MTY3ODM5NTI3OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4
ZWxEdW1wU3VwcG9ydC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBv
cnQuaApAQCAtMzgsOSArMzgsOSBAQCBjbGFzcyBCaXRtYXBDb250ZXh0Owogdm9pZCBjb21wdXRl
TUQ1SGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQoQml0bWFwQ29udGV4dCosIGNoYXIgaGFzaFN0
cmluZ1szM10pOwogUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVQYWdlZEJpdG1hcENv
bnRleHQoKTsKIFBhc3NSZWZQdHI8Qml0bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29udGV4dEZy
b21XZWJWaWV3KGJvb2wgb25zY3JlZW4sIGJvb2wgaW5jcmVtZW50YWxSZXBhaW50LCBib29sIHN3
ZWVwSG9yaXpvbnRhbGx5LCBib29sIGRyYXdTZWxlY3Rpb25SZWN0KTsKLXZvaWQgZHVtcEJpdG1h
cChCaXRtYXBDb250ZXh0Kik7Cit2b2lkIGR1bXBCaXRtYXAoQml0bWFwQ29udGV4dCosIGNvbnN0
IGNoYXIqIGNoZWNrc3VtKTsKIHZvaWQgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRo
RXhwZWN0ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkSGFzaCk7Ci12b2lkIHByaW50UE5H
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoKTsKK3Zv
aWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFM
ZW5ndGgsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJv
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5j
cHAKaW5kZXggN2RlMDE5ZGYwYTg1MmY4NzEzZDNhN2VkNWVjMTQ1OTEwOTVmYWNiNy4uYzEwYTNh
N2RjY2NmYWE5MTAwYzA4OTM5NTlkNTcxYjY2Y2RhMzU4NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCkBAIC00OSw3ICs0
OSw3IEBAIHN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIGNsb3N1cmUs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuCiAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19T
VUNDRVNTOwogfQogCi1zdGF0aWMgdm9pZCBwcmludFBORyhjYWlyb19zdXJmYWNlX3QqIGltYWdl
KQorc3RhdGljIHZvaWQgcHJpbnRQTkcoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgY2hh
ciogY2hlY2tzdW0pCiB7CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBpeGVsRGF0YTsKICAg
ICAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCkBAIC01OCw3ICs1OCw3
IEBAIHN0YXRpYyB2b2lkIHByaW50UE5HKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCiAgICAgY29u
c3Qgc2l6ZV90IGRhdGFMZW5ndGggPSBwaXhlbERhdGEuc2l6ZSgpOwogICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEgPSBwaXhlbERhdGEuZGF0YSgpOwogCi0gICAgcHJpbnRQTkcoZGF0YSwg
ZGF0YUxlbmd0aCk7CisgICAgcHJpbnRQTkcoZGF0YSwgZGF0YUxlbmd0aCwgY2hlY2tzdW0pOwog
fQogCiB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250
ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbmdbMzNdKQpAQCAtODYsOCArODYsOCBAQCB2b2lk
IGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiBjb250
ZXh0LCBjaGFyIGhhc2hTdHJpbgogICAgICAgICBoYXNoWzhdLCBoYXNoWzldLCBoYXNoWzEwXSwg
aGFzaFsxMV0sIGhhc2hbMTJdLCBoYXNoWzEzXSwgaGFzaFsxNF0sIGhhc2hbMTVdKTsKIH0KIAot
dm9pZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQqIGNvbnRleHQpCit2b2lkIGR1bXBCaXRtYXAo
Qml0bWFwQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7CiAgICAgY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0LT5jYWlyb0Nv
bnRleHQoKSk7Ci0gICAgcHJpbnRQTkcoc3VyZmFjZSk7CisgICAgcHJpbnRQTkcoc3VyZmFjZSwg
Y2hlY2tzdW0pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxE
dW1wU3VwcG9ydENHLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBv
cnRDRy5jcHAKaW5kZXggNWNmMzJmMTNkYWZiNmE5MDliZjA4NTgzNzdjNTYwMmRhZDg3M2I0OC4u
YmY1OWIwM2VjM2YzMDI3OWMzYmEyNzllMzRmZTIxZjU3NDU3YzJkYSAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCkBAIC01NSw3ICs1NSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBO
RyA9IENGU1RSKCJwdWJsaWMucG5nIik7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcHJpbnRQTkco
Q0dJbWFnZVJlZiBpbWFnZSkKK3N0YXRpYyB2b2lkIHByaW50UE5HKENHSW1hZ2VSZWYgaW1hZ2Us
IGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogewogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVm
PiBpbWFnZURhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CiAgICAgUmV0
YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VEZXN0KEFkb3B0Q0YsIENHSW1hZ2VE
ZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwg
MCkpOwpAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBwcmludFBORyhDR0ltYWdlUmVmIGlt
YWdlKQogICAgIGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihpbWFnZURhdGEu
Z2V0KCkpOwogICAgIENGSW5kZXggZGF0YUxlbmd0aCA9IENGRGF0YUdldExlbmd0aChpbWFnZURh
dGEuZ2V0KCkpOwogCi0gICAgcHJpbnRQTkcoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGFMZW5ndGgpKTsKKyAgICBwcmludFBO
RyhzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIHN0YXRpY19jYXN0PHNp
emVfdD4oZGF0YUxlbmd0aCksIGNoZWNrc3VtKTsKIH0KIAogdm9pZCBjb21wdXRlTUQ1SGFzaFN0
cmluZ0ZvckJpdG1hcENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNoU3Ry
aW5nWzMzXSkKQEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9y
Qml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbgogICAg
ICAgICBzbnByaW50ZihoYXNoU3RyaW5nLCAzMywgIiVzJTAyeCIsIGhhc2hTdHJpbmcsIGhhc2hb
aV0pOwogfQogCi12b2lkIGR1bXBCaXRtYXAoQml0bWFwQ29udGV4dCogY29udGV4dCkKK3ZvaWQg
ZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkK
IHsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC0+Y2dDb250ZXh0KCkpKTsKLSAgICBwcmludFBORyhpbWFn
ZS5nZXQoKSk7CisgICAgcHJpbnRQTkcoaW1hZ2UuZ2V0KCksIGNoZWNrc3VtKTsKIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2ogYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCmluZGV4IDM5ZDJk
ZjIyN2RlZTg2OWI2ZTViODdiYzNhZGMyYzI4ZGFkNmViZWYuLjU4MTQ1MjEyZmE1YmYwZGNmZmUz
YmVmMDk3NjM4ZjkzMDMyOGM2NjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1
bXBSZW5kZXJUcmVlLnZjcHJvagpAQCAtNTE1LDYgKzUxNSwxNCBAQAogCQkJPgogCQk8L0ZpbGU+
CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAi
CisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cQ3ljbGllUmVk
dW5kYW5jeUNoZWNrLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0
aD0iLlxEcmFnZ2luZ0luZm8uaCIKIAkJCT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
R05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCA2ZGUxYWY1OWFkMzQ3
MDRlOTdkZjY0Zjc1MDI4ZDk2MmNiMTAwMTVjLi45NGI0MTQ3ZGQ0YThlYWRhN2M1YjhlODgyNTcw
NGM1NGE0ZWFjNWZiIDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29s
cy9HTlVtYWtlZmlsZS5hbQpAQCAtNTYsNiArNTYsOCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJl
ZV9TT1VSQ0VTID0gXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3Bw
IFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggXAorCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAgXAorCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL0N5Y2xpZVJlZHVuZGFuY3lDaGVjay5oIFwKIAlUb29scy9EdW1wUmVuZGVy
VHJlZS9HQ0NvbnRyb2xsZXIuY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5oIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88696</attachid>
            <date>2011-04-07 14:24:44 -0700</date>
            <delta_ts>2011-04-07 14:28:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57871-20110407142443.patch</filename>
            <type>text/plain</type>
            <size>20281</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxMjAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4NDU4M2U3NGFjZjAyMzc1MmYyYjNkOWUxM2U1ZDJkODAz
YzIzZDJhLi4zM2I1YTFmY2NhMzU3ZTJiYzQ5MzcwMWRmNTU2ZDdkNGIyOTE3YTUzIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDAg
QEAKIDIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgRFJUIHRvIGVt
YmVkIGNoZWNrc3VtcyBpbiBwbmcgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3ODcxCisKKyAgICAgICAgV2UgaW5zZXJ0IHRoZSBieXRlcyBm
b3IgdGhlIGNvbW1lbnQgaW4gcHJpbnRQTkcgcmF0aGVyIHRoYW4gYXQgZW5jb2RlCisgICAgICAg
IHRpbWUgYmVjYXVzZSBlYWNoIHBsYXRmb3JtIGRvZXMgaXRzIG93biBQTkcgZW5jb2RpbmcgKGVp
dGhlciB1c2luZyBDRworICAgICAgICBvciBjYWlybykuICBQdXR0aW5nIHRoaXMgaW4gcHJpbmdQ
TkcgYXZvaWRzIGhhdmluZyB0byBkdXBsaWNhdGUgdGhpcworICAgICAgICBjb2RlLCBhbHRob3Vn
aCBpdCdzIG5vdCBhcyBjbGVhbiBhcyBkb2luZyBpdCBhdCBlbmNvZGluZyB0aW1lLgorCisgICAg
ICAgIFdlIGluc2VydCB0aGUgY29tbWVudCBiZWZvcmUgdGhlIGZpcnN0IElEQVQgc2VjdGlvbiBv
ZiB0aGUgUE5HLiAgSW4KKyAgICAgICAgdGhlIGNhaXJvIGdlbmVyYXRlZCBQTkdzLCB0aGlzIGlz
IGFyb3VuZCB0aGUgNzUgYnl0ZXMgaW4uICBJbiBDRworICAgICAgICBnZW5lcmF0ZWQgUE5Hcywg
dGhpcyBpcyBhYm91dCA4MDAgYnl0ZXMgaW4gYmVjYXVzZSBvZiB0aGUgSUNDIHByb2ZpbGUuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVj
ay5jcHA6IEFkZGVkLgorICAgICAgICAobWFrZUNyY1RhYmxlKTogUG9ydGVkIGZyb20gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3BuZ2xpYi5qcworICAgICAgICAoY29t
cHV0ZUNyYyk6IFBvcnRlZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy9wbmdsaWIuanMKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5
Q2hlY2suaDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9y
dC5jcHA6CisgICAgICAgIChkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3Rl
ZCk6CisgICAgICAgIChjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQpOiBHZW5lcmF0ZSB0aGUg
Ynl0ZXMgdG8gaW5zZXJ0LgorICAgICAgICAocHJpbnRQTkcpOiBJbnNlcnQgdGhlIHBuZyBjb21t
ZW50IGJlZm9yZSB0aGUgZmlyc3QgSURBVCBzZWN0aW9uLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL1BpeGVsRHVtcFN1cHBvcnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWlyby9Q
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwOgorICAgICAgICAocHJpbnRQTkcpOgorICAgICAgICAo
ZHVtcEJpdG1hcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9y
dENHLmNwcDoKKyAgICAgICAgKHByaW50UE5HKToKKyAgICAgICAgKGR1bXBCaXRtYXApOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisKKzIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KIAogICAgICAgICB0
ZWFjaCBydW4td2Via2l0LXRlc3RzIHRvIHJlYWQgY2hlY2tzdW1zIGZyb20gcG5nIGZpbGVzCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iOTI5MWU5YTc1ODE5YmUwNTdlZjNiNjY3NGMyNWVhY2Y4MTRhNGViCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBSb2JlcnQgRWlzZWxl
IDxyb2JlcnRAeGFyZy5vcmc+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCitzdGF0aWMgdm9pZCBtYWtlQ3JjVGFibGUodW5zaWduZWQgbG9uZyBjcmNUYWJsZVsy
NTZdKQoreworICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgYyA9IGk7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwg
ODsgaysrKSB7CisgICAgICAgICAgICBpZiAoYyAmIDEpCisgICAgICAgICAgICAgICAgYyA9IC0z
MDY2NzQ5MTIgXiAoKGMgPj4gMSkgJiAweDdmZmZmZmZmKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjID0gYyA+PiAxOworICAgICAgICB9CisgICAgICAgIGNyY1RhYmxlW2ld
ID0gYzsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGxvbmcgY29tcHV0ZUNyYyhjb25zdCBWZWN0b3I8
dW5zaWduZWQgY2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcmNU
YWJsZVsyNTZdOworICAgIHN0YXRpYyBib29sIGNyY1RhYmxlQ29tcHV0ZWQgPSBmYWxzZTsKKyAg
ICBpZiAoIWNyY1RhYmxlQ29tcHV0ZWQpIHsKKyAgICAgICAgbWFrZUNyY1RhYmxlKGNyY1RhYmxl
KTsKKyAgICAgICAgY3JjVGFibGVDb21wdXRlZCA9IHRydWU7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgbG9uZyBjcmMgPSAweGZmZmZmZmZmTDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1
ZmZlci5zaXplKCk7ICsraSkKKyAgICAgICAgY3JjID0gY3JjVGFibGVbKGNyYyBeIGJ1ZmZlcltp
XSkgJiAweGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZmZmZmZkwpOworICAgIHJldHVybiBjcmMg
XiAweGZmZmZmZmZmTDsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3lj
bGljUmVkdW5kYW5jeUNoZWNrLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRh
bmN5Q2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2E3MzlkYzc1OTJhOWQ4OTViYTdlZDRmNjI3NmMwZDNh
MzY5ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVk
dW5kYW5jeUNoZWNrLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3ljbGljUmVkdW5kYW5jeUNo
ZWNrX2gKKyNkZWZpbmUgQ3ljbGljUmVkdW5kYW5jeUNoZWNrX2gKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKwordW5zaWduZWQgbG9uZyBjb21wdXRlQ3JjKGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdjYzRj
OWM5NDBlNDQ5N2VlZjc0ZDk1MDE1ZDUxZjkzM2U1ODRmZjYuLjJmODc2NTFhYjQ2MDBmM2Q2NzE5
MzcyMjVhODVkYTc5MDQwYTJiYWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTks
NiArNTksOCBAQAogCQk0NDM3NzMwRjEyNUNCQzREMDBBQUUwMkMgLyogV2ViQXJjaGl2ZUR1bXBT
dXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NEE5OTc4MjBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmggKi87IH07
CiAJCTUxODVGNkIyMTA3MTRFMDcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1RjY5RjEwNzE0QTU3
MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1tICovOyB9OwogCQk1MTg1RjZCMzEwNzE0RTEy
MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1RjY5RTEwNzE0QTU3MDA3QUEzOTMgLyogSGlzdG9yeURl
bGVnYXRlLmggKi87IH07CisJCTUzQ0JCODMyMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1
bmRhbmN5Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNDQkI4MzAxMzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5j
cHAgKi87IH07CisJCTUzQ0JCODMzMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5
Q2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
Q0JCODMxMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCAqLzsgfTsK
IAkJNURCOUFDOTcwRjcyMkMzNjAwNjg0NjQxIC8qIEFIRU1fX19fLlRURiBpbiBDb3B5IEZvbnQg
RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3RjEwQzIwQ0IzQzEw
MzAwMDNCREM5IC8qIEFIRU1fX19fLlRURiAqLzsgfTsKIAkJNURCOUFDOTgwRjcyMkMzNjAwNjg0
NjQxIC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3MTBEQUMzQ0I2MDBDOEI0RTUg
LyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYgKi87IH07CiAJCTVEQjlBQzk5MEY3MjJDMzYw
MDY4NDY0MSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzIwREFDM0NCNjAwQzhC
NEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmICovOyB9OwpAQCAtMjQzLDYgKzI0NSw4
IEBACiAJCTQ0QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBT
dXBwb3J0LmNwcDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODVGNjlFMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0b3J5
RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSGlzdG9yeURlbGVn
YXRlLmg7IHBhdGggPSBtYWMvSGlzdG9yeURlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxODVGNjlGMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgbmFtZSA9IEhpc3RvcnlEZWxlZ2F0ZS5t
bTsgcGF0aCA9IG1hYy9IaXN0b3J5RGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzQ0JCODMwMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3ljbGljUmVkdW5kYW5j
eUNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDQkI4MzExMzRFNDJG
MzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsRHVtcFN1cHBv
cnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM1NDM1RjAzRDc1NTAyMDA4
NjM1Q0UgLyogV2ViS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViS2l0LmZyYW1l
d29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOTMzQkY1QTkwRjkz
RkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGxhaW5UZXh0Q29udHJvbGxlci5oOyBwYXRoID0gbWFjL1BsYWluVGV4
dENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4MSw2ICs1ODUs
OCBAQAogCQlCQ0IyODQ4NzBDRkE4MUVEMDA3RTUzM0UgLyogUGl4ZWxEdW1wICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1M0NCQjgzMDEzNEU0MkYzMDAx
Q0U2QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcCAqLywKKwkJCQk1M0NCQjgzMTEzNEU0
MkYzMDAxQ0U2QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmggKi8sCiAJCQkJQkNCMjg0RjMw
Q0ZBODRGMjAwN0U1MzNFIC8qIEltYWdlRGlmZkNHLmNwcCAqLywKIAkJCQk4NDY1RTJDNjBGRkE4
REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi8sCiAJCQkJQkNCMjg0OEEwQ0ZB
ODIwRjAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnQuaCAqLywKQEAgLTYxMSw2ICs2MTcsNyBA
QAogCQkJCUJDMEUyNEUwMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ExOEIzODBDOUIwMjE5MDAxMTQzNjkgLyogQXBwbGVT
Y3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEI5MUJGRjBDRjUyMkI0MDA4
RjkxRkYgLyogQ2hlY2tlZE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNDQkI4MzMxMzRF
NDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNBMThCN0EwQzlCMDhGMTAwMTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEQ3OUNFQTBGQzI4QjJDMDA0QUM4RkUgLyogRHVtcFJl
bmRlclRyZWVGaWxlRHJhZ2dpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTE4QzBC
MEM5QjU5RUYwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZU1hYy5oIGluIEhlYWRlcnMgKi8sCkBA
IC03OTksNiArODA2LDcgQEAKIAkJCQlCQzBFMjYxNTBFMkRBNEM2MDAxQjZCQzIgLyogQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjM5MEM5QjAy
MTkwMDExNDM2OSAvKiBBcHBsZVNjcmlwdENvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QjkxQkZEMENGNTIyQjQwMDhGOTFGRiAvKiBDaGVja2VkTWFsbG9jLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUzQ0JCODMyMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hl
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThDNDcwQzlCNUI5NDAwMTE0MzY5IC8qIER1
bXBSZW5kZXJUcmVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCN0IwQzlCMDhGMTAwMTE0
MzY5IC8qIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThENzlDRUIwRkMyOEIyQzAwNEFDOEZFIC8qIER1bXBSZW5kZXJUcmVlRmlsZURyYWdnaW5nU291
cmNlLm0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Bp
eGVsRHVtcFN1cHBvcnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9y
dC5jcHAKaW5kZXggMzUyZWFhYTZiMjMyNjM3ZmViNjdmZGVmNGZhOGM2YTcwMjkxYWVjZi4uOWEx
MGM1MzM4NTE4NWVmMGQ2ZmUwYWFlNDZlZTI5MjEyNzI3YTdlZiAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKIAorI2luY2x1ZGUgIkN5
Y2xpY1JlZHVuZGFuY3lDaGVjay5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5j
bHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3Vw
cG9ydENHLmgiCkBAIC02OSwxNiArNzEsNjAgQEAgdm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5k
Q29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRIYXNoKQogICAg
IH0KICAgICAKICAgICBpZiAoZHVtcEltYWdlKQotICAgICAgZHVtcEJpdG1hcChjb250ZXh0Lmdl
dCgpKTsKKyAgICAgIGR1bXBCaXRtYXAoY29udGV4dC5nZXQoKSwgYWN0dWFsSGFzaCk7CiB9CiAK
LXZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3Qgc2l6ZV90IGRh
dGFMZW5ndGgpCitzdGF0aWMgdm9pZCBhcHBlbmRJbnRUb1ZlY3RvcihpbnQgbnVtYmVyLCBWZWN0
b3I8dW5zaWduZWQgY2hhcj4mIHZlY3RvcikKIHsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gdmVjdG9y
LnNpemUoKTsKKyAgICB2ZWN0b3IuZ3JvdyhvZmZzZXQgKyA0KTsKKyAgICB2ZWN0b3Jbb2Zmc2V0
XSA9ICgobnVtYmVyID4+IDI0KSAmIDB4ZmYpOworICAgIHZlY3RvcltvZmZzZXQgKyAxXSA9ICgo
bnVtYmVyID4+IDE2KSAmIDB4ZmYpOworICAgIHZlY3RvcltvZmZzZXQgKyAyXSA9ICgobnVtYmVy
ID4+IDgpICYgMHhmZik7CisgICAgdmVjdG9yW29mZnNldCArIDNdID0gKG51bWJlciAmIDB4ZmYp
OworfQorCitzdGF0aWMgdm9pZCBjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQoY29uc3QgY2hh
ciogY2hlY2tzdW0sIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgYnl0ZXNUb0FkZCkKK3sKKyAgICAv
LyBDaHVua3Mgb2YgUE5HIGZpbGVzIGFyZSA8bGVuZ3RoPiwgPHR5cGU+LCA8ZGF0YT4sIDxjcmM+
LgorICAgIHN0YXRpYyBjb25zdCBjaGFyIHRleHRDb21tZW50UHJlZml4W10gPSAiXHgwMFx4MDBc
eDAwXHgyOXRFWHRjaGVja3N1bVx4MDAiOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlZml4
TGVuZ3RoID0gc2l6ZW9mKHRleHRDb21tZW50UHJlZml4KSAtIDE7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjaGVja3N1bUxlbmd0aCA9IDMyOworCisgICAgYnl0ZXNUb0FkZC5hcHBlbmQodGV4
dENvbW1lbnRQcmVmaXgsIHByZWZpeExlbmd0aCk7CisgICAgYnl0ZXNUb0FkZC5hcHBlbmQoY2hl
Y2tzdW0sIGNoZWNrc3VtTGVuZ3RoKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkYXRh
VG9DcmM7CisgICAgZGF0YVRvQ3JjLmFwcGVuZCh0ZXh0Q29tbWVudFByZWZpeCArIDQsIHByZWZp
eExlbmd0aCAtIDQpOyAvLyBEb24ndCBpbmNsdWRlIHRoZSBjaHVuayBsZW5ndGggaW4gdGhlIGNy
Yy4KKyAgICBkYXRhVG9DcmMuYXBwZW5kKGNoZWNrc3VtLCBjaGVja3N1bUxlbmd0aCk7CisgICAg
dW5zaWduZWQgbG9uZyBjcmMzMiA9IGNvbXB1dGVDcmMoZGF0YVRvQ3JjKTsKKworICAgIGFwcGVu
ZEludFRvVmVjdG9yKGNyYzMyLCBieXRlc1RvQWRkKTsKK30KKworc3RhdGljIHNpemVfdCBvZmZz
ZXRBZnRlcklIRFJDaHVuayhjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBzaXplX3Qg
ZGF0YUxlbmd0aCkKK3sKKyAgICBjb25zdCBpbnQgcG5nSGVhZGVyTGVuZ3RoID0gODsKKyAgICBj
b25zdCBpbnQgcG5nSUhEUkNodW5rTGVuZ3RoID0gMjU7IC8vIGNodW5rIGxlbmd0aCArICJJSERS
IiArIDEzIGJ5dGVzIG9mIGRhdGEgKyBjaGVja3N1bQorICAgIHJldHVybiBwbmdIZWFkZXJMZW5n
dGggKyBwbmdJSERSQ2h1bmtMZW5ndGg7Cit9CisKK3ZvaWQgcHJpbnRQTkcoY29uc3QgdW5zaWdu
ZWQgY2hhciogZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFMZW5ndGgsIGNvbnN0IGNoYXIqIGNoZWNr
c3VtKQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBieXRlc1RvQWRkOworICAgIGNvbnZl
cnRDaGVja3N1bVRvUE5HQ29tbWVudChjaGVja3N1bSwgYnl0ZXNUb0FkZCk7CisKICAgICBwcmlu
dGYoIkNvbnRlbnQtVHlwZTogJXNcbiIsICJpbWFnZS9wbmciKTsKLSAgICBwcmludGYoIkNvbnRl
bnQtTGVuZ3RoOiAlbHVcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGRhdGFMZW5ndGgp
KTsKKyAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KGRhdGFMZW5ndGggKyBieXRlc1RvQWRkLnNpemUoKSkpOworCisgICAgc2l6ZV90
IGluc2VydE9mZnNldCA9IG9mZnNldEFmdGVySUhEUkNodW5rKGRhdGEsIGRhdGFMZW5ndGgpOwor
CisgICAgZndyaXRlKGRhdGEsIDEsIGluc2VydE9mZnNldCwgc3Rkb3V0KTsKKyAgICBmd3JpdGUo
Ynl0ZXNUb0FkZC5kYXRhKCksIDEsIGJ5dGVzVG9BZGQuc2l6ZSgpLCBzdGRvdXQpOwogCiAgICAg
Y29uc3Qgc2l6ZV90IGJ5dGVzVG9Xcml0ZUluT25lQ2h1bmsgPSAxIDw8IDE1OwotICAgIHNpemVf
dCBkYXRhUmVtYWluaW5nVG9Xcml0ZSA9IGRhdGFMZW5ndGg7CisgICAgZGF0YSArPSBpbnNlcnRP
ZmZzZXQ7CisgICAgc2l6ZV90IGRhdGFSZW1haW5pbmdUb1dyaXRlID0gZGF0YUxlbmd0aCAtIGlu
c2VydE9mZnNldDsKICAgICB3aGlsZSAoZGF0YVJlbWFpbmluZ1RvV3JpdGUpIHsKICAgICAgICAg
c2l6ZV90IGJ5dGVzVG9Xcml0ZUluVGhpc0NodW5rID0gc3RkOjptaW4oZGF0YVJlbWFpbmluZ1Rv
V3JpdGUsIGJ5dGVzVG9Xcml0ZUluT25lQ2h1bmspOwogICAgICAgICBzaXplX3QgYnl0ZXNXcml0
dGVuID0gZndyaXRlKGRhdGEsIDEsIGJ5dGVzVG9Xcml0ZUluVGhpc0NodW5rLCBzdGRvdXQpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5oIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5oCmluZGV4IGUxNzJhODMxMzFhZGQ2
MDI4NzQ3YTJiMmZkMWE2MGI5OWIyZDI0ZmMuLjg3ZTY0MDI0MzU2NjU2M2UyYTg3MzZhMGE3ZDYx
ODE2NzgzOTUyNzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1
cHBvcnQuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmgKQEAg
LTM4LDkgKzM4LDkgQEAgY2xhc3MgQml0bWFwQ29udGV4dDsKIHZvaWQgY29tcHV0ZU1ENUhhc2hT
dHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqLCBjaGFyIGhhc2hTdHJpbmdbMzNd
KTsKIFBhc3NSZWZQdHI8Qml0bWFwQ29udGV4dD4gY3JlYXRlUGFnZWRCaXRtYXBDb250ZXh0KCk7
CiBQYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmll
dyhib29sIG9uc2NyZWVuLCBib29sIGluY3JlbWVudGFsUmVwYWludCwgYm9vbCBzd2VlcEhvcml6
b250YWxseSwgYm9vbCBkcmF3U2VsZWN0aW9uUmVjdCk7Ci12b2lkIGR1bXBCaXRtYXAoQml0bWFw
Q29udGV4dCopOwordm9pZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQqLCBjb25zdCBjaGFyKiBj
aGVja3N1bSk7CiB2b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZEhhc2gpOwotdm9pZCBwcmludFBORyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBzaXplX3QgZGF0YUxlbmd0aCk7Cit2b2lkIHByaW50
UE5HKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoLCBj
b25zdCBjaGFyKiBjaGVja3N1bSk7CiAKICNpZiBQTEFURk9STShNQUMpCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCmluZGV4
IDdkZTAxOWRmMGE4NTJmODcxM2QzYTdlZDVlYzE0NTkxMDk1ZmFjYjcuLmMxMGEzYTdkY2NjZmFh
OTEwMGMwODkzOTU5ZDU3MWI2NmNkYTM1ODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcApAQCAtNDksNyArNDksNyBAQCBz
dGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBjbG9zdXJlLCBjb25zdCB1
bnNpZ25lZCBjaGFyKiBkYXRhLCB1bgogICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsK
IH0KIAotc3RhdGljIHZvaWQgcHJpbnRQTkcoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKK3N0YXRp
YyB2b2lkIHByaW50UE5HKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IGNoYXIqIGNoZWNr
c3VtKQogewogICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwaXhlbERhdGE7CiAgICAgLy8gT25s
eSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgpAQCAtNTgsNyArNTgsNyBAQCBzdGF0
aWMgdm9pZCBwcmludFBORyhjYWlyb19zdXJmYWNlX3QqIGltYWdlKQogICAgIGNvbnN0IHNpemVf
dCBkYXRhTGVuZ3RoID0gcGl4ZWxEYXRhLnNpemUoKTsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gcGl4ZWxEYXRhLmRhdGEoKTsKIAotICAgIHByaW50UE5HKGRhdGEsIGRhdGFMZW5n
dGgpOworICAgIHByaW50UE5HKGRhdGEsIGRhdGFMZW5ndGgsIGNoZWNrc3VtKTsKIH0KIAogdm9p
ZCBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQoQml0bWFwQ29udGV4dCogY29u
dGV4dCwgY2hhciBoYXNoU3RyaW5nWzMzXSkKQEAgLTg2LDggKzg2LDggQEAgdm9pZCBjb21wdXRl
TUQ1SGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hh
ciBoYXNoU3RyaW4KICAgICAgICAgaGFzaFs4XSwgaGFzaFs5XSwgaGFzaFsxMF0sIGhhc2hbMTFd
LCBoYXNoWzEyXSwgaGFzaFsxM10sIGhhc2hbMTRdLCBoYXNoWzE1XSk7CiB9CiAKLXZvaWQgZHVt
cEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250ZXh0KQordm9pZCBkdW1wQml0bWFwKEJpdG1hcENv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogewogICAgIGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dC0+Y2Fpcm9Db250ZXh0KCkp
OwotICAgIHByaW50UE5HKHN1cmZhY2UpOworICAgIHByaW50UE5HKHN1cmZhY2UsIGNoZWNrc3Vt
KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBv
cnRDRy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3Bw
CmluZGV4IDVjZjMyZjEzZGFmYjZhOTA5YmYwODU4Mzc3YzU2MDJkYWQ4NzNiNDguLmJmNTliMDNl
YzNmMzAyNzljM2JhMjc5ZTM0ZmUyMWY1NzQ1N2MyZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcApAQCAtNTUsNyArNTUsNyBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNU
UigicHVibGljLnBuZyIpOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHByaW50UE5HKENHSW1hZ2VS
ZWYgaW1hZ2UpCitzdGF0aWMgdm9pZCBwcmludFBORyhDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBj
aGFyKiBjaGVja3N1bSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VE
YXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwogICAgIFJldGFpblB0cjxD
R0ltYWdlRGVzdGluYXRpb25SZWY+IGltYWdlRGVzdChBZG9wdENGLCBDR0ltYWdlRGVzdGluYXRp
b25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDApKTsKQEAg
LTY1LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRQTkcoQ0dJbWFnZVJlZiBpbWFnZSkKICAg
ICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIoaW1hZ2VEYXRhLmdldCgpKTsK
ICAgICBDRkluZGV4IGRhdGFMZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoaW1hZ2VEYXRhLmdldCgp
KTsKIAotICAgIHByaW50UE5HKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRh
KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhTGVuZ3RoKSk7CisgICAgcHJpbnRQTkcoc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRh
dGFMZW5ndGgpLCBjaGVja3N1bSk7CiB9CiAKIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdGb3JC
aXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmluZ1szM10p
CkBAIC0xMDYsOCArMTA2LDggQEAgdm9pZCBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckJpdG1hcENv
bnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNoU3RyaW4KICAgICAgICAgc25w
cmludGYoaGFzaFN0cmluZywgMzMsICIlcyUwMngiLCBoYXNoU3RyaW5nLCBoYXNoW2ldKTsKIH0K
IAotdm9pZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQqIGNvbnRleHQpCit2b2lkIGR1bXBCaXRt
YXAoQml0bWFwQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7CiAgICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQtPmNnQ29udGV4dCgpKSk7Ci0gICAgcHJpbnRQTkcoaW1hZ2UuZ2V0KCkp
OworICAgIHByaW50UE5HKGltYWdlLmdldCgpLCBjaGVja3N1bSk7CiB9CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagppbmRleCAzOWQyZGYyMjdkZWU4
NjliNmU1Yjg3YmMzYWRjMmMyOGRhZDZlYmVmLi44MDM5MTdhZWU4ZmU2NDE5MDUzZjk2YmJjMGFj
NzM4Nzg0ZDUyZTAyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUudmNwcm9qCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS52Y3Byb2oKQEAgLTUxNSw2ICs1MTUsMTQgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8Rmls
ZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxDeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXEN5Y2xpY1JlZHVuZGFuY3lD
aGVjay5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii5cRHJh
Z2dpbmdJbmZvLmgiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL0dOVW1ha2Vm
aWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggNmRlMWFmNTlhZDM0NzA0ZTk3ZGY2
NGY3NTAyOGQ5NjJjYjEwMDE1Yy4uNTMzMmUxYTE2N2E0NjlhMjk1MWFiYTU3Mzk4N2Y4MzM3MzJi
MjMxYSAxMDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFr
ZWZpbGUuYW0KQEAgLTU2LDYgKzU2LDggQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNF
UyA9IFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCBcCiAJVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIFwKKwlUb29scy9EdW1w
UmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwIFwKKwlUb29scy9EdW1wUmVuZGVy
VHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmggXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuaCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88698</attachid>
            <date>2011-04-07 14:28:24 -0700</date>
            <delta_ts>2011-04-07 15:02:52 -0700</delta_ts>
            <desc>update changelog</desc>
            <filename>bug-57871-20110407142823.patch</filename>
            <type>text/plain</type>
            <size>20120</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxMjAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4NDU4M2U3NGFjZjAyMzc1MmYyYjNkOWUxM2U1ZDJkODAz
YzIzZDJhLi44ZWRmNmI5NDg4NTc5MjFkNjczYWNjNTI4ZTIwMjBlMmE3YzlmZWZiIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzgg
QEAKIDIwMTEtMDQtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgRFJUIHRvIGVt
YmVkIGNoZWNrc3VtcyBpbiBwbmcgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3ODcxCisKKyAgICAgICAgV2UgaW5zZXJ0IHRoZSBieXRlcyBm
b3IgdGhlIGNvbW1lbnQgaW4gcHJpbnRQTkcgcmF0aGVyIHRoYW4gYXQgZW5jb2RlCisgICAgICAg
IHRpbWUgYmVjYXVzZSBlYWNoIHBsYXRmb3JtIGRvZXMgaXRzIG93biBQTkcgZW5jb2RpbmcgKGVp
dGhlciB1c2luZyBDRworICAgICAgICBvciBjYWlybykuICBQdXR0aW5nIHRoaXMgaW4gcHJpbmdQ
TkcgYXZvaWRzIGhhdmluZyB0byBkdXBsaWNhdGUgdGhpcworICAgICAgICBjb2RlLCBhbHRob3Vn
aCBpdCdzIG5vdCBhcyBjbGVhbiBhcyBkb2luZyBpdCBhdCBlbmNvZGluZyB0aW1lLgorCisgICAg
ICAgIFdlIGluc2VydCB0aGUgY29tbWVudCByaWdodCBhZnRlciB0aGUgSUhEUiBjaHVuayBvZiB0
aGUgUE5HLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1
bmRhbmN5Q2hlY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKG1ha2VDcmNUYWJsZSk6IFBvcnRlZCBm
cm9tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9wbmdsaWIuanMKKyAg
ICAgICAgKGNvbXB1dGVDcmMpOiBQb3J0ZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQ3ljbGlj
UmVkdW5kYW5jeUNoZWNrLmg6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BpeGVs
RHVtcFN1cHBvcnQuY3BwOgorICAgICAgICAoZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVX
aXRoRXhwZWN0ZWQpOgorICAgICAgICAoY29udmVydENoZWNrc3VtVG9QTkdDb21tZW50KTogR2Vu
ZXJhdGUgdGhlIGJ5dGVzIHRvIGluc2VydC4KKyAgICAgICAgKHByaW50UE5HKTogSW5zZXJ0IHRo
ZSBwbmcgY29tbWVudCBiZWZvcmUgdGhlIGZpcnN0IElEQVQgc2VjdGlvbi4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcDoKKyAgICAgICAgKHByaW50UE5HKToK
KyAgICAgICAgKGR1bXBCaXRtYXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVs
RHVtcFN1cHBvcnRDRy5jcHA6CisgICAgICAgIChwcmludFBORyk6CisgICAgICAgIChkdW1wQml0
bWFwKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9q
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCisyMDExLTA0LTA2ICBUb255IENoYW5nICA8
dG9ueUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCiAK
ICAgICAgICAgdGVhY2ggcnVuLXdlYmtpdC10ZXN0cyB0byByZWFkIGNoZWNrc3VtcyBmcm9tIHBu
ZyBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5j
eUNoZWNrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVjay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjkyOTFlOWE3NTgxOWJlMDU3ZWYzYjY2NzRjMjVlYWNmODE0YTRlYgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lD
aGVjay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgUm9i
ZXJ0IEVpc2VsZSA8cm9iZXJ0QHhhcmcub3JnPiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCIKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworc3RhdGljIHZvaWQgbWFrZUNyY1RhYmxlKHVuc2lnbmVkIGxvbmcg
Y3JjVGFibGVbMjU2XSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCAyNTY7
IGkrKykgeworICAgICAgICB1bnNpZ25lZCBsb25nIGMgPSBpOworICAgICAgICBmb3IgKGludCBr
ID0gMDsgayA8IDg7IGsrKykgeworICAgICAgICAgICAgaWYgKGMgJiAxKQorICAgICAgICAgICAg
ICAgIGMgPSAtMzA2Njc0OTEyIF4gKChjID4+IDEpICYgMHg3ZmZmZmZmZik7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgYyA9IGMgPj4gMTsKKyAgICAgICAgfQorICAgICAgICBj
cmNUYWJsZVtpXSA9IGM7CisgICAgfQorfQorCit1bnNpZ25lZCBsb25nIGNvbXB1dGVDcmMoY29u
c3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBidWZmZXIpCit7CisgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgY3JjVGFibGVbMjU2XTsKKyAgICBzdGF0aWMgYm9vbCBjcmNUYWJsZUNvbXB1dGVkID0g
ZmFsc2U7CisgICAgaWYgKCFjcmNUYWJsZUNvbXB1dGVkKSB7CisgICAgICAgIG1ha2VDcmNUYWJs
ZShjcmNUYWJsZSk7CisgICAgICAgIGNyY1RhYmxlQ29tcHV0ZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGxvbmcgY3JjID0gMHhmZmZmZmZmZkw7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBidWZmZXIuc2l6ZSgpOyArK2kpCisgICAgICAgIGNyYyA9IGNyY1RhYmxlWyhjcmMg
XiBidWZmZXJbaV0pICYgMHhmZl0gXiAoKGNyYyA+PiA4KSAmIDB4MDBmZmZmZmZMKTsKKyAgICBy
ZXR1cm4gY3JjIF4gMHhmZmZmZmZmZkw7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVjay5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQ3lj
bGljUmVkdW5kYW5jeUNoZWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNhNzM5ZGM3NTkyYTlkODk1YmE3ZWQ0
ZjYyNzZjMGQzYTM2OWUzMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0N5Y2xpY1JlZHVuZGFuY3lDaGVjay5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN5Y2xpY1Jl
ZHVuZGFuY3lDaGVja19oCisjZGVmaW5lIEN5Y2xpY1JlZHVuZGFuY3lDaGVja19oCisKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK3Vuc2lnbmVkIGxvbmcgY29tcHV0ZUNyYyhjb25zdCBWZWN0
b3I8dW5zaWduZWQgY2hhcj4mKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA3Y2M0YzljOTQwZTQ0OTdlZWY3NGQ5NTAxNWQ1MWY5MzNlNTg0ZmY2Li4yZjg3NjUxYWI0
NjAwZjNkNjcxOTM3MjI1YTg1ZGE3OTA0MGEyYmFmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTU5LDYgKzU5LDggQEAKIAkJNDQzNzczMEYxMjVDQkM0RDAwQUFFMDJDIC8qIFdlYkFy
Y2hpdmVEdW1wU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRBOTk3ODIwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9y
dC5oICovOyB9OwogCQk1MTg1RjZCMjEwNzE0RTA3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRl
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NUY2
OUYxMDcxNEE1NzAwN0FBMzkzIC8qIEhpc3RvcnlEZWxlZ2F0ZS5tbSAqLzsgfTsKIAkJNTE4NUY2
QjMxMDcxNEUxMjAwN0FBMzkzIC8qIEhpc3RvcnlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NUY2OUUxMDcxNEE1NzAwN0FBMzkzIC8q
IEhpc3RvcnlEZWxlZ2F0ZS5oICovOyB9OworCQk1M0NCQjgzMjEzNEU0MkYzMDAxQ0U2QTQgLyog
Q3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzQ0JCODMwMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRh
bmN5Q2hlY2suY3BwICovOyB9OworCQk1M0NCQjgzMzEzNEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGlj
UmVkdW5kYW5jeUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0NCQjgzMTEzNEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGljUmVkdW5kYW5jeUNoZWNr
LmggKi87IH07CiAJCTVEQjlBQzk3MEY3MjJDMzYwMDY4NDY0MSAvKiBBSEVNX19fXy5UVEYgaW4g
Q29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBN0Yx
MEMyMENCM0MxMDMwMDAzQkRDOSAvKiBBSEVNX19fXy5UVEYgKi87IH07CiAJCTVEQjlBQzk4MEY3
MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiBpbiBDb3B5IEZvbnQg
RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzEwREFDM0NC
NjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmICovOyB9OwogCQk1REI5QUM5
OTBGNzIyQzM2MDA2ODQ2NDEgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYgaW4gQ29weSBG
b250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTcyMERB
QzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiAqLzsgfTsKQEAgLTI0
Myw2ICsyNDUsOCBAQAogCQk0NEE5OTc4MzBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFy
Y2hpdmVEdW1wU3VwcG9ydC5jcHA7IHBhdGggPSBjZi9XZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTg1RjY5RTEwNzE0QTU3MDA3QUEzOTMg
LyogSGlzdG9yeURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhp
c3RvcnlEZWxlZ2F0ZS5oOyBwYXRoID0gbWFjL0hpc3RvcnlEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTg1RjY5RjEwNzE0QTU3MDA3QUEzOTMgLyogSGlzdG9yeURl
bGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IG5hbWUgPSBIaXN0b3J5
RGVsZWdhdGUubW07IHBhdGggPSBtYWMvSGlzdG9yeURlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1M0NCQjgzMDEzNEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGljUmVkdW5k
YW5jeUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN5Y2xp
Y1JlZHVuZGFuY3lDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQ0JC
ODMxMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjVFMkM2MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1
bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQaXhl
bER1bXBTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzNTQzNUYw
M0Q3NTUwMjAwODYzNUNFIC8qIFdlYktpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IFdl
YktpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkz
M0JGNUE5MEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYWluVGV4dENvbnRyb2xsZXIuaDsgcGF0aCA9IG1h
Yy9QbGFpblRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
ODEsNiArNTg1LDggQEAKIAkJQkNCMjg0ODcwQ0ZBODFFRDAwN0U1MzNFIC8qIFBpeGVsRHVtcCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNDQkI4MzAx
MzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAgKi8sCisJCQkJNTND
QkI4MzExMzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oICovLAogCQkJ
CUJDQjI4NEYzMENGQTg0RjIwMDdFNTMzRSAvKiBJbWFnZURpZmZDRy5jcHAgKi8sCiAJCQkJODQ2
NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwICovLAogCQkJCUJD
QjI4NDhBMENGQTgyMEYwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0LmggKi8sCkBAIC02MTEs
NiArNjE3LDcgQEAKIAkJCQlCQzBFMjRFMDBFMkQ5NDUxMDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMThCMzgwQzlCMDIxOTAwMTE0MzY5
IC8qIEFwcGxlU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThCOTFCRkYw
Q0Y1MjJCNDAwOEY5MUZGIC8qIENoZWNrZWRNYWxsb2MuaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
Q0JCODMzMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQTE4QjdBMEM5QjA4RjEwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZURy
YWdnaW5nSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThENzlDRUEwRkMyOEIyQzAwNEFDOEZF
IC8qIER1bXBSZW5kZXJUcmVlRmlsZURyYWdnaW5nU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0ExOEMwQjBDOUI1OUVGMDAxMTQzNjkgLyogRHVtcFJlbmRlclRyZWVNYWMuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzk5LDYgKzgwNiw3IEBACiAJCQkJQkMwRTI2MTUwRTJEQTRDNjAwMUI2QkMy
IC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0Ex
OEIzOTBDOUIwMjE5MDAxMTQzNjkgLyogQXBwbGVTY3JpcHRDb250cm9sbGVyLm0gaW4gU291cmNl
cyAqLywKIAkJCQlBOEI5MUJGRDBDRjUyMkI0MDA4RjkxRkYgLyogQ2hlY2tlZE1hbGxvYy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1M0NCQjgzMjEzNEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGljUmVk
dW5kYW5jeUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QzQ3MEM5QjVCOTQwMDEx
NDM2OSAvKiBEdW1wUmVuZGVyVHJlZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjdCMEM5
QjA4RjEwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4RDc5Q0VCMEZDMjhCMkMwMDRBQzhGRSAvKiBEdW1wUmVuZGVyVHJlZUZpbGVE
cmFnZ2luZ1NvdXJjZS5tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVs
RHVtcFN1cHBvcnQuY3BwCmluZGV4IDM1MmVhYWE2YjIzMjYzN2ZlYjY3ZmRlZjRmYThjNmE3MDI5
MWFlY2YuLjlhMTBjNTMzODUxODVlZjBkNmZlMGFhZTQ2ZWUyOTIxMjcyN2E3ZWYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCkBAIC0yOSwxMSArMjksMTMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0LmgiCiAKKyNp
bmNsdWRlICJDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8Y3N0ZGlv
PgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgIlBp
eGVsRHVtcFN1cHBvcnRDRy5oIgpAQCAtNjksMTYgKzcxLDYwIEBAIHZvaWQgZHVtcFdlYlZpZXdB
c1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVk
SGFzaCkKICAgICB9CiAgICAgCiAgICAgaWYgKGR1bXBJbWFnZSkKLSAgICAgIGR1bXBCaXRtYXAo
Y29udGV4dC5nZXQoKSk7CisgICAgICBkdW1wQml0bWFwKGNvbnRleHQuZ2V0KCksIGFjdHVhbEhh
c2gpOwogfQogCi12b2lkIHByaW50UE5HKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0
IHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGljIHZvaWQgYXBwZW5kSW50VG9WZWN0b3IoaW50IG51
bWJlciwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiB2ZWN0b3IpCiB7CisgICAgc2l6ZV90IG9mZnNl
dCA9IHZlY3Rvci5zaXplKCk7CisgICAgdmVjdG9yLmdyb3cob2Zmc2V0ICsgNCk7CisgICAgdmVj
dG9yW29mZnNldF0gPSAoKG51bWJlciA+PiAyNCkgJiAweGZmKTsKKyAgICB2ZWN0b3Jbb2Zmc2V0
ICsgMV0gPSAoKG51bWJlciA+PiAxNikgJiAweGZmKTsKKyAgICB2ZWN0b3Jbb2Zmc2V0ICsgMl0g
PSAoKG51bWJlciA+PiA4KSAmIDB4ZmYpOworICAgIHZlY3RvcltvZmZzZXQgKyAzXSA9IChudW1i
ZXIgJiAweGZmKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydENoZWNrc3VtVG9QTkdDb21tZW50
KGNvbnN0IGNoYXIqIGNoZWNrc3VtLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIGJ5dGVzVG9BZGQp
Cit7CisgICAgLy8gQ2h1bmtzIG9mIFBORyBmaWxlcyBhcmUgPGxlbmd0aD4sIDx0eXBlPiwgPGRh
dGE+LCA8Y3JjPi4KKyAgICBzdGF0aWMgY29uc3QgY2hhciB0ZXh0Q29tbWVudFByZWZpeFtdID0g
Ilx4MDBceDAwXHgwMFx4Mjl0RVh0Y2hlY2tzdW1ceDAwIjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHByZWZpeExlbmd0aCA9IHNpemVvZih0ZXh0Q29tbWVudFByZWZpeCkgLSAxOworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY2hlY2tzdW1MZW5ndGggPSAzMjsKKworICAgIGJ5dGVzVG9BZGQu
YXBwZW5kKHRleHRDb21tZW50UHJlZml4LCBwcmVmaXhMZW5ndGgpOworICAgIGJ5dGVzVG9BZGQu
YXBwZW5kKGNoZWNrc3VtLCBjaGVja3N1bUxlbmd0aCk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gZGF0YVRvQ3JjOworICAgIGRhdGFUb0NyYy5hcHBlbmQodGV4dENvbW1lbnRQcmVmaXgg
KyA0LCBwcmVmaXhMZW5ndGggLSA0KTsgLy8gRG9uJ3QgaW5jbHVkZSB0aGUgY2h1bmsgbGVuZ3Ro
IGluIHRoZSBjcmMuCisgICAgZGF0YVRvQ3JjLmFwcGVuZChjaGVja3N1bSwgY2hlY2tzdW1MZW5n
dGgpOworICAgIHVuc2lnbmVkIGxvbmcgY3JjMzIgPSBjb21wdXRlQ3JjKGRhdGFUb0NyYyk7CisK
KyAgICBhcHBlbmRJbnRUb1ZlY3RvcihjcmMzMiwgYnl0ZXNUb0FkZCk7Cit9CisKK3N0YXRpYyBz
aXplX3Qgb2Zmc2V0QWZ0ZXJJSERSQ2h1bmsoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29u
c3Qgc2l6ZV90IGRhdGFMZW5ndGgpCit7CisgICAgY29uc3QgaW50IHBuZ0hlYWRlckxlbmd0aCA9
IDg7CisgICAgY29uc3QgaW50IHBuZ0lIRFJDaHVua0xlbmd0aCA9IDI1OyAvLyBjaHVuayBsZW5n
dGggKyAiSUhEUiIgKyAxMyBieXRlcyBvZiBkYXRhICsgY2hlY2tzdW0KKyAgICByZXR1cm4gcG5n
SGVhZGVyTGVuZ3RoICsgcG5nSUhEUkNodW5rTGVuZ3RoOworfQorCit2b2lkIHByaW50UE5HKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoLCBjb25zdCBj
aGFyKiBjaGVja3N1bSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gYnl0ZXNUb0FkZDsK
KyAgICBjb252ZXJ0Q2hlY2tzdW1Ub1BOR0NvbW1lbnQoY2hlY2tzdW0sIGJ5dGVzVG9BZGQpOwor
CiAgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6ICVzXG4iLCAiaW1hZ2UvcG5nIik7Ci0gICAgcHJp
bnRmKCJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihk
YXRhTGVuZ3RoKSk7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihkYXRhTGVuZ3RoICsgYnl0ZXNUb0FkZC5zaXplKCkpKTsKKwor
ICAgIHNpemVfdCBpbnNlcnRPZmZzZXQgPSBvZmZzZXRBZnRlcklIRFJDaHVuayhkYXRhLCBkYXRh
TGVuZ3RoKTsKKworICAgIGZ3cml0ZShkYXRhLCAxLCBpbnNlcnRPZmZzZXQsIHN0ZG91dCk7Cisg
ICAgZndyaXRlKGJ5dGVzVG9BZGQuZGF0YSgpLCAxLCBieXRlc1RvQWRkLnNpemUoKSwgc3Rkb3V0
KTsKIAogICAgIGNvbnN0IHNpemVfdCBieXRlc1RvV3JpdGVJbk9uZUNodW5rID0gMSA8PCAxNTsK
LSAgICBzaXplX3QgZGF0YVJlbWFpbmluZ1RvV3JpdGUgPSBkYXRhTGVuZ3RoOworICAgIGRhdGEg
Kz0gaW5zZXJ0T2Zmc2V0OworICAgIHNpemVfdCBkYXRhUmVtYWluaW5nVG9Xcml0ZSA9IGRhdGFM
ZW5ndGggLSBpbnNlcnRPZmZzZXQ7CiAgICAgd2hpbGUgKGRhdGFSZW1haW5pbmdUb1dyaXRlKSB7
CiAgICAgICAgIHNpemVfdCBieXRlc1RvV3JpdGVJblRoaXNDaHVuayA9IHN0ZDo6bWluKGRhdGFS
ZW1haW5pbmdUb1dyaXRlLCBieXRlc1RvV3JpdGVJbk9uZUNodW5rKTsKICAgICAgICAgc2l6ZV90
IGJ5dGVzV3JpdHRlbiA9IGZ3cml0ZShkYXRhLCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywg
c3Rkb3V0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBv
cnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuaAppbmRleCBlMTcy
YTgzMTMxYWRkNjAyODc0N2EyYjJmZDFhNjBiOTliMmQyNGZjLi44N2U2NDAyNDM1NjY1NjNlMmE4
NzM2YTBhN2Q2MTgxNjc4Mzk1Mjc5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9Q
aXhlbER1bXBTdXBwb3J0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3Vw
cG9ydC5oCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIEJpdG1hcENvbnRleHQ7CiB2b2lkIGNvbXB1
dGVNRDVIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiwgY2hhciBoYXNo
U3RyaW5nWzMzXSk7CiBQYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZVBhZ2VkQml0bWFw
Q29udGV4dCgpOwogUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0
RnJvbVdlYlZpZXcoYm9vbCBvbnNjcmVlbiwgYm9vbCBpbmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wg
c3dlZXBIb3Jpem9udGFsbHksIGJvb2wgZHJhd1NlbGVjdGlvblJlY3QpOwotdm9pZCBkdW1wQml0
bWFwKEJpdG1hcENvbnRleHQqKTsKK3ZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiwgY29u
c3QgY2hhciogY2hlY2tzdW0pOwogdm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdp
dGhFeHBlY3RlZChjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRIYXNoKTsKLXZvaWQgcHJpbnRQ
TkcoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFMZW5ndGgpOwor
dm9pZCBwcmludFBORyhjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBzaXplX3QgZGF0
YUxlbmd0aCwgY29uc3QgY2hhciogY2hlY2tzdW0pOwogCiAjaWYgUExBVEZPUk0oTUFDKQogCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fp
cm8uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJv
LmNwcAppbmRleCA3ZGUwMTlkZjBhODUyZjg3MTNkM2E3ZWQ1ZWMxNDU5MTA5NWZhY2I3Li5jMTBh
M2E3ZGNjY2ZhYTkxMDBjMDg5Mzk1OWQ1NzFiNjZjZGEzNTg2IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAgc3RhdGljIGNhaXJvX3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogY2xvc3Vy
ZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW4KICAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50UE5HKGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UpCitzdGF0aWMgdm9pZCBwcmludFBORyhjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBj
aGFyKiBjaGVja3N1bSkKIHsKICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcGl4ZWxEYXRhOwog
ICAgIC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KQEAgLTU4LDcgKzU4
LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRQTkcoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKICAgICBj
b25zdCBzaXplX3QgZGF0YUxlbmd0aCA9IHBpeGVsRGF0YS5zaXplKCk7CiAgICAgY29uc3QgdW5z
aWduZWQgY2hhciogZGF0YSA9IHBpeGVsRGF0YS5kYXRhKCk7CiAKLSAgICBwcmludFBORyhkYXRh
LCBkYXRhTGVuZ3RoKTsKKyAgICBwcmludFBORyhkYXRhLCBkYXRhTGVuZ3RoLCBjaGVja3N1bSk7
CiB9CiAKIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENv
bnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmluZ1szM10pCkBAIC04Niw4ICs4Niw4IEBAIHZv
aWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNv
bnRleHQsIGNoYXIgaGFzaFN0cmluCiAgICAgICAgIGhhc2hbOF0sIGhhc2hbOV0sIGhhc2hbMTBd
LCBoYXNoWzExXSwgaGFzaFsxMl0sIGhhc2hbMTNdLCBoYXNoWzE0XSwgaGFzaFsxNV0pOwogfQog
Ci12b2lkIGR1bXBCaXRtYXAoQml0bWFwQ29udGV4dCogY29udGV4dCkKK3ZvaWQgZHVtcEJpdG1h
cChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKICAgICBj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQtPmNhaXJv
Q29udGV4dCgpKTsKLSAgICBwcmludFBORyhzdXJmYWNlKTsKKyAgICBwcmludFBORyhzdXJmYWNl
LCBjaGVja3N1bSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhl
bER1bXBTdXBwb3J0Q0cuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcAppbmRleCA1Y2YzMmYxM2RhZmI2YTkwOWJmMDg1ODM3N2M1NjAyZGFkODczYjQ4
Li5iZjU5YjAzZWMzZjMwMjc5YzNiYTI3OWUzNGZlMjFmNTc0NTdjMmRhIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKQEAgLTU1LDcgKzU1LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBl
UE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBwcmludFBO
RyhDR0ltYWdlUmVmIGltYWdlKQorc3RhdGljIHZvaWQgcHJpbnRQTkcoQ0dJbWFnZVJlZiBpbWFn
ZSwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFS
ZWY+IGltYWdlRGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBpbWFnZURlc3QoQWRvcHRDRiwgQ0dJbWFn
ZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAx
LCAwKSk7CkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyB2b2lkIHByaW50UE5HKENHSW1hZ2VSZWYg
aW1hZ2UpCiAgICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKGltYWdlRGF0
YS5nZXQoKSk7CiAgICAgQ0ZJbmRleCBkYXRhTGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGltYWdl
RGF0YS5nZXQoKSk7CiAKLSAgICBwcmludFBORyhzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oZGF0YSksIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YUxlbmd0aCkpOworICAgIHByaW50
UE5HKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihkYXRhTGVuZ3RoKSwgY2hlY2tzdW0pOwogfQogCiB2b2lkIGNvbXB1dGVNRDVIYXNo
U3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hT
dHJpbmdbMzNdKQpAQCAtMTA2LDggKzEwNiw4IEBAIHZvaWQgY29tcHV0ZU1ENUhhc2hTdHJpbmdG
b3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmluCiAg
ICAgICAgIHNucHJpbnRmKGhhc2hTdHJpbmcsIDMzLCAiJXMlMDJ4IiwgaGFzaFN0cmluZywgaGFz
aFtpXSk7CiB9CiAKLXZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250ZXh0KQordm9p
ZCBkdW1wQml0bWFwKEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3Vt
KQogewogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0LT5jZ0NvbnRleHQoKSkpOwotICAgIHByaW50UE5HKGlt
YWdlLmdldCgpKTsKKyAgICBwcmludFBORyhpbWFnZS5nZXQoKSwgY2hlY2tzdW0pOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvaiBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKaW5kZXggMzlk
MmRmMjI3ZGVlODY5YjZlNWI4N2JjM2FkYzJjMjhkYWQ2ZWJlZi4uODAzOTE3YWVlOGZlNjQxOTA1
M2Y5NmJiYzBhYzczODc4NGQ1MmUwMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RHVtcFJlbmRlclRyZWUudmNwcm9qCkBAIC01MTUsNiArNTE1LDE0IEBACiAJCQk+CiAJCTwvRmls
ZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNw
cCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxDeWNsaWNS
ZWR1bmRhbmN5Q2hlY2suaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQ
YXRoPSIuXERyYWdnaW5nSW5mby5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Ub29s
cy9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDZkZTFhZjU5YWQz
NDcwNGU5N2RmNjRmNzUwMjhkOTYyY2IxMDAxNWMuLjUzMzJlMWExNjdhNDY5YTI5NTFhYmE1NzM5
ODdmODMzNzMyYjIzMWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rv
b2xzL0dOVW1ha2VmaWxlLmFtCkBAIC01Niw2ICs1Niw4IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJU
cmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBcCisJ
VG9vbHMvRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcCBcCisJVG9vbHMv
RHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmggXAogCVRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0dDQ29udHJvbGxlci5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmggXAo=
</data>
<flag name="review"
          id="81248"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>