<?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>47974</bug_id>
          
          <creation_ts>2010-10-20 00:47:02 -0700</creation_ts>
          <short_desc>[chromium] Chromium Mac should use WebKit&apos;s image decoders</short_desc>
          <delta_ts>2010-11-04 13:28:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48188</dependson>
          <blocked>49021</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>mark</cc>
    
    <cc>pascal.massimino</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>296682</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 00:47:02 -0700</bug_when>
    <thetext>[chromium] Chromium Mac should use WebKit&apos;s image decoders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296686</commentid>
    <comment_count>1</comment_count>
      <attachid>71261</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 00:50:24 -0700</bug_when>
    <thetext>Created attachment 71261
work-in-progres</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296687</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 00:52:16 -0700</bug_when>
    <thetext>Turns out this is mostly donking around with the build system.  It looks like the main thing I have to do is implement ImageDecoderCG, which is the adapter between the image decoder output and the native bitmap.  I&apos;ll have to find some documentation about how to actually use CoreGraphics.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296974</commentid>
    <comment_count>3</comment_count>
      <attachid>71329</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 13:28:11 -0700</bug_when>
    <thetext>Created attachment 71329
builds and passes at least one test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297049</commentid>
    <comment_count>4</comment_count>
      <attachid>71343</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 14:55:59 -0700</bug_when>
    <thetext>Created attachment 71343
looks right in test_shell</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297196</commentid>
    <comment_count>5</comment_count>
      <attachid>71379</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 18:42:45 -0700</bug_when>
    <thetext>Created attachment 71379
seems to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297199</commentid>
    <comment_count>6</comment_count>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2010-10-20 18:52:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=71379) [details]
&gt; seems to work

review tool is acting strange to me, so i copy-paste the comments here:



View in context: https://bugs.webkit.org/attachment.cgi?id=71379&amp;action=review
&gt; WebCore/platform/image-decoders/ImageDecoder.cpp:142
&gt; +    memset(m_bytes, 0, m_size.width() * m_size.height() * sizeof(PixelData));

i&apos;m not familiar with m_bytes, but this looks strange. Shouldn&apos;t it be something like: memset(m_bytes.data(), 0, ...) ?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_mac.py:109
&gt; +        return True

probably not final, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297201</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 18:56:24 -0700</bug_when>
    <thetext>&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71379&amp;action=review
&gt; &gt; WebCore/platform/image-decoders/ImageDecoder.cpp:142
&gt; &gt; +    memset(m_bytes, 0, m_size.width() * m_size.height() * sizeof(PixelData));
&gt; 
&gt; i&apos;m not familiar with m_bytes, but this looks strange. Shouldn&apos;t it be something like: memset(m_bytes.data(), 0, ...) ?

m_bytes is now just a raw data so we can write through to the buffer quickly.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_mac.py:109
&gt; &gt; +        return True
&gt; 
&gt; probably not final, right?

Nope.  I just don&apos;t have wdiff installed and this check was a PITA for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297204</commentid>
    <comment_count>8</comment_count>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2010-10-20 19:07:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=71379) [details]
&gt; seems to work

review tool is acting strange to me, so i copy-paste the comments here:



View in context: https://bugs.webkit.org/attachment.cgi?id=71379&amp;action=review
&gt; WebCore/platform/image-decoders/ImageDecoder.cpp:142
&gt; +    memset(m_bytes, 0, m_size.width() * m_size.height() * sizeof(PixelData));

i&apos;m not familiar with m_bytes, but this looks strange. Shouldn&apos;t it be something like: memset(m_bytes.data(), 0, ...) ?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_mac.py:109
&gt; +        return True

probably not final, right?(In reply to comment #7)
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71379&amp;action=review
&gt; &gt; &gt; WebCore/platform/image-decoders/ImageDecoder.cpp:142
&gt; &gt; &gt; +    memset(m_bytes, 0, m_size.width() * m_size.height() * sizeof(PixelData));
&gt; &gt; 
&gt; &gt; i&apos;m not familiar with m_bytes, but this looks strange. Shouldn&apos;t it be something like: memset(m_bytes.data(), 0, ...) ?
&gt; 
&gt; m_bytes is now just a raw data so we can write through to the buffer quickly.
&gt; 

oh, i see. then, wouldn&apos;t it be safer to replace
   m_size.width() * m_size.height() * sizeof(PixelData)
by backingStore.size() (or equivalent) ?

&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_mac.py:109
&gt; &gt; &gt; +        return True
&gt; &gt; 
&gt; &gt; probably not final, right?
&gt; 
&gt; Nope.  I just don&apos;t have wdiff installed and this check was a PITA for me.

oh, ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297212</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-20 20:17:37 -0700</bug_when>
    <thetext>The color profile thing looks pretty easy too.  I&apos;ll probably do it in a separate patch though.  We&apos;ll need to use this code:

http://trac.imagemagick.org/browser/lcms/trunk/jpegicc/iccjpeg.h
http://trac.imagemagick.org/browser/lcms/trunk/jpegicc/iccjpeg.c

I&apos;m trying to figure out what license it has.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297250</commentid>
    <comment_count>10</comment_count>
      <attachid>71397</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 00:18:25 -0700</bug_when>
    <thetext>Created attachment 71397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297252</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 00:20:16 -0700</bug_when>
    <thetext>AFACT, this patch works.  Of course, it doesn&apos;t have color profile support.  I looked into that and it shouldn&apos;t be that hard.  One approach is to review this patch and the color profile patch and then land them together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297256</commentid>
    <comment_count>12</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-21 00:27:02 -0700</bug_when>
    <thetext>Let&apos;s explicitly not worry about color profiles in the first patch, and do that second.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297259</commentid>
    <comment_count>13</comment_count>
      <attachid>71397</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-21 00:31:55 -0700</bug_when>
    <thetext>Comment on attachment 71397
Patch

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

&gt; WebCore/platform/image-decoders/ImageDecoder.h:186
&gt; +        PixelData* m_bytes;   // The memory is backed by m_backingStore.

Do you need to change any of the other ImageDecoderXXX.cpp files due to this modification?

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:66
&gt; +        alphaInfo | kCGBitmapByteOrder32Host, dataProvider.get(), 0, false, kCGRenderingIntentDefault);

What! Line-wrapping?!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297263</commentid>
    <comment_count>14</comment_count>
      <attachid>71397</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 00:36:31 -0700</bug_when>
    <thetext>Comment on attachment 71397
Patch

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

&gt;&gt; WebCore/platform/image-decoders/ImageDecoder.h:186
&gt;&gt; +        PixelData* m_bytes;   // The memory is backed by m_backingStore.
&gt; 
&gt; Do you need to change any of the other ImageDecoderXXX.cpp files due to this modification?

Yep!

&gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:66
&gt;&gt; +    return CGImageCreate(width(), height(), 8, 32, width() * sizeof(PixelData), colorSpace.get(),
&gt;&gt; +        alphaInfo | kCGBitmapByteOrder32Host, dataProvider.get(), 0, false, kCGRenderingIntentDefault);
&gt; 
&gt; What! Line-wrapping?!

Crazy, I know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297264</commentid>
    <comment_count>15</comment_count>
      <attachid>71398</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 00:37:05 -0700</bug_when>
    <thetext>Created attachment 71398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297604</commentid>
    <comment_count>16</comment_count>
      <attachid>71398</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-21 13:31:48 -0700</bug_when>
    <thetext>Comment on attachment 71398
Patch

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

I don&apos;t know CG well enough to review ImageDecoderCG.cpp, but the rest of the changes look fine to me.

&gt; WebCore/WebCore.gyp/WebCore.gyp:-1184
&gt; -            [&apos;exclude&apos;, &apos;platform/image-decoders/xbm/XBMImageDecoder\\.(cpp|h)$&apos;],

Thanks for getting rid of this!

&gt; WebCore/platform/image-decoders/ImageDecoder.h:142
&gt; +#else

Nit: For clarity, might want to not define this typedef at all for QT and Skia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297628</commentid>
    <comment_count>17</comment_count>
      <attachid>71398</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 14:12:54 -0700</bug_when>
    <thetext>Comment on attachment 71398
Patch

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

&gt;&gt; WebCore/platform/image-decoders/ImageDecoder.h:142
&gt;&gt; +#if PLATFORM(CF)
&gt;&gt; +        typedef RetainPtr&lt;CFMutableDataRef&gt; NativeBackingStore;
&gt;&gt; +#else
&gt; 
&gt; Nit: For clarity, might want to not define this typedef at all for QT and Skia.

Okiedokes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297644</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 14:25:52 -0700</bug_when>
    <thetext>+eric for CG knowledge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297649</commentid>
    <comment_count>19</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-21 14:33:06 -0700</bug_when>
    <thetext>Eric: for context, the intended memory model of RGBA32Buffer is:

* Most frames should call setSize() exactly once to allocate the memory they need for a framebuffer of that size.
* Standard copying (operator=) should just result in an additional ref of the underlying pixel data.  copyBitmapData() is for when a deep copy is needed; it should drop any ref to existing framebuffer data and make a complete copy of the framebuffer in the provided object.
* asNewNativeImage should return a NativeImagePtr that holds a ref to the framebuffer data.  It does not need to copy the data, just ref it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297654</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 14:38:43 -0700</bug_when>
    <thetext>&gt; * Standard copying (operator=) should just result in an additional ref of the underlying pixel data.  copyBitmapData() is for when a deep copy is needed; it should drop any ref to existing framebuffer data and make a complete copy of the framebuffer in the provided object.

This patch does a deep copy for operator=.  I can change this to just a ref if that&apos;s important, it just costs #ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297659</commentid>
    <comment_count>21</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-21 14:44:43 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; This patch does a deep copy for operator=.

For performance reasons, you should probably change it.

I would make sure you&apos;ve done two things:

* Read all comments in ImageDecoder.h.  For example, that notes that operator=() can just ref and not have to copy.
* Read ImageDecoderSkia.cpp carefully and understand why it has overridden every function, and what they do.  The memory/lifetime/refcount picture on Skia should be identical (or very close) to that on CG.  I think you&apos;ve already gotten most of the important bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297666</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 14:57:41 -0700</bug_when>
    <thetext>&gt; For performance reasons, you should probably change it.

Ok.

&gt; I would make sure you&apos;ve done two things:
&gt; 
&gt; * Read all comments in ImageDecoder.h.  For example, that notes that operator=() can just ref and not have to copy.
&gt; * Read ImageDecoderSkia.cpp carefully and understand why it has overridden every function, and what they do.  The memory/lifetime/refcount picture on Skia should be identical (or very close) to that on CG.  I think you&apos;ve already gotten most of the important bits.

Yeah, I did all of that.  We don&apos;t need to override as many of the functions because CG lets us disentangle ownership of the backing store from the image object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297754</commentid>
    <comment_count>23</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-21 17:44:46 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Yeah, I did all of that.  We don&apos;t need to override as many of the functions because CG lets us disentangle ownership of the backing store from the image object.

Yep, that&apos;s what it looked like to me too.  I think the operator=() thing is the only case that needed changing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297763</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-21 18:00:36 -0700</bug_when>
    <thetext>&gt; Yep, that&apos;s what it looked like to me too.  I think the operator=() thing is the only case that needed changing.

I&apos;ll make that change tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298120</commentid>
    <comment_count>25</comment_count>
      <attachid>71588</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 12:57:44 -0700</bug_when>
    <thetext>Created attachment 71588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298124</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-22 13:01:54 -0700</bug_when>
    <thetext>Attachment 71588 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/image-decoders/ImageDecoder.h:190:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298138</commentid>
    <comment_count>27</comment_count>
      <attachid>71591</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 13:12:07 -0700</bug_when>
    <thetext>Created attachment 71591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298139</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-22 13:14:45 -0700</bug_when>
    <thetext>Attachment 71591 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/image-decoders/ImageDecoder.h:190:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298160</commentid>
    <comment_count>29</comment_count>
      <attachid>71591</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-22 13:58:02 -0700</bug_when>
    <thetext>Comment on attachment 71591
Patch

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

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:38
&gt; +    m_backingStore = other.m_backingStore;
&gt; +    m_bytes = reinterpret_cast&lt;PixelData*&gt;(CFDataGetMutableBytePtr(m_backingStore.get()));

I suspect this method might cause a copy.

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:40
&gt; +    // FIXME: The rest of this function seems redundant with RGBA32Buffer::copyBitmapData.
&gt; +    m_size = other.m_size;

It seems very strange to me that these 3 are separate members.  Why does this need to be the case?

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:60
&gt; +    m_bytes = reinterpret_cast&lt;PixelData*&gt;(CFDataGetMutableBytePtr(m_backingStore.get()));

Why do you need mutable pointers?

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:70
&gt; +    RetainPtr&lt;CGColorSpaceRef&gt; colorSpace(AdoptCF, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));

I think you want DeviceRGB, not GenericRGB.  Generic will still to color-matching for you.  You want Device color spaces which do not do color matching as they&apos;re already in the colorspace of the device.

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:76
&gt; +    return CGImageCreate(width(), height(), 8, 32, width() * sizeof(PixelData), colorSpace.get(),
&gt; +        alphaInfo | kCGBitmapByteOrder32Host, dataProvider.get(), 0, false, kCGRenderingIntentDefault);

Hmmm... My data my be old here, but I would have expected you to use CGBitmapImageCreate here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298172</commentid>
    <comment_count>30</comment_count>
      <attachid>71591</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 14:22:42 -0700</bug_when>
    <thetext>Comment on attachment 71591
Patch

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

&gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:38
&gt;&gt; +    m_bytes = reinterpret_cast&lt;PixelData*&gt;(CFDataGetMutableBytePtr(m_backingStore.get()));
&gt; 
&gt; I suspect this method might cause a copy.

CFDataGetMutableBytePtr ?  The documentation says that&apos;s the way to write data into the CFMutatableData object.  I&apos;m not sure how you&apos;d be able to write the underly memory if this made a copy.

&gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:40
&gt;&gt; +    m_size = other.m_size;
&gt; 
&gt; It seems very strange to me that these 3 are separate members.  Why does this need to be the case?

m_size is the width / height of the buffer in pixels.  m_backingStore knows the size of the buffer in bytes, but not what its geometry.  m_bytes is just a cached pointer to the underlying memory because we need to read it for every pixel write, which is extremely hot.  We don&apos;t want to go through CF for every pixel.

&gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:60
&gt;&gt; +    m_bytes = reinterpret_cast&lt;PixelData*&gt;(CFDataGetMutableBytePtr(m_backingStore.get()));
&gt; 
&gt; Why do you need mutable pointers?

We need a mutable point because setRGBA writes to the memory.  We use CF to allocate the memory so that CGImage can hold onto it.  However, after allocating the memory, we write to directly.

&gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:70
&gt;&gt; +    // FIXME: Figure out the right color space.
&gt;&gt; +    RetainPtr&lt;CGColorSpaceRef&gt; colorSpace(AdoptCF, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));
&gt; 
&gt; I think you want DeviceRGB, not GenericRGB.  Generic will still to color-matching for you.  You want Device color spaces which do not do color matching as they&apos;re already in the colorspace of the device.

I&apos;ll research this, but let me try to confirm my understanding:

1) We have a bunch of bytes in an image file.
2) We have a device that transforms bytes in a given color space to a bunch of photons in a room.

What I&apos;d like to say on this line of code is that the bytes in my image file are expressed as coordinates in a particular colorspace, the moral equivalent of sRGB on Windows.  Now, of course, that&apos;s probably a lie, but that&apos;s the lie I want to tell.

I&apos;m fine with the operating system transforming the sRGB color space to a device specific color space (e.g., that the user has created to calibrate the photons emitted by their monitor).  My initial reading of the documentation was that DeviceRGB is a device-specific color space that&apos;s after this transformation.  Does that differ from your understanding?  (In either case, I&apos;ll go back an read some more.)

&gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:76
&gt;&gt; +    return CGImageCreate(width(), height(), 8, 32, width() * sizeof(PixelData), colorSpace.get(),
&gt;&gt; +        alphaInfo | kCGBitmapByteOrder32Host, dataProvider.get(), 0, false, kCGRenderingIntentDefault);
&gt; 
&gt; Hmmm... My data my be old here, but I would have expected you to use CGBitmapImageCreate here.

I can&apos;t find a function by that name.  I&apos;m looking at Table 11-1 of http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-TPXREF101

