<?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>28308</bug_id>
          
          <creation_ts>2009-08-14 09:59:46 -0700</creation_ts>
          <short_desc>allow down-sampling images during decoding</short_desc>
          <delta_ts>2009-08-28 15:09:43 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23154</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>manyoso</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>140254</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 09:59:46 -0700</bug_when>
    <thetext>separated from bug 27561</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140257</commentid>
    <comment_count>1</comment_count>
      <attachid>34851</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 10:06:44 -0700</bug_when>
    <thetext>Created attachment 34851
the patch

only JPEG and PNG decoders are modified to support this feature. Other decoders just ignore it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140267</commentid>
    <comment_count>2</comment_count>
      <attachid>34851</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-14 10:51:26 -0700</bug_when>
    <thetext>Comment on attachment 34851
the patch

Looking much, much better!  A few issues:

&gt; +#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
&gt; +        if (m_decoder) {
&gt; +#   ifdef IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS
&gt; +            m_decoder-&gt;setMaxNumPixels(IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS);
&gt; +#   else
&gt; +            m_decoder-&gt;setMaxNumPixels(1024 * 1024);
&gt; +#   endif
&gt; +        }
&gt; +#endif
&gt; +    }

Shift this block down below to the next &apos;if (m_decoder)&apos; and you eliminate an extra conditional and a nested one at that.  Also, there is weird indenting on the &apos;#    ifdef&apos; Please remove.

&gt; +namespace {
&gt; +	enum MatchType{
&gt; +		Exact,
&gt; +		UpperBound,
&gt; +		LowerBound
&gt; +	};
&gt; +}

More weird indentation.

&gt; +template &lt;MatchType type&gt; static int getScaledValue(const Vector&lt;int&gt;&amp; scaledValues, int orig, int searchStart)
&gt; +{
&gt; +	int size = scaledValues.size();
&gt; +    const int* dataStart = scaledValues.data();
&gt; +    const int* dataEnd = dataStart + size;
&gt; +    const int* pos = std::lower_bound(dataStart + searchStart, dataEnd, orig);
&gt; +    switch (type) {
&gt; +        case Exact:
&gt; +            return pos != dataEnd &amp;&amp; *pos == orig ? pos - dataStart : -1;
&gt; +        case LowerBound:
&gt; +            return pos != dataEnd &amp;&amp; *pos == orig ? pos - dataStart : pos - dataStart - 1;
&gt; +        case UpperBound:
&gt; +        default:
&gt; +            return pos != dataEnd ? pos - dataStart : -1;
&gt; +    }
&gt; +}

More weird indentation and the case labels should line up with switch statement. Please check with check-webkit-style.  Why is this templated?

&gt; +int ImageDecoder::upperBoundScaledX(int origX, int searchStart)
&gt; +{
&gt; +	return getScaledValue&lt;UpperBound&gt;(m_scaledColumns, origX, searchStart);
&gt; +}

Is this tabbed indentation? Please remove all tabs and check thoroughly for coding style.

&gt; +        // ENABLE(IMAGE_DECODER_DOWN_SAMPLING) allows image decoders writedirectly to scaled output buffers

Typo. &quot;allows image decoders to write directly to...&quot;

&gt; +        // by down sampling. Call setMaxNumPixels() to specify the biggest size that decoded images
&gt; +        // can have. Image decoders will deflate those images that are bigger than m_maxNumPixels.
&gt; +        // (Not supported by all image decoders yet)

