<?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>35411</bug_id>
          
          <creation_ts>2010-02-25 17:29:18 -0800</creation_ts>
          <short_desc>Clean up m_failed usage in open-source image decoders</short_desc>
          <delta_ts>2010-06-22 11:02:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>webkit.review.bot</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>193957</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-25 17:29:18 -0800</bug_when>
    <thetext>If we move m_failed to be private, and make setFailed() virtual, then subclasses can safely override it to do automatic cleanup on failure.

We can also make setFailed() return false for easy tailcalling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193961</commentid>
    <comment_count>1</comment_count>
      <attachid>49553</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-25 17:39:08 -0800</bug_when>
    <thetext>Created attachment 49553
Part 1, v1

I&apos;m saving the actual override bits for followup patches because they can modify object lifetimes, which can cause hairy bugs and thus needs close review.  This patch should have no functional effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193962</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-25 17:40:15 -0800</bug_when>
    <thetext>Attachment 49553 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/ImageDecoder.h:299:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 8 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>193963</commentid>
    <comment_count>3</comment_count>
      <attachid>49554</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-25 17:43:48 -0800</bug_when>
    <thetext>Created attachment 49554
Part 1, v2

Fix style violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193993</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-25 21:19:52 -0800</bug_when>
    <thetext>Attachment 49554 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/314114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195148</commentid>
    <comment_count>5</comment_count>
      <attachid>49828</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-03-02 11:57:15 -0800</bug_when>
    <thetext>Created attachment 49828
Part 1, v3

Try to fix Qt compile failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195153</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-02 12:03:22 -0800</bug_when>
    <thetext>Attachment 49828 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/qt/ImageDecoderQt.cpp:174:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 10 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>195157</commentid>
    <comment_count>7</comment_count>
      <attachid>49831</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-03-02 12:12:23 -0800</bug_when>
    <thetext>Created attachment 49831
Part 1, v4

Fix existing style issues in ImageDecoderQt.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197072</commentid>
    <comment_count>8</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-03-07 23:53:44 -0800</bug_when>
    <thetext>The Qt bits seems to be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197367</commentid>
    <comment_count>9</comment_count>
      <attachid>49831</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-08 15:38:47 -0800</bug_when>
    <thetext>Comment on attachment 49831
Part 1, v4

Looks reasonable.  Moving code to the other side of setJump / longJump is kind of scary, but it seemed right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197371</commentid>
    <comment_count>10</comment_count>
      <attachid>49831</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-03-08 15:45:08 -0800</bug_when>
    <thetext>Comment on attachment 49831
Part 1, v4

Landed in r55687, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199819</commentid>
    <comment_count>11</comment_count>
      <attachid>50736</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-03-15 14:09:25 -0700</bug_when>
    <thetext>Created attachment 50736
Part 2, v1

Cleanup part 2.  This makes all the decoders behave the same w.r.t. setting the failure bit when we reach end-of-data and the image is still incomplete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199823</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-15 14:13:26 -0700</bug_when>
    <thetext>Attachment 50736 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/gif/GIFImageReader.cpp:293:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/image-decoders/gif/GIFImageReader.cpp:930:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 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>199827</commentid>
    <comment_count>13</comment_count>
      <attachid>50738</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-03-15 14:21:21 -0700</bug_when>
    <thetext>Created attachment 50738
Part 2, v2

This fixes one style violation.  The other is not being fixed because this whole file follows 2-space indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199831</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-15 14:24:36 -0700</bug_when>
    <thetext>Attachment 50738 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/gif/GIFImageReader.cpp:930:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 9 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>219146</commentid>
    <comment_count>15</comment_count>
      <attachid>50738</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-29 12:58:16 -0700</bug_when>
    <thetext>Comment on attachment 50738
Part 2, v2

The ChangeLog is missing too sparse for me to effectively review this.

Ideally there would be per function comments which explain why that function was changed.

For example, I can&apos;t tell why the changes in do_lzw were done because it changes the return value in a lot of places. I&apos;m sure this is obvious to you and probably obvious for someone who knows the code well but neither of those is true for me.

Similarly, in GIFImageReader::read, it seems that it may return true in a few cases in which it returned false before like in this code:
    if (!map)
        return clientptr ? clientptr-&gt;setFailed() : false;

I don&apos;t understand why this is good (from reading the ChangeLog and the code).

Lastly, there is no new layout tests or explanation of why one either isn&apos;t needed or can&apos;t be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219217</commentid>
    <comment_count>16</comment_count>
      <attachid>54743</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-04-29 15:38:19 -0700</bug_when>
    <thetext>Created attachment 54743
Part 2, v3

Reposting with a more complete ChangeLog, including per-function comments and a note about layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219224</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-29 15:45:59 -0700</bug_when>
    <thetext>Attachment 54743 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/image-decoders/gif/GIFImageReader.cpp:930:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 8 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>219287</commentid>
    <comment_count>18</comment_count>
      <attachid>54743</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-29 17:13:30 -0700</bug_when>
    <thetext>Comment on attachment 54743
Part 2, v3

Please consider addressing the &quot;Should we...&quot; and compacting the ChangeLog slightly through the use of ditto as mentioned below.

Thanks!

 
&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 58541)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,37 @@
&gt; +2010-04-29  Peter Kasting  &lt;pkasting@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Make all image decoders set the &quot;failed&quot; bit if an image could not be
&gt; +        completely decoded, but no more data is coming.  The ICO and BMP
&gt; +        decoders already did this.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=35411
&gt; +
&gt; +        &quot;Failed&quot; does not cause the image to not be displayed, it simply causes
&gt; +        us to not bother to try to decode again if future requests are made, and
&gt; +        for some decoders, lets the decoder clean up some of its temporary
&gt; +        objects.
&gt; +        
&gt; +        No layout tests because this does not change the visible output of decoding in any way.
&gt; +
&gt; +        * platform/image-decoders/gif/GIFImageDecoder.cpp:
&gt; +        (WebCore::GIFImageDecoder::frameComplete): Return whether the frame could be marked as complete.
&gt; +        (WebCore::GIFImageDecoder::decode): read() will mark decode failure itself, so the only additional failure case is when read() needs more data (and thus returns false) and no more is coming.
&gt; +        * platform/image-decoders/gif/GIFImageDecoder.h:
&gt; +        * platform/image-decoders/gif/GIFImageReader.cpp:
&gt; +        (GIFImageReader::do_lzw): Instead of returning true for buffer underrun and false for failure, return false for both and set the failure flag on failure.
&gt; +        (GIFImageReader::read): Instead of returning true for buffer underrun and false for failure, return false for both and set the failure flag on failure.

&quot;Ditto.&quot; works instead of repeating the last phrase exactly.

Thanks for the notes. This helps me understand what you are doing better (and I unfortunately kept reading &quot;setFailed()&quot; as &quot;failure()&quot; which was my other source of confusion).