Do you mean CGBitmapContextCreateImage?  That seems a bit different: &quot;Creates an image by copying the bits from a bitmap graphics context.&quot;  In particular, we don&apos;t want the copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298198</commentid>
    <comment_count>31</comment_count>
      <attachid>71598</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 14:57:05 -0700</bug_when>
    <thetext>Created attachment 71598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298203</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 15:01:00 -0700</bug_when>
    <thetext>&gt; &gt;&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:70
&gt; &gt;&gt; +    // FIXME: Figure out the right color space.
&gt; &gt;&gt; +    RetainPtr&lt;CGColorSpaceRef&gt; colorSpace(AdoptCF, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));
&gt; &gt; 
&gt; &gt; I think you want DeviceRGB, not GenericRGB.  Generic will still to color-matching for you.  You want Device color spaces which do not do color matching as they&apos;re already in the colorspace of the device.
&gt; 
&gt; I&apos;ll research this, but let me try to confirm my understanding:
&gt; 
&gt; 1) We have a bunch of bytes in an image file.
&gt; 2) We have a device that transforms bytes in a given color space to a bunch of photons in a room.
&gt; 
&gt; What I&apos;d like to say on this line of code is that the bytes in my image file are expressed as coordinates in a particular colorspace, the moral equivalent of sRGB on Windows.  Now, of course, that&apos;s probably a lie, but that&apos;s the lie I want to tell.
&gt; 
&gt; I&apos;m fine with the operating system transforming the sRGB color space to a device specific color space (e.g., that the user has created to calibrate the photons emitted by their monitor).  My initial reading of the documentation was that DeviceRGB is a device-specific color space that&apos;s after this transformation.  Does that differ from your understanding?  (In either case, I&apos;ll go back an read some more.)

Ok.  I&apos;ve looked into this, both in the documentation in elsewhere in WebKit.  My understanding was a bit simplistic.  There&apos;s apparently a third layer hiding below.  WebKit generally looks to use CGColorSpaceCreateDeviceRGB(), which seems to have changed behavior after 10.4 to be the same as kCGColorSpaceGenericRGB, which is different than kCGColorSpaceSRGB.  I&apos;ve updated the patch to use the same idiom as the example code I saw in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298204</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-22 15:01:37 -0700</bug_when>
    <thetext>Attachment 71598 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/image-decoders/ImageDecoder.h:190:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298210</commentid>
    <comment_count>34</comment_count>
      <attachid>71598</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-22 15:13:50 -0700</bug_when>
    <thetext>Comment on attachment 71598
Patch

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

Seems you have some style errors.  I won&apos;t be able to r+ this because I feel this is a policy decision for the chromium port to make.

&gt; WebCore/platform/image-decoders/ImageDecoder.h:92
&gt; +        void copyReferenceToBitmapData(const RGBA32Buffer&amp; other);

&quot;other&quot; not needed.

&gt; WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp:70
&gt; +    RetainPtr&lt;CGColorSpaceRef&gt; colorSpace(AdoptCF, CGColorSpaceCreateDeviceRGB());

Seems this could be static, we don&apos;t need a new colorspace for each image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298217</commentid>
    <comment_count>35</comment_count>
      <attachid>71602</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 15:20:50 -0700</bug_when>
    <thetext>Created attachment 71602
updated with style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298271</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 17:00:48 -0700</bug_when>
    <thetext>Committed r70369: &lt;http://trac.webkit.org/changeset/70369&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298407</commentid>
    <comment_count>37</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-10-23 09:25:55 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; Committed r70369: &lt;http://trac.webkit.org/changeset/70369&gt;

We might have to roll this one out and let it cook a bit more. I started looking at the expectation changes, and there are new artifacts on the page that weren&apos;t there before, like:

http://build.chromium.org/buildbot/layout_test_results/webkit-rel-mac-webkit-org/results/layout-test-results/fast/inline-block/001-actual.png

vs.

http://trac.webkit.org/export/70391/trunk/LayoutTests/platform/mac/fast/inline-block/001-expected.png

See it here: http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=fast%2Finline-block%2F001.html&amp;showExpectations=true&amp;useWebKitCanary=true 

I am sure it&apos;s just some mis-interaction of the pixel dump with the new decoders, but until we&apos;re sure, we shouldn&apos;t be rolling this into Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298412</commentid>
    <comment_count>38</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-23 09:37:57 -0700</bug_when>
    <thetext>Do we have those problems on win or linux?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298413</commentid>
    <comment_count>39</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-10-23 09:40:09 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Do we have those problems on win or linux?

Nope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298418</commentid>
    <comment_count>40</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-10-23 10:05:48 -0700</bug_when>
    <thetext>Reverted r70369 for reason:

Caused weird artifacts in expected results.

Committed r70394: &lt;http://trac.webkit.org/changeset/70394&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300827</commentid>
    <comment_count>41</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-27 20:03:29 -0700</bug_when>
    <thetext>I regenerated new pixel results on my machine and looked through all 2500 image mismatches (this includes Leopard / Snow Leopard diff and the diffs from this patch).

I can&apos;t reproduce that artifact.  With the patch we fail these tests:

fast/css/color-correction-on-backgrounds.html
fast/css/color-correction.html
fast/image/pdf-as-background.html
svg/W3C-SVG-1.1/struct-image-03-t.svg

which seems expected b/c we don&apos;t have color correction yet.  I certainly could have missed a needle in the haystack, however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300841</commentid>
    <comment_count>42</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-27 20:27:28 -0700</bug_when>
    <thetext>AFACT, this patch is ready to land.  However, I can&apos;t even find the chromium canary bots on the FYI waterfall, much less see if they are green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301195</commentid>
    <comment_count>43</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-28 11:49:48 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; AFACT, this patch is ready to land.  However, I can&apos;t even find the chromium canary bots on the FYI waterfall, much less see if they are green.

See the thread &quot;Changes to the chromium buildbots and build.chromium.org&quot; on chromium-dev.

The canaries now have a dedicated waterfall at http://build.chromium.org/p/chromium.webkit/waterfall .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301302</commentid>
    <comment_count>44</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-28 13:42:36 -0700</bug_when>
    <thetext>&gt; The canaries now have a dedicated waterfall at http://build.chromium.org/p/chromium.webkit/waterfall .

Cool.  That&apos;s much nicer than the tinyurl I had been using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301609</commentid>
    <comment_count>45</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-28 23:56:06 -0700</bug_when>
    <thetext>Committed r70846: &lt;http://trac.webkit.org/changeset/70846&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301659</commentid>
    <comment_count>46</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-29 03:12:12 -0700</bug_when>
    <thetext>Committed r70858: &lt;http://trac.webkit.org/changeset/70858&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71261</attachid>
            <date>2010-10-20 00:50:24 -0700</date>
            <delta_ts>2010-10-20 13:28:07 -0700</delta_ts>
            <desc>work-in-progres</desc>
            <filename>bug-47974-20101020005023.patch</filename>
            <type>text/plain</type>
            <size>3179</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDEzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMTAtMjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKwog
MjAxMC0xMC0yMCAgU2hpbmljaGlybyBIYW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCShyZXZpc2lvbiA3MDEyNykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNjQsMjMgKzExNjQsMTIgQEAKICAgICAgICAgICAgICMgcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFk
LgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlQ2hyb21pdW1cXC5jcHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1c2VzIEltYWdl
U291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVkCi0gICAgICAg
ICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydleGNsdWRlJywg
J3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAgICAgICAgICAj
IFNraWEgaW1hZ2UtZGVjb2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAgQ29yZUdyYXBo
aWNzCi0gICAgICAgICAgICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAgICAgICAgICAg
IFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXJcXC5oJCdd
LAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8aCkkJ10sCi0g
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAg
ICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VE
ZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdl
RGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCisgICAgICAg
ICAgICAjIFRoZSBNYWMgZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZv
cm0vZ3JhcGhpY3MvY2cKKyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMgaW5jbHVkZWQg
YnkgcmVnZXggYWJvdmUuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR1xcLmNwcCQnXSwKKworICAgICAgICAgICAgIyBJbWFnZURlY29k
ZXJTa2lhIGlzIG5vdCB1c2VkIG9uIG1hYy4gIEltYWdlRGVjb2RlckNHIGlzIHVzZWQgaW5zdGVh
ZC4KICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lh
L0ltYWdlRGVjb2RlclNraWFcXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCiAK
ICAgICAgICAgICAgICMgQWdhaW4sIFNraWEgaXMgbm90IHVzZWQgb24gTWFjLgogICAgICAgICAg
ICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYVxc
LmNwcCQnXSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHJl
dmlzaW9uIDcwMTI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMiBAQCBjbGFzcyBJbnRTaXplOwogY2xhc3Mg
U2hhcmVkQnVmZmVyOwogCiAjaWYgUExBVEZPUk0oQ0cpCisjaWYgVVNFKEdDX0lNQUdFX0RFQ09E
RVJTKQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2Vs
c2UKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFn
ZVNvdXJjZVB0cjsKKyNlbmRpZgogdHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdlUHRyOwog
I2VsaWYgUExBVEZPUk0oT1BFTlZHKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71329</attachid>
            <date>2010-10-20 13:28:11 -0700</date>
            <delta_ts>2010-10-20 14:55:55 -0700</delta_ts>
            <desc>builds and passes at least one test</desc>
            <filename>bug-47974-20101020132810.patch</filename>
            <type>text/plain</type>
            <size>7554</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDEzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMTAtMjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKwog
MjAxMC0xMC0yMCAgU2hpbmljaGlybyBIYW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcwMTI3KQor
KysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI4NDYsNiArMjg0Niw3
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJv
L0ltYWdlRGVjb2RlckNhaXJvLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwJywKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNzAxMjcpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY0LDIzICsxMTY0LDE0IEBACiAg
ICAgICAgICAgICAjIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtLCBpbmNsdWRlZCBieSByZWdl
eCBhYm92ZSwgaW5zdGVhZC4KICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtXFwuY3BwJCddLAogCi0gICAgICAgICAgICAjIFRo
ZSBNYWMgdXNlcyBJbWFnZVNvdXJjZUNHLmNwcCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL2NnLCBp
bmNsdWRlZAotICAgICAgICAgICAgIyBieSByZWdleCBhYm92ZSwgaW5zdGVhZC4KLSAgICAgICAg
ICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZVxcLmNwcCQnXSwK
LQotICAgICAgICAgICAgIyBTa2lhIGltYWdlLWRlY29kZXJzIGFyZSBhbHNvIG5vdCB1c2VkIG9u
IG1hYy4gIENvcmVHcmFwaGljcwotICAgICAgICAgICAgIyBpcyB1c2VkIGRpcmVjdGx5IGluc3Rl
YWQuCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyXFwuaCQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAg
IFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXJc
XC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlclxcLihj
cHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyXFwuKGNw
cHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy93ZWJwL1dFQlBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXJcXC4oY3Bw
fGgpJCddLAorICAgICAgICAgICAgIyBUaGUgTWFjIGRvZXMgbm90IHVzZSBJbWFnZVNvdXJjZUNH
LmNwcCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL2NnCisgICAgICAgICAgICAjIGV2ZW4gdGhvdWdo
IGl0IGlzIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3ZlLgorICAgICAgICAgICAgWydleGNsdWRlJywg
J3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dcXC5jcHAkJ10sCisgICAgICAgICAg
ICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZVxcLmNw
cCQnXSwKKworICAgICAgICAgICAgIyBJbWFnZURlY29kZXJTa2lhIGlzIG5vdCB1c2VkIG9uIG1h
Yy4gIEltYWdlRGVjb2RlckNHIGlzIHVzZWQgaW5zdGVhZC4KICAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWFcXC5jcHAk
J10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJt
L1hCTUltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0dcXC5jcHAkJ10sCiAKICAg
ICAgICAgICAgICMgQWdhaW4sIFNraWEgaXMgbm90IHVzZWQgb24gTWFjLgogICAgICAgICAgICAg
WydleGNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYVxcLmNw
cCQnXSwKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDcwMTI3KQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3
LDcgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUltYWdlKCkKICAgICAvLyBDcmVh
dGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmIChtX2ltYWdlKQog
ICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oQ0cpCisjaWYgUExBVEZPUk0oQ0cpICYmIFVT
RShDR19JTUFHRV9ERUNPREVSUykKICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09ICJh
cHBsaWNhdGlvbi9wZGYiKSB7CiAgICAgICAgIG1faW1hZ2UgPSBQREZEb2N1bWVudEltYWdlOjpj
cmVhdGUoKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAkocmV2aXNpb24gNzAxMjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDEyIEBAIGNsYXNz
IEludFNpemU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBQTEFURk9STShDRykKKyNpZiBV
U0UoR0NfSU1BR0VfREVDT0RFUlMpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1h
Z2VTb3VyY2VQdHI7CisjZWxzZQorY2xhc3MgSW1hZ2VEZWNvZGVyOwordHlwZWRlZiBJbWFnZURl
Y29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2VuZGlmCiB0eXBlZGVmIENHSW1hZ2VSZWYg
TmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShPUEVOVkcpCiBjbGFzcyBJbWFnZURlY29k
ZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2Rl
ckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nn
L0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dDb2xvclNwYWNlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
SW1hZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBSR0JBMzJC
dWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaWd1cmUg
b3V0IHRoZSByaWdodCBjb2xvciBzcGFjZS4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVm
PiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdl
bmVyaWNSR0IpOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVy
ID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2J5dGVzLmRhdGEoKSwgbV9ieXRl
cy5zaXplKCksIDApOworCisgICAgcmV0dXJuIENHSW1hZ2VDcmVhdGUoCisgICAgICAgIHdpZHRo
KCksIGhlaWdodCgpLCBzaXplb2YoUGl4ZWxEYXRhKS80LCBzaXplb2YoUGl4ZWxEYXRhKSwgd2lk
dGgoKSAqIHNpemVvZihQaXhlbERhdGEpLAorICAgICAgICBjb2xvclNwYWNlLmdldCgpLCBrQ0dC
aXRtYXBCeXRlT3JkZXJEZWZhdWx0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9tYWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkJKHJldmlzaW9uIDcwMTI3KQorKysgV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQo
Y2hyb21pdW0uQ2hyb21pdW1QCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqY29tcHMpCiAKICAgICBkZWYgX2NoZWNrX3dkaWZmX2luc3RhbGwoc2VsZik6CisgICAg
ICAgIHJldHVybiBUcnVlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgV2UncmUgaWdub3Jp
bmcgdGhlIHJldHVybiBhbmQgYWx3YXlzIHJldHVybmluZyBUcnVlCiAgICAgICAgICAgICBzZWxm
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYuX3BhdGhfdG9fd2RpZmYoKV0sIGVycm9yX2hh
bmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71343</attachid>
            <date>2010-10-20 14:55:59 -0700</date>
            <delta_ts>2010-10-20 18:42:42 -0700</delta_ts>
            <desc>looks right in test_shell</desc>
            <filename>bug-47974-20101020145557.patch</filename>
            <type>text/plain</type>
            <size>7632</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMTAtMjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKwog
MjAxMC0xMC0yMCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ0LDYgKzI4NDQsNyBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29k
ZXJDYWlyby5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0lt
YWdlRGVjb2RlckNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDcwMTcxKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTE2NSwyMyArMTE2NSwxNCBAQAogICAgICAgICAgICAg
IyBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGlu
c3RlYWQuCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VDaHJvbWl1bVxcLmNwcCQnXSwKIAotICAgICAgICAgICAgIyBUaGUgTWFjIHVzZXMg
SW1hZ2VTb3VyY2VDRy5jcHAgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy9jZywgaW5jbHVkZWQKLSAg
ICAgICAgICAgICMgYnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCi0gICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VcXC5jcHAkJ10sCi0KLSAgICAgICAg
ICAgICMgU2tpYSBpbWFnZS1kZWNvZGVycyBhcmUgYWxzbyBub3QgdXNlZCBvbiBtYWMuICBDb3Jl
R3JhcGhpY3MKLSAgICAgICAgICAgICMgaXMgdXNlZCBkaXJlY3RseSBpbnN0ZWFkLgotICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlclxc
LmgkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXJcXC4oY3BwfGgpJCddLAot
ICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0g
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQ
SW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAg
ICAgICAgICAgICMgVGhlIE1hYyBkb2VzIG5vdCB1c2UgSW1hZ2VTb3VyY2VDRy5jcHAgZnJvbSBw
bGF0Zm9ybS9ncmFwaGljcy9jZworICAgICAgICAgICAgIyBldmVuIHRob3VnaCBpdCBpcyBpbmNs
dWRlZCBieSByZWdleCBhYm92ZS4KKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHXFwuY3BwJCddLAorICAgICAgICAgICAgWydleGNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2VcXC5jcHAkJ10sCisKKyAg
ICAgICAgICAgICMgSW1hZ2VEZWNvZGVyU2tpYSBpcyBub3QgdXNlZCBvbiBtYWMuICBJbWFnZURl
Y29kZXJDRyBpcyB1c2VkIGluc3RlYWQuCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhXFwuY3BwJCddLAotICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURl
Y29kZXJcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHXFwuY3BwJCddLAogCiAgICAgICAgICAgICAj
IEFnYWluLCBTa2lhIGlzIG5vdCB1c2VkIG9uIE1hYy4KICAgICAgICAgICAgIFsnZXhjbHVkZScs
ICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWFcXC5jcHAkJ10sCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIGlubGlu
ZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCiAgICAgLy8gQ3JlYXRlIHRoZSBpbWFn
ZSBpZiBpdCBkb2Vzbid0IHlldCBleGlzdC4KICAgICBpZiAobV9pbWFnZSkKICAgICAgICAgcmV0
dXJuOwotI2lmIFBMQVRGT1JNKENHKQorI2lmIFBMQVRGT1JNKENHKSAmJiBVU0UoQ0dfSU1BR0Vf
REVDT0RFUlMpCiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24v
cGRmIikgewogICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKCk7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgJKHJldmlzaW9uIDcwMTcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMiBAQCBjbGFzcyBJbnRTaXplOwog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgUExBVEZPUk0oQ0cpCisjaWYgVVNFKEdDX0lNQUdF
X0RFQ09ERVJTKQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRy
OworI2Vsc2UKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRp
dmVJbWFnZVNvdXJjZVB0cjsKKyNlbmRpZgogdHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdl
UHRyOwogI2VsaWYgUExBVEZPUk0oT1BFTlZHKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05l
d05hdGl2ZUltYWdlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0aGUgcmln
aHQgY29sb3Igc3BhY2UuCisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCKTsK
KyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9ieXRlcy5kYXRhKCksIG1fYnl0ZXMuc2l6ZSgpLCAw
KTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gYWxwaGFJbmZvID0gbV9wcmVtdWx0aXBseUFscGhh
ID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFGaXJzdDsK
KworICAgIHJldHVybiBDR0ltYWdlQ3JlYXRlKAorICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSwg
OCwgMzIsIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSwgY29sb3JTcGFjZS5nZXQoKSwKKyAg
ICAgICAgYWxwaGFJbmZvIHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkJKHJldmlz
aW9uIDcwMTcxKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9tYWMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBj
bGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1QCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY29tcHMpCiAKICAgICBkZWYgX2NoZWNrX3dkaWZm
X2luc3RhbGwoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHRyeToKICAgICAg
ICAgICAgICMgV2UncmUgaWdub3JpbmcgdGhlIHJldHVybiBhbmQgYWx3YXlzIHJldHVybmluZyBU
cnVlCiAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYuX3BhdGhf
dG9fd2RpZmYoKV0sIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71379</attachid>
            <date>2010-10-20 18:42:45 -0700</date>
            <delta_ts>2010-10-21 00:18:20 -0700</delta_ts>
            <desc>seems to work</desc>
            <filename>bug-47974-20101020184244.patch</filename>
            <type>text/plain</type>
            <size>11410</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMTAtMjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKwog
MjAxMC0xMC0yMCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ0LDYgKzI4NDQsNyBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29k
ZXJDYWlyby5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0lt
YWdlRGVjb2RlckNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDcwMTcxKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTE2NSwyMyArMTE2NSwxNCBAQAogICAgICAgICAgICAg
IyBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGlu
c3RlYWQuCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VDaHJvbWl1bVxcLmNwcCQnXSwKIAotICAgICAgICAgICAgIyBUaGUgTWFjIHVzZXMg
SW1hZ2VTb3VyY2VDRy5jcHAgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy9jZywgaW5jbHVkZWQKLSAg
ICAgICAgICAgICMgYnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCi0gICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VcXC5jcHAkJ10sCi0KLSAgICAgICAg
ICAgICMgU2tpYSBpbWFnZS1kZWNvZGVycyBhcmUgYWxzbyBub3QgdXNlZCBvbiBtYWMuICBDb3Jl
R3JhcGhpY3MKLSAgICAgICAgICAgICMgaXMgdXNlZCBkaXJlY3RseSBpbnN0ZWFkLgotICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlclxc
LmgkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXJcXC4oY3BwfGgpJCddLAot
ICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0g
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQ
SW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAg
ICAgICAgICAgICMgVGhlIE1hYyBkb2VzIG5vdCB1c2UgSW1hZ2VTb3VyY2VDRy5jcHAgZnJvbSBw
bGF0Zm9ybS9ncmFwaGljcy9jZworICAgICAgICAgICAgIyBldmVuIHRob3VnaCBpdCBpcyBpbmNs
dWRlZCBieSByZWdleCBhYm92ZS4KKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHXFwuY3BwJCddLAorICAgICAgICAgICAgWydleGNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2VcXC5jcHAkJ10sCisKKyAg
ICAgICAgICAgICMgSW1hZ2VEZWNvZGVyU2tpYSBpcyBub3QgdXNlZCBvbiBtYWMuICBJbWFnZURl
Y29kZXJDRyBpcyB1c2VkIGluc3RlYWQuCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhXFwuY3BwJCddLAotICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURl
Y29kZXJcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHXFwuY3BwJCddLAogCiAgICAgICAgICAgICAj
IEFnYWluLCBTa2lhIGlzIG5vdCB1c2VkIG9uIE1hYy4KICAgICAgICAgICAgIFsnZXhjbHVkZScs
ICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWFcXC5jcHAkJ10sCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIGlubGlu
ZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCiAgICAgLy8gQ3JlYXRlIHRoZSBpbWFn
ZSBpZiBpdCBkb2Vzbid0IHlldCBleGlzdC4KICAgICBpZiAobV9pbWFnZSkKICAgICAgICAgcmV0
dXJuOwotI2lmIFBMQVRGT1JNKENHKQorI2lmIFBMQVRGT1JNKENHKSAmJiBVU0UoQ0dfSU1BR0Vf
REVDT0RFUlMpCiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24v
cGRmIikgewogICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKCk7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgJKHJldmlzaW9uIDcwMTcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMiBAQCBjbGFzcyBJbnRTaXplOwog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgUExBVEZPUk0oQ0cpCisjaWYgVVNFKEdDX0lNQUdF
X0RFQ09ERVJTKQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRy
OworI2Vsc2UKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRp
dmVJbWFnZVNvdXJjZVB0cjsKKyNlbmRpZgogdHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdl
UHRyOwogI2VsaWYgUExBVEZPUk0oT1BFTlZHKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNzAxNzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsOCBAQCBSR0JBMzJCdWZm
ZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvCiAKIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVh
cigpCiB7Ci0gICAgbV9ieXRlcy5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7
CisgICAgbV9ieXRlcyA9IDA7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5P
VEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNo
ZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVy
IGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTM4LDE2ICsxMzksMTkg
QEAgdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKIAogdm9pZCBSR0JBMzJCdWZmZXI6Onplcm9G
aWxsKCkKIHsKLSAgICBtX2J5dGVzLmZpbGwoMCk7CisgICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1f
c2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOwogICAg
IG1faGFzQWxwaGEgPSB0cnVlOwogfQogCisjaWYgIVBMQVRGT1JNKENGKQorCiBib29sIFJHQkEz
MkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9ieXRl
cyA9IG90aGVyLm1fYnl0ZXM7CisgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5iYWNraW5nU3Rv
cmU7CisgICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKICAgICBtX3NpemUgPSBv
dGhlci5tX3NpemU7CiAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xNTcsNyArMTYxLDggQEAgYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUo
aW50IG5ld1dpZHRoLAogewogICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBm
b3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZSByZXF1ZXN0ZWQKICAgICAvLyBzaXplIHdhcyB0
b28gYmlnLi4uCi0gICAgbV9ieXRlcy5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQpOworICAg
IG1fYmFja2luZ1N0b3JlLnJlc2l6ZShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CisgICAgbV9ieXRl
cyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKICAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRo
LCBuZXdIZWlnaHQpOwogCiAgICAgLy8gWmVybyB0aGUgaW1hZ2UuCkBAIC0xNjYsNiArMTcxLDgg
QEAgYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLAogICAgIHJldHVybiB0
cnVlOwogfQogCisjZW5kaWYKKwogYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9oYXNBbHBoYTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNzAxNzEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzcsNiArMTM3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJp
dmF0ZToKKyNpZiBQTEFURk9STShDRikKKyAgICAgICAgdHlwZWRlZiBSZXRhaW5QdHI8Q0ZNdXRh
YmxlRGF0YVJlZj4gTmF0aXZlQmFja2luZ1N0b3JlOworI2Vsc2UKKyAgICAgICAgdHlwZWRlZiBW
ZWN0b3I8UGl4ZWxEYXRhPiBOYXRpdmVCYWNraW5nU3RvcmU7CisjZW5kaWYKKwogICAgICAgICBp
bnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwogCkBAIC0xNDks
NyArMTU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgbV9waXhtYXAgPSBR
UGl4bWFwKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8UVJnYio+
KG1faW1hZ2Uuc2NhbkxpbmUoeSkpICsgeDsKICNlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9i
eXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkpICsgeDsKKyAgICAgICAgICAgIHJldHVybiBtX2J5
dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQogCkBAIC0xNzYsNyAr
MTgyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faGFzQWxwaGE7CiAg
ICAgICAgIEludFNpemUgbV9zaXplOwogI2Vsc2UKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4g
bV9ieXRlczsKKyAgICAgICAgTmF0aXZlQmFja2luZ1N0b3JlIG1fYmFja2luZ1N0b3JlOworICAg
ICAgICBQaXhlbERhdGEqIG1fYnl0ZXM7ICAgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9i
YWNraW5nU3RvcmUuCiAgICAgICAgIEludFNpemUgbV9zaXplOyAgICAgICAvLyBUaGUgc2l6ZSBv
ZiB0aGUgYnVmZmVyLiAgVGhpcyBzaG91bGQgYmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzYW1lIGFzIEltYWdlRGVjb2Rlcjo6bV9zaXplLgogICAgICAgICBib29sIG1f
aGFzQWxwaGE7ICAgICAgLy8gV2hldGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhl
IGJ1ZmZlcgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURl
Y29kZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0ltYWdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBSR0JBMzJCdWZmZXI6
OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fYmFja2luZ1N0b3Jl
LmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
b3RoZXIubV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5n
ZXQoKSkpOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBzZXRIYXNBbHBoYShvdGhl
ci5tX2hhc0FscGhhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6
OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQoreworICAgIG1fYmFja2luZ1N0
b3JlLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CisgICAgQ0ZEYXRhU2V0TGVuZ3RoKG1fYmFja2luZ1N0b3JlLmdldCgpLCBuZXdXaWR0aCAqIG5l
d0hlaWdodCAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5n
ZXQoKSkpOworICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAg
ICB6ZXJvRmlsbCgpOworICAgIHJldHVybiB0cnVlOworfQorCitOYXRpdmVJbWFnZVB0ciBSR0JB
MzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IHRoZSByaWdodCBjb2xvciBzcGFjZS4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VHZW5lcmljUkdCKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBk
YXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKG1fYmFj
a2luZ1N0b3JlLmdldCgpKSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGFscGhhSW5mbyA9IG1f
cHJlbXVsdGlwbHlBbHBoYSA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJ
bWFnZUFscGhhRmlyc3Q7CisKKyAgICByZXR1cm4gQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgd2lk
dGgoKSwgaGVpZ2h0KCksIDgsIDMyLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSksIGNvbG9y
U3BhY2UuZ2V0KCksCisgICAgICAgIGFscGhhSW5mbyB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5CShyZXZpc2lvbiA3MDE3MSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYsNiArMTA2LDcgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbXBzKQogCiAgICAg
ZGVmIF9jaGVja193ZGlmZl9pbnN0YWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQogICAg
ICAgICB0cnk6CiAgICAgICAgICAgICAjIFdlJ3JlIGlnbm9yaW5nIHRoZSByZXR1cm4gYW5kIGFs
d2F5cyByZXR1cm5pbmcgVHJ1ZQogICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFtzZWxmLl9wYXRoX3RvX3dkaWZmKCldLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25v
cmVfZXJyb3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71397</attachid>
            <date>2010-10-21 00:18:25 -0700</date>
            <delta_ts>2010-10-21 00:37:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47974-20101021001823.patch</filename>
            <type>text/plain</type>
            <size>12618</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBXZWJLaXQncyBpbWFnZSBkZWNvZGVycyBob3cgdG8g