&gt; -static void convertCMYKToRGBA(RGBA32Buffer&amp; dest, JSAMPROW src, jpeg_decompress_struct* info)
&gt; +static void convertCMYKToRGBA(RGBA32Buffer&amp; dest, int destY, JSAMPROW src, int srcWidth
&gt; +#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
&gt; +                              , bool scaled, const Vector&lt;int&gt;&amp; scaledColumns
&gt; +#endif
&gt; +                              )
&gt;  {
&gt; -    ASSERT(info-&gt;out_color_space == JCS_CMYK);

Why do you remove this assert and change the behavior of this method even when IMAGE_DECODER_DOWN_SAMPLING is disabled?

&gt; @@ -491,21 +507,33 @@ static void convertCMYKToRGBA(RGBA32Buffer&amp; dest, JSAMPROW src, jpeg_decompress_
&gt;  
&gt;          // read_scanlines has increased the scanline counter, so we
&gt;          // actually mean the previous one.
&gt; -        dest.setRGBA(x, info-&gt;output_scanline - 1, c * k / 255, m * k / 255, y * k / 255, 0xFF);
&gt; +        dest.setRGBA(x, destY, c * k / 255, m * k / 255, y * k / 255, 0xFF);

Same question as above and repeated for hunks below.

&gt;      while (info-&gt;output_scanline &lt; info-&gt;output_height) {
&gt;          /* Request one scanline.  Returns 0 or 1 scanlines. */
&gt; -        if (jpeg_read_scanlines(info, samples, 1) != 1)
&gt; +        int sourceY = info-&gt;output_scanline;
&gt; +        int sourceRows = jpeg_read_scanlines(info, samples, 1);
&gt; +        if (sourceRows != 1) {
&gt; +            if (sourceRows != 0)
&gt; +                m_failed = true;
&gt;              return false;
&gt; +        }

Another change that is not guarded by ENABLE(IMAGE_DECODER_DOWN_SAMPLING)

Each of these changes should be described.  I simply don&apos;t have context to understand them.

&gt; +#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
&gt; +        bool setSize(int width, int height) {

Brace goes on next line.

I&apos;ll stop there and say that this still needs coding style cleanups.  And if at all possible the patch should have no behavior changes for when ENABLE(IMAGE_DECODER_DOWN_SAMPLING) is false.  Any other changes should either have some explanation or broken out into separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140276</commentid>
    <comment_count>3</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 11:08:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34851 [details])
&gt; Looking much, much better!  A few issues:
 
&gt; Shift this block down below to the next &apos;if (m_decoder)&apos; and you eliminate an
&gt; extra conditional and a nested one at that.

They are different. this &apos;if (m_decoder)&apos; is reached only for the first time, where the below one is reached every time.

&gt; Why is this templated?
To be faster. template argument is kind of const values.
&gt; 
&gt; Why do you remove this assert and change the behavior of this method even when
&gt; IMAGE_DECODER_DOWN_SAMPLING is disabled?

info becomes useless except in this ASSERT. I removed &apos;info&apos; argument. ASSERT is not necessary because the caller takes care of that.

&gt; 
&gt; &gt;      while (info-&gt;output_scanline &lt; info-&gt;output_height) {
&gt; &gt;          /* Request one scanline.  Returns 0 or 1 scanlines. */
&gt; &gt; -        if (jpeg_read_scanlines(info, samples, 1) != 1)
&gt; &gt; +        int sourceY = info-&gt;output_scanline;
&gt; &gt; +        int sourceRows = jpeg_read_scanlines(info, samples, 1);
&gt; &gt; +        if (sourceRows != 1) {
&gt; &gt; +            if (sourceRows != 0)
&gt; &gt; +                m_failed = true;
&gt; &gt;              return false;
&gt; &gt; +        }
&gt; 
&gt; Another change that is not guarded by ENABLE(IMAGE_DECODER_DOWN_SAMPLING)

I can remove the sourceRows change. sourceY is used to record the current row. With this change, there can be more code shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140281</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-14 11:23:38 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 34851 [details] [details])
&gt; &gt; Looking much, much better!  A few issues:
&gt; 
&gt; &gt; Shift this block down below to the next &apos;if (m_decoder)&apos; and you eliminate an
&gt; &gt; extra conditional and a nested one at that.
&gt; 
&gt; They are different. this &apos;if (m_decoder)&apos; is reached only for the first time,
&gt; where the below one is reached every time.

Ahh, the wonders of reading diffs.  Sorry!

&gt; &gt; Why is this templated?
&gt; To be faster. template argument is kind of const values.

Ok.

&gt; &gt; Why do you remove this assert and change the behavior of this method even when
&gt; &gt; IMAGE_DECODER_DOWN_SAMPLING is disabled?
&gt; 
&gt; info becomes useless except in this ASSERT. I removed &apos;info&apos; argument. ASSERT
&gt; is not necessary because the caller takes care of that.

Ok, I didn&apos;t see the added ASSERT.
 
&gt; &gt; Another change that is not guarded by ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
&gt; 
&gt; I can remove the sourceRows change. 

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140304</commentid>
    <comment_count>5</comment_count>
      <attachid>34867</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 12:44:23 -0700</bug_when>
    <thetext>Created attachment 34867
modified for coding style...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140358</commentid>
    <comment_count>6</comment_count>
      <attachid>34867</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 15:19:29 -0700</bug_when>
    <thetext>Comment on attachment 34867
modified for coding style...

 126 #ifdef IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS
 127             m_decoder-&gt;setMaxNumPixels(IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS);
 128 #else
 129             m_decoder-&gt;setMaxNumPixels(1024 * 1024);
 130 #endif

Would be better to check #ifdef IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS at the top fo the file, and define IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS to 1024 * 1024 if not defined.

Seems we&apos;d benifit from some nicely named local variables:
47     case Exact:
 48         return pos != dataEnd &amp;&amp; *pos == orig ? pos - dataStart : -1;
 49     case LowerBound:
 50         return pos != dataEnd &amp;&amp; *pos == orig ? pos - dataStart : pos - dataStart - 1;
 51     case UpperBound:
 52     default:
 53         return pos != dataEnd ? pos - dataStart : -1;

Style:
 84     double zoom = 1. /shrink;

I would have made this a static inline function to prevent copy/paste:
94     m_scaledRows.reserveCapacity(height * shrink + 0.5);
 95     for (int scaledY = 0;;) {
 96         int y = scaledY * zoom + 0.5;
 97         if (y &lt; height) {
 98             m_scaledRows.append(y);
 99             ++scaledY;
 100         } else
 101             break;
 102     }

 64             bool good = ImageDecoder::setSize(width, height);

good is not the word you want.  success would be better.  setSizeOK would be another option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140374</commentid>
    <comment_count>7</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 16:09:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 34867 [details])
&gt;  126 #ifdef IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS
&gt;  127            
&gt; m_decoder-&gt;setMaxNumPixels(IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS);
&gt;  128 #else
&gt;  129             m_decoder-&gt;setMaxNumPixels(1024 * 1024);
&gt;  130 #endif
&gt; 
&gt; Would be better to check #ifdef
&gt; IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS at the top fo the file, and
&gt; define IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS to 1024 * 1024 if not
&gt; defined.
&gt; 
&gt; Seems we&apos;d benifit from some nicely named local variables:
&gt; 47     case Exact:
&gt;  48         return pos != dataEnd &amp;&amp; *pos == orig ? pos - dataStart : -1;
&gt;  49     case LowerBound:
&gt;  50         return pos != dataEnd &amp;&amp; *pos == orig ? pos - dataStart : pos -
&gt; dataStart - 1;
&gt;  51     case UpperBound:
&gt;  52     default:
&gt;  53         return pos != dataEnd ? pos - dataStart : -1;
&gt; 
&gt; Style:
&gt;  84     double zoom = 1. /shrink;
&gt; 
&gt; I would have made this a static inline function to prevent copy/paste:

for this 1./x ? I think that&apos;s sick

&gt; 94     m_scaledRows.reserveCapacity(height * shrink + 0.5);
&gt;  95     for (int scaledY = 0;;) {
&gt;  96         int y = scaledY * zoom + 0.5;
&gt;  97         if (y &lt; height) {
&gt;  98             m_scaledRows.append(y);
&gt;  99             ++scaledY;
&gt;  100         } else
&gt;  101             break;
&gt;  102     }
&gt; 
&gt;  64             bool good = ImageDecoder::setSize(width, height);
&gt; 
&gt; good is not the word you want.  success would be better.  setSizeOK would be
&gt; another option.

&quot;good&quot; means the size is good.

r- with all these tiny things?

BTW, after it&apos;s modified to be what you want above, are you going to accept it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140415</commentid>
    <comment_count>8</comment_count>
      <attachid>34884</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 19:50:30 -0700</bug_when>
    <thetext>Created attachment 34884
modified as Eric Seidel requires</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140716</commentid>
    <comment_count>9</comment_count>
      <attachid>34884</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-17 08:23:36 -0700</bug_when>
    <thetext>Comment on attachment 34884
modified as Eric Seidel requires

This looks good, but needs a slight clarification on landing.  Basically, please initialize sourceY after the call to &apos;jpeg_read_scanlines&apos; to &apos;int sourceY = info-&gt;output_scanline - 1;&apos; to emphasize that no behavior change has occurred where the &apos;IMAGE_DECODER_DOWN_SAMPLING&apos; is not enabled.  Also add appropriate comment.  r+ with those changes.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140785</commentid>
    <comment_count>10</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-17 11:41:05 -0700</bug_when>
    <thetext>landed @ r47371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140793</commentid>
    <comment_count>11</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-08-17 12:28:40 -0700</bug_when>
    <thetext>Reopenning, since I reverted the commit, because it broke the GTK+ build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140806</commentid>
    <comment_count>12</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-17 13:15:33 -0700</bug_when>
    <thetext>47381 landed again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143450</commentid>
    <comment_count>13</comment_count>
      <attachid>38751</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-28 13:48:07 -0700</bug_when>
    <thetext>Created attachment 38751
Fix warnings

The patch landed on here caused signed vs. unsigned warnings on GTK.  This fixes them.  Someone please rubber-stamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143468</commentid>
    <comment_count>14</comment_count>
      <attachid>38751</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-28 14:54:25 -0700</bug_when>
    <thetext>Comment on attachment 38751
Fix warnings

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143472</commentid>
    <comment_count>15</comment_count>
      <attachid>38751</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-28 15:09:43 -0700</bug_when>
    <thetext>Comment on attachment 38751
Fix warnings

Landed in r47876.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34851</attachid>
            <date>2009-08-14 10:06:44 -0700</date>
            <delta_ts>2009-08-14 12:44:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>28308.patch</filename>
            <type>text/plain</type>
            <size>17868</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRmNGFhYy4uZmRjMmVmZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0wOC0xNCAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGltYWdlIGRlY29kZXJzIHRvIGRvd24tc2FtcGxlIHRoZSBp
bWFnZSBkaXJlY3RseQorICAgICAgICB0byBzY2FsZWQgb3V0cHV0IGJ1ZmZlci4gVGhpcyBjYW4g
YmUgZW5hYmxlZC9kaXNhYmxlZCBieQorICAgICAgICBtYWNybyBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKS4KKyAgICAgICAgT25seSBKUEVHIGFuZCBQTkcgZGVjb2RlcnMgYXJl
IG1vZGlmaWVkIHRvIHN1cHBvcnQgaXQgbm93LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0TWF4TnVtUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydENNWUtUb1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJH
QlRvUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisKIDIw
MDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcAppbmRleCA4ZjkxMDQyLi4wNDY1Njc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYwogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw4ICszNCw4IEBACiAjaW5jbHVkZSAiSUNPSW1hZ2VEZWNv
ZGVyLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlBOR0ltYWdl
RGVjb2Rlci5oIgotI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTExOCw4ICsxMTksMTggQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIFRoaXMgbWV0
aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2Yg
dGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgogICAgIC8vIElmIGluc3VmZmljaWVudCBi
eXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2Rl
ciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCi0gICAgaWYgKCFtX2RlY29kZXIpCisgICAg
aWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRh
LT5idWZmZXIoKSk7CisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAg
ICAgICAgaWYgKG1fZGVjb2RlcikgeworIyAgIGlmZGVmIElNQUdFX0RFQ09ERVJfRE9XTl9TQU1Q
TElOR19NQVhfTlVNQkVSX09GX1BJWEVMUworICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhO
dW1QaXhlbHMoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HX01BWF9OVU1CRVJfT0ZfUElYRUxT
KTsKKyMgICBlbHNlCisgICAgICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscygxMDI0
ICogMTAyNCk7CisjICAgZW5kaWYKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQogCiAgICAgaWYg
KG1fZGVjb2RlcikKICAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNl
aXZlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczZThiMQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgeworCWVudW0gTWF0Y2hUeXBleworCQlFeGFjdCwKKwkJVXBwZXJCb3VuZCwK
KwkJTG93ZXJCb3VuZAorCX07Cit9CisKK3RlbXBsYXRlIDxNYXRjaFR5cGUgdHlwZT4gc3RhdGlj
IGludCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbnQg
b3JpZywgaW50IHNlYXJjaFN0YXJ0KQoreworCWludCBzaXplID0gc2NhbGVkVmFsdWVzLnNpemUo
KTsKKyAgICBjb25zdCBpbnQqIGRhdGFTdGFydCA9IHNjYWxlZFZhbHVlcy5kYXRhKCk7CisgICAg
Y29uc3QgaW50KiBkYXRhRW5kID0gZGF0YVN0YXJ0ICsgc2l6ZTsKKyAgICBjb25zdCBpbnQqIHBv
cyA9IHN0ZDo6bG93ZXJfYm91bmQoZGF0YVN0YXJ0ICsgc2VhcmNoU3RhcnQsIGRhdGFFbmQsIG9y
aWcpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEV4YWN0OgorICAgICAgICAg
ICAgcmV0dXJuIHBvcyAhPSBkYXRhRW5kICYmICpwb3MgPT0gb3JpZyA/IHBvcyAtIGRhdGFTdGFy
dCA6IC0xOworICAgICAgICBjYXNlIExvd2VyQm91bmQ6CisgICAgICAgICAgICByZXR1cm4gcG9z
ICE9IGRhdGFFbmQgJiYgKnBvcyA9PSBvcmlnID8gcG9zIC0gZGF0YVN0YXJ0IDogcG9zIC0gZGF0
YVN0YXJ0IC0gMTsKKyAgICAgICAgY2FzZSBVcHBlckJvdW5kOgorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIHBvcyAhPSBkYXRhRW5kID8gcG9zIC0gZGF0YVN0YXJ0IDogLTE7
CisgICAgfQorfQorCitpbnQgSW1hZ2VEZWNvZGVyOjp1cHBlckJvdW5kU2NhbGVkWChpbnQgb3Jp
Z1gsIGludCBzZWFyY2hTdGFydCkKK3sKKwlyZXR1cm4gZ2V0U2NhbGVkVmFsdWU8VXBwZXJCb3Vu
ZD4obV9zY2FsZWRDb2x1bW5zLCBvcmlnWCwgc2VhcmNoU3RhcnQpOworfQorCitpbnQgSW1hZ2VE
ZWNvZGVyOjpsb3dlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKK3sK
KwlyZXR1cm4gZ2V0U2NhbGVkVmFsdWU8TG93ZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmln
WCwgc2VhcmNoU3RhcnQpOworfQorCitpbnQgSW1hZ2VEZWNvZGVyOjpzY2FsZWRZKGludCBvcmln
WSwgaW50IHNlYXJjaFN0YXJ0KQoreworCXJldHVybiBnZXRTY2FsZWRWYWx1ZTxFeGFjdD4obV9z
Y2FsZWRSb3dzLCBvcmlnWSwgc2VhcmNoU3RhcnQpOworfQorCit2b2lkIEltYWdlRGVjb2Rlcjo6
cHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCkgCit7CisJaW50IHdpZHRoID0gbV9zaXplLndp
ZHRoKCk7CisJaW50IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKKwlpbnQgbnVtUGl4ZWxzID0g
aGVpZ2h0ICogd2lkdGg7CisgICAgaWYgKG1fbWF4TnVtUGl4ZWxzIDw9IDAgfHwgbnVtUGl4ZWxz
IDw9IG1fbWF4TnVtUGl4ZWxzKSB7CisJCW1fc2NhbGVkID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKwltX3NjYWxlZCA9IHRydWU7CisJZG91YmxlIHNocmluayA9IHNxcnQobV9t
YXhOdW1QaXhlbHMgLyAoZG91YmxlKW51bVBpeGVscyk7CisJZG91YmxlIHpvb20gPSAxLiAvc2hy
aW5rOworCW1fc2NhbGVkQ29sdW1ucy5yZXNlcnZlQ2FwYWNpdHkod2lkdGggKiBzaHJpbmsgKyAw
LjUpOworCWZvciAoaW50IHNjYWxlZFggPSAwOzspIHsKKwkJaW50IHggPSBzY2FsZWRYICogem9v
bSArIDAuNTsKKwkJaWYgKHggPCB3aWR0aCkgeworCQkJbV9zY2FsZWRDb2x1bW5zLmFwcGVuZCh4
KTsKKwkJCSsrc2NhbGVkWDsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisJbV9zY2FsZWRSb3dz
LnJlc2VydmVDYXBhY2l0eShoZWlnaHQgKiBzaHJpbmsgKyAwLjUpOworCWZvciAoaW50IHNjYWxl
ZFkgPSAwOzspIHsKKwkJaW50IHkgPSBzY2FsZWRZICogem9vbSArIDAuNTsKKwkJaWYgKHkgPCBo
ZWlnaHQpIHsKKwkJCW1fc2NhbGVkUm93cy5hcHBlbmQoeSk7CisJCQkrK3NjYWxlZFk7CisJCX0g
ZWxzZQorCQkJYnJlYWs7CisJfQorfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmgKaW5kZXggMWI3NTQzNy4uZmE0MmJkOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODIsOSArMTgzLDE3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAvLyBhbmQgdGhlIGJhc2UgY2xhc3MgbWFuYWdlcyB0aGUgUkdC
QTMyIGZyYW1lIGNhY2hlLgogICAgIGNsYXNzIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgor
ICAgICAgICAvLyBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxvd3MgaW1h
Z2UgZGVjb2RlcnMgd3JpdGVkaXJlY3RseSB0byBzY2FsZWQgb3V0cHV0IGJ1ZmZlcnMKKyAgICAg
ICAgLy8gYnkgZG93biBzYW1wbGluZy4gQ2FsbCBzZXRNYXhOdW1QaXhlbHMoKSB0byBzcGVjaWZ5
IHRoZSBiaWdnZXN0IHNpemUgdGhhdCBkZWNvZGVkIGltYWdlcworICAgICAgICAvLyBjYW4gaGF2
ZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkZWZsYXRlIHRob3NlIGltYWdlcyB0aGF0IGFyZSBiaWdn
ZXIgdGhhbiBtX21heE51bVBpeGVscy4KKyAgICAgICAgLy8gKE5vdCBzdXBwb3J0ZWQgYnkgYWxs
IGltYWdlIGRlY29kZXJzIHlldCkKICAgICAgICAgSW1hZ2VEZWNvZGVyKCkKICAgICAgICAgICAg
IDogbV9mYWlsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkK
KyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICAgICAgLCBt
X21heE51bVBpeGVscygtMSkKKyAgICAgICAgICAgICwgbV9zY2FsZWQoZmFsc2UpCisjZW5kaWYK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTI2Niw4ICsyNzUsMjUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBzaW5jZSBpbiBwcmFjdGljZSBvbmx5IEdJRnMgd2lsbCBldmVy
IHVzZSB0aGlzLgogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNp
emVfdCBjbGVhckJlZm9yZUZyYW1lKSB7IH0KIAorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpCisgICAgICAgIHZvaWQgc2V0TWF4TnVtUGl4ZWxzKGludCBtKSB7IG1fbWF4
TnVtUGl4ZWxzID0gbTsgfQorI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CisjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgdm9pZCBwcmVwYXJlU2NhbGVEYXRh
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaW50IHVwcGVyQm91bmRTY2FsZWRYKGludCBvcmlnWCwg
aW50IHNlYXJjaFN0YXJ0ID0gMCk7CisgICAgICAgIGludCBsb3dlckJvdW5kU2NhbGVkWChpbnQg
b3JpZ1gsIGludCBzZWFyY2hTdGFydCA9IDApOworICAgICAgICBpbnQgc2NhbGVkWShpbnQgb3Jp
Z1ksIGludCBzZWFyY2hTdGFydCA9IDApOworI2VuZGlmCisKICAgICAgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCBkYXRhLgorI2lmIEVOQUJMRShJTUFHRV9E
RUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgICAgIGludCBtX21heE51bVBpeGVsczsKKyAgICAg
ICAgVmVjdG9yPGludD4gbV9zY2FsZWRDb2x1bW5zOworICAgICAgICBWZWN0b3I8aW50PiBtX3Nj
YWxlZFJvd3M7CisgICAgICAgIGJvb2wgbV9zY2FsZWQ7CisjZW5kaWYKICAgICAgICAgVmVjdG9y
PFJHQkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZlckNhY2hlOwogICAgICAgICBib29sIG1fZmFpbGVk
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggYWUwOTU4Ni4uMWU4M2RhOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtNDYxLDExICs0NjEsMjcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNv
ZGUoYm9vbCBzaXplT25seSkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbnZlcnRDTVlLVG9S
R0JBKFJHQkEzMkJ1ZmZlciYgZGVzdCwgSlNBTVBST1cgc3JjLCBqcGVnX2RlY29tcHJlc3Nfc3Ry
dWN0KiBpbmZvKQorc3RhdGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBk
ZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgaW50IHNyY1dpZHRoCisjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgYm9vbCBzY2FsZWQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRDb2x1bW5zCisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIHsKLSAgICBBU1NFUlQoaW5mby0+b3V0
X2NvbG9yX3NwYWNlID09IEpDU19DTVlLKTsKLQotICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHgg
PCBpbmZvLT5vdXRwdXRfd2lkdGg7ICsreCkgeworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpCisgICAgaWYgKHNjYWxlZCkgeworICAgICAgICBpbnQgbnVtQ29sdW1ucyA9
IHNjYWxlZENvbHVtbnMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNv
bHVtbnM7ICsreCkgeworICAgICAgICAgICAgSlNBTVBMRSoganNhbXBsZSA9IHNyYyArIHNjYWxl
ZENvbHVtbnNbeF0gKiAzOworICAgICAgICAgICAgdW5zaWduZWQgYyA9IGpzYW1wbGVbMF07Cisg
ICAgICAgICAgICB1bnNpZ25lZCBtID0ganNhbXBsZVsxXTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHkgPSBqc2FtcGxlWzJdOworICAgICAgICAgICAgdW5zaWduZWQgayA9IGpzYW1wbGVbM107Cisg
ICAgICAgICAgICBkZXN0LnNldFJHQkEoeCwgZGVzdFksIGMgKiBrIC8gMjU1LCBtICogayAvIDI1
NSwgeSAqIGsgLyAyNTUsIDB4RkYpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgc3JjV2lkdGg7ICsreCkgewog
ICAgICAgICB1bnNpZ25lZCBjID0gKnNyYysrOwogICAgICAgICB1bnNpZ25lZCBtID0gKnNyYysr
OwogICAgICAgICB1bnNpZ25lZCB5ID0gKnNyYysrOwpAQCAtNDkxLDIxICs1MDcsMzMgQEAgc3Rh
dGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBKU0FNUFJPVyBz
cmMsIGpwZWdfZGVjb21wcmVzc18KIAogICAgICAgICAvLyByZWFkX3NjYW5saW5lcyBoYXMgaW5j
cmVhc2VkIHRoZSBzY2FubGluZSBjb3VudGVyLCBzbyB3ZQogICAgICAgICAvLyBhY3R1YWxseSBt
ZWFuIHRoZSBwcmV2aW91cyBvbmUuCi0gICAgICAgIGRlc3Quc2V0UkdCQSh4LCBpbmZvLT5vdXRw
dXRfc2NhbmxpbmUgLSAxLCBjICogayAvIDI1NSwgbSAqIGsgLyAyNTUsIHkgKiBrIC8gMjU1LCAw
eEZGKTsKKyAgICAgICAgZGVzdC5zZXRSR0JBKHgsIGRlc3RZLCBjICogayAvIDI1NSwgbSAqIGsg
LyAyNTUsIHkgKiBrIC8gMjU1LCAweEZGKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbnZl
cnRSR0JUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBKU0FNUFJPVyBzcmMsIGpwZWdfZGVjb21w
cmVzc19zdHJ1Y3QqIGluZm8pCitzdGF0aWMgdm9pZCBjb252ZXJ0UkdCVG9SR0JBKFJHQkEzMkJ1
ZmZlciYgZGVzdCwgaW50IGRlc3RZLCBKU0FNUFJPVyBzcmMsIGludCBzcmNXaWR0aAorI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkQ29sdW1ucwor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiB7Ci0gICAgQVNTRVJUKGlu
Zm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKTsKLQotICAgIGZvciAodW5zaWduZWQgeCA9
IDA7IHggPCBpbmZvLT5vdXRwdXRfd2lkdGg7ICsreCkgeworI2lmIEVOQUJMRShJTUFHRV9ERUNP
REVSX0RPV05fU0FNUExJTkcpCisgICAgaWYgKHNjYWxlZCkgeworICAgICAgICBpbnQgbnVtQ29s
dW1ucyA9IHNjYWxlZENvbHVtbnMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IG51bUNvbHVtbnM7ICsreCkgeworICAgICAgICAgICAgSlNBTVBMRSoganNhbXBsZSA9IHNyYyAr
IHNjYWxlZENvbHVtbnNbeF0gKiAzOworICAgICAgICAgICAgZGVzdC5zZXRSR0JBKHgsIGRlc3RZ
LCBqc2FtcGxlWzBdLCBqc2FtcGxlWzFdLCBqc2FtcGxlWzJdLCAweEZGKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsg
eCA8IHNyY1dpZHRoOyArK3gpIHsKICAgICAgICAgdW5zaWduZWQgciA9ICpzcmMrKzsKICAgICAg
ICAgdW5zaWduZWQgZyA9ICpzcmMrKzsKICAgICAgICAgdW5zaWduZWQgYiA9ICpzcmMrKzsKICAg
ICAgICAgLy8gcmVhZF9zY2FubGluZXMgaGFzIGluY3JlYXNlZCB0aGUgc2NhbmxpbmUgY291bnRl
ciwgc28gd2UKICAgICAgICAgLy8gYWN0dWFsbHkgbWVhbiB0aGUgcHJldmlvdXMgb25lLgotICAg
ICAgICBkZXN0LnNldFJHQkEoeCwgaW5mby0+b3V0cHV0X3NjYW5saW5lIC0gMSwgciwgZywgYiwg
MHhGRik7CisgICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgciwgZywgYiwgMHhGRik7CiAg
ICAgfQogfQogCkBAIC01MTcsNyArNTQ1LDE3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0
cHV0U2NhbmxpbmVzKCkKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVk
ZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAg
ICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAg
ICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KSkgeworICAgICAgICBpbnQgYnVmZmVyV2lkdGggPSBzaXplKCkud2lkdGgoKTsKKyAgICAgICAg
aW50IGJ1ZmZlckhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKKyNpZiBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBu
b3cgdG8gdGhlIGNvcnJlY3Qgd2lkdGgvaGVpZ2h0LgorICAgICAgICBpZiAobV9zY2FsZWQpIHsK
KyAgICAgICAgICAgIGJ1ZmZlcldpZHRoID0gbV9zY2FsZWRDb2x1bW5zLnNpemUoKTsKKyAgICAg
ICAgICAgIGJ1ZmZlckhlaWdodCA9IG1fc2NhbGVkUm93cy5zaXplKCk7CisgICAgICAgIH0KKyNl
bmRpZgorCisgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoYnVmZmVyV2lkdGgsIGJ1ZmZlckhl
aWdodCkpIHsKICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtNTMzLDE1ICs1NzEsMzUgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogCiAgICAgd2hpbGUgKGluZm8tPm91dHB1dF9zY2Fu
bGluZSA8IGluZm8tPm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgLyogUmVxdWVzdCBvbmUgc2Nh
bmxpbmUuICBSZXR1cm5zIDAgb3IgMSBzY2FubGluZXMuICovCi0gICAgICAgIGlmIChqcGVnX3Jl
YWRfc2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpICE9IDEpCisgICAgICAgIGludCBzb3VyY2VZ
ID0gaW5mby0+b3V0cHV0X3NjYW5saW5lOworICAgICAgICBpbnQgc291cmNlUm93cyA9IGpwZWdf
cmVhZF9zY2FubGluZXMoaW5mbywgc2FtcGxlcywgMSk7CisgICAgICAgIGlmIChzb3VyY2VSb3dz
ICE9IDEpIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSb3dzICE9IDApCisgICAgICAgICAgICAg
ICAgbV9mYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CiAKKyAgICAgICAgaW50IGRlc3RZID0gc291cmNlWTsKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQorICAgICAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAgICAgICAgIGRl
c3RZID0gc2NhbGVkWShzb3VyY2VZKTsKKyAgICAgICAgICAgIGlmIChkZXN0WSA8IDApCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgaWYgKGluZm8tPm91dF9j
b2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQotICAgICAgICAgICAgY29udmVydFJHQlRvUkdCQShidWZm
ZXIsICpzYW1wbGVzLCBpbmZvKTsKKyAgICAgICAgICAgIGNvbnZlcnRSR0JUb1JHQkEoYnVmZmVy
LCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1fc2NhbGVk
Q29sdW1ucyk7CiAgICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1Nf
Q01ZSykKLSAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgKnNhbXBsZXMsIGlu
Zm8pOworICAgICAgICAgICAgY29udmVydENNWUtUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBs
ZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1fc2NhbGVkQ29sdW1ucyk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgICAgIGlmIChp
bmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikKKyAgICAgICAgICAgIGNvbnZlcnRSR0JU
b1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCk7CisgICAg
ICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykKKyAgICAgICAg
ICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgZGVzdFksICpzYW1wbGVzLCBpbmZvLT5vdXRw
dXRfd2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmluZGV4IDU2ZTAwN2Qu
LmUyMWI2MmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21w
bGV0ZSgpOwogCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAg
ICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgYm9v
bCBnb29kID0gSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgaWYgKGdvb2QpCisgICAgICAgICAgICAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5
KCk7CisgICAgICAgICAgICByZXR1cm4gZ29vZDsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBKUEVHSW1hZ2VSZWFkZXIqIG1fcmVhZGVyOwogICAgIH07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmNwcAppbmRleCBkMTQzMzNmLi4yNTNhNTE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBQb3J0
aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAyMDAxIG1vemlsbGEub3JnCiAgKgpAQCAtMjQyLDYgKzI0
Myw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgICAgICAg
ICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgIH0KIAogICAgIGludCBiaXRE
ZXB0aCwgY29sb3JUeXBlLCBpbnRlcmxhY2VUeXBlLCBjb21wcmVzc2lvblR5cGUsIGZpbHRlclR5
cGUsIGNoYW5uZWxzOwpAQCAtMzEzLDcgKzMxNywxNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgs
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIFJHQkEz
MkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIu
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghYnVm
ZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpIHsKKyNpZiBFTkFC
TEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICBpbnQgd2lkdGggPSBtX3Nj
YWxlZCA/IG1fc2NhbGVkQ29sdW1ucy5zaXplKCkgOiBzaXplKCkud2lkdGgoKTsKKyAgICAgICAg
aW50IGhlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IHNpemUoKS5oZWln
aHQoKTsKKyNlbHNlCisgICAgICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOworICAgICAg
ICBpbnQgaGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOworI2VuZGlmCisgICAgICAgIGlmICghYnVm
ZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFBO
R0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRlcigpLT5wbmdQdHIo
KSkpLT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICAgICAgbG9uZ2ptcChyZWFkZXIoKS0+cG5n
UHRyKCktPmptcGJ1ZiwgMSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNTgsNyArMzY5LDcg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dC
dWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICogdG8gcGFzcyB0aGUgY3VycmVudCByb3cs
IGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBjb21iaW5lIHRoZQogICAgICogb2xkIHJvdyBhbmQgdGhl
IG5ldyByb3cuCiAgICAgKi8KLSAgICAKKwogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IHJlYWRlcigp
LT5wbmdQdHIoKTsKICAgICBib29sIGhhc0FscGhhID0gcmVhZGVyKCktPmhhc0FscGhhKCk7CiAg
ICAgdW5zaWduZWQgY29sb3JDaGFubmVscyA9IGhhc0FscGhhID8gNCA6IDM7CkBAIC0zNzIsOCAr
MzgzLDI3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hh
ciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgcm93ID0gcm93QnVmZmVy
OwogCiAgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCisjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAgICAg
aW50IGRlc3RZID0gc2NhbGVkWShyb3dJbmRleCk7CisgICAgICAgIGlmIChkZXN0WSA8IDApCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGludCBjb2x1bW5zID0gbV9zY2FsZWRDb2x1bW5z
LnNpemUoKTsKKyAgICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOworICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvbHVtbnM7ICsreCkgeworICAgICAgICAgICAgcG5n
X2J5dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW3hdICogNDsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gcGl4ZWxbM107CisgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4
LCBkZXN0WSwgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAg
ICAgaWYgKCFzYXdBbHBoYSAmJiBhbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgIHNhd0Fs
cGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgog
ICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwotICAgIGJvb2wgc2F3QWxwaGEgPSBmYWxz
ZTsKKyAgICBib29sIHNhd0FscGhhID0gYnVmZmVyLmhhc0FscGhhKCk7CiAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICpyb3crKzsK
ICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7CkBAIC0zODUsNiArNDE1LDcgQEAgdm9p
ZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIs
IHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUp
OwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgcG5nQ29tcGxldGUocG5nX3N0
cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykK
</data>
<flag name="review"
          id="19047"
          type_id="1"
          status="-"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34867</attachid>
            <date>2009-08-14 12:44:23 -0700</date>
            <delta_ts>2009-08-14 19:50:30 -0700</delta_ts>
            <desc>modified for coding style...</desc>
            <filename>28308.patch</filename>
            <type>text/plain</type>
            <size>17823</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRmNGFhYy4uZmRjMmVmZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0wOC0xNCAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGltYWdlIGRlY29kZXJzIHRvIGRvd24tc2FtcGxlIHRoZSBp
bWFnZSBkaXJlY3RseQorICAgICAgICB0byBzY2FsZWQgb3V0cHV0IGJ1ZmZlci4gVGhpcyBjYW4g
YmUgZW5hYmxlZC9kaXNhYmxlZCBieQorICAgICAgICBtYWNybyBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKS4KKyAgICAgICAgT25seSBKUEVHIGFuZCBQTkcgZGVjb2RlcnMgYXJl
IG1vZGlmaWVkIHRvIHN1cHBvcnQgaXQgbm93LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0TWF4TnVtUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydENNWUtUb1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJH
QlRvUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisKIDIw
MDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcAppbmRleCA4ZjkxMDQyLi5kYmUxMzVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYwogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw4ICszNCw4IEBACiAjaW5jbHVkZSAiSUNPSW1hZ2VEZWNv
ZGVyLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlBOR0ltYWdl
RGVjb2Rlci5oIgotI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTExOCw4ICsxMTksMTggQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIFRoaXMgbWV0
aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2Yg
dGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgogICAgIC8vIElmIGluc3VmZmljaWVudCBi
eXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2Rl
ciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCi0gICAgaWYgKCFtX2RlY29kZXIpCisgICAg
aWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRh
LT5idWZmZXIoKSk7CisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAg
ICAgICAgaWYgKG1fZGVjb2RlcikgeworI2lmZGVmIElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
R19NQVhfTlVNQkVSX09GX1BJWEVMUworICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1Q
aXhlbHMoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HX01BWF9OVU1CRVJfT0ZfUElYRUxTKTsK
KyNlbHNlCisgICAgICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscygxMDI0ICogMTAy
NCk7CisjZW5kaWYKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQogCiAgICAgaWYgKG1fZGVjb2Rl
cikKICAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwM2E2MgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAt
MCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmls
ZSwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FN
UExJTkcpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCitlbnVtIE1hdGNoVHlwZSB7CisgICAgRXhhY3QsCisgICAgVXBwZXJCb3VuZCwKKyAg
ICBMb3dlckJvdW5kCit9OworCit9CisKK3RlbXBsYXRlIDxNYXRjaFR5cGUgdHlwZT4gc3RhdGlj
IGludCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbnQg
b3JpZywgaW50IHNlYXJjaFN0YXJ0KQoreworICAgIGludCBzaXplID0gc2NhbGVkVmFsdWVzLnNp
emUoKTsKKyAgICBjb25zdCBpbnQqIGRhdGFTdGFydCA9IHNjYWxlZFZhbHVlcy5kYXRhKCk7Cisg
ICAgY29uc3QgaW50KiBkYXRhRW5kID0gZGF0YVN0YXJ0ICsgc2l6ZTsKKyAgICBjb25zdCBpbnQq
IHBvcyA9IHN0ZDo6bG93ZXJfYm91bmQoZGF0YVN0YXJ0ICsgc2VhcmNoU3RhcnQsIGRhdGFFbmQs
IG9yaWcpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRXhhY3Q6CisgICAgICAgIHJl
dHVybiBwb3MgIT0gZGF0YUVuZCAmJiAqcG9zID09IG9yaWcgPyBwb3MgLSBkYXRhU3RhcnQgOiAt
MTsKKyAgICBjYXNlIExvd2VyQm91bmQ6CisgICAgICAgIHJldHVybiBwb3MgIT0gZGF0YUVuZCAm
JiAqcG9zID09IG9yaWcgPyBwb3MgLSBkYXRhU3RhcnQgOiBwb3MgLSBkYXRhU3RhcnQgLSAxOwor
ICAgIGNhc2UgVXBwZXJCb3VuZDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gcG9zICE9
IGRhdGFFbmQgPyBwb3MgLSBkYXRhU3RhcnQgOiAtMTsKKyAgICB9Cit9CisKK2ludCBJbWFnZURl
Y29kZXI6OnVwcGVyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0KQorewor
ICAgIHJldHVybiBnZXRTY2FsZWRWYWx1ZTxVcHBlckJvdW5kPihtX3NjYWxlZENvbHVtbnMsIG9y
aWdYLCBzZWFyY2hTdGFydCk7Cit9CisKK2ludCBJbWFnZURlY29kZXI6Omxvd2VyQm91bmRTY2Fs
ZWRYKGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0KQoreworICAgIHJldHVybiBnZXRTY2FsZWRW
YWx1ZTxMb3dlckJvdW5kPihtX3NjYWxlZENvbHVtbnMsIG9yaWdYLCBzZWFyY2hTdGFydCk7Cit9
CisKK2ludCBJbWFnZURlY29kZXI6OnNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQp
Cit7CisgICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPEV4YWN0PihtX3NjYWxlZFJvd3MsIG9yaWdZ
LCBzZWFyY2hTdGFydCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVEYXRh
SWZOZWNlc3NhcnkoKQoreworICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOworICAgIGlu
dCBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgaW50IG51bVBpeGVscyA9IGhlaWdodCAq
IHdpZHRoOworICAgIGlmIChtX21heE51bVBpeGVscyA8PSAwIHx8IG51bVBpeGVscyA8PSBtX21h
eE51bVBpeGVscykgeworICAgICAgICBtX3NjYWxlZCA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9zY2FsZWQgPSB0cnVlOworICAgIGRvdWJsZSBzaHJpbmsgPSBzcXJ0
KG1fbWF4TnVtUGl4ZWxzIC8gKGRvdWJsZSludW1QaXhlbHMpOworICAgIGRvdWJsZSB6b29tID0g
MS4gL3NocmluazsKKyAgICBtX3NjYWxlZENvbHVtbnMucmVzZXJ2ZUNhcGFjaXR5KHdpZHRoICog
c2hyaW5rICsgMC41KTsKKyAgICBmb3IgKGludCBzY2FsZWRYID0gMDs7KSB7CisgICAgICAgIGlu
dCB4ID0gc2NhbGVkWCAqIHpvb20gKyAwLjU7CisgICAgICAgIGlmICh4IDwgd2lkdGgpIHsKKyAg
ICAgICAgICAgIG1fc2NhbGVkQ29sdW1ucy5hcHBlbmQoeCk7CisgICAgICAgICAgICArK3NjYWxl
ZFg7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fc2Nh
bGVkUm93cy5yZXNlcnZlQ2FwYWNpdHkoaGVpZ2h0ICogc2hyaW5rICsgMC41KTsKKyAgICBmb3Ig
KGludCBzY2FsZWRZID0gMDs7KSB7CisgICAgICAgIGludCB5ID0gc2NhbGVkWSAqIHpvb20gKyAw
LjU7CisgICAgICAgIGlmICh5IDwgaGVpZ2h0KSB7CisgICAgICAgICAgICBtX3NjYWxlZFJvd3Mu
YXBwZW5kKHkpOworICAgICAgICAgICAgKytzY2FsZWRZOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5oCmluZGV4IDFiNzU0MzcuLmRlYjhkMWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTgyLDkgKzE4MywxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhlIFJH
QkEzMiBmcmFtZSBjYWNoZS4KICAgICBjbGFzcyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoK
KyAgICAgICAgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGlt
YWdlIGRlY29kZXJzIHRvIHdyaXRlIGRpcmVjdGx5IHRvIAorICAgICAgICAvLyBzY2FsZWQgb3V0
cHV0IGJ1ZmZlcnMgYnkgZG93biBzYW1wbGluZy4gQ2FsbCBzZXRNYXhOdW1QaXhlbHMoKSB0byBz
cGVjaWZ5IHRoZSAKKyAgICAgICAgLy8gYmlnZ2VzdCBzaXplIHRoYXQgZGVjb2RlZCBpbWFnZXMg
Y2FuIGhhdmUuIEltYWdlIGRlY29kZXJzIHdpbGwgZGVmbGF0ZSB0aG9zZSAKKyAgICAgICAgLy8g
aW1hZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIG1fbWF4TnVtUGl4ZWxzLiAoTm90IHN1cHBvcnRl
ZCBieSBhbGwgaW1hZ2UgZGVjb2RlcnMgeWV0KQogICAgICAgICBJbWFnZURlY29kZXIoKQogICAg
ICAgICAgICAgOiBtX2ZhaWxlZChmYWxzZSkKICAgICAgICAgICAgICwgbV9zaXplQXZhaWxhYmxl
KGZhbHNlKQorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgICAg
ICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQorICAgICAgICAgICAgLCBtX3NjYWxlZChmYWxzZSkK
KyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjY2LDggKzI3NSwyNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHNpbmNlIGluIHByYWN0aWNlIG9ubHkgR0lGcyB3
aWxsIGV2ZXIgdXNlIHRoaXMuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVy
Q2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQogCisjaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgdm9pZCBzZXRNYXhOdW1QaXhlbHMoaW50IG0p
IHsgbV9tYXhOdW1QaXhlbHMgPSBtOyB9CisjZW5kaWYKKwogICAgIHByb3RlY3RlZDoKKyNpZiBF
TkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICB2b2lkIHByZXBhcmVT
Y2FsZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBpbnQgdXBwZXJCb3VuZFNjYWxlZFgoaW50
IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKKyAgICAgICAgaW50IGxvd2VyQm91bmRTY2Fs
ZWRYKGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisgICAgICAgIGludCBzY2FsZWRZ
KGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisjZW5kaWYKKwogICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCisjaWYgRU5BQkxF
KElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgaW50IG1fbWF4TnVtUGl4ZWxz
OworICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CisgICAgICAgIFZlY3Rvcjxp
bnQ+IG1fc2NhbGVkUm93czsKKyAgICAgICAgYm9vbCBtX3NjYWxlZDsKKyNlbmRpZgogICAgICAg
ICBWZWN0b3I8UkdCQTMyQnVmZmVyPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7CiAgICAgICAgIGJvb2wg
bV9mYWlsZWQ7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBhZTA5NTg2Li42NDU5ZmM5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCkBAIC00NjEsMTEgKzQ2MSwyNyBAQCB2b2lkIEpQRUdJbWFnZURlY29k
ZXI6OmRlY29kZShib29sIHNpemVPbmx5KQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgY29udmVy
dENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBKU0FNUFJPVyBzcmMsIGpwZWdfZGVjb21w
cmVzc19zdHJ1Y3QqIGluZm8pCitzdGF0aWMgdm9pZCBjb252ZXJ0Q01ZS1RvUkdCQShSR0JBMzJC
dWZmZXImIGRlc3QsIGludCBkZXN0WSwgSlNBTVBST1cgc3JjLCBpbnQgc3JjV2lkdGgKKyNpZiBF
TkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBib29sIHNjYWxlZCwgY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZENvbHVtbnMK
KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogewotICAgIEFTU0VSVChp
bmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspOwotCi0gICAgZm9yICh1bnNpZ25lZCB4
ID0gMDsgeCA8IGluZm8tPm91dHB1dF93aWR0aDsgKyt4KSB7CisjaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAoc2NhbGVkKSB7CisgICAgICAgIGludCBudW1D
b2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgICAgICBKU0FNUExFKiBqc2FtcGxlID0gc3Jj
ICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7CisgICAgICAgICAgICB1bnNpZ25lZCBjID0ganNhbXBs
ZVswXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG0gPSBqc2FtcGxlWzFdOworICAgICAgICAgICAg
dW5zaWduZWQgeSA9IGpzYW1wbGVbMl07CisgICAgICAgICAgICB1bnNpZ25lZCBrID0ganNhbXBs
ZVszXTsKKyAgICAgICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgYyAqIGsgLyAyNTUsIG0g
KiBrIC8gMjU1LCB5ICogayAvIDI1NSwgMHhGRik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBzcmNXaWR0aDsg
Kyt4KSB7CiAgICAgICAgIHVuc2lnbmVkIGMgPSAqc3JjKys7CiAgICAgICAgIHVuc2lnbmVkIG0g
PSAqc3JjKys7CiAgICAgICAgIHVuc2lnbmVkIHkgPSAqc3JjKys7CkBAIC00OTEsMjEgKzUwNywz
MyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0Q01ZS1RvUkdCQShSR0JBMzJCdWZmZXImIGRlc3QsIEpT
QU1QUk9XIHNyYywganBlZ19kZWNvbXByZXNzXwogCiAgICAgICAgIC8vIHJlYWRfc2NhbmxpbmVz
IGhhcyBpbmNyZWFzZWQgdGhlIHNjYW5saW5lIGNvdW50ZXIsIHNvIHdlCiAgICAgICAgIC8vIGFj
dHVhbGx5IG1lYW4gdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgZGVzdC5zZXRSR0JBKHgsIGlu
Zm8tPm91dHB1dF9zY2FubGluZSAtIDEsIGMgKiBrIC8gMjU1LCBtICogayAvIDI1NSwgeSAqIGsg
LyAyNTUsIDB4RkYpOworICAgICAgICBkZXN0LnNldFJHQkEoeCwgZGVzdFksIGMgKiBrIC8gMjU1
LCBtICogayAvIDI1NSwgeSAqIGsgLyAyNTUsIDB4RkYpOwogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgY29udmVydFJHQlRvUkdCQShSR0JBMzJCdWZmZXImIGRlc3QsIEpTQU1QUk9XIHNyYywganBl
Z19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKK3N0YXRpYyB2b2lkIGNvbnZlcnRSR0JUb1JHQkEo
UkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgaW50IHNyY1dpZHRo
CisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgYm9vbCBzY2FsZWQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRD
b2x1bW5zCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIHsKLSAgICBB
U1NFUlQoaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IpOwotCi0gICAgZm9yICh1bnNp
Z25lZCB4ID0gMDsgeCA8IGluZm8tPm91dHB1dF93aWR0aDsgKyt4KSB7CisjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAoc2NhbGVkKSB7CisgICAgICAgIGlu
dCBudW1Db2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgICAgICBKU0FNUExFKiBqc2FtcGxl
ID0gc3JjICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7CisgICAgICAgICAgICBkZXN0LnNldFJHQkEo
eCwgZGVzdFksIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0sIDB4RkYpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVk
IHggPSAwOyB4IDwgc3JjV2lkdGg7ICsreCkgewogICAgICAgICB1bnNpZ25lZCByID0gKnNyYysr
OwogICAgICAgICB1bnNpZ25lZCBnID0gKnNyYysrOwogICAgICAgICB1bnNpZ25lZCBiID0gKnNy
YysrOwogICAgICAgICAvLyByZWFkX3NjYW5saW5lcyBoYXMgaW5jcmVhc2VkIHRoZSBzY2FubGlu
ZSBjb3VudGVyLCBzbyB3ZQogICAgICAgICAvLyBhY3R1YWxseSBtZWFuIHRoZSBwcmV2aW91cyBv
bmUuCi0gICAgICAgIGRlc3Quc2V0UkdCQSh4LCBpbmZvLT5vdXRwdXRfc2NhbmxpbmUgLSAxLCBy
LCBnLCBiLCAweEZGKTsKKyAgICAgICAgZGVzdC5zZXRSR0JBKHgsIGRlc3RZLCByLCBnLCBiLCAw
eEZGKTsKICAgICB9CiB9CiAKQEAgLTUxNyw3ICs1NDUsMTcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVy
IGlmIG5lZWRlZC4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCku
aGVpZ2h0KCkpKSB7CisgICAgICAgIGludCBidWZmZXJXaWR0aCA9IHNpemUoKS53aWR0aCgpOwor
ICAgICAgICBpbnQgYnVmZmVySGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOworI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgICAgIC8vIExldCdzIHJlc2l6ZSBvdXIg
YnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0aC9oZWlnaHQuCisgICAgICAgIGlmIChtX3Nj
YWxlZCkgeworICAgICAgICAgICAgYnVmZmVyV2lkdGggPSBtX3NjYWxlZENvbHVtbnMuc2l6ZSgp
OworICAgICAgICAgICAgYnVmZmVySGVpZ2h0ID0gbV9zY2FsZWRSb3dzLnNpemUoKTsKKyAgICAg
ICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShidWZmZXJXaWR0aCwg
YnVmZmVySGVpZ2h0KSkgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MzMsMTUgKzU3MSwzMSBAQCBib29sIEpQ
RUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAKICAgICB3aGlsZSAoaW5mby0+b3V0
cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0X2hlaWdodCkgewogICAgICAgICAvKiBSZXF1ZXN0
IG9uZSBzY2FubGluZS4gIFJldHVybnMgMCBvciAxIHNjYW5saW5lcy4gKi8KKyAgICAgICAgaW50
IHNvdXJjZVkgPSBpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CiAgICAgICAgIGlmIChqcGVnX3JlYWRf
c2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICAgICAgaW50IGRlc3RZID0gc291cmNlWTsKKyNpZiBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAgICAgICAg
IGRlc3RZID0gc2NhbGVkWShzb3VyY2VZKTsKKyAgICAgICAgICAgIGlmIChkZXN0WSA8IDApCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgaWYgKGluZm8tPm91
dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQotICAgICAgICAgICAgY29udmVydFJHQlRvUkdCQShi
dWZmZXIsICpzYW1wbGVzLCBpbmZvKTsKKyAgICAgICAgICAgIGNvbnZlcnRSR0JUb1JHQkEoYnVm
ZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1fc2Nh
bGVkQ29sdW1ucyk7CiAgICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBK
Q1NfQ01ZSykKLSAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgKnNhbXBsZXMs
IGluZm8pOworICAgICAgICAgICAgY29udmVydENNWUtUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNh
bXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1fc2NhbGVkQ29sdW1ucyk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgICAgIGlm
IChpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikKKyAgICAgICAgICAgIGNvbnZlcnRS
R0JUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCk7Cisg
ICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykKKyAgICAg
ICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgZGVzdFksICpzYW1wbGVzLCBpbmZvLT5v
dXRwdXRfd2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmluZGV4IDU2ZTAw
N2QuLmZmOWVmNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTgsMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcygpOwogICAgICAgICB2b2lkIGpwZWdD
b21wbGV0ZSgpOwogCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAg
ICAgICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgICAgeworICAg
ICAgICAgICAgYm9vbCBnb29kID0gSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgaWYgKGdvb2QpCisgICAgICAgICAgICAgICAgcHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gZ29vZDsKKyAgICAgICAgfQorI2Vu
ZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBKUEVHSW1hZ2VSZWFkZXIqIG1fcmVhZGVyOwog
ICAgIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBkMTQzMzNmLi4yNTNhNTE5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAyMDAxIG1vemlsbGEub3JnCiAgKgpA
QCAtMjQyLDYgKzI0Myw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUo
KQogICAgICAgICAgICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQor
ICAgICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgIH0KIAog
ICAgIGludCBiaXREZXB0aCwgY29sb3JUeXBlLCBpbnRlcmxhY2VUeXBlLCBjb21wcmVzc2lvblR5
cGUsIGZpbHRlclR5cGUsIGNoYW5uZWxzOwpAQCAtMzEzLDcgKzMxNywxNCBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWdu
ZWQgcm93SW5kZXgsCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVk
LgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAg
IGlmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7Ci0gICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkp
IHsKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICBpbnQg
d2lkdGggPSBtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1ucy5zaXplKCkgOiBzaXplKCkud2lkdGgo
KTsKKyAgICAgICAgaW50IGhlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6
IHNpemUoKS5oZWlnaHQoKTsKKyNlbHNlCisgICAgICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0
aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOworI2VuZGlmCisgICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRl
cigpLT5wbmdQdHIoKSkpLT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICAgICAgbG9uZ2ptcChy
ZWFkZXIoKS0+cG5nUHRyKCktPmptcGJ1ZiwgMSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
NTgsNyArMzY5LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25l
ZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICogdG8gcGFzcyB0aGUg
Y3VycmVudCByb3csIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBjb21iaW5lIHRoZQogICAgICogb2xk
IHJvdyBhbmQgdGhlIG5ldyByb3cuCiAgICAgKi8KLSAgICAKKwogICAgIHBuZ19zdHJ1Y3RwIHBu
ZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsKICAgICBib29sIGhhc0FscGhhID0gcmVhZGVyKCktPmhh
c0FscGhhKCk7CiAgICAgdW5zaWduZWQgY29sb3JDaGFubmVscyA9IGhhc0FscGhhID8gNCA6IDM7
CkBAIC0zNzIsOCArMzgzLDI3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgcm93
ID0gcm93QnVmZmVyOwogCiAgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCisj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAobV9zY2FsZWQp
IHsKKyAgICAgICAgaW50IGRlc3RZID0gc2NhbGVkWShyb3dJbmRleCk7CisgICAgICAgIGlmIChk
ZXN0WSA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGludCBjb2x1bW5zID0gbV9z
Y2FsZWRDb2x1bW5zLnNpemUoKTsKKyAgICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNB
bHBoYSgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvbHVtbnM7ICsreCkgeworICAg
ICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW3hdICogNDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gcGl4ZWxbM107CisgICAgICAgICAgICBidWZm
ZXIuc2V0UkdCQSh4LCBkZXN0WSwgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEp
OworICAgICAgICAgICAgaWYgKCFzYXdBbHBoYSAmJiBhbHBoYSA8IDI1NSkgeworICAgICAgICAg
ICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxw
aGEodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgogICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwotICAgIGJvb2wgc2F3
QWxwaGEgPSBmYWxzZTsKKyAgICBib29sIHNhd0FscGhhID0gYnVmZmVyLmhhc0FscGhhKCk7CiAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgIHVuc2lnbmVkIHJl
ZCA9ICpyb3crKzsKICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7CkBAIC0zODUsNiAr
NDE1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFy
KiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICAgICAgYnVmZmVyLnNldEhh
c0FscGhhKHRydWUpOwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgcG5nQ29t
cGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykK
</data>
<flag name="review"
          id="19061"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34884</attachid>
            <date>2009-08-14 19:50:30 -0700</date>
            <delta_ts>2009-08-17 11:41:22 -0700</delta_ts>
            <desc>modified as Eric Seidel requires</desc>
            <filename>28308.patch</filename>
            <type>text/plain</type>
            <size>17946</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRmNGFhYy4uZmRjMmVmZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0wOC0xNCAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGltYWdlIGRlY29kZXJzIHRvIGRvd24tc2FtcGxlIHRoZSBp
bWFnZSBkaXJlY3RseQorICAgICAgICB0byBzY2FsZWQgb3V0cHV0IGJ1ZmZlci4gVGhpcyBjYW4g
YmUgZW5hYmxlZC9kaXNhYmxlZCBieQorICAgICAgICBtYWNybyBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKS4KKyAgICAgICAgT25seSBKUEVHIGFuZCBQTkcgZGVjb2RlcnMgYXJl
IG1vZGlmaWVkIHRvIHN1cHBvcnQgaXQgbm93LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0TWF4TnVtUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydENNWUtUb1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJH
QlRvUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisKIDIw
MDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcAppbmRleCA4ZjkxMDQyLi4zYmVhNTdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYwogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw4ICszNCwxNCBAQAogI2luY2x1ZGUgIklDT0ltYWdlRGVj
b2Rlci5oIgogI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJQTkdJbWFn
ZURlY29kZXIuaCIKLSNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKKworI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisjaWZuZGVmIElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUworI2RlZmluZSBJTUFHRV9ERUNPREVSX0RPV05f
U0FNUExJTkdfTUFYX05VTUJFUl9PRl9QSVhFTFMgKDEwMjQgKiAxMDI0KQorI2VuZGlmCisjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTgsOCArMTI1LDEzIEBAIHZvaWQgSW1h
Z2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZl
ZCkKICAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRp
YXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KICAgICAv
LyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGlt
YWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgotICAgIGlm
ICghbV9kZWNvZGVyKQorICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAgIG1fZGVjb2RlciA9
IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkpOworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCisgICAgICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgICAgICBtX2Rl
Y29kZXItPnNldE1heE51bVBpeGVscyhJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkdfTUFYX05V
TUJFUl9PRl9QSVhFTFMpOworI2VuZGlmCisgICAgfQogCiAgICAgaWYgKG1fZGVjb2RlcikKICAg
ICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiMGE0MwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMCwwICsx
LDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugewor
CitlbnVtIE1hdGNoVHlwZSB7CisgICAgRXhhY3QsCisgICAgVXBwZXJCb3VuZCwKKyAgICBMb3dl
ckJvdW5kCit9OworCit9CisKK3RlbXBsYXRlIDxNYXRjaFR5cGUgdHlwZT4gc3RhdGljIGludCBn
ZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbnQgdmFsdWVU
b01hdGNoLCBpbnQgc2VhcmNoU3RhcnQpCit7CisgICAgY29uc3QgaW50KiBkYXRhU3RhcnQgPSBz
Y2FsZWRWYWx1ZXMuZGF0YSgpOworICAgIGNvbnN0IGludCogZGF0YUVuZCA9IGRhdGFTdGFydCAr
IHNjYWxlZFZhbHVlcy5zaXplKCk7CisgICAgY29uc3QgaW50KiBtYXRjaGVkID0gc3RkOjpsb3dl
cl9ib3VuZChkYXRhU3RhcnQgKyBzZWFyY2hTdGFydCwgZGF0YUVuZCwgdmFsdWVUb01hdGNoKTsK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEV4YWN0OgorICAgICAgICByZXR1cm4gbWF0
Y2hlZCAhPSBkYXRhRW5kICYmICptYXRjaGVkID09IHZhbHVlVG9NYXRjaCA/IG1hdGNoZWQgLSBk
YXRhU3RhcnQgOiAtMTsKKyAgICBjYXNlIExvd2VyQm91bmQ6CisgICAgICAgIHJldHVybiBtYXRj
aGVkICE9IGRhdGFFbmQgJiYgKm1hdGNoZWQgPT0gdmFsdWVUb01hdGNoID8gbWF0Y2hlZCAtIGRh
dGFTdGFydCA6IG1hdGNoZWQgLSBkYXRhU3RhcnQgLSAxOworICAgIGNhc2UgVXBwZXJCb3VuZDoK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbWF0Y2hlZCAhPSBkYXRhRW5kID8gbWF0Y2hl
ZCAtIGRhdGFTdGFydCA6IC0xOworICAgIH0KK30KKworaW50IEltYWdlRGVjb2Rlcjo6dXBwZXJC
b3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7CisgICAgcmV0dXJuIGdl
dFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0
YXJ0KTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdY
LCBpbnQgc2VhcmNoU3RhcnQpCit7CisgICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPExvd2VyQm91
bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0KTsKK30KKworaW50IEltYWdl
RGVjb2Rlcjo6c2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCkKK3sKKyAgICByZXR1
cm4gZ2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxTY2FsZWRWYWx1ZXMoVmVjdG9yPGludD4m
IHNjYWxlZFZhbHVlcywgZG91YmxlIHNjYWxlUmF0ZSwgaW50IGxlbmd0aCkKK3sKKyAgICBkb3Vi
bGUgaW5mbGF0ZVJhdGUgPSAxLiAvIHNjYWxlUmF0ZTsKKyAgICBzY2FsZWRWYWx1ZXMucmVzZXJ2
ZUNhcGFjaXR5KHN0YXRpY19jYXN0PGludD4obGVuZ3RoICogc2NhbGVSYXRlICsgMC41KSk7Cisg
ICAgZm9yIChpbnQgc2NhbGVkSW5kZXggPSAwOzspIHsKKyAgICAgICAgaW50IGluZGV4ID0gc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZWRJbmRleCAqIGluZmxhdGVSYXRlICsgMC41KTsKKyAgICAgICAg
aWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBzY2FsZWRWYWx1ZXMuYXBwZW5kKGlu
ZGV4KTsKKyAgICAgICAgICAgICsrc2NhbGVkSW5kZXg7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxl
RGF0YUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpbnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAg
ICBpbnQgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOworICAgIGludCBudW1QaXhlbHMgPSBoZWln
aHQgKiB3aWR0aDsKKyAgICBpZiAobV9tYXhOdW1QaXhlbHMgPD0gMCB8fCBudW1QaXhlbHMgPD0g
bV9tYXhOdW1QaXhlbHMpIHsKKyAgICAgICAgbV9zY2FsZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fc2NhbGVkID0gdHJ1ZTsKKyAgICBkb3VibGUgc2NhbGUgPSBz
cXJ0KG1fbWF4TnVtUGl4ZWxzIC8gKGRvdWJsZSludW1QaXhlbHMpOworICAgIGZpbGxTY2FsZWRW
YWx1ZXMobV9zY2FsZWRDb2x1bW5zLCBzY2FsZSwgd2lkdGgpOworICAgIGZpbGxTY2FsZWRWYWx1
ZXMobV9zY2FsZWRSb3dzLCBzY2FsZSwgaGVpZ2h0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDFiNzU0MzcuLmRlYjhkMWIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBN
b2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTgyLDkgKzE4
MywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gYW5kIHRoZSBiYXNlIGNsYXNzIG1h
bmFnZXMgdGhlIFJHQkEzMiBmcmFtZSBjYWNoZS4KICAgICBjbGFzcyBJbWFnZURlY29kZXIgewog
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykgYWxsb3dzIGltYWdlIGRlY29kZXJzIHRvIHdyaXRlIGRpcmVjdGx5IHRvIAorICAgICAgICAv
LyBzY2FsZWQgb3V0cHV0IGJ1ZmZlcnMgYnkgZG93biBzYW1wbGluZy4gQ2FsbCBzZXRNYXhOdW1Q
aXhlbHMoKSB0byBzcGVjaWZ5IHRoZSAKKyAgICAgICAgLy8gYmlnZ2VzdCBzaXplIHRoYXQgZGVj
b2RlZCBpbWFnZXMgY2FuIGhhdmUuIEltYWdlIGRlY29kZXJzIHdpbGwgZGVmbGF0ZSB0aG9zZSAK
KyAgICAgICAgLy8gaW1hZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIG1fbWF4TnVtUGl4ZWxzLiAo
Tm90IHN1cHBvcnRlZCBieSBhbGwgaW1hZ2UgZGVjb2RlcnMgeWV0KQogICAgICAgICBJbWFnZURl
Y29kZXIoKQogICAgICAgICAgICAgOiBtX2ZhaWxlZChmYWxzZSkKICAgICAgICAgICAgICwgbV9z
aXplQXZhaWxhYmxlKGZhbHNlKQorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJ
TkcpCisgICAgICAgICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQorICAgICAgICAgICAgLCBtX3Nj
YWxlZChmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjY2LDggKzI3
NSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHNpbmNlIGluIHByYWN0aWNl
IG9ubHkgR0lGcyB3aWxsIGV2ZXIgdXNlIHRoaXMuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQogCisjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgdm9pZCBzZXRNYXhOdW1Q
aXhlbHMoaW50IG0pIHsgbV9tYXhOdW1QaXhlbHMgPSBtOyB9CisjZW5kaWYKKwogICAgIHByb3Rl
Y3RlZDoKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICB2
b2lkIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBpbnQgdXBwZXJCb3Vu
ZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKKyAgICAgICAgaW50IGxv
d2VyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisgICAgICAg
IGludCBzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisjZW5kaWYKKwog
ICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEu
CisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgaW50IG1f
bWF4TnVtUGl4ZWxzOworICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CisgICAg
ICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkUm93czsKKyAgICAgICAgYm9vbCBtX3NjYWxlZDsKKyNl
bmRpZgogICAgICAgICBWZWN0b3I8UkdCQTMyQnVmZmVyPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7CiAg
ICAgICAgIGJvb2wgbV9mYWlsZWQ7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBhZTA5NTg2Li42
NDU5ZmM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBAIC00NjEsMTEgKzQ2MSwyNyBAQCB2b2lkIEpQ
RUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIHNpemVPbmx5KQogICAgIH0KIH0KIAotc3RhdGlj
IHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBKU0FNUFJPVyBzcmMs
IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCitzdGF0aWMgdm9pZCBjb252ZXJ0Q01ZS1Rv
UkdCQShSR0JBMzJCdWZmZXImIGRlc3QsIGludCBkZXN0WSwgSlNBTVBST1cgc3JjLCBpbnQgc3Jj
V2lkdGgKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBib29sIHNjYWxlZCwgY29uc3QgVmVjdG9yPGludD4mIHNj
YWxlZENvbHVtbnMKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogewot
ICAgIEFTU0VSVChpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspOwotCi0gICAgZm9y
ICh1bnNpZ25lZCB4ID0gMDsgeCA8IGluZm8tPm91dHB1dF93aWR0aDsgKyt4KSB7CisjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAoc2NhbGVkKSB7CisgICAg
ICAgIGludCBudW1Db2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgICAgICBKU0FNUExFKiBq
c2FtcGxlID0gc3JjICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7CisgICAgICAgICAgICB1bnNpZ25l
ZCBjID0ganNhbXBsZVswXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG0gPSBqc2FtcGxlWzFdOwor
ICAgICAgICAgICAgdW5zaWduZWQgeSA9IGpzYW1wbGVbMl07CisgICAgICAgICAgICB1bnNpZ25l
ZCBrID0ganNhbXBsZVszXTsKKyAgICAgICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgYyAq
IGsgLyAyNTUsIG0gKiBrIC8gMjU1LCB5ICogayAvIDI1NSwgMHhGRik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHgg
PCBzcmNXaWR0aDsgKyt4KSB7CiAgICAgICAgIHVuc2lnbmVkIGMgPSAqc3JjKys7CiAgICAgICAg
IHVuc2lnbmVkIG0gPSAqc3JjKys7CiAgICAgICAgIHVuc2lnbmVkIHkgPSAqc3JjKys7CkBAIC00
OTEsMjEgKzUwNywzMyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0Q01ZS1RvUkdCQShSR0JBMzJCdWZm
ZXImIGRlc3QsIEpTQU1QUk9XIHNyYywganBlZ19kZWNvbXByZXNzXwogCiAgICAgICAgIC8vIHJl
YWRfc2NhbmxpbmVzIGhhcyBpbmNyZWFzZWQgdGhlIHNjYW5saW5lIGNvdW50ZXIsIHNvIHdlCiAg
ICAgICAgIC8vIGFjdHVhbGx5IG1lYW4gdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgZGVzdC5z
ZXRSR0JBKHgsIGluZm8tPm91dHB1dF9zY2FubGluZSAtIDEsIGMgKiBrIC8gMjU1LCBtICogayAv
IDI1NSwgeSAqIGsgLyAyNTUsIDB4RkYpOworICAgICAgICBkZXN0LnNldFJHQkEoeCwgZGVzdFks
IGMgKiBrIC8gMjU1LCBtICogayAvIDI1NSwgeSAqIGsgLyAyNTUsIDB4RkYpOwogICAgIH0KIH0K
IAotc3RhdGljIHZvaWQgY29udmVydFJHQlRvUkdCQShSR0JBMzJCdWZmZXImIGRlc3QsIEpTQU1Q
Uk9XIHNyYywganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKK3N0YXRpYyB2b2lkIGNvbnZl
cnRSR0JUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywg
aW50IHNyY1dpZHRoCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYm9vbCBzY2FsZWQsIGNvbnN0IFZlY3Rvcjxp
bnQ+JiBzY2FsZWRDb2x1bW5zCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkKIHsKLSAgICBBU1NFUlQoaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGluZm8tPm91dHB1dF93aWR0aDsgKyt4KSB7Cisj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAoc2NhbGVkKSB7
CisgICAgICAgIGludCBudW1Db2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgICAgICBKU0FN
UExFKiBqc2FtcGxlID0gc3JjICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7CisgICAgICAgICAgICBk
ZXN0LnNldFJHQkEoeCwgZGVzdFksIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0s
IDB4RkYpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBm
b3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgc3JjV2lkdGg7ICsreCkgewogICAgICAgICB1bnNpZ25l
ZCByID0gKnNyYysrOwogICAgICAgICB1bnNpZ25lZCBnID0gKnNyYysrOwogICAgICAgICB1bnNp
Z25lZCBiID0gKnNyYysrOwogICAgICAgICAvLyByZWFkX3NjYW5saW5lcyBoYXMgaW5jcmVhc2Vk
IHRoZSBzY2FubGluZSBjb3VudGVyLCBzbyB3ZQogICAgICAgICAvLyBhY3R1YWxseSBtZWFuIHRo
ZSBwcmV2aW91cyBvbmUuCi0gICAgICAgIGRlc3Quc2V0UkdCQSh4LCBpbmZvLT5vdXRwdXRfc2Nh
bmxpbmUgLSAxLCByLCBnLCBiLCAweEZGKTsKKyAgICAgICAgZGVzdC5zZXRSR0JBKHgsIGRlc3RZ
LCByLCBnLCBiLCAweEZGKTsKICAgICB9CiB9CiAKQEAgLTUxNyw3ICs1NDUsMTcgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhl
IGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZl
cjo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgIGludCBidWZmZXJXaWR0aCA9IHNpemUo
KS53aWR0aCgpOworICAgICAgICBpbnQgYnVmZmVySGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOwor
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgICAgIC8vIExldCdz
IHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0aC9oZWlnaHQuCisgICAg
ICAgIGlmIChtX3NjYWxlZCkgeworICAgICAgICAgICAgYnVmZmVyV2lkdGggPSBtX3NjYWxlZENv
bHVtbnMuc2l6ZSgpOworICAgICAgICAgICAgYnVmZmVySGVpZ2h0ID0gbV9zY2FsZWRSb3dzLnNp
emUoKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShi
dWZmZXJXaWR0aCwgYnVmZmVySGVpZ2h0KSkgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MzMsMTUgKzU3MSwz
MSBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAKICAgICB3aGls
ZSAoaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0X2hlaWdodCkgewogICAgICAg
ICAvKiBSZXF1ZXN0IG9uZSBzY2FubGluZS4gIFJldHVybnMgMCBvciAxIHNjYW5saW5lcy4gKi8K
KyAgICAgICAgaW50IHNvdXJjZVkgPSBpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CiAgICAgICAgIGlm
IChqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpICE9IDEpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW50IGRlc3RZID0gc291cmNlWTsKKyNpZiBFTkFC
TEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgICAgICBpZiAobV9zY2FsZWQpIHsK
KyAgICAgICAgICAgIGRlc3RZID0gc2NhbGVkWShzb3VyY2VZKTsKKyAgICAgICAgICAgIGlmIChk
ZXN0WSA8IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAg
aWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQotICAgICAgICAgICAgY29udmVy
dFJHQlRvUkdCQShidWZmZXIsICpzYW1wbGVzLCBpbmZvKTsKKyAgICAgICAgICAgIGNvbnZlcnRS
R0JUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9z
Y2FsZWQsIG1fc2NhbGVkQ29sdW1ucyk7CiAgICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xv
cl9zcGFjZSA9PSBKQ1NfQ01ZSykKLSAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZl
ciwgKnNhbXBsZXMsIGluZm8pOworICAgICAgICAgICAgY29udmVydENNWUtUb1JHQkEoYnVmZmVy
LCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1fc2NhbGVk
Q29sdW1ucyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbHNl
CisgICAgICAgIGlmIChpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikKKyAgICAgICAg
ICAgIGNvbnZlcnRSR0JUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1
dF93aWR0aCk7CisgICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1Nf
Q01ZSykKKyAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgZGVzdFksICpzYW1w
bGVzLCBpbmZvLT5vdXRwdXRfd2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
CmluZGV4IDU2ZTAwN2QuLjRhODIyZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTgsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcygpOwogICAgICAg
ICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKKyAgICAgICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhl
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcHJlcGFy
ZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBKUEVHSW1hZ2VSZWFkZXIqIG1f
cmVhZGVyOwogICAgIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBkMTQzMzNmLi4yNTNhNTE5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAyMDAxIG1vemlsbGEu
b3JnCiAgKgpAQCAtMjQyLDYgKzI0Myw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUoKQogICAgICAgICAgICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NB
TVBMSU5HKQorICAgICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgog
ICAgIH0KIAogICAgIGludCBiaXREZXB0aCwgY29sb3JUeXBlLCBpbnRlcmxhY2VUeXBlLCBjb21w
cmVzc2lvblR5cGUsIGZpbHRlclR5cGUsIGNoYW5uZWxzOwpAQCAtMzEzLDcgKzMxNywxNCBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZl
ciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIg
aWYgbmVlZGVkLgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5
KSB7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5o
ZWlnaHQoKSkpIHsKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAg
ICAgICBpbnQgd2lkdGggPSBtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1ucy5zaXplKCkgOiBzaXpl
KCkud2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dz
LnNpemUoKSA6IHNpemUoKS5oZWlnaHQoKTsKKyNlbHNlCisgICAgICAgIGludCB3aWR0aCA9IHNp
emUoKS53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOworI2Vu
ZGlmCisgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVf
cHRyKHJlYWRlcigpLT5wbmdQdHIoKSkpLT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICAgICAg
bG9uZ2ptcChyZWFkZXIoKS0+cG5nUHRyKCktPmptcGJ1ZiwgMSk7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zNTgsNyArMzY5LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICogdG8g
cGFzcyB0aGUgY3VycmVudCByb3csIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBjb21iaW5lIHRoZQog
ICAgICogb2xkIHJvdyBhbmQgdGhlIG5ldyByb3cuCiAgICAgKi8KLSAgICAKKwogICAgIHBuZ19z
dHJ1Y3RwIHBuZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsKICAgICBib29sIGhhc0FscGhhID0gcmVh
ZGVyKCktPmhhc0FscGhhKCk7CiAgICAgdW5zaWduZWQgY29sb3JDaGFubmVscyA9IGhhc0FscGhh
ID8gNCA6IDM7CkBAIC0zNzIsOCArMzgzLDI3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dB
dmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAg
ICAgICAgcm93ID0gcm93QnVmZmVyOwogCiAgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91ciBi
dWZmZXIuCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAo
bV9zY2FsZWQpIHsKKyAgICAgICAgaW50IGRlc3RZID0gc2NhbGVkWShyb3dJbmRleCk7CisgICAg
ICAgIGlmIChkZXN0WSA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGludCBjb2x1
bW5zID0gbV9zY2FsZWRDb2x1bW5zLnNpemUoKTsKKyAgICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1
ZmZlci5oYXNBbHBoYSgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvbHVtbnM7ICsr
eCkgeworICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5z
W3hdICogNDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gcGl4ZWxbM107CisgICAgICAg
ICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsy
XSwgYWxwaGEpOworICAgICAgICAgICAgaWYgKCFzYXdBbHBoYSAmJiBhbHBoYSA8IDI1NSkgewor
ICAgICAgICAgICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBidWZmZXIu
c2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZgogICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwotICAg
IGJvb2wgc2F3QWxwaGEgPSBmYWxzZTsKKyAgICBib29sIHNhd0FscGhhID0gYnVmZmVyLmhhc0Fs
cGhhKCk7CiAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgIHVu
c2lnbmVkIHJlZCA9ICpyb3crKzsKICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7CkBA
IC0zODUsNiArNDE1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNp
Z25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICAgICAgYnVm
ZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiB9CiAKIHZv
aWQgcG5nQ29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykK
</data>
<flag name="review"
          id="19079"
          type_id="1"
          status="+"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38751</attachid>
            <date>2009-08-28 13:48:07 -0700</date>
            <delta_ts>2009-08-28 15:09:43 -0700</delta_ts>
            <desc>Fix warnings</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2236</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODcwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0yOCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IHNvbWUgd2FybmluZ3MgaW50cm9kdWNlZCBieSByNDczODEKKyAgICAgICAgKCBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDggKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0Q01ZS1RvUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0UkdCVG9SR0JBKToKKwogMjAwOS0wOC0yOCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkIChidWlsZCBmaXgpLgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0Nzg2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYxLDcgKzQ2MSw3IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU8K
ICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbnZlcnRDTVlLVG9SR0JBKFJHQkEzMkJ1ZmZlciYg
ZGVzdCwgaW50IGRlc3RZLCBKU0FNUFJPVyBzcmMsIGludCBzcmNXaWR0aAorc3RhdGljIHZvaWQg
Y29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9X
IHNyYywgSkRJTUVOU0lPTiBzcmNXaWR0aAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05f
U0FNUExJTkcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGJvb2wgc2NhbGVkLCBj
b25zdCBWZWN0b3I8aW50PiYgc2NhbGVkQ29sdW1ucwogI2VuZGlmCkBAIC00ODEsNyArNDgxLDcg
QEAgc3RhdGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZgogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IHNyY1dpZHRo
OyArK3gpIHsKKyAgICBmb3IgKEpESU1FTlNJT04geCA9IDA7IHggPCBzcmNXaWR0aDsgKyt4KSB7
CiAgICAgICAgIHVuc2lnbmVkIGMgPSAqc3JjKys7CiAgICAgICAgIHVuc2lnbmVkIG0gPSAqc3Jj
Kys7CiAgICAgICAgIHVuc2lnbmVkIHkgPSAqc3JjKys7CkBAIC01MDksNyArNTA5LDcgQEAgc3Rh
dGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZgogICAgIH0KIH0KIAotc3RhdGlj
IHZvaWQgY29udmVydFJHQlRvUkdCQShSR0JBMzJCdWZmZXImIGRlc3QsIGludCBkZXN0WSwgSlNB
TVBST1cgc3JjLCBpbnQgc3JjV2lkdGgKK3N0YXRpYyB2b2lkIGNvbnZlcnRSR0JUb1JHQkEoUkdC
QTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBzcmNX
aWR0aAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYgc2Nh
bGVkQ29sdW1ucwogI2VuZGlmCkBAIC01MjUsNyArNTI1LDcgQEAgc3RhdGljIHZvaWQgY29udmVy
dFJHQlRvUkdCQShSR0JBMzJCdWZmZQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0g
ICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IHNyY1dpZHRoOyArK3gpIHsKKyAgICBmb3IgKEpE
SU1FTlNJT04geCA9IDA7IHggPCBzcmNXaWR0aDsgKyt4KSB7CiAgICAgICAgIHVuc2lnbmVkIHIg
PSAqc3JjKys7CiAgICAgICAgIHVuc2lnbmVkIGcgPSAqc3JjKys7CiAgICAgICAgIHVuc2lnbmVk
IGIgPSAqc3JjKys7Cg==
</data>
<flag name="review"
          id="19748"
          type_id="1"
          status="+"
          setter="jmalonzo"
    />
          </attachment>
      

    </bug>

</bugzilla>