&gt; Index: WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
&gt; +bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, RGBA32Buffer::FrameDisposalMethod disposalMethod)
&gt;  {
&gt;      // Initialize the frame if necessary.  Some GIFs insert do-nothing frames,
&gt;      // in which case we never reach haveDecodedRow() before getting here.
&gt;      RGBA32Buffer&amp; buffer = m_frameBufferCache[frameIndex];
&gt;      if ((buffer.status() == RGBA32Buffer::FrameEmpty) &amp;&amp; !initFrameBuffer(frameIndex))
&gt; -        return;
&gt; +        return false; // initFrameBuffer() has already called setFailed().

Should we &quot;assert(failed());&quot; here (before the return and the comment could be right after the assert)?


&gt; Index: WebCore/platform/image-decoders/gif/GIFImageReader.cpp
&gt;          // Even though suffix[] only holds characters through suffix[avail - 1],
&gt;          // allowing code &gt;= avail here lets us be more tolerant of malformed
&gt; @@ -324,7 +326,7 @@ bool GIFImageReader::do_lzw(const unsign
&gt;          code = prefix[code];
&gt;  
&gt;          if (stackp == stack + MAX_BITS)
&gt; -          return false;
&gt; +          return clientptr ? clientptr-&gt;setFailed() : false;

I kept reading this as possibly returning two different values but it always returns false.


&gt; +      if (!do_lzw(q))
&gt; +        return false; // If do_lzw() encountered an error, it has already called
&gt; +                      // clientptr-&gt;setFailed().


Should we &quot;assert(failed());&quot; here (before the return and the comment could be right after the assert)?

&gt; +        if (clientptr &amp;&amp; frame_reader &amp;&amp; !clientptr-&gt;frameComplete(images_decoded - 1, frame_reader-&gt;delay_time, frame_reader-&gt;disposal_method))
&gt; +          return false; // frameComplete() has already called
&gt; +                        // clientptr-&gt;setFailed().

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219298</commentid>
    <comment_count>19</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-04-29 17:34:47 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; +        (GIFImageReader::do_lzw): Instead of returning true for buffer underrun and false for failure, return false for both and set the failure flag on failure.
&gt; &gt; +        (GIFImageReader::read): Instead of returning true for buffer underrun and false for failure, return false for both and set the failure flag on failure.
&gt; 
&gt; &quot;Ditto.&quot; works instead of repeating the last phrase exactly.

OK

&gt; &gt; Index: WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
&gt; &gt; +bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, RGBA32Buffer::FrameDisposalMethod disposalMethod)
&gt; &gt;  {
&gt; &gt;      // Initialize the frame if necessary.  Some GIFs insert do-nothing frames,
&gt; &gt;      // in which case we never reach haveDecodedRow() before getting here.
&gt; &gt;      RGBA32Buffer&amp; buffer = m_frameBufferCache[frameIndex];
&gt; &gt;      if ((buffer.status() == RGBA32Buffer::FrameEmpty) &amp;&amp; !initFrameBuffer(frameIndex))
&gt; &gt; -        return;
&gt; &gt; +        return false; // initFrameBuffer() has already called setFailed().
&gt; 
&gt; Should we &quot;assert(failed());&quot; here (before the return and the comment could be
&gt; right after the assert)?

We could, although I&apos;m not sure what it buys us.  It wouldn&apos;t make sense to ever change initFrameBuffer()&apos;s return value to mean something else, since it consumes no data, so I can&apos;t see any future-proofing issue here.  Plus, if this were somehow able to go wrong, it couldn&apos;t cause any problems, we would just fail to early-exit.  So I think an assert() is overkill.

&gt; &gt; +      if (!do_lzw(q))
&gt; &gt; +        return false; // If do_lzw() encountered an error, it has already called
&gt; &gt; +                      // clientptr-&gt;setFailed().
&gt; 
&gt; 
&gt; Should we &quot;assert(failed());&quot; here (before the return and the comment could be
&gt; right after the assert)?

We can&apos;t; false usually doesn&apos;t mean failure here (note the &quot;If&quot; beginning the comment).

&gt; &gt; +        if (clientptr &amp;&amp; frame_reader &amp;&amp; !clientptr-&gt;frameComplete(images_decoded - 1, frame_reader-&gt;delay_time, frame_reader-&gt;disposal_method))
&gt; &gt; +          return false; // frameComplete() has already called
&gt; &gt; +                        // clientptr-&gt;setFailed().
&gt; 
&gt; Ditto.

Same comment as on asserting initFrameBuffer() has setFailed().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219559</commentid>
    <comment_count>20</comment_count>
      <attachid>54743</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-04-30 12:01:09 -0700</bug_when>
    <thetext>Comment on attachment 54743
Part 2, v3

Landed in r58589, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219567</commentid>
    <comment_count>21</comment_count>
      <attachid>54817</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-04-30 12:16:22 -0700</bug_when>
    <thetext>Created attachment 54817
Part 3, v1

Here is the last piece.  This actually makes use of the ability to override setFailed() to clean up on failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220354</commentid>
    <comment_count>22</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-03 16:22:08 -0700</bug_when>
    <thetext>btw, this bug now has 22 comments. It may be hard for folks to tell if the current patch has any comments about it. You may want to consider only doing one patch (with multiple iterations on that patch) per bug, which is considered a best practice by many for this reason. In other words, consider moving &quot;Part 3&quot; into a new bug.


(In reply to comment #19)
&gt; &gt; &gt; +        return false; // initFrameBuffer() has already called setFailed().
&gt; &gt; 
&gt; &gt; Should we &quot;assert(failed());&quot; here (before the return and the comment could be
&gt; &gt; right after the assert)?
&gt; 
&gt; We could, although I&apos;m not sure what it buys us.  It wouldn&apos;t make sense to
&gt; ever change initFrameBuffer()&apos;s return value to mean something else, since it
&gt; consumes no data, so I can&apos;t see any future-proofing issue here.  Plus, if this
&gt; were somehow able to go wrong, it couldn&apos;t cause any problems, we would just
&gt; fail to early-exit.  So I think an assert() is overkill.

This confuses me because there is a significant comment that explains that initFrameBuffer() has already called setFailed. However, a one line assert to valid that comment is overkill?

In my vast and varied experience, I&apos;ve found asserts tend to validate assumptions better than comments. :)



&gt; &gt; &gt; +      if (!do_lzw(q))
&gt; &gt; &gt; +        return false; // If do_lzw() encountered an error, it has already called
&gt; &gt; &gt; +                      // clientptr-&gt;setFailed().
&gt; &gt; 
&gt; &gt; Should we &quot;assert(failed());&quot; here (before the return and the comment could be
&gt; &gt; right after the assert)?
&gt; 
&gt; We can&apos;t; false usually doesn&apos;t mean failure here (note the &quot;If&quot; beginning the
&gt; comment).

Ok. Makes sense, but now I don&apos;t understand why the comment is there because shouldn&apos;t a method always call clientptr-&gt;setFailed() if it encounters an error (especially if you can&apos;t tell by its return value whether it failed or not)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220376</commentid>
    <comment_count>23</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-05-03 17:06:22 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; btw, this bug now has 22 comments. It may be hard for folks to tell if the
&gt; current patch has any comments about it. You may want to consider only doing
&gt; one patch (with multiple iterations on that patch) per bug, which is considered
&gt; a best practice by many for this reason. In other words, consider moving &quot;Part
&gt; 3&quot; into a new bug.

I don&apos;t think it makes sense to file multiple bugs for a single logical issue when the individual pieces of it don&apos;t really get anywhere useful on their own.  The individual subcomponents aren&apos;t bugs.

&gt; This confuses me because there is a significant comment that explains that
&gt; initFrameBuffer() has already called setFailed.

A few words is &quot;a significant comment&quot;?  I thought it was a fairly trivial comment.  As I explained, if setFailed() hadn&apos;t been called, nothing bad would happen here.

&gt; I don&apos;t understand why the comment is there because
&gt; shouldn&apos;t a method always call clientptr-&gt;setFailed() if it encounters an error
&gt; (especially if you can&apos;t tell by its return value whether it failed or not)?

No; calling setFailed() may destroy |this| (as it will in this case after landing Part 3), and thus accessing members like |clientptr| could cause a crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240984</commentid>
    <comment_count>24</comment_count>
      <attachid>54817</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-21 17:04:01 -0700</bug_when>
    <thetext>Comment on attachment 54817
Part 3, v1

This patch has been up for review for a long time.  Like many patches to the image decoders, Peter is the only one who really understands them, consequently my review here is largely based on my faith in Peter.  I was tempted to give this patch an R- because it explain the problem it&apos;s solving and has some oddities (such as m_doNothingOnFailure), but on balance, I&apos;m willing to believe this is an improvement.

Peter, I&apos;m sorry contributing to the image decoders is such a pain.  I don&apos;t really have much of a solution to over you though.  I suspect the net result is that you&apos;re going to end up working on other things and the decoders will sit around in their current state.  In the end, we&apos;ll muddle through.

Thanks for the patch.

WebCore/ChangeLog:13
 +          No layout tests because this does not change the visible output of
What&apos;s the consequence of failing to clean up these objects?

WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp: 
 +              close();
What happened to this call to close()?

WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:232
 +      m_doNothingOnFailure = true;
:(

WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:209
 +          return false;
We don&apos;t even call the parent class setFailed method in this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241336</commentid>
    <comment_count>25</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-22 11:00:43 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; WebCore/ChangeLog:13
&gt;  +          No layout tests because this does not change the visible output of
&gt; What&apos;s the consequence of failing to clean up these objects?

The way we currently do?  Higher memory usage, although I doubt it would really matter unless a page had a ton of failed images.

&gt; WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp: 
&gt;  +              close();
&gt; What happened to this call to close()?

setFailed() now destroys the JPEGImageReader.  The reader calls close() in its destructor.

&gt; WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:232
&gt;  +      m_doNothingOnFailure = true;
&gt; :(

Yeah, I hate this too.  I couldn&apos;t come up with a better solution.  I would love something that sucks less, ugh.

&gt; WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:209
&gt;  +          return false;
&gt; We don&apos;t even call the parent class setFailed method in this case?

There&apos;s no need; as soon as we reset m_doNothingOnFailure, we check whether we failed and call setFailed() at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241338</commentid>
    <comment_count>26</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-22 11:02:51 -0700</bug_when>
    <thetext>Fixed in r61619.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49553</attachid>
            <date>2010-02-25 17:39:08 -0800</date>
            <delta_ts>2010-02-25 17:43:48 -0800</delta_ts>
            <desc>Part 1, v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19768</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDItMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENsZWFuIHVwIHVzYWdlIG9mIG1fZmFpbGVkIGluIG9wZW4tc291cmNlIGltYWdlIGRlY29kZXJz
LCBwYXJ0IDEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTQxMQorICAgICAgICAKKyAgICAgICAgTWFrZXMgc2V0RmFpbGVkKCkgdmlydHVhbCBzbyBz
dWJjbGFzc2VzIGNhbiBvdmVycmlkZSBpdCAobm9uZSBkbyB5ZXQpIHRvCisgICAgICAgIGRvIGF1
dG9tYXRpYyBjbGVhbnVwIG9uIGZhaWx1cmU7IG1ha2VzIGl0IHJldHVybiBhIGJvb2wgZm9yIGVh
c3kKKyAgICAgICAgdGFpbGNhbGxpbmc7IG1ha2VzIGZhaWxlZCgpIHRoZSBvbmx5IHdheSB0byBh
Y2Nlc3MgbV9mYWlsZWQgc28KKyAgICAgICAgc3ViY2xhc3NlcyBhcmUgYXNzdXJlZCBzZXRGYWls
ZWQoKSB3b24ndCBiZSBieXBhc3NlZC4gIFBsdXMgb25lIG9yIHR3bworICAgICAgICBvdGhlciB0
aW55IGNsZWFudXAgYml0cy4KKworICAgICAgICBPdmVycmlkaW5nIHNldEZhaWxlZCgpIGlzIGNv
bWluZyBpbiBhIHN1YnNlcXVlbnQgcGF0Y2ggYmVjYXVzZSBpdCBjYW4gYmUKKyAgICAgICAgaGFp
cnkgYW5kIG5lZWRzIGNsb3NlIHJldmlldy4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNoYW5n
ZSwgc28gbm8gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzZXRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmYWls
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRmlsZUhlYWRl
cik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0lt
YWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFn
ZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdl
RGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RpbmdGYWlsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFn
ZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKwog
MjAxMC0wMi0yNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDQsMTAgKzIwNCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBJbWFnZURlY29kZXIoKQogICAgICAgICAgICAgOiBtX3NjYWxlZChmYWxzZSkKLSAgICAgICAg
ICAgICwgbV9mYWlsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxz
ZSkKICAgICAgICAgICAgICwgbV9pc0FsbERhdGFSZWNlaXZlZChmYWxzZSkKICAgICAgICAgICAg
ICwgbV9tYXhOdW1QaXhlbHMoLTEpCisgICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNlKQogICAg
ICAgICB7CiAgICAgICAgIH0KIApAQCAtMjI2LDYgKzIyNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFpbGVkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgbV9kYXRhID0gZGF0YTsKICAg
ICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAg
IH0KQEAgLTI2NywxMCArMjY5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBi
ZSBzZXQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgZGVjb2RpbmcuCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBoZWlnaHQp
KSB7Ci0gICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAg
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBtX3Np
emVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTMsOCAr
MjkzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gdHJhbnNwYXJlbmN5Lgog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAorICAgICAgICAvLyBTZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcuICBGb3IgY2Fs
bGVyIGNvbnZlbmllbmNlIChzaW5jZSBzbworICAgICAgICAvLyBtYW55IGNhbGxlcnMgd2FudCB0
byByZXR1cm4gZmFsc2UgYWZ0ZXIgY2FsbGluZyB0aGlzKSwgcmV0dXJucyBmYWxzZQorICAgICAg
ICAvLyB0byBlbmFibGUgZWFzeSB0YWlsY2FsbGluZy4KKyAgICAgICAgdmlydHVhbCBib29sIHNl
dEZhaWxlZCgpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICAgICAgdm9pZCBzZXRGYWlsZWQoKSB7IG1fZmFpbGVkID0g
dHJ1ZTsgfQogCiAgICAgICAgIC8vIFdpcGUgb3V0IGZyYW1lcyBpbiB0aGUgZnJhbWUgYnVmZmVy
IGNhY2hlIGJlZm9yZSB8Y2xlYXJCZWZvcmVGcmFtZXwsCiAgICAgICAgIC8vIGFzc3VtaW5nIHRo
aXMgY2FuIGJlIGRvbmUgd2l0aG91dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZlcmVudApAQCAt
MzIxLDcgKzMyOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPGludD4g
bV9zY2FsZWRSb3dzOwogICAgICAgICBib29sIG1fc2NhbGVkOwogICAgICAgICBWZWN0b3I8UkdC
QTMyQnVmZmVyPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7Ci0gICAgICAgIGJvb2wgbV9mYWlsZWQ7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6
ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKQEAgLTMzOSw2ICszNDUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxlOwogICAg
ICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAgIGludCBtX21heE51bVBpeGVs
czsKKyAgICAgICAgYm9vbCBtX2ZhaWxlZDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU1MjYxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEJNUEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRC
dWZmCiAKIGJvb2wgQk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogewotICAgIGlm
ICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAhZmFpbGVkKCkpCisgICAgaWYg
KCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQogICAgICAgICBkZWNvZGUodHJ1ZSk7
CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKQEAgLTcyLDcg
KzcyLDcgQEAgUkdCQTMyQnVmZmVyKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogCiAgICAgUkdCQTMyQnVmZmVyKiBidWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Ci0gICAgaWYgKGJ1ZmZlci0+c3RhdHVz
KCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmICFmYWlsZWQoKSkKKyAgICBpZiAo
YnVmZmVyLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCiAgICAgICAg
IGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTEzMSwxMiArMTMxLDcg
QEAgYm9vbCBCTVBJbWFnZURlY29kZXI6OnByb2Nlc3NGaWxlSGVhZGVyKAogICAgICAgICBCSVRN
QVBBUlJBWSA9IDB4NDI0MSwgIC8vICJCQSIKICAgICAgICAgKi8KICAgICB9OwotICAgIGlmIChm
aWxlVHlwZSAhPSBCTUFQKSB7Ci0gICAgICAgIHNldEZhaWxlZCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIChmaWxlVHlwZSA9
PSBCTUFQKSB8fCBzZXRGYWlsZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgR0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKCkKIAogdm9pZCBH
SUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZhaWxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKQEAgLTUwLDEzICs1MCwxMyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YShT
aGFyZWRCdWZmCiAgICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBhcyB0
aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KICAgICBtX2FscmVhZHlTY2FubmVkVGhp
c0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fcmVhZGVyICYmICFtX2Zh
aWxlZCkKKyAgICBpZiAoIW1fcmVhZGVyICYmICFmYWlsZWQoKSkKICAgICAgICAgbV9yZWFkZXIu
c2V0KG5ldyBHSUZJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUoKSAmJiAhZmFpbGVkKCkgJiYgbV9yZWFkZXIpCisgICAgaWYgKCFJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpKQogICAgICAgICAgZGVjb2RlKDAsIEdJRlNpemVRdWVyeSk7CiAK
ICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKQEAgLTEwOCw3ICsx
MDgsNyBAQCBSR0JBMzJCdWZmZXIqIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtpbmRleF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSAmJiBtX3JlYWRlcikKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICBkZWNvZGUoaW5kZXggKyAxLCBHSUZGdWxsUXVl
cnkpOyAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAtMjkx
LDEyICsyOTEsMTMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRlKCkKIAogdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkg
cXVlcnkpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSB8fCAhbV9yZWFk
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5yZWFkKChj
b25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRh
LT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7CisgICAgaWYgKCFt
X3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkgKyBtX3Jl
YWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFsdEF0RnJh
bWUpKQorICAgICAgICBzZXRGYWlsZWQoKTsKIAotICAgIGlmIChtX2ZhaWxlZCkKKyAgICBpZiAo
ZmFpbGVkKCkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKQEAgLTMyMSwxMCArMzIy
LDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIAogICAg
IGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZSwg
c28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAgIGlmICgh
YnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0
KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6
ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRl
IGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAgICAg
Ly8gZGlzcG9zYWwgbWV0aG9kLgpAQCAtMzUzLDEwICszNTIsOCBAQCBib29sIEdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwg
cHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewog
ICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0
aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBp
biBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaWYgKCFidWZmZXIt
PnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVu
IGNsZWFyIGp1c3QgaXRzIGZyYW1lLgogICAgICAgICAgICAgICBidWZmZXItPmNvcHlCaXRtYXBE
YXRhKCpwcmV2QnVmZmVyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTUyNjEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsMTUgKzE5MywxMCBAQCBib29sIElDT0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlQXRJbmRleChzaXplCiAgICAgfQogICAgIC8vIEZhaWwgaWYgdGhlIHNpemUgdGhl
IFBOR0ltYWdlRGVjb2RlciBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaXplCiAgICAg
Ly8gaW4gdGhlIGRpcmVjdG9yeS4KLSAgICBpZiAobV9wbmdEZWNvZGVyc1tpbmRleF0tPmlzU2l6
ZUF2YWlsYWJsZSgpICYmIChtX3BuZ0RlY29kZXJzW2luZGV4XS0+c2l6ZSgpICE9IGRpckVudHJ5
Lm1fc2l6ZSkpIHsKLSAgICAgICAgc2V0RmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgaWYgKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5pc1NpemVBdmFpbGFibGUoKSAm
JiAobV9wbmdEZWNvZGVyc1tpbmRleF0tPnNpemUoKSAhPSBkaXJFbnRyeS5tX3NpemUpKQorICAg
ICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XSA9
ICptX3BuZ0RlY29kZXJzW2luZGV4XS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwotICAgIGlmICgh
bV9wbmdEZWNvZGVyc1tpbmRleF0tPmZhaWxlZCgpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
c2V0RmFpbGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhbV9wbmdEZWNvZGVy
c1tpbmRleF0tPmZhaWxlZCgpIHx8IHNldEZhaWxlZCgpOwogfQogCiBib29sIElDT0ltYWdlRGVj
b2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeSgpCkBAIC0yMjAsMTAgKzIxNSw4IEBAIGJvb2wgSUNPSW1h
Z2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5KCkKICAgICAgICAgSUNPTiA9IDEsCiAgICAgICAg
IENVUlNPUiA9IDIsCiAgICAgfTsKLSAgICBpZiAoKChmaWxlVHlwZSAhPSBJQ09OKSAmJiAoZmls
ZVR5cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENvdW50KSkgewotICAgICAgICBzZXRGYWlsZWQoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoKChmaWxlVHlwZSAhPSBJQ09O
KSAmJiAoZmlsZVR5cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENvdW50KSkKKyAgICAgICAgcmV0dXJu
IHNldEZhaWxlZCgpOwogCiAgICAgLy8gRW5sYXJnZSBtZW1iZXIgdmVjdG9ycyB0byBob2xkIGFs
bCB0aGUgZW50cmllcy4KICAgICBtX2RpckVudHJpZXMucmVzaXplKGlkQ291bnQpOwpAQCAtMjQ0
LDEwICsyMzcsOCBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVuCiAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugb2Zmc2V0cyBhcmUgcGFzdCB0aGUg
ZW5kIG9mIHRoZSBkaXJlY3RvcnkKICAgICAvLyBlbnRyaWVzLgogICAgIGZvciAoSWNvbkRpcmVj
dG9yeUVudHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOyBpICE9IG1fZGly
RW50cmllcy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5tX2ltYWdlT2Zmc2V0IDwgbV9k
ZWNvZGVkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBzZXRGYWlsZWQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaS0+bV9pbWFnZU9mZnNldCA8IG1f
ZGVjb2RlZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICB9CiAK
ICAgICAvLyBBcnJhbmdlIGZyYW1lcyBpbiBkZWNyZWFzaW5nIHF1YWxpdHkgb3JkZXIuCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkyLDcgKzE5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtX2luZm8ub3V0X2Nv
bG9yX3NwYWNlID0gSkNTX0NNWUs7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX0VSUk9SOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIApAQCAtMjEyLDEwICsyMTEs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TVEFSVF9ERUNPTVBSRVNT
OwogCiAgICAgICAgICAgICAvLyBXZSBjYW4gZmlsbCBpbiB0aGUgc2l6ZSBub3cgdGhhdCB0aGUg
aGVhZGVyIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXpl
KG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCkpIHsKLSAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5z
ZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
bV9kZWNvZGluZ1NpemVPbmx5KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHN0b3AgaGVy
ZS4gIFJlZHVjZSBvdXIgYnVmZmVyIGxlbmd0aCBhbmQgYXZhaWxhYmxlCkBAIC0zMTYsNyArMzEz
LDggQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBKUEVHX0VS
Uk9SOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBXZSBjYW4gZ2V0IGhlcmUg
aWYgdGhlIGNvbnN0cnVjdG9yIGZhaWxlZC4KKyAgICAgICAgICAgIHJldHVybiBtX2RlY29kZXIt
PnNldEZhaWxlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zODIs
MTggKzM4MCwxOCBAQCBKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2RlcigpCiAKIHZv
aWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQogewotICAgIGlmIChtX2ZhaWxlZCkKKyAgICBpZiAoZmFpbGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOwogCi0gICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpCisgICAgaWYgKCFt
X3JlYWRlciAmJiAhZmFpbGVkKCkpCiAgICAgICAgIG1fcmVhZGVyLnNldChuZXcgSlBFR0ltYWdl
UmVhZGVyKHRoaXMpKTsKIH0KIAogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAhZmFp
bGVkKCkgJiYgbV9yZWFkZXIpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpKQogICAgICAgICAgZGVjb2RlKHRydWUpOwogCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCk7CkBAIC00MTcsNyArNDE1LDcgQEAgUkdCQTMyQnVmZmVyKiBKUEVH
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZgogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXpl
KDEpOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsK
LSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYm
IG1fcmVhZGVyKQorICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGUpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0K
QEAgLTQzMCwxMCArNDI4LDggQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBS
R0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVm
ZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAo
IWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0
KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXpl
KCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgICAgIHJldHVybiBz
ZXRGYWlsZWQoKTsKICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1l
UGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAKQEAgLTQ3NCw4
ICs0NzAsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAg
ICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgZGVzdFksIGpzYW1wbGVbMF0gKiBrIC8gMjU1
LCBqc2FtcGxlWzFdICogayAvIDI1NSwganNhbXBsZVsyXSAqIGsgLyAyNTUsIDB4RkYpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ5NSwxMiArNDkwLDEzIEBAIHZvaWQgSlBFR0ltYWdl
RGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKIAogdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
Ym9vbCBvbmx5U2l6ZSkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZhaWxlZCgpIHx8
ICFtX3JlYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFkZXIt
PmRlY29kZShtX2RhdGEtPmJ1ZmZlcigpLCBvbmx5U2l6ZSk7CisgICAgaWYgKCFtX3JlYWRlci0+
ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKSkKKyAgICAgICAgc2V0RmFpbGVkKCk7
CiAKLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYm
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUpKQorICAgIGlmIChmYWlsZWQoKSB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVDb21wbGV0ZSkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmNwcAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2
IEBAIGNvbnN0IHVuc2lnbmVkIGxvbmcgY01heFBOR1NpemUgPSAxMDAwMDAKIC8vIENhbGxlZCBp
ZiB0aGUgZGVjb2Rpbmcgb2YgdGhlIGltYWdlIGZhaWxzLgogc3RhdGljIHZvaWQgUE5HQVBJIGRl
Y29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwKQogewotICAgIHN0
YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykp
LT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwogfQogCkBA
IC0xMjcsMTQgKzEyNiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvZGUoY29uc3QgU2hhcmVk
QnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1Np
emVPbmx5ID0gc2l6ZU9ubHk7CisgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVjb2RlciA9IHN0
YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKG1fcG5n
KSk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgc2V0am1wIGhlcmUuIE90aGVyd2lz
ZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuLgogICAgICAgICBpZiAoc2V0am1wKG1fcG5nLT5qbXBi
dWYpKSB7CiAgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICAgICAgZGVjb2Rlci0+c2V0RmFp
bGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBQTkdJbWFn
ZURlY29kZXIqIGRlY29kZXIgPSBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0
X3Byb2dyZXNzaXZlX3B0cihtX3BuZykpOwogICAgICAgICBjb25zdCBjaGFyKiBzZWdtZW50Owog
ICAgICAgICB3aGlsZSAodW5zaWduZWQgc2VnbWVudExlbmd0aCA9IGRhdGEuZ2V0U29tZURhdGEo
c2VnbWVudCwgbV9yZWFkT2Zmc2V0KSkgewogICAgICAgICAgICAgbV9yZWFkT2Zmc2V0ICs9IHNl
Z21lbnRMZW5ndGg7CkBAIC0xODIsMTcgKzE4MiwxNyBAQCBQTkdJbWFnZURlY29kZXI6On5QTkdJ
bWFnZURlY29kZXIoKQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChtX2ZhaWxlZCkKKyAg
ICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRGVjb2Rlcjo6c2V0
RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgaWYgKCFtX3JlYWRlciAmJiAhbV9m
YWlsZWQpCisgICAgaWYgKCFtX3JlYWRlciAmJiAhZmFpbGVkKCkpCiAgICAgICAgIG1fcmVhZGVy
LnNldChuZXcgUE5HSW1hZ2VSZWFkZXIodGhpcykpOwogfQogYm9vbCBQTkdJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpICYmICFmYWlsZWQoKSAmJiBtX3JlYWRlcikKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCkpCiAgICAgICAgICBkZWNvZGUodHJ1ZSk7CiAKICAgICByZXR1cm4g
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKQEAgLTIwNywxNyArMjA3LDExIEBAIFJH
QkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAgICAgLy8gRGVjb2RlIHRoaXMgZnJhbWUu
Ci0gICAgICAgIGRlY29kZShmYWxzZSk7CisgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgZGVjb2RlKGZhbHNlKTsgLy8gRGVjb2Rl
IHRoaXMgZnJhbWUuCiAgICAgcmV0dXJuICZmcmFtZTsKIH0KIAotdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmRlY29kaW5nRmFpbGVkKCkKLXsKLSAgICBtX2ZhaWxlZCA9IHRydWU7Ci19Ci0KIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19zdHJ1Y3RwIHBu
ZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAgLTIyNyw3ICsyMjEsNiBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAKICAgICAvLyBQcm90ZWN0IGFnYWluc3Qg
bGFyZ2UgaW1hZ2VzLgogICAgIGlmIChwbmctPndpZHRoID4gY01heFBOR1NpemUgfHwgcG5nLT5o
ZWlnaHQgPiBjTWF4UE5HU2l6ZSkgewotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CiAgICAgICAg
IGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzAy
LDcgKzI5NSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAg
ICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAo
YnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewogICAgICAgICBp
ZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdf
Z2V0X3Byb2dyZXNzaXZlX3B0cihtX3JlYWRlci0+cG5nUHRyKCkpKS0+ZGVjb2RpbmdGYWlsZWQo
KTsKICAgICAgICAgICAgIGxvbmdqbXAobV9yZWFkZXItPnBuZ1B0cigpLT5qbXBidWYsIDEpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODUsMTIgKzM3NywxMiBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wgb25seVNpemUpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWls
ZWQoKSB8fCAhbV9yZWFkZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcmVhZGVyLT5kZWNv
ZGUoKm1fZGF0YSwgb25seVNpemUpOwogICAgIAotICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJh
bWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygp
ID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCisgICAgaWYgKGZhaWxlZCgpIHx8ICgh
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKICAgICAgICAgbV9yZWFkZXIu
Y2xlYXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDU1MjYxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAKICAg
ICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gbGlicG5nCi0gICAgICAgIHZvaWQgZGVjb2RpbmdGYWls
ZWQoKTsKICAgICAgICAgdm9pZCBoZWFkZXJBdmFpbGFibGUoKTsKICAgICAgICAgdm9pZCByb3dB
dmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50
IGludGVybGFjZVBhc3MpOwogICAgICAgICB2b2lkIHBuZ0NvbXBsZXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49554</attachid>
            <date>2010-02-25 17:43:48 -0800</date>
            <delta_ts>2010-03-02 11:57:15 -0800</delta_ts>
            <desc>Part 1, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19777</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDItMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENsZWFuIHVwIHVzYWdlIG9mIG1fZmFpbGVkIGluIG9wZW4tc291cmNlIGltYWdlIGRlY29kZXJz
LCBwYXJ0IDEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTQxMQorICAgICAgICAKKyAgICAgICAgTWFrZXMgc2V0RmFpbGVkKCkgdmlydHVhbCBzbyBz
dWJjbGFzc2VzIGNhbiBvdmVycmlkZSBpdCAobm9uZSBkbyB5ZXQpIHRvCisgICAgICAgIGRvIGF1
dG9tYXRpYyBjbGVhbnVwIG9uIGZhaWx1cmU7IG1ha2VzIGl0IHJldHVybiBhIGJvb2wgZm9yIGVh
c3kKKyAgICAgICAgdGFpbGNhbGxpbmc7IG1ha2VzIGZhaWxlZCgpIHRoZSBvbmx5IHdheSB0byBh
Y2Nlc3MgbV9mYWlsZWQgc28KKyAgICAgICAgc3ViY2xhc3NlcyBhcmUgYXNzdXJlZCBzZXRGYWls
ZWQoKSB3b24ndCBiZSBieXBhc3NlZC4gIFBsdXMgb25lIG9yIHR3bworICAgICAgICBvdGhlciB0
aW55IGNsZWFudXAgYml0cy4KKworICAgICAgICBPdmVycmlkaW5nIHNldEZhaWxlZCgpIGlzIGNv
bWluZyBpbiBhIHN1YnNlcXVlbnQgcGF0Y2ggYmVjYXVzZSBpdCBjYW4gYmUKKyAgICAgICAgaGFp
cnkgYW5kIG5lZWRzIGNsb3NlIHJldmlldy4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNoYW5n
ZSwgc28gbm8gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzZXRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmYWls
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRmlsZUhlYWRl
cik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0lt
YWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFn
ZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdl
RGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RpbmdGYWlsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFn
ZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKwog
MjAxMC0wMi0yNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDQsMTAgKzIwNCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBJbWFnZURlY29kZXIoKQogICAgICAgICAgICAgOiBtX3NjYWxlZChmYWxzZSkKLSAgICAgICAg
ICAgICwgbV9mYWlsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxz
ZSkKICAgICAgICAgICAgICwgbV9pc0FsbERhdGFSZWNlaXZlZChmYWxzZSkKICAgICAgICAgICAg
ICwgbV9tYXhOdW1QaXhlbHMoLTEpCisgICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNlKQogICAg
ICAgICB7CiAgICAgICAgIH0KIApAQCAtMjI2LDYgKzIyNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFpbGVkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgbV9kYXRhID0gZGF0YTsKICAg
ICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAg
IH0KQEAgLTI2NywxMCArMjY5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBi
ZSBzZXQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgZGVjb2RpbmcuCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBoZWlnaHQp
KSB7Ci0gICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAg
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBtX3Np
emVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTMsOCAr
MjkzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gdHJhbnNwYXJlbmN5Lgog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAorICAgICAgICAvLyBTZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcuICBGb3IgY2Fs
bGVyIGNvbnZlbmllbmNlIChzaW5jZSBzbworICAgICAgICAvLyBtYW55IGNhbGxlcnMgd2FudCB0
byByZXR1cm4gZmFsc2UgYWZ0ZXIgY2FsbGluZyB0aGlzKSwgcmV0dXJucyBmYWxzZQorICAgICAg
ICAvLyB0byBlbmFibGUgZWFzeSB0YWlsY2FsbGluZy4KKyAgICAgICAgdmlydHVhbCBib29sIHNl
dEZhaWxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgZmFpbGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICAgICAgdm9pZCBzZXRGYWlsZWQoKSB7IG1f
ZmFpbGVkID0gdHJ1ZTsgfQogCiAgICAgICAgIC8vIFdpcGUgb3V0IGZyYW1lcyBpbiB0aGUgZnJh
bWUgYnVmZmVyIGNhY2hlIGJlZm9yZSB8Y2xlYXJCZWZvcmVGcmFtZXwsCiAgICAgICAgIC8vIGFz
c3VtaW5nIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZl
cmVudApAQCAtMzIxLDcgKzMyOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVj
dG9yPGludD4gbV9zY2FsZWRSb3dzOwogICAgICAgICBib29sIG1fc2NhbGVkOwogICAgICAgICBW
ZWN0b3I8UkdCQTMyQnVmZmVyPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7Ci0gICAgICAgIGJvb2wgbV9m
YWlsZWQ7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0
ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKQEAgLTMzOSw2
ICszNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zaXplQXZhaWxh
YmxlOwogICAgICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAgIGludCBtX21h
eE51bVBpeGVsczsKKyAgICAgICAgYm9vbCBtX2ZhaWxlZDsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU1MjYxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEJNUEltYWdlRGVjb2Rlcjo6c2V0RGF0
YShTaGFyZWRCdWZmCiAKIGJvb2wgQk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQog
ewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAhZmFpbGVkKCkp
CisgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQogICAgICAgICBkZWNv
ZGUodHJ1ZSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsK
QEAgLTcyLDcgKzcyLDcgQEAgUkdCQTMyQnVmZmVyKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVm
ZgogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogCiAgICAgUkdCQTMyQnVm
ZmVyKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Ci0gICAgaWYgKGJ1ZmZl
ci0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmICFmYWlsZWQoKSkK
KyAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUp
CiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTEzMSwx
MiArMTMxLDcgQEAgYm9vbCBCTVBJbWFnZURlY29kZXI6OnByb2Nlc3NGaWxlSGVhZGVyKAogICAg
ICAgICBCSVRNQVBBUlJBWSA9IDB4NDI0MSwgIC8vICJCQSIKICAgICAgICAgKi8KICAgICB9Owot
ICAgIGlmIChmaWxlVHlwZSAhPSBCTUFQKSB7Ci0gICAgICAgIHNldEZhaWxlZCgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIChm
aWxlVHlwZSA9PSBCTUFQKSB8fCBzZXRGYWlsZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgR0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKCkK
IAogdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZhaWxlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKQEAgLTUwLDEzICs1MCwxMyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6
c2V0RGF0YShTaGFyZWRCdWZmCiAgICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZyYW1lIGNv
dW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KICAgICBtX2FscmVhZHlT
Y2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fcmVhZGVy
ICYmICFtX2ZhaWxlZCkKKyAgICBpZiAoIW1fcmVhZGVyICYmICFmYWlsZWQoKSkKICAgICAgICAg
bV9yZWFkZXIuc2V0KG5ldyBHSUZJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiAKIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKSAmJiAhZmFpbGVkKCkgJiYgbV9yZWFkZXIpCisgICAgaWYgKCFJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQogICAgICAgICAgZGVjb2RlKDAsIEdJRlNpemVR
dWVyeSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKQEAg
LTEwOCw3ICsxMDgsNyBAQCBSR0JBMzJCdWZmZXIqIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVC
dWZmZXJDYWNoZVtpbmRleF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZl
cjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICBkZWNvZGUoaW5kZXggKyAxLCBH
SUZGdWxsUXVlcnkpOyAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KICAgICByZXR1cm4gJmZyYW1lOwog
fQpAQCAtMjkxLDEyICsyOTEsMTMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRl
KCkKIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwg
R0lGUXVlcnkgcXVlcnkpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSB8
fCAhbV9yZWFkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVy
LT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNl
dCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7Cisg
ICAgaWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRh
KCkgKyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwg
aGFsdEF0RnJhbWUpKQorICAgICAgICBzZXRGYWlsZWQoKTsKIAotICAgIGlmIChtX2ZhaWxlZCkK
KyAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKQEAgLTMy
MSwxMCArMzIyLDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgog
ICAgIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAg
ICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXpl
KCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUo
c2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIHN0YXJ0
aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MK
ICAgICAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgpAQCAtMzUzLDEwICszNTIsOCBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgICAgICBpZiAoIWZyYW1l
SW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXpl
KCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3Ig
YSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwg
cmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaWYg
KCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdo
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVm
ZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1lLgogICAgICAgICAgICAgICBidWZmZXItPmNv
cHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24g
NTUyNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsMTUgKzE5MywxMCBAQCBib29sIElDT0lt
YWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleChzaXplCiAgICAgfQogICAgIC8vIEZhaWwgaWYgdGhl
IHNpemUgdGhlIFBOR0ltYWdlRGVjb2RlciBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBz
aXplCiAgICAgLy8gaW4gdGhlIGRpcmVjdG9yeS4KLSAgICBpZiAobV9wbmdEZWNvZGVyc1tpbmRl
eF0tPmlzU2l6ZUF2YWlsYWJsZSgpICYmIChtX3BuZ0RlY29kZXJzW2luZGV4XS0+c2l6ZSgpICE9
IGRpckVudHJ5Lm1fc2l6ZSkpIHsKLSAgICAgICAgc2V0RmFpbGVkKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5pc1NpemVBdmFp
bGFibGUoKSAmJiAobV9wbmdEZWNvZGVyc1tpbmRleF0tPnNpemUoKSAhPSBkaXJFbnRyeS5tX3Np
emUpKQorICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
W2luZGV4XSA9ICptX3BuZ0RlY29kZXJzW2luZGV4XS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwot
ICAgIGlmICghbV9wbmdEZWNvZGVyc1tpbmRleF0tPmZhaWxlZCgpKQotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgc2V0RmFpbGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhbV9w
bmdEZWNvZGVyc1tpbmRleF0tPmZhaWxlZCgpIHx8IHNldEZhaWxlZCgpOwogfQogCiBib29sIElD
T0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeSgpCkBAIC0yMjAsMTAgKzIxNSw4IEBAIGJv
b2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5KCkKICAgICAgICAgSUNPTiA9IDEs
CiAgICAgICAgIENVUlNPUiA9IDIsCiAgICAgfTsKLSAgICBpZiAoKChmaWxlVHlwZSAhPSBJQ09O
KSAmJiAoZmlsZVR5cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENvdW50KSkgewotICAgICAgICBzZXRG
YWlsZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoKChmaWxlVHlw
ZSAhPSBJQ09OKSAmJiAoZmlsZVR5cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENvdW50KSkKKyAgICAg
ICAgcmV0dXJuIHNldEZhaWxlZCgpOwogCiAgICAgLy8gRW5sYXJnZSBtZW1iZXIgdmVjdG9ycyB0
byBob2xkIGFsbCB0aGUgZW50cmllcy4KICAgICBtX2RpckVudHJpZXMucmVzaXplKGlkQ291bnQp
OwpAQCAtMjQ0LDEwICsyMzcsOCBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVj
dG9yeUVuCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugb2Zmc2V0cyBhcmUg
cGFzdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkKICAgICAvLyBlbnRyaWVzLgogICAgIGZvciAo
SWNvbkRpcmVjdG9yeUVudHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOyBp
ICE9IG1fZGlyRW50cmllcy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5tX2ltYWdlT2Zm
c2V0IDwgbV9kZWNvZGVkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBzZXRGYWlsZWQoKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaS0+bV9pbWFnZU9m
ZnNldCA8IG1fZGVjb2RlZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsK
ICAgICB9CiAKICAgICAvLyBBcnJhbmdlIGZyYW1lcyBpbiBkZWNyZWFzaW5nIHF1YWxpdHkgb3Jk
ZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtX2lu
Zm8ub3V0X2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX0VSUk9S
OwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIApAQCAtMjEy
LDEwICsyMTEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TVEFSVF9E
RUNPTVBSRVNTOwogCiAgICAgICAgICAgICAvLyBXZSBjYW4gZmlsbCBpbiB0aGUgc2l6ZSBub3cg
dGhhdCB0aGUgaGVhZGVyIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGlmICghbV9kZWNvZGVy
LT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCkpIHsKLSAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKKyAgICAgICAgICAgIGlmICghbV9k
ZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAobV9kZWNvZGluZ1NpemVPbmx5KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2Fu
IHN0b3AgaGVyZS4gIFJlZHVjZSBvdXIgYnVmZmVyIGxlbmd0aCBhbmQgYXZhaWxhYmxlCkBAIC0z
MTYsNyArMzEzLDggQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBKUEVHX0VSUk9SOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBXZSBjYW4g
Z2V0IGhlcmUgaWYgdGhlIGNvbnN0cnVjdG9yIGZhaWxlZC4KKyAgICAgICAgICAgIHJldHVybiBt
X2RlY29kZXItPnNldEZhaWxlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0zODIsMTggKzM4MCwxOCBAQCBKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2Rl
cigpCiAKIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChtX2ZhaWxlZCkKKyAgICBpZiAoZmFp
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpCisg
ICAgaWYgKCFtX3JlYWRlciAmJiAhZmFpbGVkKCkpCiAgICAgICAgIG1fcmVhZGVyLnNldChuZXcg
SlBFR0ltYWdlUmVhZGVyKHRoaXMpKTsKIH0KIAogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KSAmJiAhZmFpbGVkKCkgJiYgbV9yZWFkZXIpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSgpKQogICAgICAgICAgZGVjb2RlKHRydWUpOwogCiAgICAgcmV0dXJuIEltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CkBAIC00MTcsNyArNDE1LDcgQEAgUkdCQTMyQnVm
ZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZgogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGUucmVzaXplKDEpOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNv
bXBsZXRlICYmIG1fcmVhZGVyKQorICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZm
cmFtZTsKIH0KQEAgLTQzMCwxMCArNDI4LDggQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRw
dXRTY2FubGluZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRl
ZC4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAg
ICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewotICAg
ICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXpl
KCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShz
Y2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgICAg
IHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZm
ZXI6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAK
QEAgLTQ3NCw4ICs0NzAsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cygpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgZGVzdFksIGpzYW1wbGVbMF0g
KiBrIC8gMjU1LCBqc2FtcGxlWzFdICogayAvIDI1NSwganNhbXBsZVsyXSAqIGsgLyAyNTUsIDB4
RkYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ5NSwxMiArNDkwLDEzIEBAIHZvaWQg
SlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKIAogdm9pZCBKUEVHSW1hZ2VEZWNvZGVy
OjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZh
aWxlZCgpIHx8ICFtX3JlYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mYWlsZWQgPSAh
bV9yZWFkZXItPmRlY29kZShtX2RhdGEtPmJ1ZmZlcigpLCBvbmx5U2l6ZSk7CisgICAgaWYgKCFt
X3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKSkKKyAgICAgICAgc2V0
RmFpbGVkKCk7CiAKLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNF
bXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUpKQorICAgIGlmIChmYWlsZWQoKSB8fCAoIW1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw2IEBAIGNvbnN0IHVuc2lnbmVkIGxvbmcgY01heFBOR1NpemUgPSAxMDAwMDAKIC8v
IENhbGxlZCBpZiB0aGUgZGVjb2Rpbmcgb2YgdGhlIGltYWdlIGZhaWxzLgogc3RhdGljIHZvaWQg
UE5HQVBJIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwKQog
ewotICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVf
cHRyKHBuZykpLT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEp
OwogfQogCkBAIC0xMjcsMTQgKzEyNiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvZGUoY29u
c3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9k
ZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CisgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVj
b2RlciA9IHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVf
cHRyKG1fcG5nKSk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgc2V0am1wIGhlcmUu
IE90aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuLgogICAgICAgICBpZiAoc2V0am1wKG1f
cG5nLT5qbXBidWYpKSB7CiAgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICAgICAgZGVjb2Rl
ci0+c2V0RmFpbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBQTkdJbWFnZURlY29kZXIqIGRlY29kZXIgPSBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIq
PihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihtX3BuZykpOwogICAgICAgICBjb25zdCBjaGFyKiBz
ZWdtZW50OwogICAgICAgICB3aGlsZSAodW5zaWduZWQgc2VnbWVudExlbmd0aCA9IGRhdGEuZ2V0
U29tZURhdGEoc2VnbWVudCwgbV9yZWFkT2Zmc2V0KSkgewogICAgICAgICAgICAgbV9yZWFkT2Zm
c2V0ICs9IHNlZ21lbnRMZW5ndGg7CkBAIC0xODIsMTcgKzE4MiwxNyBAQCBQTkdJbWFnZURlY29k
ZXI6On5QTkdJbWFnZURlY29kZXIoKQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChtX2Zh
aWxlZCkKKyAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRGVj
b2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgaWYgKCFtX3JlYWRl
ciAmJiAhbV9mYWlsZWQpCisgICAgaWYgKCFtX3JlYWRlciAmJiAhZmFpbGVkKCkpCiAgICAgICAg
IG1fcmVhZGVyLnNldChuZXcgUE5HSW1hZ2VSZWFkZXIodGhpcykpOwogfQogYm9vbCBQTkdJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpICYmICFmYWlsZWQoKSAmJiBtX3JlYWRlcikKKyAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCiAgICAgICAgICBkZWNvZGUodHJ1ZSk7CiAKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKQEAgLTIwNywxNyArMjA3
LDExIEBAIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAgICAgLy8gRGVjb2RlIHRo
aXMgZnJhbWUuCi0gICAgICAgIGRlY29kZShmYWxzZSk7CisgICAgaWYgKGZyYW1lLnN0YXR1cygp
ICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgZGVjb2RlKGZhbHNlKTsg
Ly8gRGVjb2RlIHRoaXMgZnJhbWUuCiAgICAgcmV0dXJuICZmcmFtZTsKIH0KIAotdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKCkKLXsKLSAgICBtX2ZhaWxlZCA9IHRydWU7Ci19
Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19z
dHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAgLTIyNyw3ICsyMjEsNiBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAKICAgICAvLyBQcm90ZWN0
IGFnYWluc3QgbGFyZ2UgaW1hZ2VzLgogICAgIGlmIChwbmctPndpZHRoID4gY01heFBOR1NpemUg
fHwgcG5nLT5oZWlnaHQgPiBjTWF4UE5HU2l6ZSkgewotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7
CiAgICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzAyLDcgKzI5NSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsK
ICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewog
ICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRT
aXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29k
ZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihtX3JlYWRlci0+cG5nUHRyKCkpKS0+ZGVjb2Rp
bmdGYWlsZWQoKTsKICAgICAgICAgICAgIGxvbmdqbXAobV9yZWFkZXItPnBuZ1B0cigpLT5qbXBi
dWYsIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODUsMTIgKzM3Nywx
MiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogCiB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAg
IGlmIChmYWlsZWQoKSB8fCAhbV9yZWFkZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcmVh
ZGVyLT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpOwogICAgIAotICAgIGlmIChtX2ZhaWxlZCB8
fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBd
LnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCisgICAgaWYgKGZhaWxl
ZCgpIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKICAgICAgICAg
bV9yZWFkZXIuY2xlYXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDU1MjYxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gbGlicG5nCi0gICAgICAgIHZvaWQgZGVj
b2RpbmdGYWlsZWQoKTsKICAgICAgICAgdm9pZCBoZWFkZXJBdmFpbGFibGUoKTsKICAgICAgICAg
dm9pZCByb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJ
bmRleCwgaW50IGludGVybGFjZVBhc3MpOwogICAgICAgICB2b2lkIHBuZ0NvbXBsZXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49828</attachid>
            <date>2010-03-02 11:57:15 -0800</date>
            <delta_ts>2010-03-02 12:12:23 -0800</delta_ts>
            <desc>Part 1, v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24894</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMTAtMDMtMDIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENsZWFuIHVwIHVzYWdlIG9mIG1fZmFpbGVkIGluIG9wZW4tc291cmNlIGltYWdlIGRlY29kZXJz
LCBwYXJ0IDEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTQxMQorICAgICAgICAKKyAgICAgICAgTWFrZXMgc2V0RmFpbGVkKCkgdmlydHVhbCBzbyBz
dWJjbGFzc2VzIGNhbiBvdmVycmlkZSBpdCAobm9uZSBkbyB5ZXQpIHRvCisgICAgICAgIGRvIGF1
dG9tYXRpYyBjbGVhbnVwIG9uIGZhaWx1cmU7IG1ha2VzIGl0IHJldHVybiBhIGJvb2wgZm9yIGVh
c3kKKyAgICAgICAgdGFpbGNhbGxpbmc7IG1ha2VzIGZhaWxlZCgpIHRoZSBvbmx5IHdheSB0byBh
Y2Nlc3MgbV9mYWlsZWQgc28KKyAgICAgICAgc3ViY2xhc3NlcyBhcmUgYXNzdXJlZCBzZXRGYWls
ZWQoKSB3b24ndCBiZSBieXBhc3NlZC4gIFBsdXMgb25lIG9yIHR3bworICAgICAgICBvdGhlciB0
aW55IGNsZWFudXAgYml0cy4KKworICAgICAgICBPdmVycmlkaW5nIHNldEZhaWxlZCgpIGlzIGNv
bWluZyBpbiBhIHN1YnNlcXVlbnQgcGF0Y2ggYmVjYXVzZSBpdCBjYW4gYmUKKyAgICAgICAgaGFp
cnkgYW5kIG5lZWRzIGNsb3NlIHJldmlldy4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNoYW5n
ZSwgc28gbm8gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURl
Y29kZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6c2V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlclF0OjppbnRlcm5hbERlY29kZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsUmVhZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6Zm9yY2VMb2FkRXZlcnl0aGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6Y2xlYXJQb2ludGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmYWlsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjpwcm9jZXNzRmlsZUhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9y
eSk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlF
bnRyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKwogMjAxMC0wMy0wMiAgRnJpZHJpY2ggU3RyYmEg
IDxmcmlkcmljaC5zdHJiYUBibHVld2luLmNoPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3Blei4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNv
ZGVyUXQuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VEZWNvZGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIElt
YWdlRGVjb2RlclF0Ojp+SW1hZ2VEZWNvZGVyUXQoKQogCiB2b2lkIEltYWdlRGVjb2RlclF0Ojpz
ZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAg
aWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gTm8gcHJvZ3Jlc3NpdmUgbG9hZGluZyBwb3NzaWJsZQpAQCAtMTMzLDcgKzEzMyw3IEBAIFJH
QkEzMkJ1ZmZlciogSW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVmZmUKICAgICAvLyB5ZXQgaG93IG1h
bnkgaW1hZ2VzIHdlIGFyZSBnb2luZyB0byBoYXZlIGFuZCBuZWVkIHRvCiAgICAgLy8gZmluZCB0
aGF0IG91dCBub3cuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KTsKLSAgICBpZiAoIW1fZmFpbGVkICYmICFjb3VudCkgeworICAgIGlmICghZmFpbGVkKCkgJiYg
IWNvdW50KSB7CiAgICAgICAgIGludGVybmFsRGVjb2RlU2l6ZSgpOwogICAgICAgICBjb3VudCA9
IGZyYW1lQ291bnQoKTsKICAgICB9CkBAIC0xNTcsOCArMTU3LDEwIEBAIHZvaWQgSW1hZ2VEZWNv
ZGVyUXQ6OmludGVybmFsRGVjb2RlU2l6ZSgKIAogICAgIC8vIElmIHdlIGhhdmUgYSBRU2l6ZSgp
IHNvbWV0aGluZyBmYWlsZWQKICAgICBRU2l6ZSBzaXplID0gbV9yZWFkZXItPnNpemUoKTsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWlsUmVhZCgpOworICAgIGlm
IChzaXplLmlzRW1wdHkoKSkgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJu
IGNsZWFyUG9pbnRlcnMoKTsKKyAgICB9CiAKICAgICBzZXRTaXplKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7CiB9CkBAIC0xNjksMjYgKzE3MSwzMCBAQCB2b2lkIEltYWdlRGVjb2RlclF0
OjppbnRlcm5hbFJlYWRJbWFnZShzCiAKICAgICBpZiAobV9yZWFkZXItPnN1cHBvcnRzQW5pbWF0
aW9uKCkpCiAgICAgICAgIG1fcmVhZGVyLT5qdW1wVG9JbWFnZShmcmFtZUluZGV4KTsKLSAgICBl
bHNlIGlmIChmcmFtZUluZGV4ICE9IDApCi0gICAgICAgIHJldHVybiBmYWlsUmVhZCgpOworICAg
IGVsc2UgaWYgKGZyYW1lSW5kZXggIT0gMCkgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAg
ICAgcmV0dXJuIGNsZWFyUG9pbnRlcnMoKTsKKyAgICB9CiAKLSAgICBpbnRlcm5hbEhhbmRsZUN1
cnJlbnRJbWFnZShmcmFtZUluZGV4KTsKKyAgICBpZiAoIWludGVybmFsSGFuZGxlQ3VycmVudElt
YWdlKGZyYW1lSW5kZXgpKQorICAgICAgc2V0RmFpbGVkKCk7CiAKICAgICAvLyBBdHRlbXB0IHRv
IHJldHVybiBzb21lIG1lbW9yeQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9mcmFtZUJ1ZmZl
ckNhY2hlLnNpemUoKTsgKytpKQogICAgICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlW2ldLnN0
YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fcmVhZGVyLmNsZWFyKCk7Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKKyAgICBj
bGVhclBvaW50ZXJzKCk7CiB9CiAKLXZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsSGFuZGxl
Q3VycmVudEltYWdlKHNpemVfdCBmcmFtZUluZGV4KQorYm9vbCBJbWFnZURlY29kZXJRdDo6aW50
ZXJuYWxIYW5kbGVDdXJyZW50SW1hZ2Uoc2l6ZV90IGZyYW1lSW5kZXgpCiB7CiAgICAgLy8gTm93
IGdldCB0aGUgUUltYWdlIGZyb20gUXQgYW5kIHBsYWNlIGl0IGluIHRoZSBSR0JBMzJCdWZmZXIK
ICAgICBRSW1hZ2UgaW1nOwotICAgIGlmICghbV9yZWFkZXItPnJlYWQoJmltZykpCi0gICAgICAg
IHJldHVybiBmYWlsUmVhZCgpOworICAgIGlmICghbV9yZWFkZXItPnJlYWQoJmltZykpIHsKKyAg
ICAgICAgY2xlYXJQb2ludGVycygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAg
ICAgLy8gbm93IGludG8gdGhlIFJHQkEzMkJ1ZmZlciAtIGV2ZW4gaWYgdGhlIGltYWdlIGlzIG5v
dAogICAgIFFTaXplIGltYWdlU2l6ZSA9IGltZy5zaXplKCk7CkBAIC0xOTcsNiArMjAzLDcgQEAg
dm9pZCBJbWFnZURlY29kZXJRdDo6aW50ZXJuYWxIYW5kbGVDdXJyZQogICAgIGJ1ZmZlci0+c2V0
U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CiAgICAgYnVmZmVyLT5zZXREdXJh
dGlvbihtX3JlYWRlci0+bmV4dEltYWdlRGVsYXkoKSk7CiAgICAgYnVmZmVyLT5zZXREZWNvZGVk
SW1hZ2UoaW1nKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gVGhlIFFJbWFnZUlPSGFuZGxl
ciBpcyBub3QgYWJsZSB0byB0ZWxsIHVzIGhvdyBtYW55IGZyYW1lcwpAQCAtMjA0LDggKzIxMSw4
IEBAIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsSGFuZGxlQ3VycmUKIC8vIGluY3JlYXNp
bmcgdGhlIG1fZnJhbWVCdWZmZXJDYWNoZSBieSBvbmUgYW5kIHRyeSB0byBwYXJzZQogLy8gdGhl
IGltYWdlLiBXZSBzdG9wIHdoZW4gUUltYWdlOjpyZWFkIGZhaWxzIGFuZCB0aGVuIG5lZWQKIC8v
IHRvIHJlc2l6ZSB0aGUgbV9mcmFtZUJ1ZmZlckNhY2hlIHRvIHRoZSBmaW5hbCBzaXplIGFuZCB1
cGRhdGUKLS8vIHRoZSBtX2ZhaWxlZC4gSW4gY2FzZSB3ZSBmYWlsZWQgdG8gZGVjb2RlIHRoZSBm
aXJzdCBpbWFnZQotLy8gd2Ugd2FudCB0byBrZWVwIG1fZmFpbGVkIHNldCB0byB0cnVlLgorLy8g
dGhlIGZhaWxlZCBiaXQuIElmIHdlIGZhaWxlZCB0byBkZWNvZGUgdGhlIGZpcnN0IGltYWdlCisv
LyB0aGVuIHdlIHRydWx5IGZhaWxlZCB0byBkZWNvZGUsIG90aGVyd2lzZSB3ZSdyZSBPSy4KIAog
Ly8gVE9ETzogRG8gbm90IGluY3JlbWVudCB0aGUgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSBi
eSBvbmUgYnV0IG1vcmUgdGhhbiBvbmUKIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmZvcmNlTG9hZEV2
ZXJ5dGhpbmcoKQpAQCAtMjE0LDIwICsyMjEsMTkgQEAgdm9pZCBJbWFnZURlY29kZXJRdDo6Zm9y
Y2VMb2FkRXZlcnl0aGluZwogCiAgICAgZG8gewogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUu
cmVzaXplKCsraW1hZ2VDb3VudCk7Ci0gICAgICAgIGludGVybmFsSGFuZGxlQ3VycmVudEltYWdl
KGltYWdlQ291bnQgLSAxKTsKLSAgICB9IHdoaWxlICghbV9mYWlsZWQpOworICAgIH0gd2hpbGUg
KGludGVybmFsSGFuZGxlQ3VycmVudEltYWdlKGltYWdlQ291bnQgLSAxKSk7CiAKICAgICAvLyBJ
ZiB3ZSBmYWlsZWQgZGVjb2RpbmcgdGhlIGZpcnN0IGltYWdlIHdlIGFjdHVhbGx5Ci0gICAgLy8g
aGF2ZSBubyBpbWFnZXMgYW5kIG5lZWQgdG8ga2VlcCBtX2ZhaWxlZCBzZXQgdG8KLSAgICAvLyB0
cnVlIG90aGVyd2lzZSB3ZSB3YW50IHRvIHJlc2V0IGl0IGFuZCBmb3JnZXQgYWJvdXQKKyAgICAv
LyBoYXZlIG5vIGltYWdlcyBhbmQgbmVlZCB0byBzZXQgdGhlIGZhaWxlZCBiaXQuCisgICAgLy8g
T3RoZXJ3aXNlLCB3ZSB3YW50IHRvIGZvcmdldCBhYm91dAogICAgIC8vIHRoZSBsYXN0IGF0dGVt
cHQgdG8gZGVjb2RlIGEgaW1hZ2UuCiAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShpbWFn
ZUNvdW50IC0gMSk7Ci0gICAgbV9mYWlsZWQgPSBpbWFnZUNvdW50ID09IDE7CisgICAgaWYgKGlt
YWdlQ291bnQgPT0gMSkKKyAgICAgIHNldEZhaWxlZCgpOwogfQogCi12b2lkIEltYWdlRGVjb2Rl
clF0OjpmYWlsUmVhZCgpCit2b2lkIEltYWdlRGVjb2RlclF0OjpjbGVhclBvaW50ZXJzKCkKIHsK
LSAgICBzZXRGYWlsZWQoKTsKICAgICBtX3JlYWRlci5jbGVhcigpOwogICAgIG1fYnVmZmVyLmNs
ZWFyKCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2Rl
clF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURl
Y29kZXJRdC5oCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VEZWNvZGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOSArNjEsOSBAQCBwcml2
YXRlOgogcHJpdmF0ZToKICAgICB2b2lkIGludGVybmFsRGVjb2RlU2l6ZSgpOwogICAgIHZvaWQg
aW50ZXJuYWxSZWFkSW1hZ2Uoc2l6ZV90KTsKLSAgICB2b2lkIGludGVybmFsSGFuZGxlQ3VycmVu
dEltYWdlKHNpemVfdCk7CisgICAgYm9vbCBpbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFnZShzaXpl
X3QpOwogICAgIHZvaWQgZm9yY2VMb2FkRXZlcnl0aGluZygpOwotICAgIHZvaWQgZmFpbFJlYWQo
KTsKKyAgICB2b2lkIGNsZWFyUG9pbnRlcnMoKTsKIAogcHJpdmF0ZToKICAgICBRQnl0ZUFycmF5
IG1fZm9ybWF0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwxMCArMjA0LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEltYWdlRGVjb2Rl
cigpCiAgICAgICAgICAgICA6IG1fc2NhbGVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX2ZhaWxl
ZChmYWxzZSkKICAgICAgICAgICAgICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQogICAgICAgICAg
ICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX21heE51bVBp
eGVscygtMSkKKyAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCkBAIC0yMjYsNiArMjI2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWlsZWQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICBtX2RhdGEgPSBkYXRhOwogICAgICAgICAgICAgbV9p
c0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKICAgICAgICAgfQpAQCAtMjY3LDEw
ICsyNjksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGJlIHNldCBhbmQgdGhl
IGNhbGxlciBzaG91bGQgaW1tZWRpYXRlbHkgc3RvcCBkZWNvZGluZy4KICAgICAgICAgdmlydHVh
bCBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAg
ICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgbV9zaXpl
ID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5Myw4ICsyOTMsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyB0cmFuc3BhcmVuY3kuCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgICAg
IC8vIFNldHMgdGhlICJkZWNvZGUgZmFpbHVyZSIgZmxhZy4gIEZvciBjYWxsZXIgY29udmVuaWVu
Y2UgKHNpbmNlIHNvCisgICAgICAgIC8vIG1hbnkgY2FsbGVycyB3YW50IHRvIHJldHVybiBmYWxz
ZSBhZnRlciBjYWxsaW5nIHRoaXMpLCByZXR1cm5zIGZhbHNlCisgICAgICAgIC8vIHRvIGVuYWJs
ZSBlYXN5IHRhaWxjYWxsaW5nLgorICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0RmFpbGVkKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVy
biBtX2ZhaWxlZDsgfQotICAgICAgICB2b2lkIHNldEZhaWxlZCgpIHsgbV9mYWlsZWQgPSB0cnVl
OyB9CiAKICAgICAgICAgLy8gV2lwZSBvdXQgZnJhbWVzIGluIHRoZSBmcmFtZSBidWZmZXIgY2Fj
aGUgYmVmb3JlIHxjbGVhckJlZm9yZUZyYW1lfCwKICAgICAgICAgLy8gYXNzdW1pbmcgdGhpcyBj
YW4gYmUgZG9uZSB3aXRob3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlmZmVyZW50CkBAIC0zMjEs
NyArMzI5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0b3I8aW50PiBtX3Nj
YWxlZFJvd3M7CiAgICAgICAgIGJvb2wgbV9zY2FsZWQ7CiAgICAgICAgIFZlY3RvcjxSR0JBMzJC
dWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAgICAgICAgYm9vbCBtX2ZhaWxlZDsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIC8vIFNvbWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9m
IHRoZSBpbWFnZSBhcyAid2lkdGggKiBoZWlnaHQgKiA0IgpAQCAtMzM5LDYgKzM0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGU7CiAgICAgICAg
IGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKICAgICAgICAgaW50IG1fbWF4TnVtUGl4ZWxzOwor
ICAgICAgICBib29sIG1fZmFpbGVkOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmYK
IAogYm9vbCBCTVBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWlsZWQoKSkKKyAgICBpZiAoIUlt
YWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCiAgICAgICAgIGRlY29kZSh0cnVlKTsKIAog
ICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtNzIsNyArNzIs
NyBAQCBSR0JBMzJCdWZmZXIqIEJNUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CiAKICAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9
ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKLSAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAh
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgIWZhaWxlZCgpKQorICAgIGlmIChidWZm
ZXItPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKICAgICAgICAgZGVj
b2RlKGZhbHNlKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQpAQCAtMTMxLDEyICsxMzEsNyBAQCBi
b29sIEJNUEltYWdlRGVjb2Rlcjo6cHJvY2Vzc0ZpbGVIZWFkZXIoCiAgICAgICAgIEJJVE1BUEFS
UkFZID0gMHg0MjQxLCAgLy8gIkJBIgogICAgICAgICAqLwogICAgIH07Ci0gICAgaWYgKGZpbGVU
eXBlICE9IEJNQVApIHsKLSAgICAgICAgc2V0RmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKGZpbGVUeXBlID09IEJN
QVApIHx8IHNldEZhaWxlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDU1MjYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBHSUZJbWFnZURlY29kZXI6On5HSUZJbWFnZURlY29kZXIoKQogCiB2b2lkIEdJRklt
YWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQogewotICAgIGlmIChtX2ZhaWxlZCkKKyAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OwpAQCAtNTAsMTMgKzUwLDEzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJl
ZEJ1ZmYKICAgICAvLyBXZSBuZWVkIHRvIHJlc2NhbiB0aGUgZnJhbWUgY291bnQsIGFzIHRoZSBu
ZXcgZGF0YSBtYXkgaGF2ZSBjaGFuZ2VkIGl0LgogICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0
YUZvckZyYW1lQ291bnQgPSBmYWxzZTsKIAotICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVk
KQorICAgIGlmICghbV9yZWFkZXIgJiYgIWZhaWxlZCgpKQogICAgICAgICBtX3JlYWRlci5zZXQo
bmV3IEdJRkltYWdlUmVhZGVyKHRoaXMpKTsKIH0KIAogYm9vbCBHSUZJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpICYmICFmYWlsZWQoKSAmJiBtX3JlYWRlcikKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCkpCiAgICAgICAgICBkZWNvZGUoMCwgR0lGU2l6ZVF1ZXJ5KTsKIAogICAg
IHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMTA4LDcgKzEwOCw3
IEBAIFJHQkEzMkJ1ZmZlciogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2lu
ZGV4XTsKLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBs
ZXRlICYmIG1fcmVhZGVyKQorICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUpCiAgICAgICAgIGRlY29kZShpbmRleCArIDEsIEdJRkZ1bGxRdWVyeSk7
IC8vIERlY29kZSB0aGlzIGZyYW1lLgogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0yOTEsMTIg
KzI5MSwxMyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQogCiB2b2lkIEdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVy
eSkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZhaWxlZCgpIHx8ICFtX3JlYWRlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPnJlYWQoKGNvbnN0
IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEtPnNp
emUoKSAtIG1fcmVhZE9mZnNldCwgcXVlcnksIGhhbHRBdEZyYW1lKTsKKyAgICBpZiAoIW1fcmVh
ZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9m
ZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkp
CisgICAgICAgIHNldEZhaWxlZCgpOwogCi0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWls
ZWQoKSkKICAgICAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0KIApAQCAtMzIxLDEwICszMjIsOCBA
QCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgCiAgICAgaWYg
KCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3
ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KLSAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkp
IHsKLSAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCku
d2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc3RhcnRpbmcgc3RhdGUgZm9y
IHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUncwogICAgICAgICAvLyBk
aXNwb3NhbCBtZXRob2QuCkBAIC0zNTMsMTAgKzM1Miw4IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
Ojppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2
UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBz
aXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEg
Y29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0
U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+
c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xl
YXIganVzdCBpdHMgZnJhbWUuCiAgICAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEo
KnByZXZCdWZmZXIpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MywxNSArMTkzLDEwIEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpk
ZWNvZGVBdEluZGV4KHNpemUKICAgICB9CiAgICAgLy8gRmFpbCBpZiB0aGUgc2l6ZSB0aGUgUE5H
SW1hZ2VEZWNvZGVyIGNhbGN1bGF0ZWQgZG9lcyBub3QgbWF0Y2ggdGhlIHNpemUKICAgICAvLyBp
biB0aGUgZGlyZWN0b3J5LgotICAgIGlmIChtX3BuZ0RlY29kZXJzW2luZGV4XS0+aXNTaXplQXZh
aWxhYmxlKCkgJiYgKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5zaXplKCkgIT0gZGlyRW50cnkubV9z
aXplKSkgewotICAgICAgICBzZXRGYWlsZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBpZiAobV9wbmdEZWNvZGVyc1tpbmRleF0tPmlzU2l6ZUF2YWlsYWJsZSgpICYmICht
X3BuZ0RlY29kZXJzW2luZGV4XS0+c2l6ZSgpICE9IGRpckVudHJ5Lm1fc2l6ZSkpCisgICAgICAg
IHJldHVybiBzZXRGYWlsZWQoKTsKICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdID0gKm1f
cG5nRGVjb2RlcnNbaW5kZXhdLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Ci0gICAgaWYgKCFtX3Bu
Z0RlY29kZXJzW2luZGV4XS0+ZmFpbGVkKCkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzZXRG
YWlsZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtX3BuZ0RlY29kZXJzW2lu
ZGV4XS0+ZmFpbGVkKCkgfHwgc2V0RmFpbGVkKCk7CiB9CiAKIGJvb2wgSUNPSW1hZ2VEZWNvZGVy
Ojpwcm9jZXNzRGlyZWN0b3J5KCkKQEAgLTIyMCwxMCArMjE1LDggQEAgYm9vbCBJQ09JbWFnZURl
Y29kZXI6OnByb2Nlc3NEaXJlY3RvcnkoKQogICAgICAgICBJQ09OID0gMSwKICAgICAgICAgQ1VS
U09SID0gMiwKICAgICB9OwotICAgIGlmICgoKGZpbGVUeXBlICE9IElDT04pICYmIChmaWxlVHlw
ZSAhPSBDVVJTT1IpKSB8fCAoIWlkQ291bnQpKSB7Ci0gICAgICAgIHNldEZhaWxlZCgpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmICgoKGZpbGVUeXBlICE9IElDT04pICYm
IChmaWxlVHlwZSAhPSBDVVJTT1IpKSB8fCAoIWlkQ291bnQpKQorICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7CiAKICAgICAvLyBFbmxhcmdlIG1lbWJlciB2ZWN0b3JzIHRvIGhvbGQgYWxsIHRo
ZSBlbnRyaWVzLgogICAgIG1fZGlyRW50cmllcy5yZXNpemUoaWRDb3VudCk7CkBAIC0yNDQsMTAg
KzIzNyw4IEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5RW4KICAgICAv
LyBNYWtlIHN1cmUgdGhlIHNwZWNpZmllZCBpbWFnZSBvZmZzZXRzIGFyZSBwYXN0IHRoZSBlbmQg
b2YgdGhlIGRpcmVjdG9yeQogICAgIC8vIGVudHJpZXMuCiAgICAgZm9yIChJY29uRGlyZWN0b3J5
RW50cmllczo6aXRlcmF0b3IgaShtX2RpckVudHJpZXMuYmVnaW4oKSk7IGkgIT0gbV9kaXJFbnRy
aWVzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPm1faW1hZ2VPZmZzZXQgPCBtX2RlY29k
ZWRPZmZzZXQpIHsKLSAgICAgICAgICAgIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChpLT5tX2ltYWdlT2Zmc2V0IDwgbV9kZWNv
ZGVkT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0KIAogICAg
IC8vIEFycmFuZ2UgZnJhbWVzIGluIGRlY3JlYXNpbmcgcXVhbGl0eSBvcmRlci4KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU1MjYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTIsNyArMTkyLDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1faW5mby5vdXRfY29sb3Jf
c3BhY2UgPSBKQ1NfQ01ZSzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRVJST1I7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCkBAIC0yMTIsMTAgKzIxMSw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAK
ICAgICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFk
ZXIgaXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9p
bmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkgewotICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBKUEVHX0VSUk9SOworICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNp
emUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtX2Rl
Y29kaW5nU2l6ZU9ubHkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gc3RvcCBoZXJlLiAg
UmVkdWNlIG91ciBidWZmZXIgbGVuZ3RoIGFuZCBhdmFpbGFibGUKQEAgLTMxNiw3ICszMTMsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEpQRUdfRVJST1I6
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIFdlIGNhbiBnZXQgaGVyZSBpZiB0
aGUgY29uc3RydWN0b3IgZmFpbGVkLgorICAgICAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2V0
RmFpbGVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4MiwxOCAr
MzgwLDE4IEBAIEpQRUdJbWFnZURlY29kZXI6On5KUEVHSW1hZ2VEZWNvZGVyKCkKIAogdm9pZCBK
UEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNl
aXZlZCk7CiAKLSAgICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxlZCkKKyAgICBpZiAoIW1fcmVh
ZGVyICYmICFmYWlsZWQoKSkKICAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBKUEVHSW1hZ2VSZWFk
ZXIodGhpcykpOwogfQogCiBib29sIEpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
CiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWlsZWQo
KSAmJiBtX3JlYWRlcikKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkp
CiAgICAgICAgICBkZWNvZGUodHJ1ZSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKTsKQEAgLTQxNyw3ICs0MTUsNyBAQCBSR0JBMzJCdWZmZXIqIEpQRUdJbWFn
ZURlY29kZXI6OmZyYW1lQnVmCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7
CiAKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAg
IGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9y
ZWFkZXIpCisgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZSkKICAgICAgICAgZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAt
NDMwLDEwICs0MjgsOCBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygp
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIFJHQkEz
MkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIu
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghYnVm
ZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkp
IHsKLSAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53
aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0
aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKIApAQCAtNDc0LDggKzQ3
MCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwganNhbXBsZVswXSAqIGsgLyAyNTUsIGpz
YW1wbGVbMV0gKiBrIC8gMjU1LCBqc2FtcGxlWzJdICogayAvIDI1NSwgMHhGRik7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtNDk1LDEyICs0OTAsMTMgQEAgdm9pZCBKUEVHSW1hZ2VEZWNv
ZGVyOjpqcGVnQ29tcGxldGUoKQogCiB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29s
IG9ubHlTaXplKQogewotICAgIGlmIChtX2ZhaWxlZCkKKyAgICBpZiAoZmFpbGVkKCkgfHwgIW1f
cmVhZGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVj
b2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKTsKKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNv
ZGUobV9kYXRhLT5idWZmZXIoKSwgb25seVNpemUpKQorICAgICAgICBzZXRGYWlsZWQoKTsKIAot
ICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSkpCisgICAgaWYgKGZhaWxlZCgpIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAm
JiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNv
bXBsZXRlKSkKICAgICAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAg
Y29uc3QgdW5zaWduZWQgbG9uZyBjTWF4UE5HU2l6ZSA9IDEwMDAwMAogLy8gQ2FsbGVkIGlmIHRo
ZSBkZWNvZGluZyBvZiB0aGUgaW1hZ2UgZmFpbHMuCiBzdGF0aWMgdm9pZCBQTkdBUEkgZGVjb2Rp
bmdGYWlsZWQocG5nX3N0cnVjdHAgcG5nLCBwbmdfY29uc3RfY2hhcnApCiB7Ci0gICAgc3RhdGlj
X2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSktPmRl
Y29kaW5nRmFpbGVkKCk7CiAgICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CiB9CiAKQEAgLTEy
NywxNCArMTI2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlY29kZShjb25zdCBTaGFyZWRCdWZm
ZXImIGRhdGEsIGJvb2wgc2l6ZU9ubHkpCiAgICAgewogICAgICAgICBtX2RlY29kaW5nU2l6ZU9u
bHkgPSBzaXplT25seTsKKyAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gc3RhdGlj
X2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9wbmcpKTsK
IAogICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJh
ZCB0aGluZ3Mgd2lsbCBoYXBwZW4uCiAgICAgICAgIGlmIChzZXRqbXAobV9wbmctPmptcGJ1Zikp
IHsKICAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgICAgICBkZWNvZGVyLT5zZXRGYWlsZWQo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFBOR0ltYWdlRGVj
b2RlciogZGVjb2RlciA9IHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJv
Z3Jlc3NpdmVfcHRyKG1fcG5nKSk7CiAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7CiAgICAg
ICAgIHdoaWxlICh1bnNpZ25lZCBzZWdtZW50TGVuZ3RoID0gZGF0YS5nZXRTb21lRGF0YShzZWdt
ZW50LCBtX3JlYWRPZmZzZXQpKSB7CiAgICAgICAgICAgICBtX3JlYWRPZmZzZXQgKz0gc2VnbWVu
dExlbmd0aDsKQEAgLTE4MiwxNyArMTgyLDE3IEBAIFBOR0ltYWdlRGVjb2Rlcjo6flBOR0ltYWdl
RGVjb2RlcigpCiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlm
IChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRh
KGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAKLSAgICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxl
ZCkKKyAgICBpZiAoIW1fcmVhZGVyICYmICFmYWlsZWQoKSkKICAgICAgICAgbV9yZWFkZXIuc2V0
KG5ldyBQTkdJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxl
KCkgJiYgIWZhaWxlZCgpICYmIG1fcmVhZGVyKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKSkKICAgICAgICAgIGRlY29kZSh0cnVlKTsKIAogICAgIHJldHVybiBJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMjA3LDE3ICsyMDcsMTEgQEAgUkdCQTMy
QnVmZmVyKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGUucmVzaXplKDEpOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlICYmIG1fcmVhZGVyKQotICAgICAgICAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KLSAg
ICAgICAgZGVjb2RlKGZhbHNlKTsKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICBkZWNvZGUoZmFsc2UpOyAvLyBEZWNvZGUgdGhp
cyBmcmFtZS4KICAgICByZXR1cm4gJmZyYW1lOwogfQogCi12b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RpbmdGYWlsZWQoKQotewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLX0KLQogdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiB7CiAgICAgcG5nX3N0cnVjdHAgcG5nID0g
bV9yZWFkZXItPnBuZ1B0cigpOwpAQCAtMjI3LDcgKzIyMSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIAogICAgIC8vIFByb3RlY3QgYWdhaW5zdCBsYXJn
ZSBpbWFnZXMuCiAgICAgaWYgKHBuZy0+d2lkdGggPiBjTWF4UE5HU2l6ZSB8fCBwbmctPmhlaWdo
dCA+IGNNYXhQTkdTaXplKSB7Ci0gICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgbG9u
Z2ptcChwbmctPmptcGJ1ZiwgMSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDIsNyAr
Mjk1LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIFJH
QkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZm
ZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIGlmICgh
YnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQo
KSkpIHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRf
cHJvZ3Jlc3NpdmVfcHRyKG1fcmVhZGVyLT5wbmdQdHIoKSkpLT5kZWNvZGluZ0ZhaWxlZCgpOwog
ICAgICAgICAgICAgbG9uZ2ptcChtX3JlYWRlci0+cG5nUHRyKCktPmptcGJ1ZiwgMSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM4NSwxMiArMzc3LDEyIEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSgpCiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNv
ZGUoYm9vbCBvbmx5U2l6ZSkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAgaWYgKGZhaWxlZCgp
IHx8ICFtX3JlYWRlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9yZWFkZXItPmRlY29kZSgq
bV9kYXRhLCBvbmx5U2l6ZSk7CiAgICAgCi0gICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1
ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBpZiAoZmFpbGVkKCkgfHwgKCFtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQogICAgICAgICBtX3JlYWRlci5jbGVh
cigpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
UkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKIAogICAgICAg
ICAvLyBDYWxsYmFja3MgZnJvbSBsaWJwbmcKLSAgICAgICAgdm9pZCBkZWNvZGluZ0ZhaWxlZCgp
OwogICAgICAgICB2b2lkIGhlYWRlckF2YWlsYWJsZSgpOwogICAgICAgICB2b2lkIHJvd0F2YWls
YWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LCBpbnQgaW50
ZXJsYWNlUGFzcyk7CiAgICAgICAgIHZvaWQgcG5nQ29tcGxldGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49831</attachid>
            <date>2010-03-02 12:12:23 -0800</date>
            <delta_ts>2010-03-08 15:45:07 -0800</delta_ts>
            <desc>Part 1, v4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25261</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMTAtMDMtMDIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENsZWFuIHVwIHVzYWdlIG9mIG1fZmFpbGVkIGluIG9wZW4tc291cmNlIGltYWdlIGRlY29kZXJz
LCBwYXJ0IDEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTQxMQorICAgICAgICAKKyAgICAgICAgTWFrZXMgc2V0RmFpbGVkKCkgdmlydHVhbCBzbyBz
dWJjbGFzc2VzIGNhbiBvdmVycmlkZSBpdCAobm9uZSBkbyB5ZXQpIHRvCisgICAgICAgIGRvIGF1
dG9tYXRpYyBjbGVhbnVwIG9uIGZhaWx1cmU7IG1ha2VzIGl0IHJldHVybiBhIGJvb2wgZm9yIGVh
c3kKKyAgICAgICAgdGFpbGNhbGxpbmc7IG1ha2VzIGZhaWxlZCgpIHRoZSBvbmx5IHdheSB0byBh
Y2Nlc3MgbV9mYWlsZWQgc28KKyAgICAgICAgc3ViY2xhc3NlcyBhcmUgYXNzdXJlZCBzZXRGYWls
ZWQoKSB3b24ndCBiZSBieXBhc3NlZC4gIFBsdXMgb25lIG9yIHR3bworICAgICAgICBvdGhlciB0
aW55IGNsZWFudXAgYml0cy4KKworICAgICAgICBPdmVycmlkaW5nIHNldEZhaWxlZCgpIGlzIGNv
bWluZyBpbiBhIHN1YnNlcXVlbnQgcGF0Y2ggYmVjYXVzZSBpdCBjYW4gYmUKKyAgICAgICAgaGFp
cnkgYW5kIG5lZWRzIGNsb3NlIHJldmlldy4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNoYW5n
ZSwgc28gbm8gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURl
Y29kZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6c2V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlclF0OjppbnRlcm5hbERlY29kZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsUmVhZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6Zm9yY2VMb2FkRXZlcnl0aGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6Y2xlYXJQb2ludGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmYWlsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjpwcm9jZXNzRmlsZUhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9y
eSk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlF
bnRyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGVjb2RpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKwogMjAxMC0wMy0wMiAgRnJpZHJpY2ggU3RyYmEg
IDxmcmlkcmljaC5zdHJiYUBibHVld2luLmNoPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3Blei4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNv
ZGVyUXQuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VEZWNvZGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIElt
YWdlRGVjb2RlclF0Ojp+SW1hZ2VEZWNvZGVyUXQoKQogCiB2b2lkIEltYWdlRGVjb2RlclF0Ojpz
ZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAg
aWYgKG1fZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gTm8gcHJvZ3Jlc3NpdmUgbG9hZGluZyBwb3NzaWJsZQpAQCAtMTA2LDkgKzEwNiw4IEBAIHNp
emVfdCBJbWFnZURlY29kZXJRdDo6ZnJhbWVDb3VudCgpCiAgICAgICAgICAgICAgICAgZm9yY2VM
b2FkRXZlcnl0aGluZygpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1fZnJh
bWVCdWZmZXJDYWNoZS5yZXNpemUoaW1hZ2VDb3VudCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAg
ICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwpA
QCAtMTMzLDcgKzEzMiw3IEBAIFJHQkEzMkJ1ZmZlciogSW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVm
ZmUKICAgICAvLyB5ZXQgaG93IG1hbnkgaW1hZ2VzIHdlIGFyZSBnb2luZyB0byBoYXZlIGFuZCBu
ZWVkIHRvCiAgICAgLy8gZmluZCB0aGF0IG91dCBub3cuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9m
cmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKLSAgICBpZiAoIW1fZmFpbGVkICYmICFjb3VudCkgewor
ICAgIGlmICghZmFpbGVkKCkgJiYgIWNvdW50KSB7CiAgICAgICAgIGludGVybmFsRGVjb2RlU2l6
ZSgpOwogICAgICAgICBjb3VudCA9IGZyYW1lQ291bnQoKTsKICAgICB9CkBAIC0xNTcsOCArMTU2
LDEwIEBAIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsRGVjb2RlU2l6ZSgKIAogICAgIC8v
IElmIHdlIGhhdmUgYSBRU2l6ZSgpIHNvbWV0aGluZyBmYWlsZWQKICAgICBRU2l6ZSBzaXplID0g
bV9yZWFkZXItPnNpemUoKTsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWlsUmVhZCgpOworICAgIGlmIChzaXplLmlzRW1wdHkoKSkgeworICAgICAgICBzZXRGYWls
ZWQoKTsKKyAgICAgICAgcmV0dXJuIGNsZWFyUG9pbnRlcnMoKTsKKyAgICB9CiAKICAgICBzZXRT
aXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CkBAIC0xNjksMjYgKzE3MCwzMSBA
QCB2b2lkIEltYWdlRGVjb2RlclF0OjppbnRlcm5hbFJlYWRJbWFnZShzCiAKICAgICBpZiAobV9y
ZWFkZXItPnN1cHBvcnRzQW5pbWF0aW9uKCkpCiAgICAgICAgIG1fcmVhZGVyLT5qdW1wVG9JbWFn
ZShmcmFtZUluZGV4KTsKLSAgICBlbHNlIGlmIChmcmFtZUluZGV4ICE9IDApCi0gICAgICAgIHJl
dHVybiBmYWlsUmVhZCgpOworICAgIGVsc2UgaWYgKGZyYW1lSW5kZXgpIHsKKyAgICAgICAgc2V0
RmFpbGVkKCk7CisgICAgICAgIHJldHVybiBjbGVhclBvaW50ZXJzKCk7CisgICAgfQogCi0gICAg
aW50ZXJuYWxIYW5kbGVDdXJyZW50SW1hZ2UoZnJhbWVJbmRleCk7CisgICAgaWYgKCFpbnRlcm5h
bEhhbmRsZUN1cnJlbnRJbWFnZShmcmFtZUluZGV4KSkKKyAgICAgIHNldEZhaWxlZCgpOwogCiAg
ICAgLy8gQXR0ZW1wdCB0byByZXR1cm4gc29tZSBtZW1vcnkKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9mcmFt
ZUJ1ZmZlckNhY2hlW2ldLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkK
ICAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX3JlYWRlci5jbGVhcigpOwotICAg
IG1fYnVmZmVyLmNsZWFyKCk7CisgICAgY2xlYXJQb2ludGVycygpOwogfQogCi12b2lkIEltYWdl
RGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFnZShzaXplX3QgZnJhbWVJbmRleCkK
K2Jvb2wgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsSGFuZGxlQ3VycmVudEltYWdlKHNpemVfdCBm
cmFtZUluZGV4KQogewogICAgIC8vIE5vdyBnZXQgdGhlIFFJbWFnZSBmcm9tIFF0IGFuZCBwbGFj
ZSBpdCBpbiB0aGUgUkdCQTMyQnVmZmVyCiAgICAgUUltYWdlIGltZzsKLSAgICBpZiAoIW1fcmVh
ZGVyLT5yZWFkKCZpbWcpKQotICAgICAgICByZXR1cm4gZmFpbFJlYWQoKTsKKyAgICBpZiAoIW1f
cmVhZGVyLT5yZWFkKCZpbWcpKSB7CisgICAgICAgIGNsZWFyUG9pbnRlcnMoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIC8vIG5vdyBpbnRvIHRoZSBSR0JBMzJCdWZmZXIg
LSBldmVuIGlmIHRoZSBpbWFnZSBpcyBub3QKICAgICBRU2l6ZSBpbWFnZVNpemUgPSBpbWcuc2l6
ZSgpOwpAQCAtMTk3LDYgKzIwMyw3IEBAIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsSGFu
ZGxlQ3VycmUKICAgICBidWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpOwogICAgIGJ1ZmZlci0+c2V0RHVyYXRpb24obV9yZWFkZXItPm5leHRJbWFnZURlbGF5KCkp
OwogICAgIGJ1ZmZlci0+c2V0RGVjb2RlZEltYWdlKGltZyk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIC8vIFRoZSBRSW1hZ2VJT0hhbmRsZXIgaXMgbm90IGFibGUgdG8gdGVsbCB1cyBob3cgbWFu
eSBmcmFtZXMKQEAgLTIwNCw4ICsyMTEsOCBAQCB2b2lkIEltYWdlRGVjb2RlclF0OjppbnRlcm5h
bEhhbmRsZUN1cnJlCiAvLyBpbmNyZWFzaW5nIHRoZSBtX2ZyYW1lQnVmZmVyQ2FjaGUgYnkgb25l
IGFuZCB0cnkgdG8gcGFyc2UKIC8vIHRoZSBpbWFnZS4gV2Ugc3RvcCB3aGVuIFFJbWFnZTo6cmVh
ZCBmYWlscyBhbmQgdGhlbiBuZWVkCiAvLyB0byByZXNpemUgdGhlIG1fZnJhbWVCdWZmZXJDYWNo
ZSB0byB0aGUgZmluYWwgc2l6ZSBhbmQgdXBkYXRlCi0vLyB0aGUgbV9mYWlsZWQuIEluIGNhc2Ug
d2UgZmFpbGVkIHRvIGRlY29kZSB0aGUgZmlyc3QgaW1hZ2UKLS8vIHdlIHdhbnQgdG8ga2VlcCBt
X2ZhaWxlZCBzZXQgdG8gdHJ1ZS4KKy8vIHRoZSBmYWlsZWQgYml0LiBJZiB3ZSBmYWlsZWQgdG8g
ZGVjb2RlIHRoZSBmaXJzdCBpbWFnZQorLy8gdGhlbiB3ZSB0cnVseSBmYWlsZWQgdG8gZGVjb2Rl
LCBvdGhlcndpc2Ugd2UncmUgT0suCiAKIC8vIFRPRE86IERvIG5vdCBpbmNyZW1lbnQgdGhlIG1f
ZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgYnkgb25lIGJ1dCBtb3JlIHRoYW4gb25lCiB2b2lkIElt
YWdlRGVjb2RlclF0Ojpmb3JjZUxvYWRFdmVyeXRoaW5nKCkKQEAgLTIxNCwyMCArMjIxLDE5IEBA
IHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmZvcmNlTG9hZEV2ZXJ5dGhpbmcKIAogICAgIGRvIHsKICAg
ICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgrK2ltYWdlQ291bnQpOwotICAgICAgICBp
bnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFnZShpbWFnZUNvdW50IC0gMSk7Ci0gICAgfSB3aGlsZSAo
IW1fZmFpbGVkKTsKKyAgICB9IHdoaWxlIChpbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFnZShpbWFn
ZUNvdW50IC0gMSkpOwogCiAgICAgLy8gSWYgd2UgZmFpbGVkIGRlY29kaW5nIHRoZSBmaXJzdCBp
bWFnZSB3ZSBhY3R1YWxseQotICAgIC8vIGhhdmUgbm8gaW1hZ2VzIGFuZCBuZWVkIHRvIGtlZXAg
bV9mYWlsZWQgc2V0IHRvCi0gICAgLy8gdHJ1ZSBvdGhlcndpc2Ugd2Ugd2FudCB0byByZXNldCBp
dCBhbmQgZm9yZ2V0IGFib3V0CisgICAgLy8gaGF2ZSBubyBpbWFnZXMgYW5kIG5lZWQgdG8gc2V0
IHRoZSBmYWlsZWQgYml0LgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd2FudCB0byBmb3JnZXQgYWJv
dXQKICAgICAvLyB0aGUgbGFzdCBhdHRlbXB0IHRvIGRlY29kZSBhIGltYWdlLgogICAgIG1fZnJh
bWVCdWZmZXJDYWNoZS5yZXNpemUoaW1hZ2VDb3VudCAtIDEpOwotICAgIG1fZmFpbGVkID0gaW1h
Z2VDb3VudCA9PSAxOworICAgIGlmIChpbWFnZUNvdW50ID09IDEpCisgICAgICBzZXRGYWlsZWQo
KTsKIH0KIAotdm9pZCBJbWFnZURlY29kZXJRdDo6ZmFpbFJlYWQoKQordm9pZCBJbWFnZURlY29k
ZXJRdDo6Y2xlYXJQb2ludGVycygpCiB7Ci0gICAgc2V0RmFpbGVkKCk7CiAgICAgbV9yZWFkZXIu
Y2xlYXIoKTsKICAgICBtX2J1ZmZlci5jbGVhcigpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaAkocmV2aXNpb24gNTUyNjEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDkgKzYxLDkgQEAgcHJpdmF0ZToKIHByaXZhdGU6CiAgICAgdm9pZCBpbnRlcm5h
bERlY29kZVNpemUoKTsKICAgICB2b2lkIGludGVybmFsUmVhZEltYWdlKHNpemVfdCk7Ci0gICAg
dm9pZCBpbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFnZShzaXplX3QpOworICAgIGJvb2wgaW50ZXJu
YWxIYW5kbGVDdXJyZW50SW1hZ2Uoc2l6ZV90KTsKICAgICB2b2lkIGZvcmNlTG9hZEV2ZXJ5dGhp
bmcoKTsKLSAgICB2b2lkIGZhaWxSZWFkKCk7CisgICAgdm9pZCBjbGVhclBvaW50ZXJzKCk7CiAK
IHByaXZhdGU6CiAgICAgUUJ5dGVBcnJheSBtX2Zvcm1hdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTUyNjEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDQsMTAgKzIwNCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBJbWFnZURlY29kZXIoKQogICAgICAgICAgICAgOiBtX3NjYWxlZChmYWxz
ZSkKLSAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fc2l6ZUF2
YWlsYWJsZShmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0FsbERhdGFSZWNlaXZlZChmYWxzZSkK
ICAgICAgICAgICAgICwgbV9tYXhOdW1QaXhlbHMoLTEpCisgICAgICAgICAgICAsIG1fZmFpbGVk
KGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjI2LDYgKzIyNiw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoZmFpbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgbV9kYXRh
ID0gZGF0YTsKICAgICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2
ZWQ7CiAgICAgICAgIH0KQEAgLTI2NywxMCArMjY5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBiZSBzZXQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3Ag
ZGVjb2RpbmcuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdp
ZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChp
c092ZXJTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWls
ZWQoKTsKICAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAg
ICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yOTMsOCArMjkzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gdHJh
bnNwYXJlbmN5LgogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAorICAgICAgICAvLyBTZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZs
YWcuICBGb3IgY2FsbGVyIGNvbnZlbmllbmNlIChzaW5jZSBzbworICAgICAgICAvLyBtYW55IGNh
bGxlcnMgd2FudCB0byByZXR1cm4gZmFsc2UgYWZ0ZXIgY2FsbGluZyB0aGlzKSwgcmV0dXJucyBm
YWxzZQorICAgICAgICAvLyB0byBlbmFibGUgZWFzeSB0YWlsY2FsbGluZy4KKyAgICAgICAgdmly
dHVhbCBib29sIHNldEZhaWxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIGJv
b2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICAgICAgdm9pZCBzZXRG
YWlsZWQoKSB7IG1fZmFpbGVkID0gdHJ1ZTsgfQogCiAgICAgICAgIC8vIFdpcGUgb3V0IGZyYW1l
cyBpbiB0aGUgZnJhbWUgYnVmZmVyIGNhY2hlIGJlZm9yZSB8Y2xlYXJCZWZvcmVGcmFtZXwsCiAg
ICAgICAgIC8vIGFzc3VtaW5nIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBicmVha2luZyBkZWNv
ZGluZy4gIERpZmZlcmVudApAQCAtMzIxLDcgKzMyOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwogICAgICAgICBib29sIG1fc2NhbGVk
OwogICAgICAgICBWZWN0b3I8UkdCQTMyQnVmZmVyPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7Ci0gICAg
ICAgIGJvb2wgbV9mYWlsZWQ7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUg
cGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICog
NCIKQEAgLTMzOSw2ICszNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
bV9zaXplQXZhaWxhYmxlOwogICAgICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQ7CiAgICAg
ICAgIGludCBtX21heE51bVBpeGVsczsKKyAgICAgICAgYm9vbCBtX2ZhaWxlZDsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU1
MjYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEJNUEltYWdlRGVj
b2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmCiAKIGJvb2wgQk1QSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAm
JiAhZmFpbGVkKCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQog
ICAgICAgICBkZWNvZGUodHJ1ZSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUoKTsKQEAgLTcyLDcgKzcyLDcgQEAgUkdCQTMyQnVmZmVyKiBCTVBJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZgogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogCiAg
ICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Ci0g
ICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYm
ICFmYWlsZWQoKSkKKyAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZy
YW1lQ29tcGxldGUpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsK
IH0KQEAgLTEzMSwxMiArMTMxLDcgQEAgYm9vbCBCTVBJbWFnZURlY29kZXI6OnByb2Nlc3NGaWxl
SGVhZGVyKAogICAgICAgICBCSVRNQVBBUlJBWSA9IDB4NDI0MSwgIC8vICJCQSIKICAgICAgICAg
Ki8KICAgICB9OwotICAgIGlmIChmaWxlVHlwZSAhPSBCTUFQKSB7Ci0gICAgICAgIHNldEZhaWxl
ZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIChmaWxlVHlwZSA9PSBCTUFQKSB8fCBzZXRGYWlsZWQoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgR0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1h
Z2VEZWNvZGVyKCkKIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAobV9mYWlsZWQpCisgICAg
aWYgKGZhaWxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERh
dGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKQEAgLTUwLDEzICs1MCwxMyBAQCB2b2lkIEdJRklt
YWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmCiAgICAgLy8gV2UgbmVlZCB0byByZXNjYW4g
dGhlIGZyYW1lIGNvdW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KICAg
ICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CiAKLSAgICBp
ZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxlZCkKKyAgICBpZiAoIW1fcmVhZGVyICYmICFmYWlsZWQo
KSkKICAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBHSUZJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiAK
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogewotICAgIGlmICghSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAhZmFpbGVkKCkgJiYgbV9yZWFkZXIpCisg
ICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQogICAgICAgICAgZGVjb2Rl
KDAsIEdJRlNpemVRdWVyeSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBSR0JBMzJCdWZmZXIqIEdJRkltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFt
ZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKKyAgICBpZiAoZnJhbWUu
c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICBkZWNvZGUo
aW5kZXggKyAxLCBHSUZGdWxsUXVlcnkpOyAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KICAgICByZXR1
cm4gJmZyYW1lOwogfQpAQCAtMjkxLDEyICsyOTEsMTMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6
OmdpZkNvbXBsZXRlKCkKIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBo
YWx0QXRGcmFtZSwgR0lGUXVlcnkgcXVlcnkpCiB7Ci0gICAgaWYgKG1fZmFpbGVkKQorICAgIGlm
IChmYWlsZWQoKSB8fCAhbV9yZWFkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZmFpbGVk
ID0gIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSAr
IG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0
QXRGcmFtZSk7CisgICAgaWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciop
bV9kYXRhLT5kYXRhKCkgKyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zm
c2V0LCBxdWVyeSwgaGFsdEF0RnJhbWUpKQorICAgICAgICBzZXRGYWlsZWQoKTsKIAotICAgIGlm
IChtX2ZhaWxlZCkKKyAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7
CiB9CiAKQEAgLTMyMSwxMCArMzIyLDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFt
ZUJ1ZmZlcih1bgogICAgIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3Vz
IGRhdGEuCi0gICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgp
LCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkp
CisgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZp
b3VzIGZyYW1lJ3MKICAgICAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgpAQCAtMzUzLDEwICszNTIs
OCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgICAg
ICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgp
LCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJz
dCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAg
ICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAg
ICAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJT
aXplLmhlaWdodCgpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZm
ZXJTaXplLmhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUg
cHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1lLgogICAgICAgICAgICAg
ICBidWZmZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNw
cAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2lj
by9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsMTUgKzE5MywxMCBA
QCBib29sIElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleChzaXplCiAgICAgfQogICAgIC8v
IEZhaWwgaWYgdGhlIHNpemUgdGhlIFBOR0ltYWdlRGVjb2RlciBjYWxjdWxhdGVkIGRvZXMgbm90
IG1hdGNoIHRoZSBzaXplCiAgICAgLy8gaW4gdGhlIGRpcmVjdG9yeS4KLSAgICBpZiAobV9wbmdE
ZWNvZGVyc1tpbmRleF0tPmlzU2l6ZUF2YWlsYWJsZSgpICYmIChtX3BuZ0RlY29kZXJzW2luZGV4
XS0+c2l6ZSgpICE9IGRpckVudHJ5Lm1fc2l6ZSkpIHsKLSAgICAgICAgc2V0RmFpbGVkKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKG1fcG5nRGVjb2RlcnNbaW5kZXhd
LT5pc1NpemVBdmFpbGFibGUoKSAmJiAobV9wbmdEZWNvZGVyc1tpbmRleF0tPnNpemUoKSAhPSBk
aXJFbnRyeS5tX3NpemUpKQorICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlW2luZGV4XSA9ICptX3BuZ0RlY29kZXJzW2luZGV4XS0+ZnJhbWVCdWZmZXJB
dEluZGV4KDApOwotICAgIGlmICghbV9wbmdEZWNvZGVyc1tpbmRleF0tPmZhaWxlZCgpKQotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgc2V0RmFpbGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiAhbV9wbmdEZWNvZGVyc1tpbmRleF0tPmZhaWxlZCgpIHx8IHNldEZhaWxlZCgpOwog
fQogCiBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeSgpCkBAIC0yMjAsMTAg
KzIxNSw4IEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5KCkKICAgICAg
ICAgSUNPTiA9IDEsCiAgICAgICAgIENVUlNPUiA9IDIsCiAgICAgfTsKLSAgICBpZiAoKChmaWxl
VHlwZSAhPSBJQ09OKSAmJiAoZmlsZVR5cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENvdW50KSkgewot
ICAgICAgICBzZXRGYWlsZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBp
ZiAoKChmaWxlVHlwZSAhPSBJQ09OKSAmJiAoZmlsZVR5cGUgIT0gQ1VSU09SKSkgfHwgKCFpZENv
dW50KSkKKyAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogCiAgICAgLy8gRW5sYXJnZSBtZW1i
ZXIgdmVjdG9ycyB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KICAgICBtX2RpckVudHJpZXMucmVz
aXplKGlkQ291bnQpOwpAQCAtMjQ0LDEwICsyMzcsOCBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6
cHJvY2Vzc0RpcmVjdG9yeUVuCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ug
b2Zmc2V0cyBhcmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkKICAgICAvLyBlbnRyaWVz
LgogICAgIGZvciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVz
LmJlZ2luKCkpOyBpICE9IG1fZGlyRW50cmllcy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChp
LT5tX2ltYWdlT2Zmc2V0IDwgbV9kZWNvZGVkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBzZXRGYWls
ZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
aS0+bV9pbWFnZU9mZnNldCA8IG1fZGVjb2RlZE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBz
ZXRGYWlsZWQoKTsKICAgICB9CiAKICAgICAvLyBBcnJhbmdlIGZyYW1lcyBpbiBkZWNyZWFzaW5n
IHF1YWxpdHkgb3JkZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NTI2MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBtX2luZm8ub3V0X2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBKUEVHX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IH0KIApAQCAtMjEyLDEwICsyMTEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3N0YXRlID0g
SlBFR19TVEFSVF9ERUNPTVBSRVNTOwogCiAgICAgICAgICAgICAvLyBXZSBjYW4gZmlsbCBpbiB0
aGUgc2l6ZSBub3cgdGhhdCB0aGUgaGVhZGVyIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGlm
ICghbV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hl
aWdodCkpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKKyAgICAgICAg
ICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmlt
YWdlX2hlaWdodCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAobV9kZWNvZGluZ1NpemVPbmx5KSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuIHN0b3AgaGVyZS4gIFJlZHVjZSBvdXIgYnVmZmVyIGxlbmd0aCBhbmQgYXZh
aWxhYmxlCkBAIC0zMTYsNyArMzEzLDggQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBKUEVHX0VSUk9SOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAvLyBXZSBjYW4gZ2V0IGhlcmUgaWYgdGhlIGNvbnN0cnVjdG9yIGZhaWxlZC4KKyAgICAgICAg
ICAgIHJldHVybiBtX2RlY29kZXItPnNldEZhaWxlZCgpOwogICAgICAgICB9CiAKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0zODIsMTggKzM4MCwxOCBAQCBKUEVHSW1hZ2VEZWNvZGVyOjp+SlBF
R0ltYWdlRGVjb2RlcigpCiAKIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRC
dWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChtX2ZhaWxlZCkK
KyAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRGVjb2Rlcjo6
c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgaWYgKCFtX3JlYWRlciAmJiAh
bV9mYWlsZWQpCisgICAgaWYgKCFtX3JlYWRlciAmJiAhZmFpbGVkKCkpCiAgICAgICAgIG1fcmVh
ZGVyLnNldChuZXcgSlBFR0ltYWdlUmVhZGVyKHRoaXMpKTsKIH0KIAogYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKSAmJiAhZmFpbGVkKCkgJiYgbV9yZWFkZXIpCisgICAgaWYgKCFJbWFnZURl
Y29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQogICAgICAgICAgZGVjb2RlKHRydWUpOwogCiAgICAg
cmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CkBAIC00MTcsNyArNDE1LDcg
QEAgUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZgogICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQorICAgIGlmIChmcmFtZS5zdGF0dXMoKSAh
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAg
ICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTQzMCwxMCArNDI4LDggQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVm
ZmVyIGlmIG5lZWRlZC4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVF
bXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgp
LCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFidWZm
ZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgYnVmZmVyLnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBo
YShmYWxzZSk7CiAKQEAgLTQ3NCw4ICs0NzAsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcygpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgZGVzdFks
IGpzYW1wbGVbMF0gKiBrIC8gMjU1LCBqc2FtcGxlWzFdICogayAvIDI1NSwganNhbXBsZVsyXSAq
IGsgLyAyNTUsIDB4RkYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ5NSwxMiArNDkw
LDEzIEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKIAogdm9pZCBKUEVH
SW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKIHsKLSAgICBpZiAobV9mYWlsZWQp
CisgICAgaWYgKGZhaWxlZCgpIHx8ICFtX3JlYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9mYWlsZWQgPSAhbV9yZWFkZXItPmRlY29kZShtX2RhdGEtPmJ1ZmZlcigpLCBvbmx5U2l6ZSk7
CisgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKSkK
KyAgICAgICAgc2V0RmFpbGVkKCk7CiAKLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQorICAgIGlmIChmYWlsZWQoKSB8fCAoIW1fZnJh
bWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygp
ID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFy
KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTUyNjEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIGNvbnN0IHVuc2lnbmVkIGxvbmcgY01heFBOR1NpemUg
PSAxMDAwMDAKIC8vIENhbGxlZCBpZiB0aGUgZGVjb2Rpbmcgb2YgdGhlIGltYWdlIGZhaWxzLgog
c3RhdGljIHZvaWQgUE5HQVBJIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2Nv
bnN0X2NoYXJwKQogewotICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRf
cHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgIGxvbmdqbXAocG5n
LT5qbXBidWYsIDEpOwogfQogCkBAIC0xMjcsMTQgKzEyNiwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZWNvZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsK
ICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CisgICAgICAgIFBOR0ltYWdl
RGVjb2RlciogZGVjb2RlciA9IHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRf
cHJvZ3Jlc3NpdmVfcHRyKG1fcG5nKSk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUg
c2V0am1wIGhlcmUuIE90aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuLgogICAgICAgICBp
ZiAoc2V0am1wKG1fcG5nLT5qbXBidWYpKSB7CiAgICAgICAgICAgICBjbG9zZSgpOworICAgICAg
ICAgICAgZGVjb2Rlci0+c2V0RmFpbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBQTkdJbWFnZURlY29kZXIqIGRlY29kZXIgPSBzdGF0aWNfY2FzdDxQTkdJ
bWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihtX3BuZykpOwogICAgICAgICBj
b25zdCBjaGFyKiBzZWdtZW50OwogICAgICAgICB3aGlsZSAodW5zaWduZWQgc2VnbWVudExlbmd0
aCA9IGRhdGEuZ2V0U29tZURhdGEoc2VnbWVudCwgbV9yZWFkT2Zmc2V0KSkgewogICAgICAgICAg
ICAgbV9yZWFkT2Zmc2V0ICs9IHNlZ21lbnRMZW5ndGg7CkBAIC0xODIsMTcgKzE4MiwxNyBAQCBQ
TkdJbWFnZURlY29kZXI6On5QTkdJbWFnZURlY29kZXIoKQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewot
ICAgIGlmIChtX2ZhaWxlZCkKKyAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAg
aWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpCisgICAgaWYgKCFtX3JlYWRlciAmJiAhZmFpbGVk
KCkpCiAgICAgICAgIG1fcmVhZGVyLnNldChuZXcgUE5HSW1hZ2VSZWFkZXIodGhpcykpOwogfQog
Ym9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWlsZWQoKSAmJiBtX3JlYWRlcikKKyAg
ICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCiAgICAgICAgICBkZWNvZGUo
dHJ1ZSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKQEAg
LTIwNywxNyArMjA3LDExIEBAIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1
ZmYKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIAogICAgIFJHQkEzMkJ1
ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1
cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAgICAg
Ly8gRGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgICAgIGRlY29kZShmYWxzZSk7CisgICAgaWYgKGZy
YW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgZGVj
b2RlKGZhbHNlKTsgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCiAgICAgcmV0dXJuICZmcmFtZTsKIH0K
IAotdm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKCkKLXsKLSAgICBtX2ZhaWxl
ZCA9IHRydWU7Ci19Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQog
ewogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAgLTIyNyw3ICsy
MjEsNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAKICAg
ICAvLyBQcm90ZWN0IGFnYWluc3QgbGFyZ2UgaW1hZ2VzLgogICAgIGlmIChwbmctPndpZHRoID4g
Y01heFBOR1NpemUgfHwgcG5nLT5oZWlnaHQgPiBjTWF4UE5HU2l6ZSkgewotICAgICAgICBtX2Zh
aWxlZCA9IHRydWU7CiAgICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzAyLDcgKzI5NSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpy
b3dBdmFpbGFibGUodW5zaWcKICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkgewogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0
aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQ
TkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihtX3JlYWRlci0+cG5nUHRy
KCkpKS0+ZGVjb2RpbmdGYWlsZWQoKTsKICAgICAgICAgICAgIGxvbmdqbXAobV9yZWFkZXItPnBu
Z1B0cigpLT5qbXBidWYsIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0z
ODUsMTIgKzM3NywxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogCiB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiB7Ci0gICAgaWYgKG1f
ZmFpbGVkKQorICAgIGlmIChmYWlsZWQoKSB8fCAhbV9yZWFkZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpOwogICAgIAotICAgIGlm
IChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCisg
ICAgaWYgKGZhaWxlZCgpIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRl
KSkKICAgICAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlz
aW9uIDU1MjYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gbGlicG5nCi0gICAg
ICAgIHZvaWQgZGVjb2RpbmdGYWlsZWQoKTsKICAgICAgICAgdm9pZCBoZWFkZXJBdmFpbGFibGUo
KTsKICAgICAgICAgdm9pZCByb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1
bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3MpOwogICAgICAgICB2b2lkIHBuZ0Nv
bXBsZXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50736</attachid>
            <date>2010-03-15 14:09:25 -0700</date>
            <delta_ts>2010-03-15 14:21:21 -0700</delta_ts>
            <desc>Part 2, v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19959</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjAxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDMtMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgYWxsIGltYWdlIGRlY29kZXJzIHNldCB0aGUgImZhaWxlZCIgYml0IGlmIGFuIGltYWdl
IGNvdWxkIG5vdCBiZQorICAgICAgICBjb21wbGV0ZWx5IGRlY29kZWQsIGJ1dCBubyBtb3JlIGRh
dGEgaXMgY29taW5nLiAgVGhlIElDTyBhbmQgQk1QCisgICAgICAgIGRlY29kZXJzIGFscmVhZHkg
ZGlkIHRoaXMuCisgICAgICAgIAorICAgICAgICAiRmFpbGVkIiBkb2VzIG5vdCBjYXVzZSB0aGUg
aW1hZ2UgdG8gbm90IGJlIGRpc3BsYXllZCwgaXQgc2ltcGx5IGNhdXNlcworICAgICAgICB1cyB0
byBub3QgYm90aGVyIHRvIHRyeSB0byBkZWNvZGUgYWdhaW4gaWYgZnV0dXJlIHJlcXVlc3RzIGFy
ZSBtYWRlLCBhbmQKKyAgICAgICAgZm9yIHNvbWUgZGVjb2RlcnMsIGxldHMgdGhlIGRlY29kZXIg
Y2xlYW4gdXAgc29tZSBvZiBpdHMgdGVtcG9yYXJ5CisgICAgICAgIG9iamVjdHMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1NDExCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFn
ZVJlYWRlcjo6ZG9fbHp3KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpyZWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmRlY29kZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTAtMDMtMTUgIEFuZHkg
RXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3Vs
bGl2YW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU2MDA5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM1LDEzICsyMzUsMTMgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KHVucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdJRkltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCitib29s
IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2QpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5
LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBj
YXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4K
ICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKICAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
ICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxyZWFkeSBjYWxsZWQg
c2V0RmFpbGVkKCkuCiAKICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSk7CiAgICAgYnVmZmVyLnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24pOwpAQCAtMjc3
LDYgKzI3Nyw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAg
ICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpnaWZDb21w
bGV0ZSgpCkBAIC0yOTQsNyArMjk2LDkgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1
bnNpZ25lZCBoYQogICAgIGlmICghbV9yZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyLnNldChuZXcg
R0lGSW1hZ2VSZWFkZXIodGhpcykpOwogCi0gICAgaWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3Qg
dW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkgKyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6
ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFsdEF0RnJhbWUpKQorICAgIC8vIElmIHdlIGNv
dWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwg
ZGVjb2RpbmcKKyAgICAvLyBoYXMgZmFpbGVkLgorICAgIGlmICghbV9yZWFkZXItPnJlYWQoKGNv
bnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEt
PnNpemUoKSAtIG1fcmVhZE9mZnNldCwgcXVlcnksIGhhbHRBdEZyYW1lKSAmJiBpc0FsbERhdGFS
ZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKIAogICAgIGlmIChmYWlsZWQoKSkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1NjAwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMyAr
NTQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSB0
aGUgR0lGIHJlYWRlci4KICAgICAgICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRl
c0xlZnQpOwogICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25l
ZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpOwotICAgICAgICB2b2lkIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwg
dW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9k
IGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZy
YW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIElmIHRoZSBxdWVyeSBpcyBHSUZGdWxsUXVlcnks
IGRlY29kZXMgdGhlIGltYWdlIHVwIHRvIChidXQgbm90CiAgICAgICAgIC8vIGluY2x1ZGluZykg
fGhhbHRBdEZyYW1lfC4gIE90aGVyd2lzZSwgZGVjb2RlcyBhcyBtdWNoIGFzIGlzIG5lZWRlZCB0
bwotICAgICAgICAvLyBhbnN3ZXIgdGhlIHF1ZXJ5LCBpZ25vcmluZyBiaXRtYXAgZGF0YS4KKyAg
ICAgICAgLy8gYW5zd2VyIHRoZSBxdWVyeSwgaWdub3JpbmcgYml0bWFwIGRhdGEuICBJZiBkZWNv
ZGluZyBmYWlscyBidXQgdGhlcmUKKyAgICAgICAgLy8gaXMgbm8gbW9yZSBkYXRhIGNvbWluZywg
c2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgogICAgICAgICB2b2lkIGRlY29kZSh1bnNp
Z25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkpOwogCiAgICAgICAgIC8vIENhbGxlZCB0byBpbml0
aWFsaXplIHRoZSBmcmFtZSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJhc2VkIG9uCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA1NjAwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkw
LDcgKzI5MCw5IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ24KICAg
ICAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBlbmQtb2Ytc3RyZWFtIGNvZGUgKi8KICAgICAgIGlm
IChjb2RlID09IChjbGVhcl9jb2RlICsgMSkpIHsKICAgICAgICAgLyogZW5kLW9mLXN0cmVhbSBz
aG91bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEgKi8KLSAgICAgICAgcmV0dXJu
ICFyb3dzX3JlbWFpbmluZzsKKyAgICAgICAgaWYgKHJvd3NfcmVtYWluaW5nID09IDApCisgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHIt
PnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICB9CiAKICAgICAgIGlmIChvbGRjb2RlID09IC0x
KSB7CkBAIC0zMDgsMTMgKzMxMCwxMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29u
c3QgdW5zaWduCiAgICAgICAgIGNvZGUgPSBvbGRjb2RlOwogCiAgICAgICAgIGlmIChzdGFja3Ag
PT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
cmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAg
IH0KIAogICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJfY29kZSkKICAgICAgIHsKICAgICAgICAg
aWYgKGNvZGUgPj0gTUFYX0JJVFMgfHwgY29kZSA9PSBwcmVmaXhbY29kZV0pCi0gICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNl
dEZhaWxlZCgpIDogZmFsc2U7CiAKICAgICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25s
eSBob2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWlsIC0gMV0sCiAgICAgICAgIC8v
IGFsbG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2Yg
bWFsZm9ybWVkCkBAIC0zMjQsNyArMzI2LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3
KGNvbnN0IHVuc2lnbgogICAgICAgICBjb2RlID0gcHJlZml4W2NvZGVdOwogCiAgICAgICAgIGlm
IChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKICAgICAgIH0KIAogICAgICAgKnN0YWNrcCsrID0gZmlyc3RjaGFyID0gc3VmZml4W2NvZGVd
OwpAQCAtNDE1LDcgKzQxNyw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5z
aWduZWQKICAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbDsKICAgICAgIGlmIChjbGllbnRwdHIp
CiAgICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gUmVzZXQgaG9sZCBidWZmZXIg
Y291bnQKICAgICBieXRlc19pbl9ob2xkID0gMDsKQEAgLTQ0MCwxMCArNDQyLDkgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgIHN3aXRjaCAoc3RhdGUpCiAg
ICAgewogICAgIGNhc2UgZ2lmX2x6dzoKLSAgICAgIGlmICghZG9fbHp3KHEpKSB7Ci0gICAgICAg
IHN0YXRlID0gZ2lmX2Vycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICAgIGlmICgh
ZG9fbHp3KHEpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElmIGRvX2x6dygpIGVuY291bnRl
cmVkIGFuIGVycm9yLCBpdCBoYXMgYWxyZWFkeSBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAg
ICAvLyBjbGllbnRwdHItPnNldEZhaWxlZCgpLgogICAgICAgR0VUTigxLCBnaWZfc3ViX2Jsb2Nr
KTsKICAgICAgIGJyZWFrOwogCkBAIC00NTQsMTUgKzQ1NSwxMSBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6
ZSBvZiAxIG1vcmUgdGhhbiB0aGUgZGF0YXNpemUsIHdlIG5lZWQgdG8gZW5zdXJlCiAgICAgICAv
LyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklU
UyB2YWx1ZSAoMTIpLgogICAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNv
ZGVtYXNrIGNvcnJlY3RseSBhdCA0MDk1LgotICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldf
QklUUykgewotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9CisgICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQorICAgICAgICByZXR1cm4g
Y2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwogICAgICAgaW50IGNs
ZWFyX2NvZGUgPSAxIDw8IGRhdGFzaXplOwotICAgICAgaWYgKGNsZWFyX2NvZGUgPj0gTUFYX0JJ
VFMpIHsKLSAgICAgICAgc3RhdGUgPSBnaWZfZXJyb3I7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQorICAgICAgaWYgKGNsZWFyX2NvZGUgPj0gTUFYX0JJVFMpCisgICAgICAgIHJldHVybiBjbGll
bnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAKICAgICAgIGlmIChmcmFt
ZV9yZWFkZXIpIHsKICAgICAgICAgZnJhbWVfcmVhZGVyLT5kYXRhc2l6ZSA9IGRhdGFzaXplOwpA
QCAtNDk4LDEwICs0OTUsOCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2ln
bmVkCiAgICAgICAgIHZlcnNpb24gPSA4OTsKICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKChjaGFy
KilxLCAiR0lGODdhIiwgNikpCiAgICAgICAgIHZlcnNpb24gPSA4NzsKLSAgICAgIGVsc2Ugewot
ICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAg
ICBlbHNlCisgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgp
IDogZmFsc2U7CiAgICAgICBHRVROKDcsIGdpZl9nbG9iYWxfaGVhZGVyKTsKICAgICB9CiAgICAg
YnJlYWs7CkBAIC01ODYsNyArNTgxLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25z
dCB1bnNpZ25lZAogICAgICAgICAgIHN0YXRlID0gZ2lmX2RvbmU7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgLyogTm8gaW1hZ2VzIGRlY29kZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlz
cGxheS4gKi8KLSAgICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKKyAgICAgICAgICByZXR1cm4g
Y2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgICAgfSBlbHNlCkBAIC03MTQsNyArNzA5LDcgQEAgYm9vbCBHSUZJ
bWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICBHRVROKDEsIGdpZl9uZXRz
Y2FwZV9leHRlbnNpb25fYmxvY2spOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMCwzLTcg
YXJlIHlldCB0byBiZSBkZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcwotICAgICAgICBz
dGF0ZSA9IGdpZl9lcnJvcjsKKyAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+
c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAogICAgICAgYnJlYWs7CkBAIC03NTUsMTAg
Kzc1MCw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAg
IGlmICghaGVpZ2h0IHx8ICF3aWR0aCkgewogICAgICAgICBoZWlnaHQgPSBzY3JlZW5faGVpZ2h0
OwogICAgICAgICB3aWR0aCA9IHNjcmVlbl93aWR0aDsKLSAgICAgICAgaWYgKCFoZWlnaHQgfHwg
IXdpZHRoKSB7Ci0gICAgICAgICAgc3RhdGUgPSBnaWZfZXJyb3I7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQorICAgICAgICAgIHJl
dHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICB9
CiAKICAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBo
YWx0QXRGcmFtZSA9PSBpbWFnZXNfZGVjb2RlZCkgewpAQCAtNzk0LDEwICs3ODcsOCBAQCBib29s
IEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgICAgZnJhbWVfcmVh
ZGVyLT5yb3didWYgPSBuZXcgdW5zaWduZWQgY2hhcltzY3JlZW5fd2lkdGhdOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnJvd2J1ZikgewotICAgICAgICAgIHN0YXRl
ID0gZ2lmX29vbTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWZy
YW1lX3JlYWRlci0+cm93YnVmKQorICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRw
dHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICAgIGlmIChzY3JlZW5faGVpZ2h0IDwgaGVp
Z2h0KQogICAgICAgICAgIHNjcmVlbl9oZWlnaHQgPSBoZWlnaHQ7CiAKQEAgLTgzOCwxMCArODI5
LDggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICBp
ZiAoZnJhbWVfcmVhZGVyICYmICghbWFwIHx8IChudW1fY29sb3JzID4gZnJhbWVfcmVhZGVyLT5s
b2NhbF9jb2xvcm1hcF9zaXplKSkpIHsKICAgICAgICAgICBkZWxldGUgW11tYXA7CiAgICAgICAg
ICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07Ci0gICAgICAgICAgaWYgKCFtYXApIHsK
LSAgICAgICAgICAgIHN0YXRlID0gZ2lmX29vbTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KKyAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnRwdHIg
PyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICAv
KiBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzICovCkBAIC04
OTMsOCArODgyLDkgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAog
ICAgICAgICBpbWFnZXNfZGVjb2RlZCsrOwogCiAgICAgICAgIC8vIENBTExCQUNLOiBUaGUgZnJh
bWUgaXMgbm93IGNvbXBsZXRlLgotICAgICAgICBpZiAoY2xpZW50cHRyICYmIGZyYW1lX3JlYWRl
cikKLSAgICAgICAgICBjbGllbnRwdHItPmZyYW1lQ29tcGxldGUoaW1hZ2VzX2RlY29kZWQgLSAx
LCBmcmFtZV9yZWFkZXItPmRlbGF5X3RpbWUsIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9k
KTsKKyAgICAgICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYgIWNsaWVudHB0ci0+
ZnJhbWVDb21wbGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGlt
ZSwgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QpKQorICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gZnJhbWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKS4KIAogICAgICAgICAvKiBDbGVhciBz
dGF0ZSBmcm9tIHRoaXMgaW1hZ2UgKi8KICAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewpAQCAt
OTEzLDE0ICs5MDMsNiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVk
CiAgICAgICAgIGNsaWVudHB0ci0+Z2lmQ29tcGxldGUoKTsKICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgLy8gSGFuZGxlIG91dCBvZiBtZW1vcnkgZXJyb3JzCi0gICAgY2FzZSBnaWZfb29tOgot
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFuZGxlIGdlbmVyYWwgZXJyb3JzCi0gICAg
Y2FzZSBnaWZfZXJyb3I6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBXZSBzaG91bGRu
J3QgZXZlciBnZXQgaGVyZS4KICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CkBAIC05NDUsNSAr
OTI3LDUgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogCiAgIGlm
IChjbGllbnRwdHIpCiAgICAgY2xpZW50cHRyLT5kZWNvZGluZ0hhbHRlZCgwKTsKLSAgcmV0dXJu
IHRydWU7CisgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAkocmV2aXNpb24gNTYwMDkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSw2IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgZ2lm
X2NvbnN1bWVfYmxvY2ssCiAgICAgZ2lmX3NraXBfYmxvY2ssCiAgICAgZ2lmX2RvbmUsCi0gICAg
Z2lmX29vbSwKLSAgICBnaWZfZXJyb3IsCiAgICAgZ2lmX2NvbW1lbnRfZXh0ZW5zaW9uLAogICAg
IGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb24sCiAgICAgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9i
bG9jaywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU2MDA5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw2IEBAIGVudW0ganN0YXRlIHsKICAgICBKUEVHX0RFQ09N
UFJFU1NfUFJPR1JFU1NJVkUsIC8vIE91dHB1dCBwcm9ncmVzc2l2ZSBwaXhlbHMKICAgICBKUEVH
X0RFQ09NUFJFU1NfU0VRVUVOVElBTCwgIC8vIE91dHB1dCBzZXF1ZW50aWFsIHBpeGVscwogICAg
IEpQRUdfRE9ORSwKLSAgICBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUiwgIC8vIFNvbWUgaW1h
Z2UgZmlsZXMgaGF2ZSBhIG5vbi1KUEVHIHRyYWlsZXIKICAgICBKUEVHX0VSUk9SICAgIAogfTsK
IApAQCAtMTY5LDE2ICsxNjgsMTUgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2Ug
bmVlZCB0byBkbyB0aGUgc2V0am1wIGhlcmUuIE90aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFw
cGVuCiAgICAgICAgIGlmIChzZXRqbXAobV9lcnIuc2V0am1wX2J1ZmZlcikpIHsKLSAgICAgICAg
ICAgIG1fc3RhdGUgPSBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUjsKICAgICAgICAgICAgIGNs
b3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbV9k
ZWNvZGVyLT5zZXRGYWlsZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAobV9zdGF0
ZSkgewogICAgICAgICBjYXNlIEpQRUdfSEVBREVSOgogICAgICAgICAgICAgLy8gUmVhZCBmaWxl
IHBhcmFtZXRlcnMgd2l0aCBqcGVnX3JlYWRfaGVhZGVyKCkuCiAgICAgICAgICAgICBpZiAoanBl
Z19yZWFkX2hlYWRlcigmbV9pbmZvLCB0cnVlKSA9PSBKUEVHX1NVU1BFTkRFRCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24uCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBJL08gc3VzcGVuc2lvbi4KIAogICAgICAgICAgICAgLy8gTGV0IGxp
YmpwZWcgdGFrZSBjYXJlIG9mIGdyYXktPlJHQiBhbmQgWUNiQ3ItPlJHQiBjb252ZXJzaW9ucy4K
ICAgICAgICAgICAgIHN3aXRjaCAobV9pbmZvLmpwZWdfY29sb3Jfc3BhY2UpIHsKQEAgLTE5NCw3
ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9pbmZvLm91dF9jb2xvcl9zcGFj
ZSA9IEpDU19DTVlLOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fZGVjb2Rlci0+c2V0RmFpbGVkKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8v
IERvbid0IGFsbG9jYXRlIGEgZ2lhbnQgYW5kIHN1cGVyZmx1b3VzIG1lbW9yeSBidWZmZXIgd2hl
biB0aGUKQEAgLTIxNCw3ICsyMTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIFdlIGNh
biBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgogICAg
ICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2lu
Zm8uaW1hZ2VfaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2V0RmFpbGVkKCk7CiAKICAgICAgICAgICAgIGlm
IChtX2RlY29kaW5nU2l6ZU9ubHkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gc3RvcCBo
ZXJlLiAgUmVkdWNlIG91ciBidWZmZXIgbGVuZ3RoIGFuZCBhdmFpbGFibGUKQEAgLTIzNyw3ICsy
MzUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIFN0YXJ0IGRlY29tcHJlc3Nvci4KICAg
ICAgICAgICAgIGlmICghanBlZ19zdGFydF9kZWNvbXByZXNzKCZtX2luZm8pKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNwZW5zaW9uLgogCiAgICAgICAgICAgICAvLyBJZiB0aGlz
IGlzIGEgcHJvZ3Jlc3NpdmUgSlBFRyAuLi4KICAgICAgICAgICAgIG1fc3RhdGUgPSAobV9pbmZv
LmJ1ZmZlcmVkX2ltYWdlKSA/IEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lWRSA6IEpQRUdfREVD
T01QUkVTU19TRVFVRU5USUFMOwpAQCAtMjQ3LDcgKzI0NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmIChtX3N0YXRlID09IEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMKSB7CiAgIAogICAg
ICAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5vdXRwdXRTY2FubGluZXMoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNwZW5zaW9uLgogICAKICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSd2ZSBjb21wbGV0ZWQgaW1hZ2Ugb3V0cHV0Li4uCiAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQp
OwpAQCAtMjczLDcgKzI3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtLXNjYW47CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghanBlZ19zdGFydF9vdXRw
dXQoJm1faW5mbywgc2NhbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSAweGZmZmZmZikK
QEAgLTI4NSwxMiArMjgzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkb24ndCBjYWxsIGpwZWdfc3RhcnRfb3V0cHV0KCkgbXVsdGlwbGUgdGltZXMgZm9yCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgc2Nhbi4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZm8ub3V0cHV0X3NjYW5saW5lID0gMHhmZmZmZmY7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24uCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNwZW5zaW9uLgogICAg
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5mby5vdXRw
dXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghanBlZ19maW5pc2hfb3V0cHV0KCZtX2luZm8pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNwZW5zaW9uLgogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoanBlZ19pbnB1dF9jb21wbGV0ZSgmbV9pbmZvKSAmJiAo
bV9pbmZvLmlucHV0X3NjYW5fbnVtYmVyID09IG1faW5mby5vdXRwdXRfc2Nhbl9udW1iZXIpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA1LDE1ICszMDMsOCBAQCBw
dWJsaWM6CiAKICAgICAgICAgY2FzZSBKUEVHX0RPTkU6CiAgICAgICAgICAgICAvLyBGaW5pc2gg
ZGVjb21wcmVzc2lvbi4KLSAgICAgICAgICAgIGlmICghanBlZ19maW5pc2hfZGVjb21wcmVzcygm
bV9pbmZvKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24u
Ci0KLSAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUjsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGpwZWdfZmluaXNoX2RlY29tcHJl
c3MoJm1faW5mbyk7CiAgICAgICAgIAotICAgICAgICBjYXNlIEpQRUdfU0lOS19OT05fSlBFR19U
UkFJTEVSOgotICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBKUEVHX0VSUk9SOgog
ICAgICAgICAgICAgLy8gV2UgY2FuIGdldCBoZXJlIGlmIHRoZSBjb25zdHJ1Y3RvciBmYWlsZWQu
CiAgICAgICAgICAgICByZXR1cm4gbV9kZWNvZGVyLT5zZXRGYWlsZWQoKTsKQEAgLTQ4Nyw3ICs0
NzgsOSBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTCiAgICAgaWYg
KCFtX3JlYWRlcikKICAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBKUEVHSW1hZ2VSZWFkZXIodGhp
cykpOwogCi0gICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlT
aXplKSkKKyAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSBy
ZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCisgICAgLy8gaGFzIGZhaWxlZC4KKyAgICBp
ZiAoIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgb25seVNpemUpICYmIGlzQWxs
RGF0YVJlY2VpdmVkKCkpCiAgICAgICAgIHNldEZhaWxlZCgpOwogCiAgICAgaWYgKGZhaWxlZCgp
IHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuaAkocmV2aXNpb24gNTYwMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIERlY29k
ZXMgdGhlIGltYWdlLiAgSWYgfG9ubHlTaXplfCBpcyB0cnVlLCBzdG9wcyBkZWNvZGluZyBhZnRl
cgotICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgLy8gY2Fs
Y3VsYXRpbmcgdGhlIGltYWdlIHNpemUuICBJZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUgaXMg
bm8gbW9yZQorICAgICAgICAvLyBkYXRhIGNvbWluZywgc2V0cyB0aGUgImRlY29kZSBmYWlsdXJl
IiBmbGFnLgogICAgICAgICB2b2lkIGRlY29kZShib29sIG9ubHlTaXplKTsKIAogICAgICAgICBP
d25QdHI8SlBFR0ltYWdlUmVhZGVyPiBtX3JlYWRlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2
aXNpb24gNTYwMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgY3VycmVudEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRCdWZmZXJTaXplOyB9CiAKLSAgICB2b2lkIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXIm
IGRhdGEsIGJvb2wgc2l6ZU9ubHkpCisgICAgYm9vbCBkZWNvZGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5
ID0gc2l6ZU9ubHk7CiAgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVjb2RlciA9IHN0YXRpY19j
YXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKG1fcG5nKSk7CkBA
IC0xMjcsOCArMTI3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBz
ZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4uCiAgICAgICAgIGlm
IChzZXRqbXAobV9wbmctPmptcGJ1ZikpIHsKICAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAg
ICAgICBkZWNvZGVyLT5zZXRGYWlsZWQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVyLT5zZXRGYWlsZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGNv
bnN0IGNoYXIqIHNlZ21lbnQ7CkBAIC0xNDAsMTAgKzEzOSw5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIC8vIG1lcmVseSB3YW50IHRvIGNoZWNrIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2V0IHRoZSBz
aXplLCBub3QKICAgICAgICAgICAgIC8vIChyZWN1cnNpdmVseSkgdHJpZ2dlciBhZGRpdGlvbmFs
IGRlY29kaW5nIGlmIHdlIGhhdmVuJ3QuCiAgICAgICAgICAgICBpZiAoc2l6ZU9ubHkgPyBkZWNv
ZGVyLT5JbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIDogZGVjb2Rlci0+aXNDb21wbGV0
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWRlY29kZXItPmlzQ29tcGxldGUoKSAmJiBkZWNv
ZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQotICAgICAgICAgICAgZGVjb2Rlci0+cG5nQ29tcGxl
dGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGJvb2wgZGVjb2RpbmdT
aXplT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTaXplT25seTsgfQpAQCAtMzcxLDcg
KzM2OSwxMCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpCiAgICAg
aWYgKCFtX3JlYWRlcikKICAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBQTkdJbWFnZVJlYWRlcih0
aGlzKSk7CiAKLSAgICBtX3JlYWRlci0+ZGVjb2RlKCptX2RhdGEsIG9ubHlTaXplKTsKKyAgICAv
LyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwg
dGhlIGRhdGEsIGRlY29kaW5nCisgICAgLy8gaGFzIGZhaWxlZC4KKyAgICBpZiAoIW1fcmVhZGVy
LT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAg
ICAgIHNldEZhaWxlZCgpOwogICAgIAogICAgIGlmIChmYWlsZWQoKSB8fCBpc0NvbXBsZXRlKCkp
CiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTYw
MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBEZWNvZGVzIHRoZSBpbWFnZS4gIElmIHxvbmx5
U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2RpbmcgYWZ0ZXIKLSAgICAgICAgLy8gY2FsY3VsYXRp
bmcgdGhlIGltYWdlIHNpemUuCisgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXpl
LiAgSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlIGlzIG5vIG1vcmUKKyAgICAgICAgLy8gZGF0
YSBjb21pbmcsIHNldHMgdGhlICJkZWNvZGUgZmFpbHVyZSIgZmxhZy4KICAgICAgICAgdm9pZCBk
ZWNvZGUoYm9vbCBvbmx5U2l6ZSk7CiAKICAgICAgICAgT3duUHRyPFBOR0ltYWdlUmVhZGVyPiBt
X3JlYWRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50738</attachid>
            <date>2010-03-15 14:21:21 -0700</date>
            <delta_ts>2010-04-29 15:38:19 -0700</delta_ts>
            <desc>Part 2, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19955</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjAxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDMtMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgYWxsIGltYWdlIGRlY29kZXJzIHNldCB0aGUgImZhaWxlZCIgYml0IGlmIGFuIGltYWdl
IGNvdWxkIG5vdCBiZQorICAgICAgICBjb21wbGV0ZWx5IGRlY29kZWQsIGJ1dCBubyBtb3JlIGRh
dGEgaXMgY29taW5nLiAgVGhlIElDTyBhbmQgQk1QCisgICAgICAgIGRlY29kZXJzIGFscmVhZHkg
ZGlkIHRoaXMuCisgICAgICAgIAorICAgICAgICAiRmFpbGVkIiBkb2VzIG5vdCBjYXVzZSB0aGUg
aW1hZ2UgdG8gbm90IGJlIGRpc3BsYXllZCwgaXQgc2ltcGx5IGNhdXNlcworICAgICAgICB1cyB0
byBub3QgYm90aGVyIHRvIHRyeSB0byBkZWNvZGUgYWdhaW4gaWYgZnV0dXJlIHJlcXVlc3RzIGFy
ZSBtYWRlLCBhbmQKKyAgICAgICAgZm9yIHNvbWUgZGVjb2RlcnMsIGxldHMgdGhlIGRlY29kZXIg
Y2xlYW4gdXAgc29tZSBvZiBpdHMgdGVtcG9yYXJ5CisgICAgICAgIG9iamVjdHMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1NDExCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFn
ZVJlYWRlcjo6ZG9fbHp3KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpyZWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmRlY29kZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTAtMDMtMTUgIEFuZHkg
RXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3Vs
bGl2YW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU2MDA5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM1LDEzICsyMzUsMTMgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KHVucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdJRkltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCitib29s
IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2QpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5
LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBj
YXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4K
ICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKICAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
ICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxyZWFkeSBjYWxsZWQg
c2V0RmFpbGVkKCkuCiAKICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSk7CiAgICAgYnVmZmVyLnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24pOwpAQCAtMjc3
LDYgKzI3Nyw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAg
ICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpnaWZDb21w
bGV0ZSgpCkBAIC0yOTQsNyArMjk2LDkgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1
bnNpZ25lZCBoYQogICAgIGlmICghbV9yZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyLnNldChuZXcg
R0lGSW1hZ2VSZWFkZXIodGhpcykpOwogCi0gICAgaWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3Qg
dW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkgKyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6
ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFsdEF0RnJhbWUpKQorICAgIC8vIElmIHdlIGNv
dWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwg
ZGVjb2RpbmcKKyAgICAvLyBoYXMgZmFpbGVkLgorICAgIGlmICghbV9yZWFkZXItPnJlYWQoKGNv
bnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEt
PnNpemUoKSAtIG1fcmVhZE9mZnNldCwgcXVlcnksIGhhbHRBdEZyYW1lKSAmJiBpc0FsbERhdGFS
ZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKIAogICAgIGlmIChmYWlsZWQoKSkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1NjAwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMyAr
NTQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSB0
aGUgR0lGIHJlYWRlci4KICAgICAgICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRl
c0xlZnQpOwogICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25l
ZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpOwotICAgICAgICB2b2lkIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwg
dW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9k
IGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZy
YW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIElmIHRoZSBxdWVyeSBpcyBHSUZGdWxsUXVlcnks
IGRlY29kZXMgdGhlIGltYWdlIHVwIHRvIChidXQgbm90CiAgICAgICAgIC8vIGluY2x1ZGluZykg
fGhhbHRBdEZyYW1lfC4gIE90aGVyd2lzZSwgZGVjb2RlcyBhcyBtdWNoIGFzIGlzIG5lZWRlZCB0
bwotICAgICAgICAvLyBhbnN3ZXIgdGhlIHF1ZXJ5LCBpZ25vcmluZyBiaXRtYXAgZGF0YS4KKyAg
ICAgICAgLy8gYW5zd2VyIHRoZSBxdWVyeSwgaWdub3JpbmcgYml0bWFwIGRhdGEuICBJZiBkZWNv
ZGluZyBmYWlscyBidXQgdGhlcmUKKyAgICAgICAgLy8gaXMgbm8gbW9yZSBkYXRhIGNvbWluZywg
c2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgogICAgICAgICB2b2lkIGRlY29kZSh1bnNp
Z25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkpOwogCiAgICAgICAgIC8vIENhbGxlZCB0byBpbml0
aWFsaXplIHRoZSBmcmFtZSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJhc2VkIG9uCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA1NjAwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkw
LDcgKzI5MCw5IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ24KICAg
ICAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBlbmQtb2Ytc3RyZWFtIGNvZGUgKi8KICAgICAgIGlm
IChjb2RlID09IChjbGVhcl9jb2RlICsgMSkpIHsKICAgICAgICAgLyogZW5kLW9mLXN0cmVhbSBz
aG91bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEgKi8KLSAgICAgICAgcmV0dXJu
ICFyb3dzX3JlbWFpbmluZzsKKyAgICAgICAgaWYgKCFyb3dzX3JlbWFpbmluZykKKyAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAogICAgICAgaWYgKG9sZGNvZGUgPT0gLTEpIHsK
QEAgLTMwOCwxMyArMzEwLDEzIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1
bnNpZ24KICAgICAgICAgY29kZSA9IG9sZGNvZGU7CiAKICAgICAgICAgaWYgKHN0YWNrcCA9PSBz
dGFjayArIE1BWF9CSVRTKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICByZXR1
cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwogICAgICAgfQog
CiAgICAgICB3aGlsZSAoY29kZSA+PSBjbGVhcl9jb2RlKQogICAgICAgewogICAgICAgICBpZiAo
Y29kZSA+PSBNQVhfQklUUyB8fCBjb2RlID09IHByZWZpeFtjb2RlXSkKLSAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFp
bGVkKCkgOiBmYWxzZTsKIAogICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhv
bGRzIGNoYXJhY3RlcnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKICAgICAgICAgLy8gYWxs
b3dpbmcgY29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxm
b3JtZWQKQEAgLTMyNCw3ICszMjYsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29u
c3QgdW5zaWduCiAgICAgICAgIGNvZGUgPSBwcmVmaXhbY29kZV07CiAKICAgICAgICAgaWYgKHN0
YWNrcCA9PSBzdGFjayArIE1BWF9CSVRTKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwog
ICAgICAgfQogCiAgICAgICAqc3RhY2twKysgPSBmaXJzdGNoYXIgPSBzdWZmaXhbY29kZV07CkBA
IC00MTUsNyArNDE3LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25l
ZAogICAgICAgYnl0ZXNfdG9fY29uc3VtZSAtPSBsOwogICAgICAgaWYgKGNsaWVudHB0cikKICAg
ICAgICAgY2xpZW50cHRyLT5kZWNvZGluZ0hhbHRlZCgwKTsKLSAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBSZXNldCBob2xkIGJ1ZmZlciBjb3Vu
dAogICAgIGJ5dGVzX2luX2hvbGQgPSAwOwpAQCAtNDQwLDEwICs0NDIsOSBAQCBib29sIEdJRklt
YWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgc3dpdGNoIChzdGF0ZSkKICAgICB7
CiAgICAgY2FzZSBnaWZfbHp3OgotICAgICAgaWYgKCFkb19sencocSkpIHsKLSAgICAgICAgc3Rh
dGUgPSBnaWZfZXJyb3I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgICAgaWYgKCFkb19s
encocSkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9fbHp3KCkgZW5jb3VudGVyZWQg
YW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgIC8v
IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkuCiAgICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2spOwog
ICAgICAgYnJlYWs7CiAKQEAgLTQ1NCwxNSArNDU1LDExIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6
OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9m
IDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKICAgICAgIC8vIHRo
YXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZh
bHVlICgxMikuCiAgICAgICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgY29kZW1h
c2sgY29ycmVjdGx5IGF0IDQwOTUuCi0gICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRT
KSB7Ci0gICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIH0K
KyAgICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCisgICAgICAgIHJldHVybiBjbGll
bnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICBpbnQgY2xlYXJf
Y29kZSA9IDEgPDwgZGF0YXNpemU7Ci0gICAgICBpZiAoY2xlYXJfY29kZSA+PSBNQVhfQklUUykg
ewotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Cisg
ICAgICBpZiAoY2xlYXJfY29kZSA+PSBNQVhfQklUUykKKyAgICAgICAgcmV0dXJuIGNsaWVudHB0
ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKIAogICAgICAgaWYgKGZyYW1lX3Jl
YWRlcikgewogICAgICAgICBmcmFtZV9yZWFkZXItPmRhdGFzaXplID0gZGF0YXNpemU7CkBAIC00
OTgsMTAgKzQ5NSw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQK
ICAgICAgICAgdmVyc2lvbiA9IDg5OwogICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEs
ICJHSUY4N2EiLCA2KSkKICAgICAgICAgdmVyc2lvbiA9IDg3OwotICAgICAgZWxzZSB7Ci0gICAg
ICAgIHN0YXRlID0gZ2lmX2Vycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBm
YWxzZTsKICAgICAgIEdFVE4oNywgZ2lmX2dsb2JhbF9oZWFkZXIpOwogICAgIH0KICAgICBicmVh
azsKQEAgLTU4Niw3ICs1ODEsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVu
c2lnbmVkCiAgICAgICAgICAgc3RhdGUgPSBnaWZfZG9uZTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAvKiBObyBpbWFnZXMgZGVjb2RlZCwgdGhlcmUgaXMgbm90aGluZyB0byBkaXNwbGF5
LiAqLwotICAgICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOworICAgICAgICAgIHJldHVybiBjbGll
bnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgICB9IGVsc2UKQEAgLTcxNCw3ICs3MDksNyBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBl
X2V4dGVuc2lvbl9ibG9jayk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAvLyAwLDMtNyBhcmUg
eWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5zaW9uIGNvZGVzCi0gICAgICAgIHN0YXRl
ID0gZ2lmX2Vycm9yOworICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRG
YWlsZWQoKSA6IGZhbHNlOwogICAgICAgfQogCiAgICAgICBicmVhazsKQEAgLTc1NSwxMCArNzUw
LDggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgaWYg
KCFoZWlnaHQgfHwgIXdpZHRoKSB7CiAgICAgICAgIGhlaWdodCA9IHNjcmVlbl9oZWlnaHQ7CiAg
ICAgICAgIHdpZHRoID0gc2NyZWVuX3dpZHRoOwotICAgICAgICBpZiAoIWhlaWdodCB8fCAhd2lk
dGgpIHsKLSAgICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoIWhlaWdodCB8fCAhd2lkdGgpCisgICAgICAgICAgcmV0dXJu
IGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAog
ICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRB
dEZyYW1lID09IGltYWdlc19kZWNvZGVkKSB7CkBAIC03OTQsMTAgKzc4Nyw4IEBAIGJvb2wgR0lG
SW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgICAgICBmcmFtZV9yZWFkZXIt
PnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0aF07CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKSB7Ci0gICAgICAgICAgc3RhdGUgPSBn
aWZfb29tOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGlmICghZnJhbWVf
cmVhZGVyLT5yb3didWYpCisgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+
c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgICAgaWYgKHNjcmVlbl9oZWlnaHQgPCBoZWlnaHQp
CiAgICAgICAgICAgc2NyZWVuX2hlaWdodCA9IGhlaWdodDsKIApAQCAtODM4LDEwICs4MjksOCBA
QCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgIGlmIChm
cmFtZV9yZWFkZXIgJiYgKCFtYXAgfHwgKG51bV9jb2xvcnMgPiBmcmFtZV9yZWFkZXItPmxvY2Fs
X2NvbG9ybWFwX3NpemUpKSkgewogICAgICAgICAgIGRlbGV0ZSBbXW1hcDsKICAgICAgICAgICBt
YXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKLSAgICAgICAgICBpZiAoIW1hcCkgewotICAg
ICAgICAgICAgc3RhdGUgPSBnaWZfb29tOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQorICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNs
aWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIFN3
aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIgaXQgbG9hZHMgKi8KQEAgLTg5Myw4
ICs4ODIsOSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAg
ICAgIGltYWdlc19kZWNvZGVkKys7CiAKICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBmcmFtZSBp
cyBub3cgY29tcGxldGUuCi0gICAgICAgIGlmIChjbGllbnRwdHIgJiYgZnJhbWVfcmVhZGVyKQot
ICAgICAgICAgIGNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEsIGZy
YW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QpOwor
ICAgICAgICBpZiAoY2xpZW50cHRyICYmIGZyYW1lX3JlYWRlciAmJiAhY2xpZW50cHRyLT5mcmFt
ZUNvbXBsZXRlKGltYWdlc19kZWNvZGVkIC0gMSwgZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lLCBm
cmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBmcmFtZUNvbXBsZXRlKCkgaGFzIGFscmVhZHkgY2FsbGVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjbGllbnRwdHItPnNldEZhaWxlZCgpLgogCiAgICAgICAgIC8qIENsZWFyIHN0YXRl
IGZyb20gdGhpcyBpbWFnZSAqLwogICAgICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7CkBAIC05MTMs
MTQgKzkwMyw2IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAg
ICAgICAgY2xpZW50cHRyLT5naWZDb21wbGV0ZSgpOwogICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAvLyBIYW5kbGUgb3V0IG9mIG1lbW9yeSBlcnJvcnMKLSAgICBjYXNlIGdpZl9vb206Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBIYW5kbGUgZ2VuZXJhbCBlcnJvcnMKLSAgICBjYXNl
IGdpZl9lcnJvcjoKLSAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vIFdlIHNob3VsZG4ndCBl
dmVyIGdldCBoZXJlLgogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKQEAgLTk0NSw1ICs5Mjcs
NSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAKICAgaWYgKGNs
aWVudHB0cikKICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwotICByZXR1cm4gdHJ1
ZTsKKyAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA1NjAwOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBnaWZfY29u
c3VtZV9ibG9jaywKICAgICBnaWZfc2tpcF9ibG9jaywKICAgICBnaWZfZG9uZSwKLSAgICBnaWZf
b29tLAotICAgIGdpZl9lcnJvciwKICAgICBnaWZfY29tbWVudF9leHRlbnNpb24sCiAgICAgZ2lm
X2FwcGxpY2F0aW9uX2V4dGVuc2lvbiwKICAgICBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2Nr
LApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTYwMDkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDYgQEAgZW51bSBqc3RhdGUgewogICAgIEpQRUdfREVDT01QUkVT
U19QUk9HUkVTU0lWRSwgLy8gT3V0cHV0IHByb2dyZXNzaXZlIHBpeGVscwogICAgIEpQRUdfREVD
T01QUkVTU19TRVFVRU5USUFMLCAgLy8gT3V0cHV0IHNlcXVlbnRpYWwgcGl4ZWxzCiAgICAgSlBF
R19ET05FLAotICAgIEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSLCAgLy8gU29tZSBpbWFnZSBm
aWxlcyBoYXZlIGEgbm9uLUpQRUcgdHJhaWxlcgogICAgIEpQRUdfRVJST1IgICAgCiB9OwogCkBA
IC0xNjksMTYgKzE2OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4K
ICAgICAgICAgaWYgKHNldGptcChtX2Vyci5zZXRqbXBfYnVmZmVyKSkgewotICAgICAgICAgICAg
bV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOwogICAgICAgICAgICAgY2xvc2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtX2RlY29k
ZXItPnNldEZhaWxlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7
CiAgICAgICAgIGNhc2UgSlBFR19IRUFERVI6CiAgICAgICAgICAgICAvLyBSZWFkIGZpbGUgcGFy
YW1ldGVycyB3aXRoIGpwZWdfcmVhZF9oZWFkZXIoKS4KICAgICAgICAgICAgIGlmIChqcGVnX3Jl
YWRfaGVhZGVyKCZtX2luZm8sIHRydWUpID09IEpQRUdfU1VTUEVOREVEKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIEkvTyBzdXNwZW5zaW9uLgogCiAgICAgICAgICAgICAvLyBMZXQgbGlianBl
ZyB0YWtlIGNhcmUgb2YgZ3JheS0+UkdCIGFuZCBZQ2JDci0+UkdCIGNvbnZlcnNpb25zLgogICAg
ICAgICAgICAgc3dpdGNoIChtX2luZm8uanBlZ19jb2xvcl9zcGFjZSkgewpAQCAtMTk0LDcgKzE5
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtX2luZm8ub3V0X2NvbG9yX3NwYWNlID0g
SkNTX0NNWUs7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9k
ZWNvZGVyLT5zZXRGYWlsZWQoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRG9u
J3QgYWxsb2NhdGUgYSBnaWFudCBhbmQgc3VwZXJmbHVvdXMgbWVtb3J5IGJ1ZmZlciB3aGVuIHRo
ZQpAQCAtMjE0LDcgKzIxMiw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gV2UgY2FuIGZp
bGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCiAgICAgICAg
ICAgICBpZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5p
bWFnZV9oZWlnaHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9kZWNvZGVyLT5zZXRGYWlsZWQoKTsKIAogICAgICAgICAgICAgaWYgKG1f
ZGVjb2RpbmdTaXplT25seSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBzdG9wIGhlcmUu
ICBSZWR1Y2Ugb3VyIGJ1ZmZlciBsZW5ndGggYW5kIGF2YWlsYWJsZQpAQCAtMjM3LDcgKzIzNSw3
IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gU3RhcnQgZGVjb21wcmVzc29yLgogICAgICAg
ICAgICAgaWYgKCFqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJm1faW5mbykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAKICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBwcm9ncmVzc2l2ZSBKUEVHIC4uLgogICAgICAgICAgICAgbV9zdGF0ZSA9IChtX2luZm8uYnVm
ZmVyZWRfaW1hZ2UpID8gSlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZFIDogSlBFR19ERUNPTVBS
RVNTX1NFUVVFTlRJQUw7CkBAIC0yNDcsNyArMjQ1LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKG1fc3RhdGUgPT0gSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUwpIHsKICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2RlY29kZXItPm91dHB1dFNjYW5saW5lcygpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24uCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAgIAogICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3ZlIGNvbXBsZXRlZCBpbWFnZSBvdXRwdXQuLi4KICAgICAgICAgICAgICAgICBB
U1NFUlQobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSBtX2luZm8ub3V0cHV0X2hlaWdodCk7CkBA
IC0yNzMsNyArMjcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
c2NhbjsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFqcGVnX3N0YXJ0X291dHB1dCgm
bV9pbmZvLCBzY2FuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gSS9PIHN1c3BlbnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBJL08gc3VzcGVuc2lvbi4KICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IDB4ZmZmZmZmKQpAQCAt
Mjg1LDEyICsyODMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGRvbid0IGNhbGwganBlZ19zdGFydF9vdXRwdXQoKSBtdWx0aXBsZSB0aW1lcyBmb3IKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBzY2FuLgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAweGZmZmZmZjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAgICAgICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9z
Y2FubGluZSA9PSBtX2luZm8ub3V0cHV0X2hlaWdodCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFqcGVnX2ZpbmlzaF9vdXRwdXQoJm1faW5mbykpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChqcGVnX2lucHV0X2NvbXBsZXRlKCZtX2luZm8pICYmIChtX2lu
Zm8uaW5wdXRfc2Nhbl9udW1iZXIgPT0gbV9pbmZvLm91dHB1dF9zY2FuX251bWJlcikpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDUsMTUgKzMwMyw4IEBAIHB1Ymxp
YzoKIAogICAgICAgICBjYXNlIEpQRUdfRE9ORToKICAgICAgICAgICAgIC8vIEZpbmlzaCBkZWNv
bXByZXNzaW9uLgotICAgICAgICAgICAgaWYgKCFqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCZtX2lu
Zm8pKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KLQot
ICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4ganBlZ19maW5pc2hfZGVjb21wcmVzcygm
bV9pbmZvKTsKICAgICAgICAgCi0gICAgICAgIGNhc2UgSlBFR19TSU5LX05PTl9KUEVHX1RSQUlM
RVI6Ci0gICAgICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlIEpQRUdfRVJST1I6CiAgICAg
ICAgICAgICAvLyBXZSBjYW4gZ2V0IGhlcmUgaWYgdGhlIGNvbnN0cnVjdG9yIGZhaWxlZC4KICAg
ICAgICAgICAgIHJldHVybiBtX2RlY29kZXItPnNldEZhaWxlZCgpOwpAQCAtNDg3LDcgKzQ3OCw5
IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICBpZiAoIW1f
cmVhZGVyKQogICAgICAgICBtX3JlYWRlci5zZXQobmV3IEpQRUdJbWFnZVJlYWRlcih0aGlzKSk7
CiAKLSAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgb25seVNpemUp
KQorICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2Vp
dmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKKyAgICAvLyBoYXMgZmFpbGVkLgorICAgIGlmICgh
bV9yZWFkZXItPmRlY29kZShtX2RhdGEtPmJ1ZmZlcigpLCBvbmx5U2l6ZSkgJiYgaXNBbGxEYXRh
UmVjZWl2ZWQoKSkKICAgICAgICAgc2V0RmFpbGVkKCk7CiAKICAgICBpZiAoZmFpbGVkKCkgfHwg
KCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oCShyZXZpc2lvbiA1NjAwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRGVjb2RlcyB0
aGUgaW1hZ2UuICBJZiB8b25seVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nIGFmdGVyCi0g
ICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLgorICAgICAgICAvLyBjYWxjdWxh
dGluZyB0aGUgaW1hZ2Ugc2l6ZS4gIElmIGRlY29kaW5nIGZhaWxzIGJ1dCB0aGVyZSBpcyBubyBt
b3JlCisgICAgICAgIC8vIGRhdGEgY29taW5nLCBzZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZs
YWcuCiAgICAgICAgIHZvaWQgZGVjb2RlKGJvb2wgb25seVNpemUpOwogCiAgICAgICAgIE93blB0
cjxKUEVHSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lv
biA1NjAwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBjdXJyZW50QnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dEJ1ZmZlclNpemU7IH0KIAotICAgIHZvaWQgZGVjb2RlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0
YSwgYm9vbCBzaXplT25seSkKKyAgICBib29sIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRh
dGEsIGJvb2wgc2l6ZU9ubHkpCiAgICAgewogICAgICAgICBtX2RlY29kaW5nU2l6ZU9ubHkgPSBz
aXplT25seTsKICAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gc3RhdGljX2Nhc3Q8
UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9wbmcpKTsKQEAgLTEy
Nyw4ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhlIHNldGpt
cCBoZXJlLiBPdGhlcndpc2UgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbi4KICAgICAgICAgaWYgKHNl
dGptcChtX3BuZy0+am1wYnVmKSkgewogICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgICAg
IGRlY29kZXItPnNldEZhaWxlZCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIGRlY29kZXItPnNldEZhaWxlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgY29uc3Qg
Y2hhciogc2VnbWVudDsKQEAgLTE0MCwxMCArMTM5LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
Ly8gbWVyZWx5IHdhbnQgdG8gY2hlY2sgaWYgd2UndmUgbWFuYWdlZCB0byBzZXQgdGhlIHNpemUs
IG5vdAogICAgICAgICAgICAgLy8gKHJlY3Vyc2l2ZWx5KSB0cmlnZ2VyIGFkZGl0aW9uYWwgZGVj
b2RpbmcgaWYgd2UgaGF2ZW4ndC4KICAgICAgICAgICAgIGlmIChzaXplT25seSA/IGRlY29kZXIt
PkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgOiBkZWNvZGVyLT5pc0NvbXBsZXRlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICghZGVjb2Rlci0+aXNDb21wbGV0ZSgpICYmIGRlY29kZXIt
PmlzQWxsRGF0YVJlY2VpdmVkKCkpCi0gICAgICAgICAgICBkZWNvZGVyLT5wbmdDb21wbGV0ZSgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBkZWNvZGluZ1NpemVP
bmx5KCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1NpemVPbmx5OyB9CkBAIC0zNzEsNyArMzY5
LDEwIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2kKICAgICBpZiAo
IW1fcmVhZGVyKQogICAgICAgICBtX3JlYWRlci5zZXQobmV3IFBOR0ltYWdlUmVhZGVyKHRoaXMp
KTsKIAotICAgIG1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpOworICAgIC8vIElm
IHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUg
ZGF0YSwgZGVjb2RpbmcKKyAgICAvLyBoYXMgZmFpbGVkLgorICAgIGlmICghbV9yZWFkZXItPmRl
Y29kZSgqbV9kYXRhLCBvbmx5U2l6ZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICAgICAg
c2V0RmFpbGVkKCk7CiAgICAgCiAgICAgaWYgKGZhaWxlZCgpIHx8IGlzQ29tcGxldGUoKSkKICAg
ICAgICAgbV9yZWFkZXIuY2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1NjAwOSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIC8vIERlY29kZXMgdGhlIGltYWdlLiAgSWYgfG9ubHlTaXpl
fCBpcyB0cnVlLCBzdG9wcyBkZWNvZGluZyBhZnRlcgotICAgICAgICAvLyBjYWxjdWxhdGluZyB0
aGUgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGltYWdlIHNpemUuICBJ
ZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUgaXMgbm8gbW9yZQorICAgICAgICAvLyBkYXRhIGNv
bWluZywgc2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgogICAgICAgICB2b2lkIGRlY29k
ZShib29sIG9ubHlTaXplKTsKIAogICAgICAgICBPd25QdHI8UE5HSW1hZ2VSZWFkZXI+IG1fcmVh
ZGVyOwo=
</data>
<flag name="review"
          id="33906"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54743</attachid>
            <date>2010-04-29 15:38:19 -0700</date>
            <delta_ts>2010-04-30 12:01:09 -0700</delta_ts>
            <desc>Part 2, v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21009</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDQtMjkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgYWxsIGltYWdlIGRlY29kZXJzIHNldCB0aGUgImZhaWxlZCIgYml0IGlmIGFuIGltYWdl
IGNvdWxkIG5vdCBiZQorICAgICAgICBjb21wbGV0ZWx5IGRlY29kZWQsIGJ1dCBubyBtb3JlIGRh
dGEgaXMgY29taW5nLiAgVGhlIElDTyBhbmQgQk1QCisgICAgICAgIGRlY29kZXJzIGFscmVhZHkg
ZGlkIHRoaXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTQxMQorCisgICAgICAgICJGYWlsZWQiIGRvZXMgbm90IGNhdXNlIHRoZSBpbWFnZSB0byBu
b3QgYmUgZGlzcGxheWVkLCBpdCBzaW1wbHkgY2F1c2VzCisgICAgICAgIHVzIHRvIG5vdCBib3Ro
ZXIgdG8gdHJ5IHRvIGRlY29kZSBhZ2FpbiBpZiBmdXR1cmUgcmVxdWVzdHMgYXJlIG1hZGUsIGFu
ZAorICAgICAgICBmb3Igc29tZSBkZWNvZGVycywgbGV0cyB0aGUgZGVjb2RlciBjbGVhbiB1cCBz
b21lIG9mIGl0cyB0ZW1wb3JhcnkKKyAgICAgICAgb2JqZWN0cy4KKyAgICAgICAgCisgICAgICAg
IE5vIGxheW91dCB0ZXN0cyBiZWNhdXNlIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSB2aXNpYmxl
IG91dHB1dCBvZiBkZWNvZGluZyBpbiBhbnkgd2F5LgorCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOiBSZXR1cm4gd2hldGhlciB0aGUgZnJhbWUg
Y291bGQgYmUgbWFya2VkIGFzIGNvbXBsZXRlLgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUpOiByZWFkKCkgd2lsbCBtYXJrIGRlY29kZSBmYWlsdXJlIGl0c2VsZiwg
c28gdGhlIG9ubHkgYWRkaXRpb25hbCBmYWlsdXJlIGNhc2UgaXMgd2hlbiByZWFkKCkgbmVlZHMg
bW9yZSBkYXRhIChhbmQgdGh1cyByZXR1cm5zIGZhbHNlKSBhbmQgbm8gbW9yZSBpcyBjb21pbmcu
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KTogSW5zdGVhZCBvZiByZXR1cm5p
bmcgdHJ1ZSBmb3IgYnVmZmVyIHVuZGVycnVuIGFuZCBmYWxzZSBmb3IgZmFpbHVyZSwgcmV0dXJu
IGZhbHNlIGZvciBib3RoIGFuZCBzZXQgdGhlIGZhaWx1cmUgZmxhZyBvbiBmYWlsdXJlLgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OnJlYWQpOiBJbnN0ZWFkIG9mIHJldHVybmluZyB0cnVlIGZv
ciBidWZmZXIgdW5kZXJydW4gYW5kIGZhbHNlIGZvciBmYWlsdXJlLCByZXR1cm4gZmFsc2UgZm9y
IGJvdGggYW5kIHNldCB0aGUgZmFpbHVyZSBmbGFnIG9uIGZhaWx1cmUuCisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6
IEluc3RlYWQgb2YgcmV0dXJuaW5nIHRydWUgZm9yIGJ1ZmZlciB1bmRlcnJ1biBhbmQgZmFsc2Ug
Zm9yIGZhaWx1cmUsIHJldHVybiBmYWxzZSBmb3IgYm90aCBhbmQgc2V0IHRoZSBmYWlsdXJlIGZs
YWcgb24gZmFpbHVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmRlY29k
ZSk6IGRlY29kZSgpIHdpbGwgbWFyayBkZWNvZGUgZmFpbHVyZSBpdHNlbGYsIHNvIHRoZSBvbmx5
IGFkZGl0aW9uYWwgZmFpbHVyZSBjYXNlIGlzIHdoZW4gZGVjb2RlKCkgbmVlZHMgbW9yZSBkYXRh
IChhbmQgdGh1cyByZXR1cm5zIGZhbHNlKSBhbmQgbm8gbW9yZSBpcyBjb21pbmcuCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6ZGVjb2RlKTogUmV0dXJuIHRydWUgZm9y
IGRlY29kZSBzdWNjZXNzLCBmYWxzZSBmb3IgYnVmZmVyIHVuZGVycnVuIG9yIGRlY29kZSBmYWls
dXJlLCBhbmQgc2V0IHRoZSBmYWlsdXJlIGZsYWcgb24gZGVjb2RlIGZhaWx1cmUuCisgICAgICAg
IChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmRlY29kZSk6IEZhaWwgaWYgZGVjb2RlKCkgbmVl
ZHMgbW9yZSBkYXRhIChhbmQgdGh1cyByZXR1cm5zIGZhbHNlKSBhbmQgbm8gbW9yZSBpcyBjb21p
bmcuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5oOgorCiAyMDEwLTA0LTI5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBSdWJiZXItc3RhbXBlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShy
ZXZpc2lvbiA1ODExNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwxMyArMjM1LDEzIEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVm
ZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQogewogICAgIC8vIEluaXRp
YWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGlu
ZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2Rl
ZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgaWYgKChidWZmZXIuc3RhdHVzKCkg
PT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5k
ZXgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1l
QnVmZmVyKCkgaGFzIGFscmVhZHkgY2FsbGVkIHNldEZhaWxlZCgpLgogCiAgICAgYnVmZmVyLnNl
dFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwogICAgIGJ1ZmZlci5zZXREdXJh
dGlvbihmcmFtZUR1cmF0aW9uKTsKQEAgLTI3Nyw2ICsyNzcsOCBAQCB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQpAQCAtMjk0LDcgKzI5Niw5IEBAIHZv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGEKICAgICBpZiAoIW1fcmVhZGVy
KQogICAgICAgICBtX3JlYWRlci5zZXQobmV3IEdJRkltYWdlUmVhZGVyKHRoaXMpKTsKIAotICAg
IGlmICghbV9yZWFkZXItPnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgp
ICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEtPnNpemUoKSAtIG1fcmVhZE9mZnNldCwgcXVlcnksIGhh
bHRBdEZyYW1lKSkKKyAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3
ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCisgICAgLy8gaGFzIGZhaWxlZC4K
KyAgICBpZiAoIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRh
dGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5
LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAgc2V0RmFpbGVk
KCk7CiAKICAgICBpZiAoZmFpbGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTgxMTcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiAgICAgICAgIHZvaWQg
ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsKICAgICAgICAgYm9vbCBoYXZlRGVj
b2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVu
c2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRD
b3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsKLSAgICAgICAgdm9pZCBmcmFtZUNv
bXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEz
MkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CisgICAgICAgIGJv
b2wgZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0
aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpOwog
ICAgICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBJ
ZiB0aGUgcXVlcnkgaXMgR0lGRnVsbFF1ZXJ5LCBkZWNvZGVzIHRoZSBpbWFnZSB1cCB0byAoYnV0
IG5vdAogICAgICAgICAvLyBpbmNsdWRpbmcpIHxoYWx0QXRGcmFtZXwuICBPdGhlcndpc2UsIGRl
Y29kZXMgYXMgbXVjaCBhcyBpcyBuZWVkZWQgdG8KLSAgICAgICAgLy8gYW5zd2VyIHRoZSBxdWVy
eSwgaWdub3JpbmcgYml0bWFwIGRhdGEuCisgICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnksIGln
bm9yaW5nIGJpdG1hcCBkYXRhLiAgSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlCisgICAgICAg
IC8vIGlzIG5vIG1vcmUgZGF0YSBjb21pbmcsIHNldHMgdGhlICJkZWNvZGUgZmFpbHVyZSIgZmxh
Zy4KICAgICAgICAgdm9pZCBkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5KTsK
IAogICAgICAgICAvLyBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZnJhbWUgYnVmZmVyIHdpdGgg
dGhlIGdpdmVuIGluZGV4LCBiYXNlZCBvbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gNTgx
MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3ICsyOTAsOSBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpkb19sencoY29uc3QgdW5zaWduCiAgICAgICAvKiBDaGVjayBmb3IgZXhwbGljaXQgZW5k
LW9mLXN0cmVhbSBjb2RlICovCiAgICAgICBpZiAoY29kZSA9PSAoY2xlYXJfY29kZSArIDEpKSB7
CiAgICAgICAgIC8qIGVuZC1vZi1zdHJlYW0gc2hvdWxkIG9ubHkgYXBwZWFyIGFmdGVyIGFsbCBp
bWFnZSBkYXRhICovCi0gICAgICAgIHJldHVybiAhcm93c19yZW1haW5pbmc7CisgICAgICAgIGlm
ICghcm93c19yZW1haW5pbmcpCisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICB9CiAK
ICAgICAgIGlmIChvbGRjb2RlID09IC0xKSB7CkBAIC0zMDgsMTMgKzMxMCwxMyBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpkb19sencoY29uc3QgdW5zaWduCiAgICAgICAgIGNvZGUgPSBvbGRjb2Rl
OwogCiAgICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAogICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJf
Y29kZSkKICAgICAgIHsKICAgICAgICAgaWYgKGNvZGUgPj0gTUFYX0JJVFMgfHwgY29kZSA9PSBw
cmVmaXhbY29kZV0pCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiBj
bGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAKICAgICAgICAgLy8g
RXZlbiB0aG91Z2ggc3VmZml4W10gb25seSBob2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4
W2F2YWlsIC0gMV0sCiAgICAgICAgIC8vIGFsbG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRz
IHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgbWFsZm9ybWVkCkBAIC0zMjQsNyArMzI2LDcgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbgogICAgICAgICBjb2RlID0gcHJl
Zml4W2NvZGVdOwogCiAgICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVu
dHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAogICAgICAgKnN0YWNrcCsrID0g
Zmlyc3RjaGFyID0gc3VmZml4W2NvZGVdOwpAQCAtNDE1LDcgKzQxNyw3IEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0g
bDsKICAgICAgIGlmIChjbGllbnRwdHIpCiAgICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0
ZWQoMCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgLy8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQKICAgICBieXRlc19pbl9ob2xkID0gMDsKQEAg
LTQ0MCwxMCArNDQyLDkgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25l
ZAogICAgIHN3aXRjaCAoc3RhdGUpCiAgICAgewogICAgIGNhc2UgZ2lmX2x6dzoKLSAgICAgIGlm
ICghZG9fbHp3KHEpKSB7Ci0gICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOwotICAgICAgICBicmVh
azsKLSAgICAgIH0KKyAgICAgIGlmICghZG9fbHp3KHEpKQorICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIElmIGRvX2x6dygpIGVuY291bnRlcmVkIGFuIGVycm9yLCBpdCBoYXMgYWxyZWFkeSBjYWxs
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAvLyBjbGllbnRwdHItPnNldEZhaWxlZCgpLgogICAg
ICAgR0VUTigxLCBnaWZfc3ViX2Jsb2NrKTsKICAgICAgIGJyZWFrOwogCkBAIC00NTQsMTUgKzQ1
NSwxMSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAv
LyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0aGUgZGF0YXNpemUsIHdl
IG5lZWQgdG8gZW5zdXJlCiAgICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBs
ZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgogICAgICAgLy8gVGhpcyBzZXRz
IHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBhdCA0MDk1LgotICAgICAg
aWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykgewotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJv
cjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xa
V19CSVRTKQorICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwogICAgICAgaW50IGNsZWFyX2NvZGUgPSAxIDw8IGRhdGFzaXplOwotICAgICAg
aWYgKGNsZWFyX2NvZGUgPj0gTUFYX0JJVFMpIHsKLSAgICAgICAgc3RhdGUgPSBnaWZfZXJyb3I7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgICAgaWYgKGNsZWFyX2NvZGUgPj0gTUFYX0JJ
VFMpCisgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDog
ZmFsc2U7CiAKICAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKICAgICAgICAgZnJhbWVfcmVhZGVy
LT5kYXRhc2l6ZSA9IGRhdGFzaXplOwpAQCAtNDk4LDEwICs0OTUsOCBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgIHZlcnNpb24gPSA4OTsKICAgICAg
IGVsc2UgaWYgKCFzdHJuY21wKChjaGFyKilxLCAiR0lGODdhIiwgNikpCiAgICAgICAgIHZlcnNp
b24gPSA4NzsKLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBjbGllbnRwdHIg
PyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICBHRVROKDcsIGdpZl9nbG9i
YWxfaGVhZGVyKTsKICAgICB9CiAgICAgYnJlYWs7CkBAIC01ODYsNyArNTgxLDcgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICAgIHN0YXRlID0gZ2lm
X2RvbmU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLyogTm8gaW1hZ2VzIGRlY29kZWQs
IHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlzcGxheS4gKi8KLSAgICAgICAgICBzdGF0ZSA9IGdpZl9l
cnJvcjsKKyAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgfSBlbHNlCkBAIC03
MTQsNyArNzA5LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAog
ICAgICAgICBHRVROKDEsIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2spOwogICAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0byBiZSBkZWZpbmVkIG5ldHNjYXBlIGV4
dGVuc2lvbiBjb2RlcwotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKKyAgICAgICAgcmV0dXJu
IGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKICAgICAgIH0KIAog
ICAgICAgYnJlYWs7CkBAIC03NTUsMTAgKzc1MCw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJl
YWQoY29uc3QgdW5zaWduZWQKICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkgewogICAgICAg
ICBoZWlnaHQgPSBzY3JlZW5faGVpZ2h0OwogICAgICAgICB3aWR0aCA9IHNjcmVlbl93aWR0aDsK
LSAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKSB7Ci0gICAgICAgICAgc3RhdGUgPSBnaWZf
ZXJyb3I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFoZWlnaHQg
fHwgIXdpZHRoKQorICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZh
aWxlZCgpIDogZmFsc2U7CiAgICAgICB9CiAKICAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURl
Y29kZXI6OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBpbWFnZXNfZGVjb2RlZCkgewpA
QCAtNzk0LDEwICs3ODcsOCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2ln
bmVkCiAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3didWYgPSBuZXcgdW5zaWduZWQgY2hhcltz
Y3JlZW5fd2lkdGhdOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnJv
d2J1ZikgewotICAgICAgICAgIHN0YXRlID0gZ2lmX29vbTsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKQorICAgICAgICAgIHJl
dHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICAg
IGlmIChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KQogICAgICAgICAgIHNjcmVlbl9oZWlnaHQgPSBo
ZWlnaHQ7CiAKQEAgLTgzOCwxMCArODI5LDggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChj
b25zdCB1bnNpZ25lZAogICAgICAgICBpZiAoZnJhbWVfcmVhZGVyICYmICghbWFwIHx8IChudW1f
Y29sb3JzID4gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplKSkpIHsKICAgICAgICAg
ICBkZWxldGUgW11tYXA7CiAgICAgICAgICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07
Ci0gICAgICAgICAgaWYgKCFtYXApIHsKLSAgICAgICAgICAgIHN0YXRlID0gZ2lmX29vbTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIW1hcCkKKyAgICAg
ICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7
CiAgICAgICAgIH0KIAogICAgICAgICAvKiBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRl
IGFmdGVyIGl0IGxvYWRzICovCkBAIC04OTMsOCArODgyLDkgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICBpbWFnZXNfZGVjb2RlZCsrOwogCiAgICAg
ICAgIC8vIENBTExCQUNLOiBUaGUgZnJhbWUgaXMgbm93IGNvbXBsZXRlLgotICAgICAgICBpZiAo
Y2xpZW50cHRyICYmIGZyYW1lX3JlYWRlcikKLSAgICAgICAgICBjbGllbnRwdHItPmZyYW1lQ29t
cGxldGUoaW1hZ2VzX2RlY29kZWQgLSAxLCBmcmFtZV9yZWFkZXItPmRlbGF5X3RpbWUsIGZyYW1l
X3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kKTsKKyAgICAgICAgaWYgKGNsaWVudHB0ciAmJiBmcmFt
ZV9yZWFkZXIgJiYgIWNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEs
IGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2Qp
KQorICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJhbWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5
IGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KS4KIAogICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2UgKi8KICAgICAgICAg
aWYgKGZyYW1lX3JlYWRlcikgewpAQCAtOTEzLDE0ICs5MDMsNiBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgIGNsaWVudHB0ci0+Z2lmQ29tcGxldGUo
KTsKICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gSGFuZGxlIG91dCBvZiBtZW1vcnkgZXJy
b3JzCi0gICAgY2FzZSBnaWZfb29tOgotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFu
ZGxlIGdlbmVyYWwgZXJyb3JzCi0gICAgY2FzZSBnaWZfZXJyb3I6Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICAvLyBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KICAgICBkZWZhdWx0Ogog
ICAgICAgYnJlYWs7CkBAIC05NDUsNSArOTI3LDUgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVh
ZChjb25zdCB1bnNpZ25lZAogCiAgIGlmIChjbGllbnRwdHIpCiAgICAgY2xpZW50cHRyLT5kZWNv
ZGluZ0hhbHRlZCgwKTsKLSAgcmV0dXJuIHRydWU7CisgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuaAkocmV2aXNpb24gNTgxMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSw2IEBA
IHR5cGVkZWYgZW51bSB7CiAgICAgZ2lmX2NvbnN1bWVfYmxvY2ssCiAgICAgZ2lmX3NraXBfYmxv
Y2ssCiAgICAgZ2lmX2RvbmUsCi0gICAgZ2lmX29vbSwKLSAgICBnaWZfZXJyb3IsCiAgICAgZ2lm
X2NvbW1lbnRfZXh0ZW5zaW9uLAogICAgIGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb24sCiAgICAg
Z2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jaywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDU4MTE3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw2IEBAIGVudW0g
anN0YXRlIHsKICAgICBKUEVHX0RFQ09NUFJFU1NfUFJPR1JFU1NJVkUsIC8vIE91dHB1dCBwcm9n
cmVzc2l2ZSBwaXhlbHMKICAgICBKUEVHX0RFQ09NUFJFU1NfU0VRVUVOVElBTCwgIC8vIE91dHB1
dCBzZXF1ZW50aWFsIHBpeGVscwogICAgIEpQRUdfRE9ORSwKLSAgICBKUEVHX1NJTktfTk9OX0pQ
RUdfVFJBSUxFUiwgIC8vIFNvbWUgaW1hZ2UgZmlsZXMgaGF2ZSBhIG5vbi1KUEVHIHRyYWlsZXIK
ICAgICBKUEVHX0VSUk9SICAgIAogfTsKIApAQCAtMTY5LDE2ICsxNjgsMTUgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgc2V0am1wIGhlcmUuIE90aGVy
d2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuCiAgICAgICAgIGlmIChzZXRqbXAobV9lcnIuc2V0
am1wX2J1ZmZlcikpIHsKLSAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NJTktfTk9OX0pQRUdf
VFJBSUxFUjsKICAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gbV9kZWNvZGVyLT5zZXRGYWlsZWQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEpQRUdfSEVBREVSOgog
ICAgICAgICAgICAgLy8gUmVhZCBmaWxlIHBhcmFtZXRlcnMgd2l0aCBqcGVnX3JlYWRfaGVhZGVy
KCkuCiAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX2hlYWRlcigmbV9pbmZvLCB0cnVlKSA9PSBK
UEVHX1NVU1BFTkRFRCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSS9PIHN1c3Bl
bnNpb24uCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJL08gc3VzcGVuc2lvbi4K
IAogICAgICAgICAgICAgLy8gTGV0IGxpYmpwZWcgdGFrZSBjYXJlIG9mIGdyYXktPlJHQiBhbmQg
WUNiQ3ItPlJHQiBjb252ZXJzaW9ucy4KICAgICAgICAgICAgIHN3aXRjaCAobV9pbmZvLmpwZWdf
Y29sb3Jfc3BhY2UpIHsKQEAgLTE5NCw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgbV9pbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19DTVlLOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2V0RmFpbGVkKCk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIC8vIERvbid0IGFsbG9jYXRlIGEgZ2lhbnQgYW5kIHN1cGVy
Zmx1b3VzIG1lbW9yeSBidWZmZXIgd2hlbiB0aGUKQEAgLTIxNCw3ICsyMTIsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBo
ZWFkZXIgaXMgYXZhaWxhYmxlLgogICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUo
bV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2V0RmFp
bGVkKCk7CiAKICAgICAgICAgICAgIGlmIChtX2RlY29kaW5nU2l6ZU9ubHkpIHsKICAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4gc3RvcCBoZXJlLiAgUmVkdWNlIG91ciBidWZmZXIgbGVuZ3RoIGFu
ZCBhdmFpbGFibGUKQEAgLTIzNyw3ICsyMzUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8v
IFN0YXJ0IGRlY29tcHJlc3Nvci4KICAgICAgICAgICAgIGlmICghanBlZ19zdGFydF9kZWNvbXBy
ZXNzKCZtX2luZm8pKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVu
c2lvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNwZW5zaW9uLgog
CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJvZ3Jlc3NpdmUgSlBFRyAuLi4KICAgICAg
ICAgICAgIG1fc3RhdGUgPSAobV9pbmZvLmJ1ZmZlcmVkX2ltYWdlKSA/IEpQRUdfREVDT01QUkVT
U19QUk9HUkVTU0lWRSA6IEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMOwpAQCAtMjQ3LDcgKzI0
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChtX3N0YXRlID09IEpQRUdfREVDT01QUkVT
U19TRVFVRU5USUFMKSB7CiAgIAogICAgICAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5vdXRw
dXRTY2FubGluZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEkvTyBz
dXNwZW5zaW9uLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNw
ZW5zaW9uLgogICAKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBjb21wbGV0ZWQgaW1hZ2Ug
b3V0cHV0Li4uCiAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5mby5vdXRwdXRfc2NhbmxpbmUg
PT0gbV9pbmZvLm91dHB1dF9oZWlnaHQpOwpAQCAtMjczLDcgKzI3MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtLXNjYW47CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghanBlZ19zdGFydF9vdXRwdXQoJm1faW5mbywgc2NhbikpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAgICAg
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1
dF9zY2FubGluZSA9PSAweGZmZmZmZikKQEAgLTI4NSwxMiArMjgzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBjYWxsIGpwZWdfc3RhcnRfb3V0cHV0
KCkgbXVsdGlwbGUgdGltZXMgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IHNhbWUgc2Nhbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZm8ub3V0cHV0X3Nj
YW5saW5lID0gMHhmZmZmZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gSS9PIHN1c3BlbnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIEkvTyBzdXNwZW5zaW9uLgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWln
aHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghanBlZ19maW5pc2hfb3V0cHV0KCZt
X2luZm8pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08g
c3VzcGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IEkvTyBzdXNwZW5zaW9uLgogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanBlZ19pbnB1
dF9jb21wbGV0ZSgmbV9pbmZvKSAmJiAobV9pbmZvLmlucHV0X3NjYW5fbnVtYmVyID09IG1faW5m
by5vdXRwdXRfc2Nhbl9udW1iZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzA1LDE1ICszMDMsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgY2FzZSBKUEVHX0RPTkU6
CiAgICAgICAgICAgICAvLyBGaW5pc2ggZGVjb21wcmVzc2lvbi4KLSAgICAgICAgICAgIGlmICgh
anBlZ19maW5pc2hfZGVjb21wcmVzcygmbV9pbmZvKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24uCi0KLSAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NJ
TktfTk9OX0pQRUdfVFJBSUxFUjsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoJm1faW5mbyk7CiAgICAgICAgIAotICAgICAgICBj
YXNlIEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOgotICAgICAgICAgICAgYnJlYWs7Ci0KICAg
ICAgICAgY2FzZSBKUEVHX0VSUk9SOgogICAgICAgICAgICAgLy8gV2UgY2FuIGdldCBoZXJlIGlm
IHRoZSBjb25zdHJ1Y3RvciBmYWlsZWQuCiAgICAgICAgICAgICByZXR1cm4gbV9kZWNvZGVyLT5z
ZXRGYWlsZWQoKTsKQEAgLTQ4Nyw3ICs0NzgsOSBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRl
Y29kZShib29sIG9ubHlTCiAgICAgaWYgKCFtX3JlYWRlcikKICAgICAgICAgbV9yZWFkZXIuc2V0
KG5ldyBKUEVHSW1hZ2VSZWFkZXIodGhpcykpOwogCi0gICAgaWYgKCFtX3JlYWRlci0+ZGVjb2Rl
KG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKSkKKyAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNv
ZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCisg
ICAgLy8gaGFzIGZhaWxlZC4KKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZm
ZXIoKSwgb25seVNpemUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCiAgICAgICAgIHNldEZhaWxl
ZCgpOwogCiAgICAgaWYgKGZhaWxlZCgpIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTgxMTcpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIC8vIERlY29kZXMgdGhlIGltYWdlLiAgSWYgfG9ubHlTaXplfCBpcyB0
cnVlLCBzdG9wcyBkZWNvZGluZyBhZnRlcgotICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgaW1h
Z2Ugc2l6ZS4KKyAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGltYWdlIHNpemUuICBJZiBkZWNv
ZGluZyBmYWlscyBidXQgdGhlcmUgaXMgbm8gbW9yZQorICAgICAgICAvLyBkYXRhIGNvbWluZywg
c2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgogICAgICAgICB2b2lkIGRlY29kZShib29s
IG9ubHlTaXplKTsKIAogICAgICAgICBPd25QdHI8SlBFR0ltYWdlUmVhZGVyPiBtX3JlYWRlcjsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTgxMTcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgY3VycmVudEJ1ZmZlclNp
emUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRCdWZmZXJTaXplOyB9CiAKLSAgICB2b2lkIGRl
Y29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6ZU9ubHkpCisgICAgYm9vbCBk
ZWNvZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAg
ICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CiAgICAgICAgIFBOR0ltYWdlRGVj
b2RlciogZGVjb2RlciA9IHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJv
Z3Jlc3NpdmVfcHRyKG1fcG5nKSk7CkBAIC0xMjcsOCArMTI3LDcgQEAgcHVibGljOgogICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mg
d2lsbCBoYXBwZW4uCiAgICAgICAgIGlmIChzZXRqbXAobV9wbmctPmptcGJ1ZikpIHsKICAgICAg
ICAgICAgIGNsb3NlKCk7Ci0gICAgICAgICAgICBkZWNvZGVyLT5zZXRGYWlsZWQoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVyLT5zZXRGYWlsZWQoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7CkBAIC0xNDAsMTAgKzEz
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIG1lcmVseSB3YW50IHRvIGNoZWNrIGlmIHdl
J3ZlIG1hbmFnZWQgdG8gc2V0IHRoZSBzaXplLCBub3QKICAgICAgICAgICAgIC8vIChyZWN1cnNp
dmVseSkgdHJpZ2dlciBhZGRpdGlvbmFsIGRlY29kaW5nIGlmIHdlIGhhdmVuJ3QuCiAgICAgICAg
ICAgICBpZiAoc2l6ZU9ubHkgPyBkZWNvZGVyLT5JbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpIDogZGVjb2Rlci0+aXNDb21wbGV0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWRlY29k
ZXItPmlzQ29tcGxldGUoKSAmJiBkZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQotICAgICAg
ICAgICAgZGVjb2Rlci0+cG5nQ29tcGxldGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIGJvb2wgZGVjb2RpbmdTaXplT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rp
bmdTaXplT25seTsgfQpAQCAtMzcxLDcgKzM2OSwxMCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wgb25seVNpCiAgICAgaWYgKCFtX3JlYWRlcikKICAgICAgICAgbV9yZWFkZXIu
c2V0KG5ldyBQTkdJbWFnZVJlYWRlcih0aGlzKSk7CiAKLSAgICBtX3JlYWRlci0+ZGVjb2RlKCpt
X2RhdGEsIG9ubHlTaXplKTsKKyAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdl
IGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCisgICAgLy8gaGFzIGZh
aWxlZC4KKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpICYmIGlz
QWxsRGF0YVJlY2VpdmVkKCkpCisgICAgICAgIHNldEZhaWxlZCgpOwogICAgIAogICAgIGlmIChm
YWlsZWQoKSB8fCBpc0NvbXBsZXRlKCkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gNTgxMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBEZWNv
ZGVzIHRoZSBpbWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2RpbmcgYWZ0
ZXIKLSAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGltYWdlIHNpemUuCisgICAgICAgIC8vIGNh
bGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLiAgSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlIGlz
IG5vIG1vcmUKKyAgICAgICAgLy8gZGF0YSBjb21pbmcsIHNldHMgdGhlICJkZWNvZGUgZmFpbHVy
ZSIgZmxhZy4KICAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBvbmx5U2l6ZSk7CiAKICAgICAgICAg
T3duUHRyPFBOR0ltYWdlUmVhZGVyPiBtX3JlYWRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54817</attachid>
            <date>2010-04-30 12:16:22 -0700</date>
            <delta_ts>2010-06-21 17:04:01 -0700</delta_ts>
            <desc>Part 3, v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28527</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTAtMDQtMzAgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE92ZXJyaWRlIHNldEZhaWxlZCgpIGluIGVhY2ggaW1hZ2UgZGVjb2RlciB0byBjbGVhbiB1cCBh
bnkgdGVtcG9yYXJ5CisgICAgICAgIG9iamVjdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTQxMQorICAgICAgICAKKyAgICAgICAgSW4gYSBmZXcg
Y2FzZXMsIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBhdm9pZCBkZWxldGluZyBvYmplY3RzIHVu
dGlsCisgICAgICAgIGFmdGVyIHRoZXkncmUgbm8gbG9uZ2VyIG5lZWRlZC4gIFRoZXNlIGNhc2Vz
IHVzdWFsbHkgbWVhbiBzb21lIGp1bXBpbmcKKyAgICAgICAgdGhyb3VnaCBob29wcywgdG8gdGhl
IGRldHJpbWVudCBvZiBjb2RlIHNpbXBsaWNpdHkuCisKKyAgICAgICAgTm8gbGF5b3V0IHRlc3Rz
IGJlY2F1c2UgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHZpc2libGUgb3V0cHV0IG9mCisgICAg
ICAgIGRlY29kaW5nIGluIGFueSB3YXkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OnNldEZhaWxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6
OkJNUEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJN
UEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFn
ZVJlYWRlcjo6cHJvY2Vzc0JpdG1hc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVh
ZGVyOjpwcm9jZXNzQ29sb3JUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRl
cjo6cHJvY2Vzc1JMRURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnBy
b2Nlc3NOb25STEVEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjopOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0lt
YWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9p
Y28vSUNPSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJl
YWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldEZh
aWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OnNldEZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJ
bWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFn
ZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oOgorCiAyMDEwLTA0LTMwICBQZXRlciBLYXN0aW5nICA8cGthc3Rp
bmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gNTg1ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmYWlsZWQo
KSkKKyAgICAgICAgICAgIGlmIChtX2ZhaWxlZCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBtX2RhdGEgPSBkYXRhOwogICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZl
ZCA9IGFsbERhdGFSZWNlaXZlZDsKQEAgLTI5NSw3ICsyOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgLy8gU2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLiAgRm9yIGNh
bGxlciBjb252ZW5pZW5jZSAoc2luY2Ugc28KICAgICAgICAgLy8gbWFueSBjYWxsZXJzIHdhbnQg
dG8gcmV0dXJuIGZhbHNlIGFmdGVyIGNhbGxpbmcgdGhpcyksIHJldHVybnMgZmFsc2UKLSAgICAg
ICAgLy8gdG8gZW5hYmxlIGVhc3kgdGFpbGNhbGxpbmcuCisgICAgICAgIC8vIHRvIGVuYWJsZSBl
YXN5IHRhaWxjYWxsaW5nLiAgU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyB0byBhbHNvCisg
ICAgICAgIC8vIGNsZWFuIHVwIGFueSBsb2NhbCBkYXRhLgogICAgICAgICB2aXJ0dWFsIGJvb2wg
c2V0RmFpbGVkKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1ODU4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDEyIEBAIFJHQkEzMkJ1ZmZlciogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAg
ICByZXR1cm4gYnVmZmVyOwogfQogCitib29sIEJNUEltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkK
K3sKKyAgICBtX3JlYWRlci5jbGVhcigpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZh
aWxlZCgpOworfQorCiB2b2lkIEJNUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUp
CiB7CiAgICAgaWYgKGZhaWxlZCgpKQpAQCAtODYsNiArOTIsMTAgQEAgdm9pZCBCTVBJbWFnZURl
Y29kZXI6OmRlY29kZShib29sIG9ubHlTaQogICAgIC8vIGhhcyBmYWlsZWQuCiAgICAgaWYgKCFk
ZWNvZGVIZWxwZXIob25seVNpemUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCiAgICAgICAgIHNl
dEZhaWxlZCgpOworICAgIC8vIElmIHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdlLCB3ZSBk
b24ndCBuZWVkIHRoZSBCTVBJbWFnZVJlYWRlcgorICAgIC8vIGFueW1vcmUuICAoSWYgd2UgZmFp
bGVkLCB8bV9yZWFkZXJ8IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZC4pCisgICAgZWxzZSBpZiAo
IW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZS5maXJz
dCgpLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCisgICAgICAgIG1f
cmVhZGVyLmNsZWFyKCk7CiB9CiAKIGJvb2wgQk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGVIZWxwZXIo
Ym9vbCBvbmx5U2l6ZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1ODU4OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogICAgICAgICB2aXJ0dWFs
IFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAgICAg
IC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwg
dG8gYXZvaWQKKyAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5
IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCisgICAgICAgIC8vIEJNUEltYWdlUmVhZGVy
IQorICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0RmFpbGVkKCk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBpbmxpbmUgdWludDMyX3QgcmVhZFVpbnQzMihpbnQgb2Zmc2V0KSBjb25zdApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdl
UmVhZGVyLmNwcAkocmV2aXNpb24gNTg1ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIEFTU0VS
VChtX2J1ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMg
dG8gZGVjb2RlIQogICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpG
cmFtZUVtcHR5KSB7CiAgICAgICAgIGlmICghbV9idWZmZXItPnNldFNpemUobV9wYXJlbnQtPnNp
emUoKS53aWR0aCgpLCBtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBzZXRGYWlsZWQoKTsgIC8vIFVuYWJsZSB0byBhbGxvY2F0ZS4KKyAgICAgICAgICAgIHJl
dHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7IC8vIFVuYWJsZSB0byBhbGxvY2F0ZS4KICAgICAg
ICAgbV9idWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CiAgICAg
ICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBo
YSBmbGFnLCBzbyB3ZSBmb3JjZQogICAgICAgICAvLyBpdCBiYWNrIHRvIGZhbHNlIGhlcmUuICBX
ZSdsbCBzZXQgaXQgdHJ1ZSBiZWxvdyBpbiBhbGwgY2FzZXMgd2hlcmUKQEAgLTk1LDEwICs5NSwx
MSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAKICAgICAvLyBE
ZWNvZGUgdGhlIGRhdGEuCiAgICAgaWYgKChtX2FuZE1hc2tTdGF0ZSAhPSBEZWNvZGluZykgJiYg
IXBhc3RFbmRPZkltYWdlKDApKSB7Ci0gICAgICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ29tcHJl
c3Npb24gPT0gUkxFNCkgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTgpIHx8
IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEUyNCkpIHsKLSAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1JMRURhdGEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIXByb2Nlc3NOb25STEVEYXRhKGZhbHNlLCAwKSkKKyAgICAgICAgaWYg
KChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBSTEU0KSAmJiAobV9pbmZvSGVhZGVyLmJp
Q29tcHJlc3Npb24gIT0gUkxFOCkgJiYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uICE9IFJM
RTI0KSkgeworICAgICAgICAgICAgY29uc3QgUHJvY2Vzc2luZ1Jlc3VsdCByZXN1bHQgPSBwcm9j
ZXNzTm9uUkxFRGF0YShmYWxzZSwgMCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFN1Y2Nl
c3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPT0gRmFpbHVyZSkgPyBtX3BhcmVu
dC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICghcHJvY2Vzc1JMRURh
dGEoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNCw4ICsxMTUs
MTEgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogCiAgICAgICAg
IG1fYW5kTWFza1N0YXRlID0gRGVjb2Rpbmc7CiAgICAgfQotICAgIGlmICgobV9hbmRNYXNrU3Rh
dGUgPT0gRGVjb2RpbmcpICYmICFwcm9jZXNzTm9uUkxFRGF0YShmYWxzZSwgMCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9hbmRNYXNrU3RhdGUgPT0gRGVjb2RpbmcpIHsKKyAg
ICAgICAgY29uc3QgUHJvY2Vzc2luZ1Jlc3VsdCByZXN1bHQgPSBwcm9jZXNzTm9uUkxFRGF0YShm
YWxzZSwgMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcykKKyAgICAgICAgICAgIHJl
dHVybiAocmVzdWx0ID09IEZhaWx1cmUpID8gbV9wYXJlbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7
CisgICAgfQogCiAgICAgLy8gRG9uZSEKICAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1
ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CkBAIC0xMzYsNyArMTQwLDcgQEAgYm9vbCBCTVBJbWFnZVJl
YWRlcjo6cmVhZEluZm9IZWFkZXJTaXplKAogICAgIC8vIHByb2JsZW1hdGljIG9yIGF0IGxlYXN0
IGNvbmZ1c2luZyBpbiBvdGhlciBwbGFjZXMpLCBvciB0byBvdmVycnVuIHRoZQogICAgIC8vIGlt
YWdlIGRhdGEuCiAgICAgaWYgKCgobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXpl
KSA8IG1faGVhZGVyT2Zmc2V0KSB8fCAobV9pbWdEYXRhT2Zmc2V0ICYmIChtX2ltZ0RhdGFPZmZz
ZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSkpKQotICAgICAgICBy
ZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7
CiAKICAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGhlYWRlciBzaXplIHdlIHVuZGVyc3RhbmQ6CiAg
ICAgLy8gT1MvMiAxLng6IDEyCkBAIC0xNDksNyArMTUzLDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRl
cjo6cmVhZEluZm9IZWFkZXJTaXplKAogICAgIGVsc2UgaWYgKChtX2luZm9IZWFkZXIuYmlTaXpl
ID49IDE2KSAmJiAobV9pbmZvSGVhZGVyLmJpU2l6ZSA8PSA2NCkgJiYgKCEobV9pbmZvSGVhZGVy
LmJpU2l6ZSAmIDMpIHx8IChtX2luZm9IZWFkZXIuYmlTaXplID09IDQyKSB8fCAobV9pbmZvSGVh
ZGVyLmJpU2l6ZSA9PSA0NikpKQogICAgICAgICBtX2lzT1MyMnggPSB0cnVlOwogICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNl
dEZhaWxlZCgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjQsMTEgKzE2OCwxMSBAQCBi
b29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzSW5mb0hlYWRlcigpCiAKICAgICAvLyBTYW5pdHkt
Y2hlY2sgaGVhZGVyIHZhbHVlcy4KICAgICBpZiAoIWlzSW5mb0hlYWRlclZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWls
ZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KICAgICBpZiAoIW1fcGFyZW50LT5zZXRTaXpl
KG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKQotICAgICAgICBy
ZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7
CiAKICAgICAvLyBGb3IgcGFsZXR0ZWQgaW1hZ2VzLCBiaXRtYXBzIGNhbiBzZXQgYmlDbHJVc2Vk
IHRvIDAgdG8gbWVhbiAiYWxsCiAgICAgLy8gY29sb3JzIiwgc28gc2V0IGl0IHRvIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBjb2xvcnMgZm9yIHRoaXMgYml0IGRlcHRoLgpAQCAtMjI4LDcgKzIzMiw3
IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnJlYWRJbmZvSGVhZGVyKCkKICAgICAgICAgICAgIG1f
aW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID0gUkxFMjQ7CiAgICAgICAgICAgICBtX2lzT1MyMngg
PSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKGJpQ29tcHJlc3Npb24gPiA1KQotICAgICAgICAg
ICAgcmV0dXJuIHNldEZhaWxlZCgpOyAgLy8gU29tZSB0eXBlIHdlIGRvbid0IHVuZGVyc3RhbmQu
CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOyAvLyBTb21lIHR5cGUg
d2UgZG9uJ3QgdW5kZXJzdGFuZC4KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9pbmZvSGVh
ZGVyLmJpQ29tcHJlc3Npb24gPSBzdGF0aWNfY2FzdDxDb21wcmVzc2lvblR5cGU+KGJpQ29tcHJl
c3Npb24pOwogICAgIH0KQEAgLTM5NSw3ICszOTksNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpw
cm9jZXNzQml0bWFza3MoKQogICAgICAgICAvLyBGYWlsIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdo
IGZpbGUgc3BhY2UgZm9yIHRoZSBiaXRtYXNrcy4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBTSVpFT0ZfQklUTUFTS1MgPSAxMjsKICAgICAgICAgaWYgKCgobV9oZWFkZXJPZmZzZXQgKyBt
X2luZm9IZWFkZXIuYmlTaXplICsgU0laRU9GX0JJVE1BU0tTKSA8IChtX2hlYWRlck9mZnNldCAr
IG1faW5mb0hlYWRlci5iaVNpemUpKSB8fCAobV9pbWdEYXRhT2Zmc2V0ICYmIChtX2ltZ0RhdGFP
ZmZzZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgU0laRU9GX0JJ
VE1BU0tTKSkpKQotICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgICAgICAvLyBSZWFkIGJpdG1hc2tz
LgogICAgICAgICBpZiAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IFNJWkVP
Rl9CSVRNQVNLUykKQEAgLTQzNSw3ICs0MzksNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9j
ZXNzQml0bWFza3MoKQogICAgICAgICAvLyBNYWtlIHN1cmUgYml0bWFzayBkb2VzIG5vdCBvdmVy
bGFwIGFueSBvdGhlciBiaXRtYXNrcy4KICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyAr
K2opIHsKICAgICAgICAgICAgIGlmICh0ZW1wTWFzayAmIG1fYml0TWFza3Nbal0pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3Bh
cmVudC0+c2V0RmFpbGVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb3VudCBvZmZzZXQg
aW50byBwaXhlbCBkYXRhLgpAQCAtNDQ4LDcgKzQ1Miw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6
OnByb2Nlc3NCaXRtYXNrcygpCiAKICAgICAgICAgLy8gTWFrZSBzdXJlIGJpdG1hc2sgaXMgY29u
dGlndW91cy4KICAgICAgICAgaWYgKHRlbXBNYXNrKQotICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAg
ICAgICAvLyBTaW5jZSBSR0JBQnVmZmVyIHRvcHMgb3V0IGF0IDggYml0cyBwZXIgY2hhbm5lbCwg
YWRqdXN0IHRoZSBzaGlmdAogICAgICAgICAvLyBhbW91bnRzIHRvIHVzZSB0aGUgbW9zdCBzaWdu
aWZpY2FudCA4IGJpdHMgb2YgdGhlIGNoYW5uZWwuCkBAIC00NjcsNyArNDcxLDcgQEAgYm9vbCBC
TVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0NvbG9yVGFibGUoKQogCiAgICAgLy8gRmFpbCBpZiB3ZSBk
b24ndCBoYXZlIGVub3VnaCBmaWxlIHNwYWNlIGZvciB0aGUgY29sb3IgdGFibGUuCiAgICAgaWYg
KCgobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5
dGVzKSA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKSB8fCAobV9pbWdE
YXRhT2Zmc2V0ICYmIChtX2ltZ0RhdGFPZmZzZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9I
ZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5dGVzKSkpKQotICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7CisgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CiAKICAgICAv
LyBSZWFkIGNvbG9yIHRhYmxlLgogICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5z
aXplKCkpIHx8ICgobV9kYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgbV90YWJsZVNp
emVJbkJ5dGVzKSkKQEAgLTUyOSwxMCArNTMzLDEwIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnBy
b2Nlc3NSTEVEYXRhKCkKICAgICAgICAgY29uc3QgdWludDhfdCBjb3VudCA9IG1fZGF0YS0+ZGF0
YSgpW21fZGVjb2RlZE9mZnNldF07CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgY29kZSA9IG1fZGF0
YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDFdOwogICAgICAgICBpZiAoKGNvdW50IHx8IChj
b2RlICE9IDEpKSAmJiBwYXN0RW5kT2ZJbWFnZSgwKSkKLSAgICAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CiAKICAg
ICAgICAgLy8gRGVjb2RlLgotICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICBpZiAo
IWNvdW50KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgICAgIGNhc2Ug
MDogIC8vIE1hZ2ljIHRva2VuOiBFT0wKICAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSByZW1h
aW5pbmcgcGl4ZWxzIGluIHRoaXMgcm93LgpAQCAtNTYyLDcgKzU2Niw3IEBAIGJvb2wgQk1QSW1h
Z2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRhKCkKICAgICAgICAgICAgICAgICBpZiAoZHggfHwgZHkp
CiAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAg
ICAgICAgICAgICBpZiAoKChtX2Nvb3JkLngoKSArIGR4KSA+IG1fcGFyZW50LT5zaXplKCkud2lk
dGgoKSkgfHwgcGFzdEVuZE9mSW1hZ2UoZHkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFp
bGVkKCk7CiAKICAgICAgICAgICAgICAgICAvLyBTa2lwIGludGVydmVuaW5nIHBpeGVscy4KICAg
ICAgICAgICAgICAgICBtX2Nvb3JkLm1vdmUoZHgsIG1faXNUb3BEb3duID8gZHkgOiAtZHkpOwpA
QCAtNTcxLDE5ICs1NzUsMjMgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEo
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBk
ZWZhdWx0OiAgLy8gQWJzb2x1dGUgbW9kZQorICAgICAgICAgICAgZGVmYXVsdDogeyAvLyBBYnNv
bHV0ZSBtb2RlCiAgICAgICAgICAgICAgICAgLy8gfGNvZGV8IHBpeGVscyBzcGVjaWZpZWQgYXMg
aW4gQklfUkdCLCB6ZXJvLXBhZGRlZCBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAgLy8gdG8g
YSBtdWx0aXBsZSBvZiAxNiBiaXRzLgogICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgcHJvY2Vz
c05vblJMRURhdGEoKSBleHBlY3RzIG1fZGVjb2RlZE9mZnNldCB0bwogICAgICAgICAgICAgICAg
IC8vIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBpeGVsIGRhdGEsIGJ1bXAgaXQgcGFz
dAogICAgICAgICAgICAgICAgIC8vIHRoZSBlc2NhcGUgYnl0ZXMgYW5kIHRoZW4gcmVzZXQgaWYg
ZGVjb2RpbmcgZmFpbGVkLgogICAgICAgICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArPSAyOwot
ICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc05vblJMRURhdGEodHJ1ZSwgY29kZSkpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBQcm9jZXNzaW5nUmVzdWx0IHJlc3VsdCA9IHByb2Nlc3NOb25S
TEVEYXRhKHRydWUsIGNvZGUpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRmFpbHVy
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEluc3VmZmljaWVudERhdGEpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0IC09IDI7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7ICAvLyBFbmNvZGVk
IG1vZGUKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29sb3IgZGF0YSBpcyByZXBlYXRl
ZCBmb3IgfGNvdW50fCB0b3RhbCBwaXhlbHMuCiAgICAgICAgICAgICAvLyBTdHJhbmdlbHksIHNv
bWUgQk1QcyBzZWVtIHRvIHNwZWNpZnkgZXhjZXNzaXZlbHkgbGFyZ2UgY291bnRzCkBAIC02MDgs
NyArNjE2LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEoKQogICAgICAg
ICAgICAgICAgICAgICBjb2xvckluZGV4ZXNbMV0gJj0gMHhmOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZiAoKGNvbG9ySW5kZXhlc1swXSA+PSBtX2luZm9IZWFkZXIuYmlD
bHJVc2VkKSB8fCAoY29sb3JJbmRleGVzWzFdID49IG1faW5mb0hlYWRlci5iaUNsclVzZWQpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgZm9yIChp
bnQgd2hpY2ggPSAwOyBtX2Nvb3JkLngoKSA8IGVuZFg7ICkgewogICAgICAgICAgICAgICAgICAg
ICBzZXRJKGNvbG9ySW5kZXhlc1t3aGljaF0pOwogICAgICAgICAgICAgICAgICAgICB3aGljaCA9
ICF3aGljaDsKQEAgLTYyMCwxMCArNjI4LDEwIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nl
c3NSTEVEYXRhKCkKICAgICB9CiB9CiAKLWJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25S
TEVEYXRhKGJvb2wgaW5STEUsIGludCBudW1QaXhlbHMpCitCTVBJbWFnZVJlYWRlcjo6UHJvY2Vz
c2luZ1Jlc3VsdCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYm9vbCBpblJMRSwg
aW50IG51bVBpeGVscykKIHsKICAgICBpZiAobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXpl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEluc3VmZmljaWVudERh
dGE7CiAKICAgICBpZiAoIWluUkxFKQogICAgICAgICBudW1QaXhlbHMgPSBtX3BhcmVudC0+c2l6
ZSgpLndpZHRoKCk7CkBAIC02MzEsNyArNjM5LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJv
Y2Vzc05vblJMRURhdGEoYgogICAgIC8vIEZhaWwgaWYgd2UncmUgYmVpbmcgYXNrZWQgdG8gZGVj
b2RlIG1vcmUgcGl4ZWxzIHRoYW4gcmVtYWluIGluIHRoZSByb3cuCiAgICAgY29uc3QgaW50IGVu
ZFggPSBtX2Nvb3JkLngoKSArIG51bVBpeGVsczsKICAgICBpZiAoZW5kWCA+IG1fcGFyZW50LT5z
aXplKCkud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICByZXR1
cm4gRmFpbHVyZTsKIAogICAgIC8vIERldGVybWluZSBob3cgbWFueSBieXRlcyBvZiBkYXRhIHRo
ZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBpeGVscwogICAgIC8vIHJlcXVpcmVzLgpAQCAtNjQ4LDcg
KzY1Niw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVEYXRhKGIKICAgICB3
aGlsZSAoIXBhc3RFbmRPZkltYWdlKDApKSB7CiAgICAgICAgIC8vIEJhaWwgaWYgd2UgZG9uJ3Qg
aGF2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBpeGVscy4KICAgICAg
ICAgaWYgKChtX2RhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCBwYWRkZWROdW1CeXRl
cykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBJbnN1ZmZp
Y2llbnREYXRhOwogCiAgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA8IDE2KSB7
CiAgICAgICAgICAgICAvLyBQYWxldHRlZCBkYXRhLiAgUGl4ZWxzIGFyZSBzdG9yZWQgbGl0dGxl
LWVuZGlhbiB3aXRoaW4gYnl0ZXMuCkBAIC02NzIsNyArNjgwLDcgQEAgYm9vbCBCTVBJbWFnZVJl
YWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y29vcmQubW92ZSgxLCAwKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2xvckluZGV4ID49IG1faW5mb0hlYWRlci5iaUNsclVzZWQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWlsdXJlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0SShjb2xvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBwaXhlbERhdGEgPDw9IG1faW5mb0hlYWRlci5iaUJpdENvdW50OwpAQCAtNzEz
LDEyICs3MjEsMTIgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYgog
ICAgICAgICAvLyBTdWNjZXNzLCBrZWVwIGdvaW5nLgogICAgICAgICBtX2RlY29kZWRPZmZzZXQg
Kz0gcGFkZGVkTnVtQnl0ZXM7CiAgICAgICAgIGlmIChpblJMRSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFN1Y2Nlc3M7CiAgICAgICAgIG1vdmVCdWZmZXJU
b05leHRSb3coKTsKICAgICB9CiAKICAgICAvLyBGaW5pc2hlZCBkZWNvZGluZyB3aG9sZSBpbWFn
ZS4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gU3VjY2VzczsKIH0KIAogdm9pZCBCTVBJ
bWFnZVJlYWRlcjo6bW92ZUJ1ZmZlclRvTmV4dFJvdygpCkBAIC03MjYsMTEgKzczNCw0IEBAIHZv
aWQgQk1QSW1hZ2VSZWFkZXI6Om1vdmVCdWZmZXJUb05leHRSb3cKICAgICBtX2Nvb3JkLm1vdmUo
LW1fY29vcmQueCgpLCBtX2lzVG9wRG93biA/IDEgOiAtMSk7CiB9CiAKLWJvb2wgQk1QSW1hZ2VS
ZWFkZXI6OnNldEZhaWxlZCgpCi17Ci0gICAgbV9wYXJlbnQtPnNldEZhaWxlZCgpOwotICAgIG1f
Y29sb3JUYWJsZS5jbGVhcigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA1ODU4OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDYgKzk3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIE5vdFll
dERlY29kZWQsCiAgICAgICAgICAgICBEZWNvZGluZywKICAgICAgICAgfTsKKyAgICAgICAgZW51
bSBQcm9jZXNzaW5nUmVzdWx0IHsKKyAgICAgICAgICAgIFN1Y2Nlc3MsCisgICAgICAgICAgICBG
YWlsdXJlLAorICAgICAgICAgICAgSW5zdWZmaWNpZW50RGF0YSwKKyAgICAgICAgfTsKIAogICAg
ICAgICAvLyBUaGVzZSBhcmUgYmFzZWQgb24gdGhlIFdpbmRvd3MgQklUTUFQSU5GT0hFQURFUiBh
bmQgUkdCVFJJUExFCiAgICAgICAgIC8vIHN0cnVjdHMsIGJ1dCB3aXRoIHVubmVjZXNzYXJ5IGVu
dHJpZXMgcmVtb3ZlZC4KQEAgLTE2MSwxNCArMTY2LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICAvLyBQcm9jZXNzZXMgYSBzZXQgb2Ygbm9uLVJMRS1jb21wcmVzc2VkIHBpeGVs
cy4gIFR3byBjYXNlczoKICAgICAgICAgLy8gICAqIGluUkxFID0gdHJ1ZTogdGhlIGRhdGEgaXMg
aW5zaWRlIGFuIFJMRS1lbmNvZGVkIGJpdG1hcC4gIFRyaWVzIHRvCi0gICAgICAgIC8vICAgICBw
cm9jZXNzIHxudW1QaXhlbHN8IHBpeGVscyBvbiB0aGUgY3VycmVudCByb3c7IHJldHVybnMgdHJ1
ZSBvbgotICAgICAgICAvLyAgICAgc3VjY2Vzcy4KKyAgICAgICAgLy8gICAgIHByb2Nlc3MgfG51
bVBpeGVsc3wgcGl4ZWxzIG9uIHRoZSBjdXJyZW50IHJvdy4KICAgICAgICAgLy8gICAqIGluUkxF
ID0gZmFsc2U6IHRoZSBkYXRhIGlzIGluc2lkZSBhIG5vbi1STEUtZW5jb2RlZCBiaXRtYXAuCiAg
ICAgICAgIC8vICAgICB8bnVtUGl4ZWxzfCBpcyBpZ25vcmVkLiAgRXhwZWN0cyB8bV9jb29yZHwg
dG8gcG9pbnQgYXQgdGhlCiAgICAgICAgIC8vICAgICBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcm93
IHRvIGJlIGRlY29kZWQuICBUcmllcyB0byBwcm9jZXNzIGFzCi0gICAgICAgIC8vICAgICBtYW55
IGNvbXBsZXRlIHJvd3MgYXMgcG9zc2libGUuICBSZXR1cm5zIHRydWUgaWYgdGhlIHdob2xlIGlt
YWdlCi0gICAgICAgIC8vICAgICB3YXMgZGVjb2RlZC4KLSAgICAgICAgYm9vbCBwcm9jZXNzTm9u
UkxFRGF0YShib29sIGluUkxFLCBpbnQgbnVtUGl4ZWxzKTsKKyAgICAgICAgLy8gICAgIG1hbnkg
Y29tcGxldGUgcm93cyBhcyBwb3NzaWJsZS4gIFJldHVybnMgSW5zdWZmaWNpZW50RGF0YSBpZgor
ICAgICAgICAvLyAgICAgdGhlcmUgd2Fzbid0IGVub3VnaCBkYXRhIHRvIGRlY29kZSB0aGUgd2hv
bGUgaW1hZ2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBh
IFByb2Nlc3NpbmdSZXN1bHQgaW5zdGVhZCBvZiBhIGJvb2wgc28gdGhhdCBpdAorICAgICAgICAv
LyBjYW4gYXZvaWQgY2FsbGluZyBtX3BhcmVudC0+c2V0RmFpbGVkKCksIHdoaWNoIGNvdWxkIGxl
YWQgdG8gbWVtb3J5CisgICAgICAgIC8vIGNvcnJ1cHRpb24gc2luY2UgdGhhdCB3aWxsIGRlbGV0
ZSB8dGhpc3wgYnV0IHNvbWUgY2FsbGVycyBzdGlsbCB3YW50CisgICAgICAgIC8vIHRvIGFjY2Vz
cyBtZW1iZXIgdmFyaWFibGVzIGFmdGVyIHRoaXMgcmV0dXJucy4KKyAgICAgICAgUHJvY2Vzc2lu
Z1Jlc3VsdCBwcm9jZXNzTm9uUkxFRGF0YShib29sIGluUkxFLCBpbnQgbnVtUGl4ZWxzKTsKIAog
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgeS1jb29yZGluYXRlIHBsdXMg
fG51bVJvd3N8IHdvdWxkIGJlIHBhc3QKICAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgaW1hZ2Uu
ICBIZXJlICJwbHVzIiBtZWFucyAidG93YXJkIHRoZSBlbmQgb2YgdGhlCkBAIC0yNjEsMTEgKzI3
MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSB2
YWx1ZSBvZiB8bV9pc1RvcERvd258LgogICAgICAgICB2b2lkIG1vdmVCdWZmZXJUb05leHRSb3co
KTsKIAotICAgICAgICAvLyBTZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcgYW5kIGNsZWFy
cyBhbnkgbG9jYWwgc3RvcmFnZS4gIEZvcgotICAgICAgICAvLyBjYWxsZXIgY29udmVuaWVuY2Ug
KHNpbmNlIHNvIG1hbnkgY2FsbGVycyB3YW50IHRvIHJldHVybiBmYWxzZSBhZnRlcgotICAgICAg
ICAvLyBjYWxsaW5nIHRoaXMpLCByZXR1cm5zIGZhbHNlIHRvIGVuYWJsZSBlYXN5IHRhaWxjYWxs
aW5nLgotICAgICAgICBib29sIHNldEZhaWxlZCgpOwotCiAgICAgICAgIC8vIFRoZSBkZWNvZGVy
IHRoYXQgb3ducyB1cy4KICAgICAgICAgSW1hZ2VEZWNvZGVyKiBtX3BhcmVudDsKIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA1ODU4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2
ICsxMTksMTIgQEAgUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAg
IHJldHVybiAmZnJhbWU7CiB9CiAKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQor
eworICAgIG1fcmVhZGVyLmNsZWFyKCk7CisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6c2V0RmFp
bGVkKCk7Cit9CisKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiB7CiAgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBp
ZiB0aGUgZGVjb2RlciB3YXMgZGVzdHJveWVkIHdoaWxlIGFuaW1hdGluZywgd2UKQEAgLTMwMCw5
ICszMDYsNiBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhCiAgICAg
Ly8gaGFzIGZhaWxlZC4KICAgICBpZiAoIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBj
aGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3Jl
YWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAg
ICAgICAgc2V0RmFpbGVkKCk7Ci0KLSAgICBpZiAoZmFpbGVkKCkpCi0gICAgICAgIG1fcmVhZGVy
LmNsZWFyKCk7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5z
aWduZWQgZnJhbWVJbmRleCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1ODU4OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgc2l6ZV90IGZyYW1lQ291bnQoKTsKICAgICAgICAgdmlydHVhbCBpbnQgcmVwZXRp
dGlvbkNvdW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVk
KCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAorICAgICAgICAvLyBh
Y2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJv
bSBpbnNpZGUKKyAgICAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCisgICAgICAgIHZpcnR1YWwgYm9v
bCBzZXRGYWlsZWQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNo
ZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20g
dGhlIEdJRiByZWFkZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2lj
by9JQ09JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU4NTg4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMyBAQCBSR0JBMzJCdWZmZXIqIElDT0ltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAorYm9vbCBJQ09JbWFn
ZURlY29kZXI6OnNldEZhaWxlZCgpCit7CisgICAgbV9ibXBSZWFkZXJzLmNsZWFyKCk7CisgICAg
bV9wbmdEZWNvZGVycy5jbGVhcigpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZhaWxl
ZCgpOworfQorCiAvLyBzdGF0aWMKIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpjb21wYXJlRW50cmll
cyhjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGEsIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYg
YikKIHsKQEAgLTE0Nyw2ICsxNTQsMTMgQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OmRlY29kZShz
aXplX3QgaW5kZQogICAgIC8vIGhhcyBmYWlsZWQuCiAgICAgaWYgKCghZGVjb2RlRGlyZWN0b3J5
KCkgfHwgKCFvbmx5U2l6ZSAmJiAhZGVjb2RlQXRJbmRleChpbmRleCkpKSAmJiBpc0FsbERhdGFS
ZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAvLyBJZiB3ZSdyZSBkb25lIGRl
Y29kaW5nIHRoaXMgZnJhbWUsIHdlIGRvbid0IG5lZWQgdGhlIEJNUEltYWdlUmVhZGVyIG9yCisg
ICAgLy8gUE5HSW1hZ2VEZWNvZGVyIGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB0aGVzZSBoYXZl
IGFscmVhZHkgYmVlbgorICAgIC8vIGNsZWFyZWQuKQorICAgIGVsc2UgaWYgKChtX2ZyYW1lQnVm
ZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyAgICAgICAgbV9ibXBS
ZWFkZXJzW2luZGV4XS5jbGVhcigpOworICAgICAgICBtX3BuZ0RlY29kZXJzW2luZGV4XS5jbGVh
cigpOworICAgIH0KIH0KIAogYm9vbCBJQ09JbWFnZURlY29kZXI6OmRlY29kZURpcmVjdG9yeSgp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTg1ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NiArNTIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0
U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdmlydHVhbCBz
aXplX3QgZnJhbWVDb3VudCgpOwogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCk7CisgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRl
bGV0ZXMgYWxsIHJlYWRlcnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0bworICAgICAgICAv
LyBhdm9pZCBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5n
IHRoaXMgZnJvbQorICAgICAgICAvLyBpbnNpZGUgQk1QSW1hZ2VSZWFkZXIhCisgICAgICAgIHZp
cnR1YWwgYm9vbCBzZXRGYWlsZWQoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gSW1h
Z2VUeXBlIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU4NTg5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjcsMTAgKzE2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9idWZm
ZXJMZW5ndGggPSBkYXRhLnNpemUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gdGhlIHNldGptcCBoZXJlLiBPdGhlcndpc2UgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbgotICAg
ICAgICBpZiAoc2V0am1wKG1fZXJyLnNldGptcF9idWZmZXIpKSB7Ci0gICAgICAgICAgICBjbG9z
ZSgpOworICAgICAgICBpZiAoc2V0am1wKG1fZXJyLnNldGptcF9idWZmZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fZGVjb2Rlci0+c2V0RmFpbGVkKCk7Ci0gICAgICAgIH0KIAogICAgICAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKICAgICAgICAgY2FzZSBKUEVHX0hFQURFUjoKQEAgLTMwNCw3ICsz
MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSlBFR19ET05FOgogICAgICAgICAgICAgLy8g
RmluaXNoIGRlY29tcHJlc3Npb24uCiAgICAgICAgICAgICByZXR1cm4ganBlZ19maW5pc2hfZGVj
b21wcmVzcygmbV9pbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgY2FzZSBKUEVHX0VSUk9SOgog
ICAgICAgICAgICAgLy8gV2UgY2FuIGdldCBoZXJlIGlmIHRoZSBjb25zdHJ1Y3RvciBmYWlsZWQu
CiAgICAgICAgICAgICByZXR1cm4gbV9kZWNvZGVyLT5zZXRGYWlsZWQoKTsKQEAgLTQwMiw2ICs0
MDAsMTIgQEAgUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZgogICAgIHJl
dHVybiAmZnJhbWU7CiB9CiAKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKK3sK
KyAgICBtX3JlYWRlci5jbGVhcigpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZhaWxl
ZCgpOworfQorCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiB7CiAg
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC00ODIsOCArNDg2LDkgQEAg
dm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgIC8vIGhhcyBmYWls
ZWQuCiAgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXpl
KSAmJiBpc0FsbERhdGFSZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKLQotICAgIGlm
IChmYWlsZWQoKSB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCisg
ICAgLy8gSWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdlIGRvbid0IG5lZWQgdGhl
IEpQRUdJbWFnZVJlYWRlcgorICAgIC8vIGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB8bV9yZWFk
ZXJ8IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZC4pCisgICAgZWxzZSBpZiAoIW1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQogICAgICAgICBtX3JlYWRlci5jbGVhcigpOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDU4NTg5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNiArNDYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAg
dmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4g
IEJlIGNhcmVmdWwgdG8gYXZvaWQKKyAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5
LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCisgICAgICAgIC8vIEpQ
RUdJbWFnZVJlYWRlciEKKyAgICAgICAgdmlydHVhbCBib29sIHNldEZhaWxlZCgpOwogCiAgICAg
ICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU4NTg5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI1LDEwICsxMjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVj
b2RlciA9IHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVf
cHRyKG1fcG5nKSk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgc2V0am1wIGhlcmUu
IE90aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuLgotICAgICAgICBpZiAoc2V0am1wKG1f
cG5nLT5qbXBidWYpKSB7Ci0gICAgICAgICAgICBjbG9zZSgpOworICAgICAgICBpZiAoc2V0am1w
KG1fcG5nLT5qbXBidWYpKQogICAgICAgICAgICAgcmV0dXJuIGRlY29kZXItPnNldEZhaWxlZCgp
OwotICAgICAgICB9CiAKICAgICAgICAgY29uc3QgY2hhciogc2VnbWVudDsKICAgICAgICAgd2hp
bGUgKHVuc2lnbmVkIHNlZ21lbnRMZW5ndGggPSBkYXRhLmdldFNvbWVEYXRhKHNlZ21lbnQsIG1f
cmVhZE9mZnNldCkpIHsKQEAgLTE2Niw2ICsxNjQsNyBAQCBwcml2YXRlOgogfTsKIAogUE5HSW1h
Z2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoKQorICAgIDogbV9kb05vdGhpbmdPbkZhaWx1cmUo
ZmFsc2UpCiB7CiB9CiAKQEAgLTIwNCw2ICsyMDMsMTQgQEAgUkdCQTMyQnVmZmVyKiBQTkdJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZgogICAgIHJldHVybiAmZnJhbWU7CiB9CiAKK2Jvb2wgUE5HSW1h
Z2VEZWNvZGVyOjpzZXRGYWlsZWQoKQoreworICAgIGlmIChtX2RvTm90aGluZ09uRmFpbHVyZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fcmVhZGVyLmNsZWFyKCk7CisgICAgcmV0dXJu
IEltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCk7Cit9CisKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpo
ZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQ
dHIoKTsKQEAgLTIxNyw4ICsyMjQsMTUgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2
YWlsYWJsZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgLy8gV2UgY2FuIGZp
bGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCi0gICAgaWYg
KCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhlIHNp
emUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuICBBdm9pZCBtZW1vcnkKKyAgICAv
LyBjb3JydXB0aW9uIGlzc3VlcyBieSBuZXV0ZXJpbmcgc2V0RmFpbGVkKCkgZHVyaW5nIHRoaXMg
Y2FsbDsgaWYgd2UgZG9uJ3QKKyAgICAvLyBkbyB0aGlzLCBmYWlsdXJlcyB3aWxsIGNhdXNlIHxt
X3JlYWRlcnwgdG8gYmUgZGVsZXRlZCwgYW5kIG91ciBqbXBidWYKKyAgICAvLyB3aWxsIGNlYXNl
IHRvIGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxsIHByb3Blcmx5IHNldCB0aGUgZmFpbHVy
ZSBmbGFnCisgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNvb24gYXMgd2UgbG9uZ2ptcCgpLgorICAg
IG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKKyAgICBib29sIHJlc3VsdCA9IHNldFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICBp
ZiAoIXJlc3VsdCkgewogICAgICAgICBsb25nam1wKHBuZy0+am1wYnVmLCAxKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM3Myw4ICszODcsOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wgb25seVNpCiAgICAgLy8gaGFzIGZhaWxlZC4KICAgICBpZiAoIW1fcmVhZGVy
LT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCiAgICAg
ICAgIHNldEZhaWxlZCgpOwotICAgIAotICAgIGlmIChmYWlsZWQoKSB8fCBpc0NvbXBsZXRlKCkp
CisgICAgLy8gSWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdlIGRvbid0IG5lZWQg
dGhlIFBOR0ltYWdlUmVhZGVyCisgICAgLy8gYW55bW9yZS4gIChJZiB3ZSBmYWlsZWQsIHxtX3Jl
YWRlcnwgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLikKKyAgICBlbHNlIGlmIChpc0NvbXBsZXRl
KCkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiA1ODU4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKICAgICAg
ICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7
CiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KTsKKyAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFk
ZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAorICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBt
ZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKKyAgICAgICAg
Ly8gUE5HSW1hZ2VSZWFkZXIhCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRGYWlsZWQoKTsKIAog
ICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSBsaWJwbmcKICAgICAgICAgdm9pZCBoZWFkZXJBdmFp
bGFibGUoKTsKQEAgLTYyLDYgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGRlY29kZShib29sIG9ubHlTaXplKTsKIAogICAgICAgICBPd25QdHI8UE5HSW1hZ2VSZWFk
ZXI+IG1fcmVhZGVyOworICAgICAgICBib29sIG1fZG9Ob3RoaW5nT25GYWlsdXJlOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="38873"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>