dGFsayB0byBDb3JlR3JhcGhpY3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBoYW5kbGUg
Y29sb3IgcHJvZmlsZXMsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBhCisgICAgICAgIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2c6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorCiAyMDEwLTEwLTIwICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzAwNDAuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0NCw2ICsyODQ0LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTExNjUsMjMgKzExNjUsMTQgQEAKICAgICAgICAg
ICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3Zl
LCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQ2hyb21pdW1cXC5jcHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1
c2VzIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVk
Ci0gICAgICAgICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAg
ICAgICAgICAjIFNraWEgaW1hZ2UtZGVjb2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAg
Q29yZUdyYXBoaWNzCi0gICAgICAgICAgICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXJcXC5oJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8
aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCdd
LAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10s
CisgICAgICAgICAgICAjIFRoZSBNYWMgZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3MvY2cKKyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMg
aW5jbHVkZWQgYnkgcmVnZXggYWJvdmUuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnZXhj
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlXFwuY3BwJCddLAor
CisgICAgICAgICAgICAjIEltYWdlRGVjb2RlclNraWEgaXMgbm90IHVzZWQgb24gbWFjLiAgSW1h
Z2VEZWNvZGVyQ0cgaXMgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYVxcLmNwcCQnXSwKLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1h
Z2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDR1xcLmNwcCQnXSwKIAogICAgICAgICAg
ICAgIyBBZ2FpbiwgU2tpYSBpcyBub3QgdXNlZCBvbiBNYWMuCiAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhXFwuY3BwJCddLApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJDb3JlL2xv
YWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBp
bmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQogICAgIC8vIENyZWF0ZSB0aGUg
aW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCiAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAg
IHJldHVybjsKLSNpZiBQTEFURk9STShDRykKKyNpZiBQTEFURk9STShDRykgJiYgIVVTRShXRUJL
SVRfSU1BR0VfREVDT0RFUlMpCiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBw
bGljYXRpb24vcGRmIikgewogICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3Jl
YXRlKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmgJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMiBAQCBjbGFzcyBJ
bnRTaXplOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgUExBVEZPUk0oQ0cpCisjaWYgVVNF
KFdFQktJVF9JTUFHRV9ERUNPREVSUykKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1h
Z2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKKyNlbHNlCiB0eXBlZGVmIENHSW1hZ2VT
b3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CisjZW5kaWYKIHR5cGVkZWYgQ0dJbWFnZVJl
ZiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFBMQVRGT1JNKE9QRU5WRykKIGNsYXNzIEltYWdlRGVj
b2RlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDgg
QEAgUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjbwogCiB2b2lkIFJHQkEz
MkJ1ZmZlcjo6Y2xlYXIoKQogewotICAgIG1fYnl0ZXMuY2xlYXIoKTsKKyAgICBtX2JhY2tpbmdT
dG9yZS5jbGVhcigpOworICAgIG1fYnl0ZXMgPSAwOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0
eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRh
dGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTEz
OCwxNiArMTM5LDE5IEBAIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiAKIHZvaWQgUkdCQTMy
QnVmZmVyOjp6ZXJvRmlsbCgpCiB7Ci0gICAgbV9ieXRlcy5maWxsKDApOworICAgIG1lbXNldCht
X2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhl
bERhdGEpKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAorI2lmICFQTEFURk9STShDRikK
KwogYm9vbCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYg
b3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fYnl0ZXMgPSBvdGhlci5tX2J5dGVzOworICAgIG1fYmFja2luZ1N0b3JlID0gb3Ro
ZXIuYmFja2luZ1N0b3JlOworICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOwogICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxw
aGEpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTU3LDcgKzE2MSw4IEBAIGJvb2wgUkdCQTMyQnVm
ZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwKIHsKICAgICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3
YXkgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSBpZiB0aGUgcmVxdWVzdGVkCiAgICAg
Ly8gc2l6ZSB3YXMgdG9vIGJpZy4uLgotICAgIG1fYnl0ZXMucmVzaXplKG5ld1dpZHRoICogbmV3
SGVpZ2h0KTsKKyAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQp
OworICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAgbV9zaXplID0gSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKIAogICAgIC8vIFplcm8gdGhlIGltYWdlLgpAQCAt
MTY2LDYgKzE3MSw4IEBAIGJvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2VuZGlmCisKIGJvb2wgUkdCQTMyQnVmZmVyOjpoYXNB
bHBoYSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faGFzQWxwaGE7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDcwMjA0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6CisjaWYgUExBVEZPUk0oQ0YpCisgICAgICAgIHR5cGVkZWYgUmV0
YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IE5hdGl2ZUJhY2tpbmdTdG9yZTsKKyNlbHNlCisgICAg
ICAgIHR5cGVkZWYgVmVjdG9yPFBpeGVsRGF0YT4gTmF0aXZlQmFja2luZ1N0b3JlOworI2VuZGlm
CisKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25z
dDsKIApAQCAtMTQ5LDcgKzE1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IG1fcGl4bWFwID0gUVBpeG1hcCgpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPFFSZ2IqPihtX2ltYWdlLnNjYW5MaW5lKHkpKSArIHg7CiAjZWxzZQotICAgICAgICAg
ICAgcmV0dXJuIG1fYnl0ZXMuZGF0YSgpICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAg
ICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OwogI2VuZGlmCiAgICAgICAgIH0K
IApAQCAtMTc2LDcgKzE4Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X2hhc0FscGhhOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICNlbHNlCi0gICAgICAgIFZlY3Rv
cjxQaXhlbERhdGE+IG1fYnl0ZXM7CisgICAgICAgIE5hdGl2ZUJhY2tpbmdTdG9yZSBtX2JhY2tp
bmdTdG9yZTsKKyAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAgIC8vIFRoZSBtZW1vcnkgaXMg
YmFja2VkIGJ5IG1fYmFja2luZ1N0b3JlLgogICAgICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAg
Ly8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KICAg
ICAgICAgYm9vbCBtX2hhc0FscGhhOyAgICAgIC8vIFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUg
cGl4ZWxzIGluIHRoZSBidWZmZXIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
LCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
UkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQor
eworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBt
X2JhY2tpbmdTdG9yZS5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsIG90aGVyLm1fYmFja2luZ1N0b3JlLmdldCgpKSk7CisgICAgbV9ieXRlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxEYXRhKj4oQ0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9i
YWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0
SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKK3sKKyAg
ICBtX2JhY2tpbmdTdG9yZS5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgMCkpOworICAgIENGRGF0YVNldExlbmd0aChtX2JhY2tpbmdTdG9yZS5nZXQoKSwg
bmV3V2lkdGggKiBuZXdIZWlnaHQgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9ieXRlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxEYXRhKj4oQ0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9i
YWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdI
ZWlnaHQpOworCisgICAgemVyb0ZpbGwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTmF0aXZl
SW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogRmlndXJlIG91dCB0aGUgcmlnaHQgY29sb3Igc3BhY2UuCisgICAgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVX
aXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQikpOworICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aENGRGF0YShtX2JhY2tpbmdTdG9yZS5nZXQoKSkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBh
bHBoYUluZm8gPSBtX3ByZW11bHRpcGx5QWxwaGEgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IDoga0NHSW1hZ2VBbHBoYUZpcnN0OworCisgICAgcmV0dXJuIENHSW1hZ2VDcmVhdGUo
d2lkdGgoKSwgaGVpZ2h0KCksIDgsIDMyLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSksIGNv
bG9yU3BhY2UuZ2V0KCksCisgICAgICAgIGFscGhhSW5mbyB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMy
SG9zdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gNzAyMDkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAor
CisgICAgICAgIEVuYWJsZSBXZWJLaXQncyBpbWFnZSBkZWNvZGVycy4KKworICAgICAgICAqIGZl
YXR1cmVzLmd5cGk6CisKIDIwMTAtMTAtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDE2NS4K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYktpdC9jaHJv
bWl1bS9mZWF0dXJlcy5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAgICAg
ICAgICdFTkFCTEVfWFNMVD0xJywKICAgICAgICAgJ1dURl9VU0VfQUNDRUxFUkFURURfQ09NUE9T
SVRJTkc9MScsCiAgICAgICAgICdXVEZfVVNFX1dFQlA9MScsCisgICAgICAgICdXVEZfVVNFX1dF
QktJVF9JTUFHRV9ERUNPREVSUz0xJywKICAgICAgIF0sCiAKICAgICAgICd1c2VfYWNjZWxlcmF0
ZWRfY29tcG9zaXRpbmclJzogMSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71398</attachid>
            <date>2010-10-21 00:37:05 -0700</date>
            <delta_ts>2010-10-22 12:57:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47974-20101021003703.patch</filename>
            <type>text/plain</type>
            <size>16022</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBXZWJLaXQncyBpbWFnZSBkZWNvZGVycyBob3cgdG8g
dGFsayB0byBDb3JlR3JhcGhpY3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBoYW5kbGUg
Y29sb3IgcHJvZmlsZXMsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBhCisgICAgICAgIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2c6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorCiAyMDEwLTEwLTIwICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzAwNDAuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0NCw2ICsyODQ0LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTExNjUsMjMgKzExNjUsMTQgQEAKICAgICAgICAg
ICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3Zl
LCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQ2hyb21pdW1cXC5jcHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1
c2VzIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVk
Ci0gICAgICAgICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAg
ICAgICAgICAjIFNraWEgaW1hZ2UtZGVjb2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAg
Q29yZUdyYXBoaWNzCi0gICAgICAgICAgICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXJcXC5oJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8
aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCdd
LAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10s
CisgICAgICAgICAgICAjIFRoZSBNYWMgZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3MvY2cKKyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMg
aW5jbHVkZWQgYnkgcmVnZXggYWJvdmUuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnZXhj
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlXFwuY3BwJCddLAor
CisgICAgICAgICAgICAjIEltYWdlRGVjb2RlclNraWEgaXMgbm90IHVzZWQgb24gbWFjLiAgSW1h
Z2VEZWNvZGVyQ0cgaXMgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYVxcLmNwcCQnXSwKLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1h
Z2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDR1xcLmNwcCQnXSwKIAogICAgICAgICAg
ICAgIyBBZ2FpbiwgU2tpYSBpcyBub3QgdXNlZCBvbiBNYWMuCiAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhXFwuY3BwJCddLApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJDb3JlL2xv
YWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBp
bmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQogICAgIC8vIENyZWF0ZSB0aGUg
aW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCiAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAg
IHJldHVybjsKLSNpZiBQTEFURk9STShDRykKKyNpZiBQTEFURk9STShDRykgJiYgIVVTRShXRUJL
SVRfSU1BR0VfREVDT0RFUlMpCiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBw
bGljYXRpb24vcGRmIikgewogICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3Jl
YXRlKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmgJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMiBAQCBjbGFzcyBJ
bnRTaXplOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgUExBVEZPUk0oQ0cpCisjaWYgVVNF
KFdFQktJVF9JTUFHRV9ERUNPREVSUykKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1h
Z2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKKyNlbHNlCiB0eXBlZGVmIENHSW1hZ2VT
b3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CisjZW5kaWYKIHR5cGVkZWYgQ0dJbWFnZVJl
ZiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFBMQVRGT1JNKE9QRU5WRykKIGNsYXNzIEltYWdlRGVj
b2RlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDgg
QEAgUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjbwogCiB2b2lkIFJHQkEz
MkJ1ZmZlcjo6Y2xlYXIoKQogewotICAgIG1fYnl0ZXMuY2xlYXIoKTsKKyAgICBtX2JhY2tpbmdT
dG9yZS5jbGVhcigpOworICAgIG1fYnl0ZXMgPSAwOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0
eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRh
dGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTEz
OCwxNiArMTM5LDE5IEBAIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiAKIHZvaWQgUkdCQTMy
QnVmZmVyOjp6ZXJvRmlsbCgpCiB7Ci0gICAgbV9ieXRlcy5maWxsKDApOworICAgIG1lbXNldCht
X2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhl
bERhdGEpKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAorI2lmICFQTEFURk9STShDRikK
KwogYm9vbCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYg
b3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fYnl0ZXMgPSBvdGhlci5tX2J5dGVzOworICAgIG1fYmFja2luZ1N0b3JlID0gb3Ro
ZXIuYmFja2luZ1N0b3JlOworICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOwogICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxw
aGEpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTU3LDcgKzE2MSw4IEBAIGJvb2wgUkdCQTMyQnVm
ZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwKIHsKICAgICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3
YXkgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSBpZiB0aGUgcmVxdWVzdGVkCiAgICAg
Ly8gc2l6ZSB3YXMgdG9vIGJpZy4uLgotICAgIG1fYnl0ZXMucmVzaXplKG5ld1dpZHRoICogbmV3
SGVpZ2h0KTsKKyAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQp
OworICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAgbV9zaXplID0gSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKIAogICAgIC8vIFplcm8gdGhlIGltYWdlLgpAQCAt
MTY2LDYgKzE3MSw4IEBAIGJvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2VuZGlmCisKIGJvb2wgUkdCQTMyQnVmZmVyOjpoYXNB
bHBoYSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faGFzQWxwaGE7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDcwMjA0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6CisjaWYgUExBVEZPUk0oQ0YpCisgICAgICAgIHR5cGVkZWYgUmV0
YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IE5hdGl2ZUJhY2tpbmdTdG9yZTsKKyNlbHNlCisgICAg
ICAgIHR5cGVkZWYgVmVjdG9yPFBpeGVsRGF0YT4gTmF0aXZlQmFja2luZ1N0b3JlOworI2VuZGlm
CisKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25z
dDsKIApAQCAtMTQ5LDcgKzE1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IG1fcGl4bWFwID0gUVBpeG1hcCgpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPFFSZ2IqPihtX2ltYWdlLnNjYW5MaW5lKHkpKSArIHg7CiAjZWxzZQotICAgICAgICAg
ICAgcmV0dXJuIG1fYnl0ZXMuZGF0YSgpICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAg
ICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OwogI2VuZGlmCiAgICAgICAgIH0K
IApAQCAtMTc2LDcgKzE4Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X2hhc0FscGhhOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICNlbHNlCi0gICAgICAgIFZlY3Rv
cjxQaXhlbERhdGE+IG1fYnl0ZXM7CisgICAgICAgIE5hdGl2ZUJhY2tpbmdTdG9yZSBtX2JhY2tp
bmdTdG9yZTsKKyAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAgIC8vIFRoZSBtZW1vcnkgaXMg
YmFja2VkIGJ5IG1fYmFja2luZ1N0b3JlLgogICAgICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAg
Ly8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KICAg
ICAgICAgYm9vbCBtX2hhc0FscGhhOyAgICAgIC8vIFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUg
cGl4ZWxzIGluIHRoZSBidWZmZXIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCShyZXZpc2lv
biA3MDIwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIE5hdGl2ZUlt
YWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmUKIHsKICAgICByZXR1cm4gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4oCi0gICAgICAgICAgICBtX2J5dGVz
LmRhdGEoKSkpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwKKyAgICAg
ICAgICAgIG1fYnl0ZXMpKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCks
CiAgICAgICAgIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9J
bWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25z
dCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2JhY2tpbmdTdG9yZS5hZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIG90aGVyLm1fYmFja2luZ1N0b3Jl
LmdldCgpKSk7CisgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxEYXRhKj4oQ0ZE
YXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKK3sKKyAgICBtX2JhY2tpbmdTdG9yZS5hZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIENGRGF0YVNldExlbmd0
aChtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbmV3V2lkdGggKiBuZXdIZWlnaHQgKiBzaXplb2YoUGl4
ZWxEYXRhKSk7CisgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxEYXRhKj4oQ0ZE
YXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX3NpemUg
PSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworCisgICAgemVyb0ZpbGwoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2
ZUltYWdlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0aGUgcmlnaHQgY29s
b3Igc3BhY2UuCisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9w
dENGLCBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQikp
OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0Ys
IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShtX2JhY2tpbmdTdG9yZS5nZXQoKSkpOwor
CisgICAgQ0dJbWFnZUFscGhhSW5mbyBhbHBoYUluZm8gPSBtX3ByZW11bHRpcGx5QWxwaGEgPyBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NHSW1hZ2VBbHBoYUZpcnN0OworCisg
ICAgcmV0dXJuIENHSW1hZ2VDcmVhdGUod2lkdGgoKSwgaGVpZ2h0KCksIDgsIDMyLCB3aWR0aCgp
ICogc2l6ZW9mKFBpeGVsRGF0YSksIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgIGFscGhhSW5m
byB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNv
ZGVySGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZl
cjo6YXNOZXdOYXRpdmUKICAgICBpbnQgYnl0ZXNQZXJSb3cgPSB3aWR0aCgpICogc2l6ZW9mKFBp
eGVsRGF0YSk7CiAgICAgT3duUHRyPEJCaXRtYXA+IGJpdG1hcChuZXcgQkJpdG1hcChCUmVjdCgw
LCAwLCB3aWR0aCgpIC0gMSwgaGVpZ2h0KCkgLSAxKSwgMCwgQl9SR0JBMzIsIGJ5dGVzUGVyUm93
KSk7CiAKLSAgICBjb25zdCB1aW50OCogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OCo+KG1fYnl0ZXMuZGF0YSgpKTsKKyAgICBjb25zdCB1aW50OCogc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OCo+KG1fYnl0ZXMpOwogICAgIHVpbnQ4KiBkZXN0aW5hdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihiaXRtYXAtPkJpdHMoKSk7CiAgICAgaW50IGgg
PSBoZWlnaHQoKTsKICAgICBpbnQgdyA9IHdpZHRoKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL29wZW52Zy9JbWFnZURlY29kZXJPcGVuVkcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9w
ZW5WRy5jcHAJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlCiAgICAg
ICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIFZHX0lNQUdF
X1FVQUxJVFlfRkFTVEVSKTsKICAgICAgICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwogCi0g
ICAgICAgICAgICBQaXhlbERhdGEqIHBpeGVsRGF0YSA9IGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4o
bV9ieXRlcy5kYXRhKCkpOworICAgICAgICAgICAgUGl4ZWxEYXRhKiBwaXhlbERhdGEgPSBjb25z
dF9jYXN0PFBpeGVsRGF0YSo+KG1fYnl0ZXMpOwogICAgICAgICAgICAgcGl4ZWxEYXRhICs9ICh0
aWxlUmVjdC55KCkgKiB3aWR0aCgpKSArIHRpbGVSZWN0LngoKTsKIAogICAgICAgICAgICAgdmdJ
bWFnZVN1YkRhdGEoaW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVs
RGF0YSksCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVj
b2Rlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3d4L0ltYWdlRGVjb2Rlcld4LmNwcAkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsMTIgKzQ4LDEyIEBAIE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRp
dmUKICAgICAgICAgLy8gTkI6IEl0IGFwcGVhcnMgdGhhdCB0aGUgZGF0YSBpcyBpbiBCR1JBIGZv
cm1hdCBpbnN0ZWFkIG9mIFJHQkEgZm9ybWF0LgogICAgICAgICAvLyBUaGlzIGNvZGUgd29ya3Mg
cHJvcGVybHkgb24gYm90aCBwcGMgYW5kIGludGVsLCBtZWFuaW5nIHRoZSBpc3N1ZSBpcwogICAg
ICAgICAvLyBsaWtlbHkgbm90IGFuIGlzc3VlIG9mIGJ5dGUgb3JkZXIgZ2V0dGluZyBtaXhlZCB1
cCBvbiBkaWZmZXJlbnQgYXJjaHMuIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRl
cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2J5dGVzLmRhdGEoKTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopbV9ieXRlczsKICAg
ICAgICAgaW50IHJvd0NvdW50ZXIgPSAwOwogICAgICAgICBsb25nIHBpeGVsQ291bnRlciA9IDA7
CiAgICAgICAgIFd4UGl4ZWxEYXRhOjpJdGVyYXRvciBwKGRhdGEpOwogICAgICAgICBXeFBpeGVs
RGF0YTo6SXRlcmF0b3Igcm93U3RhcnQgPSBwOyAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2J5dGVzLnNpemUoKSAqIHNpemVvZihQaXhlbERhdGEpOyBpICs9IHNpemVvZihQaXhl
bERhdGEpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplLndpZHRoKCkg
KiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsgaSArPSBzaXplb2YoUGl4ZWxE
YXRhKSkgewogICAgICAgICAgICAgICAgIHAuUmVkKCkgPSBieXRlc1tpICsgMl07CiAgICAgICAg
ICAgICAgICAgcC5HcmVlbigpID0gYnl0ZXNbaSArIDFdOwogICAgICAgICAgICAgICAgIHAuQmx1
ZSgpID0gYnl0ZXNbaSArIDBdOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MDIwOSkKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMC0xMC0yMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2hyb21p
dW0gTWFjIHNob3VsZCB1c2UgV2ViS2l0J3MgaW1hZ2UgZGVjb2RlcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3OTc0CisKKyAgICAgICAgRW5hYmxl
IFdlYktpdCdzIGltYWdlIGRlY29kZXJzLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwog
MjAxMC0xMC0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjcwMTY1LgpJbmRleDogV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAKICAgICAgICAgJ0VOQUJMRV9YU0xU
PTEnLAogICAgICAgICAnV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORz0xJywKICAgICAg
ICAgJ1dURl9VU0VfV0VCUD0xJywKKyAgICAgICAgJ1dURl9VU0VfV0VCS0lUX0lNQUdFX0RFQ09E
RVJTPTEnLAogICAgICAgXSwKIAogICAgICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUn
OiAxLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71588</attachid>
            <date>2010-10-22 12:57:44 -0700</date>
            <delta_ts>2010-10-22 13:11:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47974-20101022125743.patch</filename>
            <type>text/plain</type>
            <size>17922</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBXZWJLaXQncyBpbWFnZSBkZWNvZGVycyBob3cgdG8g
dGFsayB0byBDb3JlR3JhcGhpY3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBoYW5kbGUg
Y29sb3IgcHJvZmlsZXMsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBhCisgICAgICAgIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2c6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorCiAyMDEwLTEwLTIwICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzAwNDAuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0NCw2ICsyODQ0LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTExNjUsMjMgKzExNjUsMTQgQEAKICAgICAgICAg
ICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3Zl
LCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQ2hyb21pdW1cXC5jcHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1
c2VzIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVk
Ci0gICAgICAgICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAg
ICAgICAgICAjIFNraWEgaW1hZ2UtZGVjb2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAg
Q29yZUdyYXBoaWNzCi0gICAgICAgICAgICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXJcXC5oJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8
aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCdd
LAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10s
CisgICAgICAgICAgICAjIFRoZSBNYWMgZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3MvY2cKKyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMg
aW5jbHVkZWQgYnkgcmVnZXggYWJvdmUuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnZXhj
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlXFwuY3BwJCddLAor
CisgICAgICAgICAgICAjIEltYWdlRGVjb2RlclNraWEgaXMgbm90IHVzZWQgb24gbWFjLiAgSW1h
Z2VEZWNvZGVyQ0cgaXMgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYVxcLmNwcCQnXSwKLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1h
Z2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDR1xcLmNwcCQnXSwKIAogICAgICAgICAg
ICAgIyBBZ2FpbiwgU2tpYSBpcyBub3QgdXNlZCBvbiBNYWMuCiAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhXFwuY3BwJCddLApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDcwMjA0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIxMTUyLDcgKzIxMTUyLDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7
CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJ
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdp
b24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJl
Z2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlz
aW9uIDcwMjA0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUlt
YWdlKCkKICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0Lgog
ICAgIGlmIChtX2ltYWdlKQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oQ0cpCisjaWYg
UExBVEZPUk0oQ0cpICYmICFVU0UoV0VCS0lUX0lNQUdFX0RFQ09ERVJTKQogICAgIGlmIChtX3Jl
c3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIpIHsKICAgICAgICAgbV9pbWFn
ZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiA3MDIwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsMTIgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAog
I2lmIFBMQVRGT1JNKENHKQorI2lmIFVTRShXRUJLSVRfSU1BR0VfREVDT0RFUlMpCitjbGFzcyBJ
bWFnZURlY29kZXI7Cit0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7
CisjZWxzZQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwor
I2VuZGlmCiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9S
TShPUEVOVkcpCiBjbGFzcyBJbWFnZURlY29kZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3MDIwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpv
cGVyYXRvcj0oY28KICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhp
czsKIAotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKKyAgICBjb3B5UmVmZXJlbmNlVG9CaXRt
YXBEYXRhKG90aGVyKTsKICAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CiAgICAgc2V0U3RhdHVz
KG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAg
LTEyOCw3ICsxMjgsOCBAQCBSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNv
CiAKIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiB7Ci0gICAgbV9ieXRlcy5jbGVhcigpOwor
ICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgbV9ieXRlcyA9IDA7CiAgICAgbV9zdGF0
dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJz
IGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVl
IHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZl
cigpIGFuZApAQCAtMTM4LDE2ICsxMzksMjUgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkK
IAogdm9pZCBSR0JBMzJCdWZmZXI6Onplcm9GaWxsKCkKIHsKLSAgICBtX2J5dGVzLmZpbGwoMCk7
CisgICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgp
ICogc2l6ZW9mKFBpeGVsRGF0YSkpOwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCisjaWYg
IVBMQVRGT1JNKENGKQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weVJlZmVyZW5jZVRvQml0bWFw
RGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIEFTU0VSVCh0aGlzICE9ICZv
dGhlcik7CisgICAgY29weUJpdG1hcHREYXRhKG90aGVyKTsKK30KKwogYm9vbCBSR0JBMzJCdWZm
ZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCiB7CiAgICAgaWYg
KHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYnl0ZXMgPSBv
dGhlci5tX2J5dGVzOworICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIuYmFja2luZ1N0b3JlOwor
ICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAgbV9zaXplID0gb3RoZXIu
bV9zaXplOwogICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtMTU3LDcgKzE2Nyw4IEBAIGJvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBu
ZXdXaWR0aCwKIHsKICAgICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sgZm9yIGFs
bG9jYXRpb24gZmFpbHVyZSBpZiB0aGUgcmVxdWVzdGVkCiAgICAgLy8gc2l6ZSB3YXMgdG9vIGJp
Zy4uLgotICAgIG1fYnl0ZXMucmVzaXplKG5ld1dpZHRoICogbmV3SGVpZ2h0KTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQpOworICAgIG1fYnl0ZXMgPSBt
X2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3
SGVpZ2h0KTsKIAogICAgIC8vIFplcm8gdGhlIGltYWdlLgpAQCAtMTY2LDYgKzE3Nyw4IEBAIGJv
b2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorI2VuZGlmCisKIGJvb2wgUkdCQTMyQnVmZmVyOjpoYXNBbHBoYSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faGFzQWxwaGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
NiArODcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBjYW4gYmUgbW9kaWZp
ZWQgaW5kZXBlbmRlbnRseS4gIFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNjZWVkZWQuCiAg
ICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcik7CiAK
KyAgICAgICAgLy8gQ3JlYXRlcyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGltYWdlIGRhdGEgaW4g
fG90aGVyfC4gIFRoZSB0d28gaW1hZ2VzCisgICAgICAgIC8vIHNoYXJlIGEgY29tbW9uIGJhY2tp
bmcgc3RvcmUuCisgICAgICAgIHZvaWQgY29weVJlZmVyZW5jZVRvQml0bWFwRGF0YShjb25zdCBS
R0JBMzJCdWZmZXImIG90aGVyKTsKKwogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEg
YXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8g
c2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBp
bmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4KQEAgLTEzNyw2ICsxNDEsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2VuZGlmCiAKICAgICBwcml2YXRlOgorI2lmIFBMQVRGT1JNKENGKQorICAg
ICAgICB0eXBlZGVmIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBOYXRpdmVCYWNraW5nU3Rv
cmU7CisjZWxzZQorICAgICAgICB0eXBlZGVmIFZlY3RvcjxQaXhlbERhdGE+IE5hdGl2ZUJhY2tp
bmdTdG9yZTsKKyNlbmRpZgorCiAgICAgICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgICAgICBp
bnQgaGVpZ2h0KCkgY29uc3Q7CiAKQEAgLTE0OSw3ICsxNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKICAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0X3B0cjxRUmdiKj4obV9pbWFnZS5zY2FuTGluZSh5KSkgKyB4Owog
I2Vsc2UKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzLmRhdGEoKSArICh5ICogd2lkdGgoKSkg
KyB4OworICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNl
bmRpZgogICAgICAgICB9CiAKQEAgLTE3Niw3ICsxODYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAjZWxz
ZQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2J5dGVzOworICAgICAgICBOYXRpdmVCYWNr
aW5nU3RvcmUgbV9iYWNraW5nU3RvcmU7CisgICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgICAv
LyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KICAgICAgICAgSW50U2l6
ZSBtX3NpemU7ICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHNob3VsZCBi
ZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgSW1hZ2VEZWNv
ZGVyOjptX3NpemUuCiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgICAgICAvLyBXaGV0aGVyIG9y
IG5vdCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVyCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNh
aXJvLmNwcAkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlCiB7CiAgICAg
cmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAogICAgICAgICByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+KAotICAg
ICAgICAgICAgbV9ieXRlcy5kYXRhKCkpKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgoKSwg
aGVpZ2h0KCksCisgICAgICAgICAgICBtX2J5dGVzKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdp
ZHRoKCksIGhlaWdodCgpLAogICAgICAgICB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2Rl
ckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nn
L0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dDb2xvclNwYWNlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
SW1hZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29w
eVJlZmVyZW5jZVRvQml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAg
IEFTU0VSVCh0aGlzICE9ICZvdGhlcik7CisgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2Jh
Y2tpbmdTdG9yZTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxQaXhlbERhdGEqPihD
RkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5nZXQoKSkpOworICAgIC8vIEZJ
WE1FOiBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHNlZW1zIHJlZHVuZGFudCB3aXRoIFJHQkEz
MkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEuCisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAg
IHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6
Y29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAgICBpZiAodGhp
cyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9iYWNraW5nU3RvcmUu
YWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBv
dGhlci5tX2JhY2tpbmdTdG9yZS5nZXQoKSkpOworICAgIG1fYnl0ZXMgPSByZWludGVycHJldF9j
YXN0PFBpeGVsRGF0YSo+KENGRGF0YUdldE11dGFibGVCeXRlUHRyKG1fYmFja2luZ1N0b3JlLmdl
dCgpKSk7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIHNldEhhc0FscGhhKG90aGVy
Lm1faGFzQWxwaGEpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6
c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCit7CisgICAgbV9iYWNraW5nU3Rv
cmUuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsK
KyAgICBDRkRhdGFTZXRMZW5ndGgobV9iYWNraW5nU3RvcmUuZ2V0KCksIG5ld1dpZHRoICogbmV3
SGVpZ2h0ICogc2l6ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYnl0ZXMgPSByZWludGVycHJldF9j
YXN0PFBpeGVsRGF0YSo+KENGRGF0YUdldE11dGFibGVCeXRlUHRyKG1fYmFja2luZ1N0b3JlLmdl
dCgpKSk7CisgICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKworICAg
IHplcm9GaWxsKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK05hdGl2ZUltYWdlUHRyIFJHQkEz
MkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgdGhlIHJpZ2h0IGNvbG9yIHNwYWNlLgorICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29s
b3JTcGFjZUdlbmVyaWNSR0IpKTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRh
dGFQcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEobV9iYWNr
aW5nU3RvcmUuZ2V0KCkpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gYWxwaGFJbmZvID0gbV9w
cmVtdWx0aXBseUFscGhhID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0lt
YWdlQWxwaGFGaXJzdDsKKworICAgIHJldHVybiBDR0ltYWdlQ3JlYXRlKHdpZHRoKCksIGhlaWdo
dCgpLCA4LCAzMiwgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpLCBjb2xvclNwYWNlLmdldCgp
LAorICAgICAgICBhbHBoYUluZm8gfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAkocmV2aXNp
b24gNzAyMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdl
RGVjb2RlckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBOYXRpdmVJ
bWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlCiAgICAgaW50IGJ5dGVzUGVyUm93ID0g
d2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwogICAgIE93blB0cjxCQml0bWFwPiBiaXRtYXAo
bmV3IEJCaXRtYXAoQlJlY3QoMCwgMCwgd2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSksIDAsIEJf
UkdCQTMyLCBieXRlc1BlclJvdykpOwogCi0gICAgY29uc3QgdWludDgqIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPihtX2J5dGVzLmRhdGEoKSk7CisgICAgY29uc3QgdWlu
dDgqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPihtX2J5dGVzKTsKICAg
ICB1aW50OCogZGVzdGluYXRpb24gPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oYml0bWFwLT5C
aXRzKCkpOwogICAgIGludCBoID0gaGVpZ2h0KCk7CiAgICAgaW50IHcgPSB3aWR0aCgpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3Bl
blZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL29w
ZW52Zy9JbWFnZURlY29kZXJPcGVuVkcuY3BwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9wZW5WRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVy
Ojphc05ld05hdGl2ZQogICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0
LmhlaWdodCgpLCBWR19JTUFHRV9RVUFMSVRZX0ZBU1RFUik7CiAgICAgICAgICAgICBBU1NFUlRf
VkdfTk9fRVJST1IoKTsKIAotICAgICAgICAgICAgUGl4ZWxEYXRhKiBwaXhlbERhdGEgPSBjb25z
dF9jYXN0PFBpeGVsRGF0YSo+KG1fYnl0ZXMuZGF0YSgpKTsKKyAgICAgICAgICAgIFBpeGVsRGF0
YSogcGl4ZWxEYXRhID0gY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5dGVzKTsKICAgICAgICAg
ICAgIHBpeGVsRGF0YSArPSAodGlsZVJlY3QueSgpICogd2lkdGgoKSkgKyB0aWxlUmVjdC54KCk7
CiAKICAgICAgICAgICAgIHZnSW1hZ2VTdWJEYXRhKGltYWdlLCByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihwaXhlbERhdGEpLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAJKHJldmlzaW9uIDcwMjA0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBOYXRpdmVJbWFnZVB0ciBSR0JB
MzJCdWZmZXI6OmFzTmV3TmF0aXZlCiAgICAgICAgIC8vIE5COiBJdCBhcHBlYXJzIHRoYXQgdGhl
IGRhdGEgaXMgaW4gQkdSQSBmb3JtYXQgaW5zdGVhZCBvZiBSR0JBIGZvcm1hdC4KICAgICAgICAg
Ly8gVGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5IG9uIGJvdGggcHBjIGFuZCBpbnRlbCwgbWVhbmlu
ZyB0aGUgaXNzdWUgaXMKICAgICAgICAgLy8gbGlrZWx5IG5vdCBhbiBpc3N1ZSBvZiBieXRlIG9y
ZGVyIGdldHRpbmcgbWl4ZWQgdXAgb24gZGlmZmVyZW50IGFyY2hzLiAKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopbV9ieXRlcy5kYXRh
KCk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gKGNvbnN0IHVuc2lnbmVk
IGNoYXIqKW1fYnl0ZXM7CiAgICAgICAgIGludCByb3dDb3VudGVyID0gMDsKICAgICAgICAgbG9u
ZyBwaXhlbENvdW50ZXIgPSAwOwogICAgICAgICBXeFBpeGVsRGF0YTo6SXRlcmF0b3IgcChkYXRh
KTsKICAgICAgICAgV3hQaXhlbERhdGE6Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsgCi0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ieXRlcy5zaXplKCkgKiBzaXplb2YoUGl4ZWxEYXRh
KTsgaSArPSBzaXplb2YoUGl4ZWxEYXRhKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSk7
IGkgKz0gc2l6ZW9mKFBpeGVsRGF0YSkpIHsKICAgICAgICAgICAgICAgICBwLlJlZCgpID0gYnl0
ZXNbaSArIDJdOwogICAgICAgICAgICAgICAgIHAuR3JlZW4oKSA9IGJ5dGVzW2kgKyAxXTsKICAg
ICAgICAgICAgICAgICBwLkJsdWUoKSA9IGJ5dGVzW2kgKyAwXTsKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gNzAyMDkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbY2hyb21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29k
ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3
NAorCisgICAgICAgIEVuYWJsZSBXZWJLaXQncyBpbWFnZSBkZWNvZGVycy4KKworICAgICAgICAq
IGZlYXR1cmVzLmd5cGk6CisKIDIwMTAtMTAtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDE2
NS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYktpdC9j
aHJvbWl1bS9mZWF0dXJlcy5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAg
ICAgICAgICdFTkFCTEVfWFNMVD0xJywKICAgICAgICAgJ1dURl9VU0VfQUNDRUxFUkFURURfQ09N
UE9TSVRJTkc9MScsCiAgICAgICAgICdXVEZfVVNFX1dFQlA9MScsCisgICAgICAgICdXVEZfVVNF
X1dFQktJVF9JTUFHRV9ERUNPREVSUz0xJywKICAgICAgIF0sCiAKICAgICAgICd1c2VfYWNjZWxl
cmF0ZWRfY29tcG9zaXRpbmclJzogMSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71591</attachid>
            <date>2010-10-22 13:12:07 -0700</date>
            <delta_ts>2010-10-22 14:56:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47974-20101022131205.patch</filename>
            <type>text/plain</type>
            <size>17923</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBXZWJLaXQncyBpbWFnZSBkZWNvZGVycyBob3cgdG8g
dGFsayB0byBDb3JlR3JhcGhpY3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBoYW5kbGUg
Y29sb3IgcHJvZmlsZXMsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBhCisgICAgICAgIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2c6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorCiAyMDEwLTEwLTIwICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzAwNDAuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0NCw2ICsyODQ0LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTExNjUsMjMgKzExNjUsMTQgQEAKICAgICAgICAg
ICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3Zl
LCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQ2hyb21pdW1cXC5jcHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1
c2VzIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVk
Ci0gICAgICAgICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAg
ICAgICAgICAjIFNraWEgaW1hZ2UtZGVjb2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAg
Q29yZUdyYXBoaWNzCi0gICAgICAgICAgICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXJcXC5oJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8
aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCdd
LAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10s
CisgICAgICAgICAgICAjIFRoZSBNYWMgZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3MvY2cKKyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMg
aW5jbHVkZWQgYnkgcmVnZXggYWJvdmUuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnZXhj
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlXFwuY3BwJCddLAor
CisgICAgICAgICAgICAjIEltYWdlRGVjb2RlclNraWEgaXMgbm90IHVzZWQgb24gbWFjLiAgSW1h
Z2VEZWNvZGVyQ0cgaXMgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYVxcLmNwcCQnXSwKLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1h
Z2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDR1xcLmNwcCQnXSwKIAogICAgICAgICAg
ICAgIyBBZ2FpbiwgU2tpYSBpcyBub3QgdXNlZCBvbiBNYWMuCiAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhXFwuY3BwJCddLApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDcwMjA0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIxMTUyLDcgKzIxMTUyLDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7
CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJ
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdp
b24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJl
Z2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlz
aW9uIDcwMjA0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUlt
YWdlKCkKICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0Lgog
ICAgIGlmIChtX2ltYWdlKQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oQ0cpCisjaWYg
UExBVEZPUk0oQ0cpICYmICFVU0UoV0VCS0lUX0lNQUdFX0RFQ09ERVJTKQogICAgIGlmIChtX3Jl
c3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIpIHsKICAgICAgICAgbV9pbWFn
ZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiA3MDIwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsMTIgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAog
I2lmIFBMQVRGT1JNKENHKQorI2lmIFVTRShXRUJLSVRfSU1BR0VfREVDT0RFUlMpCitjbGFzcyBJ
bWFnZURlY29kZXI7Cit0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7
CisjZWxzZQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwor
I2VuZGlmCiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9S
TShPUEVOVkcpCiBjbGFzcyBJbWFnZURlY29kZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3MDIwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpv
cGVyYXRvcj0oY28KICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhp
czsKIAotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKKyAgICBjb3B5UmVmZXJlbmNlVG9CaXRt
YXBEYXRhKG90aGVyKTsKICAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CiAgICAgc2V0U3RhdHVz
KG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAg
LTEyOCw3ICsxMjgsOCBAQCBSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNv
CiAKIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiB7Ci0gICAgbV9ieXRlcy5jbGVhcigpOwor
ICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgbV9ieXRlcyA9IDA7CiAgICAgbV9zdGF0
dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJz
IGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVl
IHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZl
cigpIGFuZApAQCAtMTM4LDE2ICsxMzksMjUgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkK
IAogdm9pZCBSR0JBMzJCdWZmZXI6Onplcm9GaWxsKCkKIHsKLSAgICBtX2J5dGVzLmZpbGwoMCk7
CisgICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgp
ICogc2l6ZW9mKFBpeGVsRGF0YSkpOwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCisjaWYg
IVBMQVRGT1JNKENGKQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weVJlZmVyZW5jZVRvQml0bWFw
RGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIEFTU0VSVCh0aGlzICE9ICZv
dGhlcik7CisgICAgY29weUJpdG1hcERhdGEob3RoZXIpOworfQorCiBib29sIFJHQkEzMkJ1ZmZl
cjo6Y29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAgICBpZiAo
dGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9ieXRlcyA9IG90
aGVyLm1fYnl0ZXM7CisgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsK
KyAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IG90aGVy
Lm1fc2l6ZTsKICAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE1Nyw3ICsxNjcsOCBAQCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQg
bmV3V2lkdGgsCiB7CiAgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5IHRvIGNoZWNrIGZvciBh
bGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlIHJlcXVlc3RlZAogICAgIC8vIHNpemUgd2FzIHRvbyBi
aWcuLi4KLSAgICBtX2J5dGVzLnJlc2l6ZShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CisgICAgbV9i
YWNraW5nU3RvcmUucmVzaXplKG5ld1dpZHRoICogbmV3SGVpZ2h0KTsKKyAgICBtX2J5dGVzID0g
bV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CiAKICAgICAvLyBaZXJvIHRoZSBpbWFnZS4KQEAgLTE2Niw2ICsxNzcsOCBAQCBi
b29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKKyNlbmRpZgorCiBib29sIFJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2hhc0FscGhhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gY2FuIGJlIG1vZGlm
aWVkIGluZGVwZW5kZW50bHkuICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgog
ICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpOwog
CisgICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBpbWFnZSBkYXRhIGlu
IHxvdGhlcnwuICBUaGUgdHdvIGltYWdlcworICAgICAgICAvLyBzaGFyZSBhIGNvbW1vbiBiYWNr
aW5nIHN0b3JlLgorICAgICAgICB2b2lkIGNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3Qg
UkdCQTMyQnVmZmVyJiBvdGhlcik7CisKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRh
IGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8v
IHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3Qg
aW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCkBAIC0xMzcsNiArMTQxLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKKyNpZiBQTEFURk9STShDRikKKyAg
ICAgICAgdHlwZWRlZiBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gTmF0aXZlQmFja2luZ1N0
b3JlOworI2Vsc2UKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UGl4ZWxEYXRhPiBOYXRpdmVCYWNr
aW5nU3RvcmU7CisjZW5kaWYKKwogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAg
aW50IGhlaWdodCgpIGNvbnN0OwogCkBAIC0xNDksNyArMTU5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7CiAgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8UVJnYio+KG1faW1hZ2Uuc2NhbkxpbmUoeSkpICsgeDsK
ICNlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkp
ICsgeDsKKyAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAj
ZW5kaWYKICAgICAgICAgfQogCkBAIC0xNzYsNyArMTg2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgICAgIEludFNpemUgbV9zaXplOwogI2Vs
c2UKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9ieXRlczsKKyAgICAgICAgTmF0aXZlQmFj
a2luZ1N0b3JlIG1fYmFja2luZ1N0b3JlOworICAgICAgICBQaXhlbERhdGEqIG1fYnl0ZXM7ICAg
Ly8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCiAgICAgICAgIEludFNp
emUgbV9zaXplOyAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgVGhpcyBzaG91bGQg
YmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIEltYWdlRGVj
b2Rlcjo6bV9zaXplLgogICAgICAgICBib29sIG1faGFzQWxwaGE7ICAgICAgLy8gV2hldGhlciBv
ciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlcgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAgTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZQogewogICAg
IHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPigKLSAg
ICAgICAgICAgIG1fYnl0ZXMuZGF0YSgpKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCks
IGhlaWdodCgpLAorICAgICAgICAgICAgbV9ieXRlcykpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3
aWR0aCgpLCBoZWlnaHQoKSwKICAgICAgICAgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKTsK
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0ltYWdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSR0JBMzJCdWZmZXI6OmNv
cHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAg
ICBBU1NFUlQodGhpcyAhPSAmb3RoZXIpOworICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9i
YWNraW5nU3RvcmU7CisgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxEYXRhKj4o
Q0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICAvLyBG
SVhNRTogVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBzZWVtcyByZWR1bmRhbnQgd2l0aCBSR0JB
MzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhLgorICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAg
ICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6
OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fYmFja2luZ1N0b3Jl
LmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
b3RoZXIubV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5n
ZXQoKSkpOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBzZXRIYXNBbHBoYShvdGhl
ci5tX2hhc0FscGhhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6
OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQoreworICAgIG1fYmFja2luZ1N0
b3JlLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CisgICAgQ0ZEYXRhU2V0TGVuZ3RoKG1fYmFja2luZ1N0b3JlLmdldCgpLCBuZXdXaWR0aCAqIG5l
d0hlaWdodCAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5n
ZXQoKSkpOworICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAg
ICB6ZXJvRmlsbCgpOworICAgIHJldHVybiB0cnVlOworfQorCitOYXRpdmVJbWFnZVB0ciBSR0JB
MzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IHRoZSByaWdodCBjb2xvciBzcGFjZS4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VHZW5lcmljUkdCKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBk
YXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKG1fYmFj
a2luZ1N0b3JlLmdldCgpKSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGFscGhhSW5mbyA9IG1f
cHJlbXVsdGlwbHlBbHBoYSA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJ
bWFnZUFscGhhRmlyc3Q7CisKKyAgICByZXR1cm4gQ0dJbWFnZUNyZWF0ZSh3aWR0aCgpLCBoZWln
aHQoKSwgOCwgMzIsIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSwgY29sb3JTcGFjZS5nZXQo
KSwKKyAgICAgICAgYWxwaGFJbmZvIHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LCBkYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAJKHJldmlz
aW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFn
ZURlY29kZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgTmF0aXZl
SW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZQogICAgIGludCBieXRlc1BlclJvdyA9
IHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKICAgICBPd25QdHI8QkJpdG1hcD4gYml0bWFw
KG5ldyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpLCAwLCBC
X1JHQkEzMiwgYnl0ZXNQZXJSb3cpKTsKIAotICAgIGNvbnN0IHVpbnQ4KiBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4obV9ieXRlcy5kYXRhKCkpOworICAgIGNvbnN0IHVp
bnQ4KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4obV9ieXRlcyk7CiAg
ICAgdWludDgqIGRlc3RpbmF0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGJpdG1hcC0+
Qml0cygpKTsKICAgICBpbnQgaCA9IGhlaWdodCgpOwogICAgIGludCB3ID0gd2lkdGgoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9w
ZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9v
cGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL29wZW52Zy9JbWFnZURlY29kZXJPcGVuVkcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZl
cjo6YXNOZXdOYXRpdmUKICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVj
dC5oZWlnaHQoKSwgVkdfSU1BR0VfUVVBTElUWV9GQVNURVIpOwogICAgICAgICAgICAgQVNTRVJU
X1ZHX05PX0VSUk9SKCk7CiAKLSAgICAgICAgICAgIFBpeGVsRGF0YSogcGl4ZWxEYXRhID0gY29u
c3RfY2FzdDxQaXhlbERhdGEqPihtX2J5dGVzLmRhdGEoKSk7CisgICAgICAgICAgICBQaXhlbERh
dGEqIHBpeGVsRGF0YSA9IGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9ieXRlcyk7CiAgICAgICAg
ICAgICBwaXhlbERhdGEgKz0gKHRpbGVSZWN0LnkoKSAqIHdpZHRoKCkpICsgdGlsZVJlY3QueCgp
OwogCiAgICAgICAgICAgICB2Z0ltYWdlU3ViRGF0YShpbWFnZSwgcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ocGl4ZWxEYXRhKSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCShyZXZpc2lvbiA3MDIw
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgTmF0aXZlSW1hZ2VQdHIgUkdC
QTMyQnVmZmVyOjphc05ld05hdGl2ZQogICAgICAgICAvLyBOQjogSXQgYXBwZWFycyB0aGF0IHRo
ZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdCQSBmb3JtYXQuCiAgICAgICAg
IC8vIFRoaXMgY29kZSB3b3JrcyBwcm9wZXJseSBvbiBib3RoIHBwYyBhbmQgaW50ZWwsIG1lYW5p
bmcgdGhlIGlzc3VlIGlzCiAgICAgICAgIC8vIGxpa2VseSBub3QgYW4gaXNzdWUgb2YgYnl0ZSBv
cmRlciBnZXR0aW5nIG1peGVkIHVwIG9uIGRpZmZlcmVudCBhcmNocy4gCi0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fYnl0ZXMuZGF0
YSgpOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IChjb25zdCB1bnNpZ25l
ZCBjaGFyKiltX2J5dGVzOwogICAgICAgICBpbnQgcm93Q291bnRlciA9IDA7CiAgICAgICAgIGxv
bmcgcGl4ZWxDb3VudGVyID0gMDsKICAgICAgICAgV3hQaXhlbERhdGE6Okl0ZXJhdG9yIHAoZGF0
YSk7CiAgICAgICAgIFd4UGl4ZWxEYXRhOjpJdGVyYXRvciByb3dTdGFydCA9IHA7IAotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnl0ZXMuc2l6ZSgpICogc2l6ZW9mKFBpeGVsRGF0
YSk7IGkgKz0gc2l6ZW9mKFBpeGVsRGF0YSkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEp
OyBpICs9IHNpemVvZihQaXhlbERhdGEpKSB7CiAgICAgICAgICAgICAgICAgcC5SZWQoKSA9IGJ5
dGVzW2kgKyAyXTsKICAgICAgICAgICAgICAgICBwLkdyZWVuKCkgPSBieXRlc1tpICsgMV07CiAg
ICAgICAgICAgICAgICAgcC5CbHVlKCkgPSBieXRlc1tpICsgMF07CkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDcwMjA5KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTIxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW2Nocm9taXVtXSBDaHJvbWl1bSBNYWMgc2hvdWxkIHVzZSBXZWJLaXQncyBpbWFnZSBkZWNv
ZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc5
NzQKKworICAgICAgICBFbmFibGUgV2ViS2l0J3MgaW1hZ2UgZGVjb2RlcnMuCisKKyAgICAgICAg
KiBmZWF0dXJlcy5neXBpOgorCiAyMDEwLTEwLTIwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZp
ZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzAx
NjUuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAog
ICAgICAgICAnRU5BQkxFX1hTTFQ9MScsCiAgICAgICAgICdXVEZfVVNFX0FDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HPTEnLAogICAgICAgICAnV1RGX1VTRV9XRUJQPTEnLAorICAgICAgICAnV1RGX1VT
RV9XRUJLSVRfSU1BR0VfREVDT0RFUlM9MScsCiAgICAgICBdLAogCiAgICAgICAndXNlX2FjY2Vs
ZXJhdGVkX2NvbXBvc2l0aW5nJSc6IDEsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71598</attachid>
            <date>2010-10-22 14:57:05 -0700</date>
            <delta_ts>2010-10-22 15:20:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47974-20101022145703.patch</filename>
            <type>text/plain</type>
            <size>17901</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBXZWJLaXQncyBpbWFnZSBkZWNvZGVycyBob3cgdG8g
dGFsayB0byBDb3JlR3JhcGhpY3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBoYW5kbGUg
Y29sb3IgcHJvZmlsZXMsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBhCisgICAgICAgIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2c6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorCiAyMDEwLTEwLTIwICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzAwNDAuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0NCw2ICsyODQ0LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTExNjUsMjMgKzExNjUsMTQgQEAKICAgICAgICAg
ICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3Zl
LCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQ2hyb21pdW1cXC5jcHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1
c2VzIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVk
Ci0gICAgICAgICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAg
ICAgICAgICAjIFNraWEgaW1hZ2UtZGVjb2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAg
Q29yZUdyYXBoaWNzCi0gICAgICAgICAgICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXJcXC5oJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8
aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQn
XSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCdd
LAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10s
CisgICAgICAgICAgICAjIFRoZSBNYWMgZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3MvY2cKKyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMg
aW5jbHVkZWQgYnkgcmVnZXggYWJvdmUuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnZXhj
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlXFwuY3BwJCddLAor
CisgICAgICAgICAgICAjIEltYWdlRGVjb2RlclNraWEgaXMgbm90IHVzZWQgb24gbWFjLiAgSW1h
Z2VEZWNvZGVyQ0cgaXMgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYVxcLmNwcCQnXSwKLSAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1h
Z2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDR1xcLmNwcCQnXSwKIAogICAgICAgICAg
ICAgIyBBZ2FpbiwgU2tpYSBpcyBub3QgdXNlZCBvbiBNYWMuCiAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhXFwuY3BwJCddLApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDcwMjA0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIxMTUyLDcgKzIxMTUyLDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7
CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJ
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdp
b24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJl
Z2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlz
aW9uIDcwMjA0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUlt
YWdlKCkKICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0Lgog
ICAgIGlmIChtX2ltYWdlKQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oQ0cpCisjaWYg
UExBVEZPUk0oQ0cpICYmICFVU0UoV0VCS0lUX0lNQUdFX0RFQ09ERVJTKQogICAgIGlmIChtX3Jl
c3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIpIHsKICAgICAgICAgbV9pbWFn
ZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiA3MDIwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsMTIgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAog
I2lmIFBMQVRGT1JNKENHKQorI2lmIFVTRShXRUJLSVRfSU1BR0VfREVDT0RFUlMpCitjbGFzcyBJ
bWFnZURlY29kZXI7Cit0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7
CisjZWxzZQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwor
I2VuZGlmCiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9S
TShPUEVOVkcpCiBjbGFzcyBJbWFnZURlY29kZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3MDIwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpv
cGVyYXRvcj0oY28KICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhp
czsKIAotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKKyAgICBjb3B5UmVmZXJlbmNlVG9CaXRt
YXBEYXRhKG90aGVyKTsKICAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CiAgICAgc2V0U3RhdHVz
KG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAg
LTEyOCw3ICsxMjgsOCBAQCBSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNv
CiAKIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiB7Ci0gICAgbV9ieXRlcy5jbGVhcigpOwor
ICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgbV9ieXRlcyA9IDA7CiAgICAgbV9zdGF0
dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJz
IGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVl
IHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZl
cigpIGFuZApAQCAtMTM4LDE2ICsxMzksMjUgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkK
IAogdm9pZCBSR0JBMzJCdWZmZXI6Onplcm9GaWxsKCkKIHsKLSAgICBtX2J5dGVzLmZpbGwoMCk7
CisgICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgp
ICogc2l6ZW9mKFBpeGVsRGF0YSkpOwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCisjaWYg
IVBMQVRGT1JNKENGKQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weVJlZmVyZW5jZVRvQml0bWFw
RGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIEFTU0VSVCh0aGlzICE9ICZv
dGhlcik7CisgICAgY29weUJpdG1hcERhdGEob3RoZXIpOworfQorCiBib29sIFJHQkEzMkJ1ZmZl
cjo6Y29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAgICBpZiAo
dGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9ieXRlcyA9IG90
aGVyLm1fYnl0ZXM7CisgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsK
KyAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IG90aGVy
Lm1fc2l6ZTsKICAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE1Nyw3ICsxNjcsOCBAQCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQg
bmV3V2lkdGgsCiB7CiAgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5IHRvIGNoZWNrIGZvciBh
bGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlIHJlcXVlc3RlZAogICAgIC8vIHNpemUgd2FzIHRvbyBi
aWcuLi4KLSAgICBtX2J5dGVzLnJlc2l6ZShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CisgICAgbV9i
YWNraW5nU3RvcmUucmVzaXplKG5ld1dpZHRoICogbmV3SGVpZ2h0KTsKKyAgICBtX2J5dGVzID0g
bV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CiAKICAgICAvLyBaZXJvIHRoZSBpbWFnZS4KQEAgLTE2Niw2ICsxNzcsOCBAQCBi
b29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKKyNlbmRpZgorCiBib29sIFJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2hhc0FscGhhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gY2FuIGJlIG1vZGlm
aWVkIGluZGVwZW5kZW50bHkuICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgog
ICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpOwog
CisgICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBpbWFnZSBkYXRhIGlu
IHxvdGhlcnwuICBUaGUgdHdvIGltYWdlcworICAgICAgICAvLyBzaGFyZSBhIGNvbW1vbiBiYWNr
aW5nIHN0b3JlLgorICAgICAgICB2b2lkIGNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3Qg
UkdCQTMyQnVmZmVyJiBvdGhlcik7CisKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRh
IGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8v
IHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3Qg
aW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCkBAIC0xMzcsNiArMTQxLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKKyNpZiBQTEFURk9STShDRikKKyAg
ICAgICAgdHlwZWRlZiBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gTmF0aXZlQmFja2luZ1N0
b3JlOworI2Vsc2UKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UGl4ZWxEYXRhPiBOYXRpdmVCYWNr
aW5nU3RvcmU7CisjZW5kaWYKKwogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAg
aW50IGhlaWdodCgpIGNvbnN0OwogCkBAIC0xNDksNyArMTU5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7CiAgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8UVJnYio+KG1faW1hZ2Uuc2NhbkxpbmUoeSkpICsgeDsK
ICNlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkp
ICsgeDsKKyAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAj
ZW5kaWYKICAgICAgICAgfQogCkBAIC0xNzYsNyArMTg2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgICAgIEludFNpemUgbV9zaXplOwogI2Vs
c2UKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9ieXRlczsKKyAgICAgICAgTmF0aXZlQmFj
a2luZ1N0b3JlIG1fYmFja2luZ1N0b3JlOworICAgICAgICBQaXhlbERhdGEqIG1fYnl0ZXM7ICAg
Ly8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCiAgICAgICAgIEludFNp
emUgbV9zaXplOyAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgVGhpcyBzaG91bGQg
YmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIEltYWdlRGVj
b2Rlcjo6bV9zaXplLgogICAgICAgICBib29sIG1faGFzQWxwaGE7ICAgICAgLy8gV2hldGhlciBv
ciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlcgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAgTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZQogewogICAg
IHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPigKLSAg
ICAgICAgICAgIG1fYnl0ZXMuZGF0YSgpKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCks
IGhlaWdodCgpLAorICAgICAgICAgICAgbV9ieXRlcykpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3
aWR0aCgpLCBoZWlnaHQoKSwKICAgICAgICAgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKTsK
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
Zy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0ltYWdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSR0JBMzJCdWZmZXI6OmNv
cHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAg
ICBBU1NFUlQodGhpcyAhPSAmb3RoZXIpOworICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9i
YWNraW5nU3RvcmU7CisgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxEYXRhKj4o
Q0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICAvLyBG
SVhNRTogVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBzZWVtcyByZWR1bmRhbnQgd2l0aCBSR0JB
MzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhLgorICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAg
ICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6
OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fYmFja2luZ1N0b3Jl
LmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
b3RoZXIubV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5n
ZXQoKSkpOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBzZXRIYXNBbHBoYShvdGhl
ci5tX2hhc0FscGhhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6
OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQoreworICAgIG1fYmFja2luZ1N0
b3JlLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CisgICAgQ0ZEYXRhU2V0TGVuZ3RoKG1fYmFja2luZ1N0b3JlLmdldCgpLCBuZXdXaWR0aCAqIG5l
d0hlaWdodCAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5n
ZXQoKSkpOworICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAg
ICB6ZXJvRmlsbCgpOworICAgIHJldHVybiB0cnVlOworfQorCitOYXRpdmVJbWFnZVB0ciBSR0JB
MzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IHRoZSByaWdodCBjb2xvciBzcGFjZS4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsK
KyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcihBZG9wdENGLCBD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKKwor
ICAgIENHSW1hZ2VBbHBoYUluZm8gYWxwaGFJbmZvID0gbV9wcmVtdWx0aXBseUFscGhhID8ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFGaXJzdDsKKworICAg
IHJldHVybiBDR0ltYWdlQ3JlYXRlKHdpZHRoKCksIGhlaWdodCgpLCA4LCAzMiwgd2lkdGgoKSAq
IHNpemVvZihQaXhlbERhdGEpLCBjb2xvclNwYWNlLmdldCgpLAorICAgICAgICBhbHBoYUluZm8g
fCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2Rl
ckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAkocmV2aXNpb24gNzAyMDQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6
OmFzTmV3TmF0aXZlCiAgICAgaW50IGJ5dGVzUGVyUm93ID0gd2lkdGgoKSAqIHNpemVvZihQaXhl
bERhdGEpOwogICAgIE93blB0cjxCQml0bWFwPiBiaXRtYXAobmV3IEJCaXRtYXAoQlJlY3QoMCwg
MCwgd2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSksIDAsIEJfUkdCQTMyLCBieXRlc1BlclJvdykp
OwogCi0gICAgY29uc3QgdWludDgqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDgqPihtX2J5dGVzLmRhdGEoKSk7CisgICAgY29uc3QgdWludDgqIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDgqPihtX2J5dGVzKTsKICAgICB1aW50OCogZGVzdGluYXRpb24g
PSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oYml0bWFwLT5CaXRzKCkpOwogICAgIGludCBoID0g
aGVpZ2h0KCk7CiAgICAgaW50IHcgPSB3aWR0aCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL29wZW52Zy9JbWFnZURlY29kZXJPcGVu
VkcuY3BwCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZQogICAgICAg
ICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBWR19JTUFHRV9R
VUFMSVRZX0ZBU1RFUik7CiAgICAgICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKIAotICAg
ICAgICAgICAgUGl4ZWxEYXRhKiBwaXhlbERhdGEgPSBjb25zdF9jYXN0PFBpeGVsRGF0YSo+KG1f
Ynl0ZXMuZGF0YSgpKTsKKyAgICAgICAgICAgIFBpeGVsRGF0YSogcGl4ZWxEYXRhID0gY29uc3Rf
Y2FzdDxQaXhlbERhdGEqPihtX2J5dGVzKTsKICAgICAgICAgICAgIHBpeGVsRGF0YSArPSAodGls
ZVJlY3QueSgpICogd2lkdGgoKSkgKyB0aWxlUmVjdC54KCk7CiAKICAgICAgICAgICAgIHZnSW1h
Z2VTdWJEYXRhKGltYWdlLCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbERh
dGEpLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29k
ZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93
eC9JbWFnZURlY29kZXJXeC5jcHAJKHJldmlzaW9uIDcwMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEyICs0OCwxMiBAQCBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZl
CiAgICAgICAgIC8vIE5COiBJdCBhcHBlYXJzIHRoYXQgdGhlIGRhdGEgaXMgaW4gQkdSQSBmb3Jt
YXQgaW5zdGVhZCBvZiBSR0JBIGZvcm1hdC4KICAgICAgICAgLy8gVGhpcyBjb2RlIHdvcmtzIHBy
b3Blcmx5IG9uIGJvdGggcHBjIGFuZCBpbnRlbCwgbWVhbmluZyB0aGUgaXNzdWUgaXMKICAgICAg
ICAgLy8gbGlrZWx5IG5vdCBhbiBpc3N1ZSBvZiBieXRlIG9yZGVyIGdldHRpbmcgbWl4ZWQgdXAg
b24gZGlmZmVyZW50IGFyY2hzLiAKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogYnl0ZXMg
PSAoY29uc3QgdW5zaWduZWQgY2hhciopbV9ieXRlcy5kYXRhKCk7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fYnl0ZXM7CiAgICAg
ICAgIGludCByb3dDb3VudGVyID0gMDsKICAgICAgICAgbG9uZyBwaXhlbENvdW50ZXIgPSAwOwog
ICAgICAgICBXeFBpeGVsRGF0YTo6SXRlcmF0b3IgcChkYXRhKTsKICAgICAgICAgV3hQaXhlbERh
dGE6Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9ieXRlcy5zaXplKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsgaSArPSBzaXplb2YoUGl4ZWxE
YXRhKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZS53aWR0aCgpICog
bV9zaXplLmhlaWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSk7IGkgKz0gc2l6ZW9mKFBpeGVsRGF0
YSkpIHsKICAgICAgICAgICAgICAgICBwLlJlZCgpID0gYnl0ZXNbaSArIDJdOwogICAgICAgICAg
ICAgICAgIHAuR3JlZW4oKSA9IGJ5dGVzW2kgKyAxXTsKICAgICAgICAgICAgICAgICBwLkJsdWUo
KSA9IGJ5dGVzW2kgKyAwXTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzAyMDkpCisrKyBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIENocm9taXVt
IE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisgICAgICAgIEVuYWJsZSBX
ZWJLaXQncyBpbWFnZSBkZWNvZGVycy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIw
MTAtMTAtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDE2NS4KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9mZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpCShyZXZpc2lvbiA3MDIwNCkKKysrIFdlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAgICAgICAgICdFTkFCTEVfWFNMVD0x
JywKICAgICAgICAgJ1dURl9VU0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkc9MScsCiAgICAgICAg
ICdXVEZfVVNFX1dFQlA9MScsCisgICAgICAgICdXVEZfVVNFX1dFQktJVF9JTUFHRV9ERUNPREVS
Uz0xJywKICAgICAgIF0sCiAKICAgICAgICd1c2VfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmclJzog
MSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71602</attachid>
            <date>2010-10-22 15:20:50 -0700</date>
            <delta_ts>2010-10-22 17:07:14 -0700</delta_ts>
            <desc>updated with style fixes</desc>
            <filename>bug-47974-20101022152048.patch</filename>
            <type>text/plain</type>
            <size>20021</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDM0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMTAtMjEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIENocm9taXVtIE1hYyBzaG91bGQgdXNlIFdlYktpdCdzIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk3NAorCisg
ICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBXZWJLaXQncyBpbWFnZSBkZWNvZGVycyBob3cgdG8g
dGFsayB0byBDb3JlR3JhcGhpY3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBoYW5kbGUg
Y29sb3IgcHJvZmlsZXMsIGJ1dCB0aGF0IHdpbGwgY29tZSBpbiBhCisgICAgICAgIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2c6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorCiAyMDEwLTEwLTIyICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gNzAzNDcpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtMjg0NSw2ICsyODQ1LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3
MDM0NykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkK
QEAgLTExNjQsMjMgKzExNjQsMTQgQEAKICAgICAgICAgICAgICMgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0sIGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgogICAgICAgICAgICAg
WydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1cXC5j
cHAkJ10sCiAKLSAgICAgICAgICAgICMgVGhlIE1hYyB1c2VzIEltYWdlU291cmNlQ0cuY3BwIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1ZGVkCi0gICAgICAgICAgICAjIGJ5IHJlZ2V4
IGFib3ZlLCBpbnN0ZWFkLgotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAotCi0gICAgICAgICAgICAjIFNraWEgaW1hZ2UtZGVj
b2RlcnMgYXJlIGFsc28gbm90IHVzZWQgb24gbWFjLiAgQ29yZUdyYXBoaWNzCi0gICAgICAgICAg
ICAjIGlzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXJcXC5oJCddLAotICAgICAgICAgICAg
WydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXJc
XC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlclxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2RlclxcLihj
cHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlUmVhZGVyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyXFwuKGNwcHxo
KSQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXJcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydleGNsdWRl
JywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2RlclxcLihjcHB8
aCkkJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2RlclxcLihjcHB8aCkkJ10sCisgICAgICAgICAgICAjIFRoZSBNYWMg
ZG9lcyBub3QgdXNlIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2cK
KyAgICAgICAgICAgICMgZXZlbiB0aG91Z2ggaXQgaXMgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUu
CisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDR1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlXFwuY3BwJCddLAorCisgICAgICAgICAgICAjIEltYWdlRGVj
b2RlclNraWEgaXMgbm90IHVzZWQgb24gbWFjLiAgSW1hZ2VEZWNvZGVyQ0cgaXMgdXNlZCBpbnN0
ZWFkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvSW1hZ2VEZWNvZGVyU2tpYVxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyXFwuKGNwcHxoKSQnXSwK
KyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFn
ZURlY29kZXJDR1xcLmNwcCQnXSwKIAogICAgICAgICAgICAgIyBBZ2FpbiwgU2tpYSBpcyBub3Qg
dXNlZCBvbiBNYWMuCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0v
RHJhZ0ltYWdlQ2hyb21pdW1Ta2lhXFwuY3BwJCddLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcwMzQ3KQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIxMjA0LDcg
KzIxMjA0LDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9
ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nh
bm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDcwMzQ3KQorKysgV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAg
aW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUltYWdlKCkKICAgICAvLyBDcmVhdGUgdGhl
IGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmIChtX2ltYWdlKQogICAgICAg
ICByZXR1cm47Ci0jaWYgUExBVEZPUk0oQ0cpCisjaWYgUExBVEZPUk0oQ0cpICYmICFVU0UoV0VC
S0lUX0lNQUdFX0RFQ09ERVJTKQogICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFw
cGxpY2F0aW9uL3BkZiIpIHsKICAgICAgICAgbV9pbWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNy
ZWF0ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oCShyZXZpc2lvbiA3MDM0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsMTIgQEAgY2xhc3Mg
SW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFBMQVRGT1JNKENHKQorI2lmIFVT
RShXRUJLSVRfSU1BR0VfREVDT0RFUlMpCitjbGFzcyBJbWFnZURlY29kZXI7Cit0eXBlZGVmIElt
YWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CisjZWxzZQogdHlwZWRlZiBDR0ltYWdl
U291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2VuZGlmCiB0eXBlZGVmIENHSW1hZ2VS
ZWYgTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShPUEVOVkcpCiBjbGFzcyBJbWFnZURl
Y29kZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA3MDM0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY28KICAgICBpZiAodGhp
cyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIGNvcHlCaXRtYXBEYXRh
KG90aGVyKTsKKyAgICBjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKG90aGVyKTsKICAgICBzZXRS
ZWN0KG90aGVyLnJlY3QoKSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBz
ZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAgLTEyOCw3ICsxMjgsOCBAQCBSR0JBMzJC
dWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvCiAKIHZvaWQgUkdCQTMyQnVmZmVyOjpj
bGVhcigpCiB7Ci0gICAgbV9ieXRlcy5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3JlLmNsZWFy
KCk7CisgICAgbV9ieXRlcyA9IDA7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8v
IE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJD
YWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90
aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTM4LDE2ICsxMzks
MjUgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKIAogdm9pZCBSR0JBMzJCdWZmZXI6Onpl
cm9GaWxsKCkKIHsKLSAgICBtX2J5dGVzLmZpbGwoMCk7CisgICAgbWVtc2V0KG1fYnl0ZXMsIDAs
IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOwog
ICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCisjaWYgIVBMQVRGT1JNKENGKQorCit2b2lkIFJH
QkEzMkJ1ZmZlcjo6Y29weVJlZmVyZW5jZVRvQml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXIm
IG90aGVyKQoreworICAgIEFTU0VSVCh0aGlzICE9ICZvdGhlcik7CisgICAgY29weUJpdG1hcERh
dGEob3RoZXIpOworfQorCiBib29sIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3Qg
UkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7CisgICAgbV9iYWNr
aW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAgICBtX2J5dGVzID0gbV9iYWNraW5n
U3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKICAgICBzZXRIYXNBbHBo
YShvdGhlci5tX2hhc0FscGhhKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1Nyw3ICsxNjcsOCBA
QCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsCiB7CiAgICAgLy8gTk9U
RTogVGhpcyBoYXMgbm8gd2F5IHRvIGNoZWNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhl
IHJlcXVlc3RlZAogICAgIC8vIHNpemUgd2FzIHRvbyBiaWcuLi4KLSAgICBtX2J5dGVzLnJlc2l6
ZShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CisgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKG5ld1dp
ZHRoICogbmV3SGVpZ2h0KTsKKyAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwog
ICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAKICAgICAvLyBaZXJv
IHRoZSBpbWFnZS4KQEAgLTE2Niw2ICsxNzcsOCBAQCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6
ZShpbnQgbmV3V2lkdGgsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNlbmRpZgorCiBib29sIFJH
QkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAogewogICAgIHJldHVybiBtX2hhc0FscGhhOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
CShyZXZpc2lvbiA3MDM0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICAvLyBDcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIGltYWdlIGRh
dGEgaW4gfG90aGVyfCwgc28gdGhlIHR3byBpbWFnZXMKICAgICAgICAgLy8gY2FuIGJlIG1vZGlm
aWVkIGluZGVwZW5kZW50bHkuICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgot
ICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpOwor
ICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYpOworCisgICAg
ICAgIC8vIENyZWF0ZXMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBpbWFnZSBkYXRhIGluIHxvdGhl
cnwuICBUaGUgdHdvIGltYWdlcworICAgICAgICAvLyBzaGFyZSBhIGNvbW1vbiBiYWNraW5nIHN0
b3JlLgorICAgICAgICB2b2lkIGNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgUkdCQTMy
QnVmZmVyJik7CiAKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRY
LCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1jb29y
ZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCkBA
IC0xMzcsNiArMTQxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJp
dmF0ZToKKyNpZiBQTEFURk9STShDRikKKyAgICAgICAgdHlwZWRlZiBSZXRhaW5QdHI8Q0ZNdXRh
YmxlRGF0YVJlZj4gTmF0aXZlQmFja2luZ1N0b3JlOworI2Vsc2UKKyAgICAgICAgdHlwZWRlZiBW
ZWN0b3I8UGl4ZWxEYXRhPiBOYXRpdmVCYWNraW5nU3RvcmU7CisjZW5kaWYKKwogICAgICAgICBp
bnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwogCkBAIC0xNDks
NyArMTU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgbV9waXhtYXAgPSBR
UGl4bWFwKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8UVJnYio+
KG1faW1hZ2Uuc2NhbkxpbmUoeSkpICsgeDsKICNlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9i
eXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkpICsgeDsKKyAgICAgICAgICAgIHJldHVybiBtX2J5
dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQogCkBAIC0xNzYsMjYg
KzE4NiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsK
ICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAjZWxzZQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRh
PiBtX2J5dGVzOwotICAgICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAgLy8gVGhlIHNpemUgb2Yg
dGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KLSAgICAgICAgYm9vbCBtX2hh
c0FscGhhOyAgICAgIC8vIFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBi
dWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdHJhbnNwYXJlbmN5
LgorICAgICAgICBOYXRpdmVCYWNraW5nU3RvcmUgbV9iYWNraW5nU3RvcmU7CisgICAgICAgIFBp
eGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3Rv
cmUuCisgICAgICAgIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAg
VGhpcyBzaG91bGQgYmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIElt
YWdlRGVjb2Rlcjo6bV9zaXplLgorICAgICAgICBib29sIG1faGFzQWxwaGE7IC8vIFdoZXRoZXIg
b3Igbm90IGFueSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBidWZmZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIHRyYW5zcGFyZW5jeS4KICNlbmRpZgotICAgICAgICBJbnRSZWN0IG1f
cmVjdDsgICAgICAgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3
aXRoaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvdmVyYWxsIGJ1ZmZl
ci4gIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRo
YW4gdGhlIG92ZXJhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltYWdlIHNp
emUuCisgICAgICAgIEludFJlY3QgbV9yZWN0OyAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwg
c3BlY2lmaWVkIGZyYW1lIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG92
ZXJhbGwgYnVmZmVyLiAgVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhh
biB0aGUgb3ZlcmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2Ugc2l6ZS4KICAg
ICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUg
aXMgY29tcGxldGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluaXNoZWQg
ZGVjb2RpbmcuCi0gICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247ICAvLyBUaGUgYW5pbWF0aW9u
IGRlbGF5LgotICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFt
ZSdzIGRhdGEgd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6
aW5nIHRoZSBuZXh0IGZyYW1lLgotICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZXRoZXIgdG8gcHJlbXVsdGlwbHkgYWxw
aGEgaW50byBSLCBHLCBCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFubmVs
czsgYnkgZGVmYXVsdCBpdCdzIHRydWUuCisgICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8v
IFRoZSBhbmltYXRpb24gZGVsYXkuCisgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNw
b3NhbE1ldGhvZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXpp
bmcgdGhlIG5leHQgZnJhbWUuCisgICAgICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhOyAvLyBX
aGV0aGVyIHRvIHByZW11bHRpcGx5IGFscGhhIGludG8gUiwgRywgQgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2hhbm5lbHM7IGJ5IGRlZmF1bHQgaXQncyB0cnVlLgogICAg
IH07CiAKICAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNlIGNs
YXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CShyZXZpc2lvbiA3MDM0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fp
cm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmUKIHsKICAgICByZXR1cm4g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCiAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4oCi0gICAgICAgICAg
ICBtX2J5dGVzLmRhdGEoKSkpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQo
KSwKKyAgICAgICAgICAgIG1fYnl0ZXMpKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgoKSwg
aGVpZ2h0KCksCiAgICAgICAgIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VE
ZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjb3B5UmVmZXJl
bmNlVG9CaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgQVNTRVJU
KHRoaXMgIT0gJm90aGVyKTsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0
b3JlOworICAgIG1fYnl0ZXMgPSByZWludGVycHJldF9jYXN0PFBpeGVsRGF0YSo+KENGRGF0YUdl
dE11dGFibGVCeXRlUHRyKG1fYmFja2luZ1N0b3JlLmdldCgpKSk7CisgICAgLy8gRklYTUU6IFRo
ZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gc2VlbXMgcmVkdW5kYW50IHdpdGggUkdCQTMyQnVmZmVy
Ojpjb3B5Qml0bWFwRGF0YS4KKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFz
QWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Cit9CisKK2Jvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0
bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZv
dGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2JhY2tpbmdTdG9yZS5hZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIG90aGVyLm1f
YmFja2luZ1N0b3JlLmdldCgpKSk7CisgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4
ZWxEYXRhKj4oQ0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsK
KyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNB
bHBoYSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXpl
KGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKK3sKKyAgICBtX2JhY2tpbmdTdG9yZS5hZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIENG
RGF0YVNldExlbmd0aChtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbmV3V2lkdGggKiBuZXdIZWlnaHQg
KiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4
ZWxEYXRhKj4oQ0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsK
KyAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworCisgICAgemVyb0Zp
bGwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVy
Ojphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0
aGUgcmlnaHQgY29sb3Igc3BhY2UuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiwgZGV2aWNlQ29sb3JTcGFjZSwgKEFkb3B0Q0YsIENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZVJHQigpKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBk
YXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKG1fYmFj
a2luZ1N0b3JlLmdldCgpKSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGFscGhhSW5mbyA9IG1f
cHJlbXVsdGlwbHlBbHBoYSA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJ
bWFnZUFscGhhRmlyc3Q7CisKKyAgICByZXR1cm4gQ0dJbWFnZUNyZWF0ZSh3aWR0aCgpLCBoZWln
aHQoKSwgOCwgMzIsIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSwgZGV2aWNlQ29sb3JTcGFj
ZS5nZXQoKSwKKyAgICAgICAgYWxwaGFJbmZvIHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAJ
KHJldmlzaW9uIDcwMzQ3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlr
dS9JbWFnZURlY29kZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
TmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZQogICAgIGludCBieXRlc1Bl
clJvdyA9IHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKICAgICBPd25QdHI8QkJpdG1hcD4g
Yml0bWFwKG5ldyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEp
LCAwLCBCX1JHQkEzMiwgYnl0ZXNQZXJSb3cpKTsKIAotICAgIGNvbnN0IHVpbnQ4KiBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4obV9ieXRlcy5kYXRhKCkpOworICAgIGNv
bnN0IHVpbnQ4KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4obV9ieXRl
cyk7CiAgICAgdWludDgqIGRlc3RpbmF0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGJp
dG1hcC0+Qml0cygpKTsKICAgICBpbnQgaCA9IGhlaWdodCgpOwogICAgIGludCB3ID0gd2lkdGgo
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVj
b2Rlck9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAkocmV2aXNpb24gNzAzNDcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL29wZW52Zy9JbWFnZURlY29kZXJPcGVuVkcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIE5hdGl2ZUltYWdlUHRyIFJHQkEz
MkJ1ZmZlcjo6YXNOZXdOYXRpdmUKICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0
aWxlUmVjdC5oZWlnaHQoKSwgVkdfSU1BR0VfUVVBTElUWV9GQVNURVIpOwogICAgICAgICAgICAg
QVNTRVJUX1ZHX05PX0VSUk9SKCk7CiAKLSAgICAgICAgICAgIFBpeGVsRGF0YSogcGl4ZWxEYXRh
ID0gY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5dGVzLmRhdGEoKSk7CisgICAgICAgICAgICBQ
aXhlbERhdGEqIHBpeGVsRGF0YSA9IGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9ieXRlcyk7CiAg
ICAgICAgICAgICBwaXhlbERhdGEgKz0gKHRpbGVSZWN0LnkoKSAqIHdpZHRoKCkpICsgdGlsZVJl
Y3QueCgpOwogCiAgICAgICAgICAgICB2Z0ltYWdlU3ViRGF0YShpbWFnZSwgcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxEYXRhKSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCShyZXZpc2lv
biA3MDM0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNv
ZGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgTmF0aXZlSW1hZ2VQ
dHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZQogICAgICAgICAvLyBOQjogSXQgYXBwZWFycyB0
aGF0IHRoZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdCQSBmb3JtYXQuCiAg
ICAgICAgIC8vIFRoaXMgY29kZSB3b3JrcyBwcm9wZXJseSBvbiBib3RoIHBwYyBhbmQgaW50ZWws
IG1lYW5pbmcgdGhlIGlzc3VlIGlzCiAgICAgICAgIC8vIGxpa2VseSBub3QgYW4gaXNzdWUgb2Yg
Ynl0ZSBvcmRlciBnZXR0aW5nIG1peGVkIHVwIG9uIGRpZmZlcmVudCBhcmNocy4gCi0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fYnl0
ZXMuZGF0YSgpOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IChjb25zdCB1
bnNpZ25lZCBjaGFyKiltX2J5dGVzOwogICAgICAgICBpbnQgcm93Q291bnRlciA9IDA7CiAgICAg
ICAgIGxvbmcgcGl4ZWxDb3VudGVyID0gMDsKICAgICAgICAgV3hQaXhlbERhdGE6Okl0ZXJhdG9y
IHAoZGF0YSk7CiAgICAgICAgIFd4UGl4ZWxEYXRhOjpJdGVyYXRvciByb3dTdGFydCA9IHA7IAot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnl0ZXMuc2l6ZSgpICogc2l6ZW9mKFBp
eGVsRGF0YSk7IGkgKz0gc2l6ZW9mKFBpeGVsRGF0YSkpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhl
bERhdGEpOyBpICs9IHNpemVvZihQaXhlbERhdGEpKSB7CiAgICAgICAgICAgICAgICAgcC5SZWQo
KSA9IGJ5dGVzW2kgKyAyXTsKICAgICAgICAgICAgICAgICBwLkdyZWVuKCkgPSBieXRlc1tpICsg
MV07CiAgICAgICAgICAgICAgICAgcC5CbHVlKCkgPSBieXRlc1tpICsgMF07CkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDcwMzQ3KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTIxICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2Nocm9taXVtXSBDaHJvbWl1bSBNYWMgc2hvdWxkIHVzZSBXZWJLaXQncyBpbWFn
ZSBkZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDc5NzQKKworICAgICAgICBFbmFibGUgV2ViS2l0J3MgaW1hZ2UgZGVjb2RlcnMuCisKKyAg
ICAgICAgKiBmZWF0dXJlcy5neXBpOgorCiAyMDEwLTEwLTIyICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDcwMzQ3KQorKysgV2ViS2l0L2Nocm9taXVtL2Zl
YXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAKICAgICAgICAgJ0VO
QUJMRV9YU0xUPTEnLAogICAgICAgICAnV1RGX1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORz0x
JywKICAgICAgICAgJ1dURl9VU0VfV0VCUD0xJywKKyAgICAgICAgJ1dURl9VU0VfV0VCS0lUX0lN
QUdFX0RFQ09ERVJTPTEnLAogICAgICAgXSwKIAogICAgICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21w
b3NpdGluZyUnOiAxLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>