<?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>28751</bug_id>
          
          <creation_ts>2009-08-26 14:40:47 -0700</creation_ts>
          <short_desc>Misc. small image system cleanups</short_desc>
          <delta_ts>2010-02-18 11:57:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>26467</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142971</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-26 14:40:47 -0700</bug_when>
    <thetext>There are a couple patches I want to write to clean up things about the image system:
* Switch ICO decoder to use Vector&lt;OwnPtr&lt;&gt; &gt; now that that works
* Use WebCore types in the decoders where possible (e.g. IntSize instead of two ints)
* Change ImageDecoder::setFailed() to return a bool so the callers can simplified
* Move RGBA32Buffer to graphics/ImageBuffer.*

None of these is drastic so I&apos;ll just file this umbrella bug to hold them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142980</commentid>
    <comment_count>1</comment_count>
      <attachid>38641</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-26 15:34:15 -0700</bug_when>
    <thetext>Created attachment 38641
Use Vector&lt;OwnPtr&lt;&gt; &gt; in ICO decoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142999</commentid>
    <comment_count>2</comment_count>
      <attachid>38641</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-26 16:35:34 -0700</bug_when>
    <thetext>Comment on attachment 38641
Use Vector&lt;OwnPtr&lt;&gt; &gt; in ICO decoder

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143001</commentid>
    <comment_count>3</comment_count>
      <attachid>38641</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-26 16:40:42 -0700</bug_when>
    <thetext>Comment on attachment 38641
Use Vector&lt;OwnPtr&lt;&gt; &gt; in ICO decoder

Landed in r47800, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143195</commentid>
    <comment_count>4</comment_count>
      <attachid>38684</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 14:12:30 -0700</bug_when>
    <thetext>Created attachment 38684
Shorten #ifdef section of ImageSource.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143203</commentid>
    <comment_count>5</comment_count>
      <attachid>38688</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 14:36:07 -0700</bug_when>
    <thetext>Created attachment 38688
Clean up ImageSource.cpp a little</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143207</commentid>
    <comment_count>6</comment_count>
      <attachid>38689</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 14:52:54 -0700</bug_when>
    <thetext>Created attachment 38689
Clean up ImageDecoder.cpp a little</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143214</commentid>
    <comment_count>7</comment_count>
      <attachid>38693</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 15:30:37 -0700</bug_when>
    <thetext>Created attachment 38693
Clean up ImageDecoder*.cpp in preparation for fixing bug 28785

Added in the other ImageDecoder*.cpp files since I&apos;m looking at them to figure out how to merge them together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143216</commentid>
    <comment_count>8</comment_count>
      <attachid>38694</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 15:38:57 -0700</bug_when>
    <thetext>Created attachment 38694
Clean up ImageSource.* in preparation for more fixes on bug 27965

Collapsed the two ImageSource.* cleanup patches together for ease of landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143221</commentid>
    <comment_count>9</comment_count>
      <attachid>38693</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 16:04:00 -0700</bug_when>
    <thetext>Comment on attachment 38693
Clean up ImageDecoder*.cpp in preparation for fixing bug 28785

Why no &quot;static&quot; on:
 41 inline void fillScaledValues(Vector&lt;int&gt;&amp; scaledValues, double scaleRate, int length)
I guess inline also prevents it from ever becoming a symbol?

And here?
 55 template &lt;MatchType type&gt; int getScaledValue(const Vector&lt;int&gt;&amp; scaledValues, int valueToMatch, int searchStart)
Does static not work on templates?

Otherwise this looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143222</commentid>
    <comment_count>10</comment_count>
      <attachid>38694</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 16:05:30 -0700</bug_when>
    <thetext>Comment on attachment 38694
Clean up ImageSource.* in preparation for more fixes on bug 27965

+    return m_decoder ? m_decoder-&gt;isSizeAvailable() : false;
return m_decoder &amp;&amp; m_decoder-&gt;isSizeAvailable();
is how I would write that.

Looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143223</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 16:09:18 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 38693 [details])
&gt; Why no &quot;static&quot; on:
&gt;  41 inline void fillScaledValues(Vector&lt;int&gt;&amp; scaledValues, double scaleRate,
&gt; int length)
&gt; 
&gt; And here?
&gt;  55 template &lt;MatchType type&gt; int getScaledValue(const Vector&lt;int&gt;&amp;
&gt; scaledValues, int valueToMatch, int searchStart)

Because they have been moved into the pre-existing anonymous namespace, so they don&apos;t also need a &quot;static&quot; declaration.

Anonymous namespaces and &quot;static&quot; are the two ways to locally scope functions; &quot;static&quot; is deprecated in C++ (Stroustrup secs. 9.2, B.2.3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143224</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 16:10:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 38693 [details] [details])
&gt; &gt; Why no &quot;static&quot; on:
&gt; &gt;  41 inline void fillScaledValues(Vector&lt;int&gt;&amp; scaledValues, double scaleRate,
&gt; &gt; int length)
&gt; &gt; 
&gt; &gt; And here?
&gt; &gt;  55 template &lt;MatchType type&gt; int getScaledValue(const Vector&lt;int&gt;&amp;
&gt; &gt; scaledValues, int valueToMatch, int searchStart)
&gt; 
&gt; Because they have been moved into the pre-existing anonymous namespace, so they
&gt; don&apos;t also need a &quot;static&quot; declaration.
&gt; 
&gt; Anonymous namespaces and &quot;static&quot; are the two ways to locally scope functions;
&gt; &quot;static&quot; is deprecated in C++ (Stroustrup secs. 9.2, B.2.3).

Random.  I didn&apos;t realize we used anonymous namespaces in WebCore, or that static is &quot;deprecated&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143225</commentid>
    <comment_count>13</comment_count>
      <attachid>38693</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 16:11:11 -0700</bug_when>
    <thetext>Comment on attachment 38693
Clean up ImageDecoder*.cpp in preparation for fixing bug 28785

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143227</commentid>
    <comment_count>14</comment_count>
      <attachid>38694</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 16:15:27 -0700</bug_when>
    <thetext>Comment on attachment 38694
Clean up ImageSource.* in preparation for more fixes on bug 27965

Landed in r47840, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143229</commentid>
    <comment_count>15</comment_count>
      <attachid>38693</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 16:16:55 -0700</bug_when>
    <thetext>Comment on attachment 38693
Clean up ImageDecoder*.cpp in preparation for fixing bug 28785

Landed in r47841, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180928</commentid>
    <comment_count>16</comment_count>
      <attachid>46606</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-14 14:37:16 -0800</bug_when>
    <thetext>Created attachment 46606
Condense downsampling logic

This greatly reduces the amount of code in the decoders that support image downsampling.  It does this by making the downsampling functions available for all builds, and having them act &quot;as you&apos;d expect&quot; (e.g. scaledSize() returns the same as size() when the image has not been scaled).  This allowed me to condense a lot of logic.

This also contains the fixes on bug 33624 (which I discovered while writing this patch).

There should be no functional change in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180931</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-14 14:38:32 -0800</bug_when>
    <thetext>Attachment 46606 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:360:  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</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180935</commentid>
    <comment_count>18</comment_count>
      <attachid>46609</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-14 14:45:13 -0800</bug_when>
    <thetext>Created attachment 46609
Condense downsampling logic, v2

Fixes style nit and condenses another few lines I didn&apos;t previously realize I could shorten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180941</commentid>
    <comment_count>19</comment_count>
      <attachid>46609</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-14 14:53:19 -0800</bug_when>
    <thetext>Comment on attachment 46609
Condense downsampling logic, v2

&gt;  #include &quot;ImageDecoder.h&quot;
&gt;  #endif
&gt;  
&gt; -#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
&gt; -#ifndef IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS
&gt; -#define IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS (1024 * 1024)
&gt; -#endif
&gt; -#endif
&gt; -
&gt;  namespace WebCore {
&gt;  
&gt;  ImageSource::ImageSource()
&gt; @@ -81,6 +75,9 @@ void ImageSource::setData(SharedBuffer* 
&gt;      if (!m_decoder) {
&gt;          m_decoder = static_cast&lt;NativeImageSourcePtr&gt;(ImageDecoder::create(*data));
&gt;  #if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
&gt; +#ifndef IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS
&gt; +#define IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS (1024 * 1024)
&gt; +#endif
&gt;          if (m_decoder)
&gt;              m_decoder-&gt;setMaxNumPixels(IMAGE_DECODER_DOWN_SAMPLING_MAX_NUMBER_OF_PIXELS);
&gt;  #endif

Why do you move it into the function? I think I was asked to move it out before :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180944</commentid>
    <comment_count>20</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-14 14:56:38 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Why do you move it into the function? I think I was asked to move it out before
&gt; :)

For readability (to keep the constant close to where it&apos;s used) and simplicity (one fewer preprocessor block, two fewer lines of code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180962</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-14 15:22:48 -0800</bug_when>
    <thetext>Attachment 46609 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/186745</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180971</commentid>
    <comment_count>22</comment_count>
      <attachid>46614</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-14 15:35:31 -0800</bug_when>
    <thetext>Created attachment 46614
Condense downsampling logic, v3

Try to fix both build warnings and errors on gtk.  I intended to reorder the ImageDecoder.h member variables in a later patch but I guess I have to do a little bit to get things in the right order now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181039</commentid>
    <comment_count>23</comment_count>
      <attachid>46614</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-14 17:38:24 -0800</bug_when>
    <thetext>Comment on attachment 46614
Condense downsampling logic, v3

I&apos;m not an expert here, but the minus lines outnumber the plus lines and the plus lines are prettier.

More seriously, I looked through this and the parts I understood looked good.  There were some calculations that mystified me, but looks plausible.  If there&apos;s a better reviewer for this code, please let me or Peter know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181042</commentid>
    <comment_count>24</comment_count>
      <attachid>46614</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-14 17:46:30 -0800</bug_when>
    <thetext>Comment on attachment 46614
Condense downsampling logic, v3

Landed in r53309, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181048</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-14 17:55:34 -0800</bug_when>
    <thetext>Broke Chromium Linux:
http://build.webkit.org/builders/Chromium%20Linux%20Release/builds/932/steps/compile-webkit/logs/stdio

I&apos;m not sure why the EWS bot didn&apos;t catch that...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181056</commentid>
    <comment_count>26</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-14 18:05:12 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Broke Chromium Linux:
&gt; http://build.webkit.org/builders/Chromium%20Linux%20Release/builds/932/steps/compile-webkit/logs/stdio
&gt; 
&gt; I&apos;m not sure why the EWS bot didn&apos;t catch that...

Attempted fix landed as r53311.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181361</commentid>
    <comment_count>27</comment_count>
      <attachid>46709</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-15 13:40:42 -0800</bug_when>
    <thetext>Created attachment 46709
Use OwnPtrs and remove GIFImageDecoderPrivate

This moves the private reader objects in several decoders from being raw pointers to OwnPtrs, to simplify the code a little.  Since I&apos;m touching this part of the GIF decoder anyway, it also removes GIFImageDecoderPrivate, since that wrapper class doesn&apos;t seem to add much value beyond simplifying the &quot;decode&quot; API call, and it takes up a big chunk of space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181377</commentid>
    <comment_count>28</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-15 14:01:12 -0800</bug_when>
    <thetext>Holger, since the latest patch touches Qt code (though trivially so), thought you might want to take a look and/or r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181419</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-15 15:49:02 -0800</bug_when>
    <thetext>Attachment 46709 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/190557</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181420</commentid>
    <comment_count>30</comment_count>
      <attachid>46714</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-15 15:54:24 -0800</bug_when>
    <thetext>Created attachment 46714
Use OwnPtrs and remove GIFImageDecoderPrivate, v2

Try to fix Qt build error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181481</commentid>
    <comment_count>31</comment_count>
      <attachid>46714</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-15 23:07:17 -0800</bug_when>
    <thetext>Comment on attachment 46714
Use OwnPtrs and remove GIFImageDecoderPrivate, v2

This patch is fantastic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181904</commentid>
    <comment_count>32</comment_count>
      <attachid>46714</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-18 09:47:25 -0800</bug_when>
    <thetext>Comment on attachment 46714
Use OwnPtrs and remove GIFImageDecoderPrivate, v2

Landed in r53411, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190228</commentid>
    <comment_count>33</comment_count>
      <attachid>48689</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-12 18:55:35 -0800</bug_when>
    <thetext>Created attachment 48689
Style/code cleanup

This somewhat stretches the definition of a &quot;small&quot; cleanup, but it&apos;s all mechanical, with no functional change (if you find one, flag it!).  I&apos;m just trying to make the Image Decoders more compact, readable, and style-guide-compliant.  In particular, this gets rid of the 80-column wrapping in code originally written by me, which Eric Seidel has frequently complained to me about :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190229</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-12 18:57:28 -0800</bug_when>
    <thetext>Attachment 48689 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
itespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:70:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:72:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:152:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:178:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:240:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:250:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:276:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:288:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:293:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:309:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:368:  term_source is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:112:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:121:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:61:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:184:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:187:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:65:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:66:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:67:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:68:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:318:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 27


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190230</commentid>
    <comment_count>35</comment_count>
      <attachid>48690</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-12 19:07:15 -0800</bug_when>
    <thetext>Created attachment 48690
Style/code cleanup, v2

This fixes the fixable style comments.  There are two cases the style bot will still complain about that aren&apos;t fixed:

int var;   // Indenting these comments the same
bool var2; // causes the style bot to complain

void jpeg_decompress_struct(); // Funcs/structs used by libjpeg are named/styled to match its conventions, which makes the style bot angry

I don&apos;t think fixing either of these is advantageous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190232</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-12 19:08:09 -0800</bug_when>
    <thetext>Attachment 48690 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:63:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:63:  setjmp_buffer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:67:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:70:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:72:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:87:  Declaration has space between type name and * in JPEGImageReader *decoder  [whitespace/declaration] [3]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:369:  term_source is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/image-decoders/ImageDecoder.h:58:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:59:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:60:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:184:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-decoders/ImageDecoder.h:187:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 12


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190253</commentid>
    <comment_count>37</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-12 22:05:24 -0800</bug_when>
    <thetext>&gt; void jpeg_decompress_struct(); // Funcs/structs used by libjpeg are
&gt; named/styled to match its conventions, which makes the style bot angry

We can whitelist these files not to check for underscores in names.  Do you know the full set of affected image decoder files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190254</commentid>
    <comment_count>38</comment_count>
      <attachid>48690</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-12 22:08:35 -0800</bug_when>
    <thetext>Comment on attachment 48690
Style/code cleanup, v2

I didn&apos;t verify everything in detail, but this patch looks great.  Thanks for doing this cleanup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190696</commentid>
    <comment_count>39</comment_count>
      <attachid>48690</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-16 12:50:28 -0800</bug_when>
    <thetext>Comment on attachment 48690
Style/code cleanup, v2

Landed in r54823, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191363</commentid>
    <comment_count>40</comment_count>
      <attachid>48960</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-17 19:21:50 -0800</bug_when>
    <thetext>Created attachment 48960
Saner PNG-in-ICO decoding

This makes PNG-in-ICO decoding a little less convoluted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191432</commentid>
    <comment_count>41</comment_count>
      <attachid>48960</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-17 23:47:47 -0800</bug_when>
    <thetext>Comment on attachment 48960
Saner PNG-in-ICO decoding

I didn&apos;t 100% understand the changes to ICOImageDecoder::decodeAtIndex, but the patch looks good.

Can we retire this bug and use a new one for future patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191688</commentid>
    <comment_count>42</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-02-18 11:35:54 -0800</bug_when>
    <thetext>Landed in r54978.  Closing bug per comment 41.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191694</commentid>
    <comment_count>43</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-18 11:57:10 -0800</bug_when>
    <thetext>Thanks Peter.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38641</attachid>
            <date>2009-08-26 15:34:15 -0700</date>
            <delta_ts>2009-08-26 16:40:41 -0700</delta_ts>
            <desc>Use Vector&lt;OwnPtr&lt;&gt; &gt; in ICO decoder</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4007</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3Nzk3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNiBAQAorMjAwOS0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisgICAgICAg
IFN3aXRjaCBJQ08gZGVjb2RlciBmcm9tIGEgVmVjdG9yIG9mIHJhdyBwb2ludGVycyB0byBhIFZl
Y3RvciBvZgorICAgICAgICBPd25QdHJzIG5vdyB0aGF0IHRoYXQgaXMgcG9zc2libGUuICBNYWtl
cyBjb2RlIHNsaWdodGx5IHNpbXBsZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdl
RGVjb2Rlcjo6ZGVjb2RlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29k
ZXI6OnByb2Nlc3NEaXJlY3RvcnkpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuaDoKKwogMjAwOS0wOC0yNiAgRGF2aWQgTGV2aW4gIDxsZXZp
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lD
T0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ3Nzk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsMTIgKzUxLDYgQEAgSUNPSW1hZ2VEZWNvZGVyOjpJQ09JbWFnZURlY29kZXIoKQogewogfQog
Ci1JQ09JbWFnZURlY29kZXI6On5JQ09JbWFnZURlY29kZXIoKQotewotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2JtcFJlYWRlcnMpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BuZ0RlY29kZXJzKTsK
LX0KLQogdm9pZCBJQ09JbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAgICBpZiAoZmFpbGVkKCkpCkBAIC0yMDgsMTIgKzIw
MiwxMiBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleChzaXplCiAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYWxyZWFkeSBzaXplZCBtX2ZyYW1lQnVmZmVyQ2FjaGUg
YmVmb3JlIHRoaXMsIGFuZAogICAgICAgICAgICAgLy8gd2UgbXVzdCBub3QgcmVzaXplIGl0IGFn
YWluIGxhdGVyIChzZWUgY2F1dGlvbiBpbiBmcmFtZUNvdW50KCkpLgogICAgICAgICAgICAgQVNT
RVJUKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPT0gbV9kaXJFbnRyaWVzLnNpemUoKSk7Ci0g
ICAgICAgICAgICBtX2JtcFJlYWRlcnNbaW5kZXhdID0KLSAgICAgICAgICAgICAgICBuZXcgQk1Q
SW1hZ2VSZWFkZXIodGhpcywgZGlyRW50cnkubV9pbWFnZU9mZnNldCwgMCwgdHJ1ZSk7CisgICAg
ICAgICAgICBtX2JtcFJlYWRlcnNbaW5kZXhdLnNldCgKKyAgICAgICAgICAgICAgICBuZXcgQk1Q
SW1hZ2VSZWFkZXIodGhpcywgZGlyRW50cnkubV9pbWFnZU9mZnNldCwgMCwgdHJ1ZSkpOwogICAg
ICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XS0+c2V0RGF0YShtX2RhdGEuZ2V0KCkpOwogICAg
ICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XS0+c2V0QnVmZmVyKCZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbaW5kZXhdKTsKICAgICAgICAgfSBlbHNlIGlmIChpbWFnZVR5cGUgPT0gUE5HKSB7Ci0gICAg
ICAgICAgICBtX3BuZ0RlY29kZXJzW2luZGV4XSA9IG5ldyBQTkdJbWFnZURlY29kZXIoKTsKKyAg
ICAgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdLnNldChuZXcgUE5HSW1hZ2VEZWNvZGVyKCkp
OwogICAgICAgICAgICAgc2V0RGF0YUZvclBOR0RlY29kZXJBdEluZGV4KGluZGV4KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggZGF0YSB0byBkZXRlcm1pbmUg
aW1hZ2UgdHlwZSB5ZXQuCkBAIC0yNTQsMTMgKzI0OCwxMCBAQCBib29sIElDT0ltYWdlRGVjb2Rl
cjo6cHJvY2Vzc0RpcmVjdG9yeSgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICAvLyBFbmxhcmdlIG1lbWJlciB2ZWN0b3JzIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLiAgV2Ug
bXVzdCBpbml0aWFsaXplIHRoZQotICAgIC8vIEJNUCBhbmQgUE5HIGRlY29kaW5nIHZlY3RvcnMg
dG8gMCBzbyB0aGF0IGFsbCBlbnRyaWVzIGNhbiBiZSBzYWZlbHkKLSAgICAvLyBkZWxldGVkIGlu
IG91ciBkZXN0cnVjdG9yLiAgSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhleSdsbCBjb250YWluIGdh
cmJhZ2UKLSAgICAvLyB2YWx1ZXMsIGFuZCBkZWxldGluZyB0aG9zZSB3aWxsIGNvcnJ1cHQgbWVt
b3J5LgorICAgIC8vIEVubGFyZ2UgbWVtYmVyIHZlY3RvcnMgdG8gaG9sZCBhbGwgdGhlIGVudHJp
ZXMuCiAgICAgbV9kaXJFbnRyaWVzLnJlc2l6ZShpZENvdW50KTsKLSAgICBtX2JtcFJlYWRlcnMu
ZmlsbCgwLCBpZENvdW50KTsKLSAgICBtX3BuZ0RlY29kZXJzLmZpbGwoMCwgaWRDb3VudCk7Cisg
ICAgbV9ibXBSZWFkZXJzLnJlc2l6ZShpZENvdW50KTsKKyAgICBtX3BuZ0RlY29kZXJzLnJlc2l6
ZShpZENvdW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gNDc3OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2Rl
ciB7CiAgICAgcHVibGljOgogICAgICAgICBJQ09JbWFnZURlY29kZXIoKTsKLSAgICAgICAgdmly
dHVhbCB+SUNPSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImlj
byI7IH0KQEAgLTEzNCw5ICsxMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIElj
b25EaXJlY3RvcnlFbnRyaWVzIG1fZGlyRW50cmllczsKIAogICAgICAgICAvLyBUaGUgaW1hZ2Ug
ZGVjb2RlcnMgZm9yIHRoZSB2YXJpb3VzIGZyYW1lcy4KLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8
Qk1QSW1hZ2VSZWFkZXIqPiBCTVBSZWFkZXJzOworICAgICAgICB0eXBlZGVmIFZlY3RvcjxPd25Q
dHI8Qk1QSW1hZ2VSZWFkZXI+ID4gQk1QUmVhZGVyczsKICAgICAgICAgQk1QUmVhZGVycyBtX2Jt
cFJlYWRlcnM7Ci0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFBOR0ltYWdlRGVjb2Rlcio+IFBOR0Rl
Y29kZXJzOworICAgICAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8UE5HSW1hZ2VEZWNvZGVyPiA+
IFBOR0RlY29kZXJzOwogICAgICAgICBQTkdEZWNvZGVycyBtX3BuZ0RlY29kZXJzOwogCiAgICAg
ICAgIC8vIFZhbGlkIG9ubHkgd2hpbGUgYSBCTVBJbWFnZVJlYWRlciBpcyBkZWNvZGluZywgdGhp
cyBob2xkcyB0aGUgc2l6ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38684</attachid>
            <date>2009-08-27 14:12:30 -0700</date>
            <delta_ts>2009-08-27 15:38:57 -0700</delta_ts>
            <desc>Shorten #ifdef section of ImageSource.h</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2084</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODM1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOC0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisgICAgICAg
IFNob3J0ZW4gI2lmZGVmIHNlY3Rpb24gYSBiaXQgYnkgc2hhcmluZyBjb21tb24gdHlwZWRlZnMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorCiAyMDA5LTA4
LTI3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXZlIEtpbHplci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaAkocmV2aXNpb24gNDc4MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDM5ICs1OSwzMiBAQCBjbGFzcyBJbnRT
aXplOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgU3RyaW5nOwogCi0jaWYgUExBVEZPUk0o
V1gpCi1jbGFzcyBJbWFnZURlY29kZXI7Ci10eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1h
Z2VTb3VyY2VQdHI7Ci10eXBlZGVmIGNvbnN0IFZlY3RvcjxjaGFyPiogTmF0aXZlQnl0ZVB0cjsK
LSNpZiBVU0UoV1hHQykKLXR5cGVkZWYgd3hHcmFwaGljc0JpdG1hcCogTmF0aXZlSW1hZ2VQdHI7
Ci0jZWxzZQotdHlwZWRlZiB3eEJpdG1hcCogTmF0aXZlSW1hZ2VQdHI7Ci0jZW5kaWYKLSNlbGlm
IFBMQVRGT1JNKENHKQorI2lmIFBMQVRGT1JNKENHKQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVm
IE5hdGl2ZUltYWdlU291cmNlUHRyOwogdHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdlUHRy
OwogI2VsaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBJbWFnZURlY29kZXJRdDsKIHR5cGVkZWYgSW1h
Z2VEZWNvZGVyUXQqIE5hdGl2ZUltYWdlU291cmNlUHRyOwogdHlwZWRlZiBRUGl4bWFwKiBOYXRp
dmVJbWFnZVB0cjsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQorI2Vsc2UKIGNsYXNzIEltYWdlRGVj
b2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKKyNpZiBQ
TEFURk9STShXWCkKKyNpZiBVU0UoV1hHQykKK3R5cGVkZWYgd3hHcmFwaGljc0JpdG1hcCogTmF0
aXZlSW1hZ2VQdHI7CisjZWxzZQordHlwZWRlZiB3eEJpdG1hcCogTmF0aXZlSW1hZ2VQdHI7Cisj
ZW5kaWYKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQogdHlwZWRlZiBjYWlyb19zdXJmYWNlX3QqIE5h
dGl2ZUltYWdlUHRyOwogI2VsaWYgUExBVEZPUk0oU0tJQSkKLWNsYXNzIEltYWdlRGVjb2RlcjsK
LXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgTmF0
aXZlSW1hZ2VTa2lhKiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFBMQVRGT1JNKEhBSUtVKQotY2xh
c3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNl
UHRyOwogdHlwZWRlZiBCQml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFBMQVRGT1JNKFdJ
TkNFKQotY2xhc3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUlt
YWdlU291cmNlUHRyOwogdHlwZWRlZiBSZWZQdHI8U2hhcmVkQml0bWFwPiBOYXRpdmVJbWFnZVB0
cjsKICNlbmRpZgorI2VuZGlmCiAKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcE9uY2UgPSAtMTsK
IGNvbnN0IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38688</attachid>
            <date>2009-08-27 14:36:07 -0700</date>
            <delta_ts>2009-08-27 15:38:57 -0700</delta_ts>
            <desc>Clean up ImageSource.cpp a little</desc>
            <filename>patch3</filename>
            <type>text/plain</type>
            <size>2847</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODM1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAwOS0wOC0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisgICAgICAg
IFNob3J0ZW4gYSBudW1iZXIgb2YgZnVuY3Rpb25zIGluIEltYWdlU291cmNlLmNwcCB0aGUgc2Ft
ZSB3YXkgYSBmZXcKKyAgICAgICAgYWxyZWFkeSBoYXZlIGJlZW4uICBQdXQgZnVuY3Rpb25zIGlu
IHRoZSBzYW1lIG9yZGVyIGFzIGluIGhlYWRlciBmaWxlLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKwogMjAwOS0wOC0y
NyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGF2ZSBLaWx6ZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCShyZXZpc2lvbiA0NzgzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMzQgKzE0NCwyMiBAQCBTdHJp
bmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgCiAKIGJvb2wgSW1hZ2VTb3VyY2U6
OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworICAg
IHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpIDogZmFsc2U7
CiB9CiAKIEludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAogewotICAgIGlmICghbV9k
ZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rl
ci0+c2l6ZSgpOworICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPnNpemUoKSA6IElu
dFNpemUoKTsKIH0KIAogSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXpl
X3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBJ
bnRTaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4
KTsKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gZnJhbWVTaXplQXRJbmRleChpbmRleCkgOiBJbnRT
aXplKCk7CiB9CiAKIGludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKIHsKLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOwotCi0gICAgcmV0
dXJuIG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7CisgICAgcmV0dXJuIG1fZGVjb2RlciA/
IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTm9uZTsKIH0KIAogc2l6
ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKQEAgLTE5OCwxNSArMTg2LDYgQEAg
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQQogICAgIHJldHVybiBidWZm
ZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVy
LT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7Ci19Ci0KIGZsb2F0IElt
YWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYg
KCFtX2RlY29kZXIpCkBAIC0yMzcsNCArMjE2LDEzIEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KHMKICAgICAgICAgbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
aW5kZXgpLT5oYXNBbHBoYSgpIDogdHJ1ZTsKIH0KIAorYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNv
ZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBidWZmZXIgJiYgYnVm
ZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38689</attachid>
            <date>2009-08-27 14:52:54 -0700</date>
            <delta_ts>2009-08-27 15:30:37 -0700</delta_ts>
            <desc>Clean up ImageDecoder.cpp a little</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>3605</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODM2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAwOS0wOC0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisgICAgICAg
IFB1dCBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIGhlYWRlciBmaWxlLiAg
QWxzbywgc2luY2UKKyAgICAgICAgdGhlcmUncyBhbHJlYWR5IGFuIGFub255bW91cyBuYW1lc3Bh
Y2UgaW4gdGhpcyBmaWxlLCB1c2UgaXQgdG8gZW5jbG9zZQorICAgICAgICB0aGUgbG9jYWwgaGVs
cGVyIGZ1bmN0aW9ucy4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjp1cHBlckJvdW5kU2NhbGVkWCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6Omxvd2VyQm91bmRTY2FsZWRYKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6c2NhbGVkWSk6CisKIDIwMDktMDgtMjcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZp
c2lvbiA0NzgzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsMjEgQEAgZW51bSBNYXRjaFR5cGUg
ewogICAgIExvd2VyQm91bmQKIH07CiAKK2lubGluZSB2b2lkIGZpbGxTY2FsZWRWYWx1ZXMoVmVj
dG9yPGludD4mIHNjYWxlZFZhbHVlcywgZG91YmxlIHNjYWxlUmF0ZSwgaW50IGxlbmd0aCkKK3sK
KyAgICBkb3VibGUgaW5mbGF0ZVJhdGUgPSAxLiAvIHNjYWxlUmF0ZTsKKyAgICBzY2FsZWRWYWx1
ZXMucmVzZXJ2ZUNhcGFjaXR5KHN0YXRpY19jYXN0PGludD4obGVuZ3RoICogc2NhbGVSYXRlICsg
MC41KSk7CisgICAgZm9yIChpbnQgc2NhbGVkSW5kZXggPSAwOzspIHsKKyAgICAgICAgaW50IGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihzY2FsZWRJbmRleCAqIGluZmxhdGVSYXRlICsgMC41KTsK
KyAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBzY2FsZWRWYWx1ZXMu
YXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgICsrc2NhbGVkSW5kZXg7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogfQogCi10ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5
cGU+IHN0YXRpYyBpbnQgZ2V0U2NhbGVkVmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZh
bHVlcywgaW50IHZhbHVlVG9NYXRjaCwgaW50IHNlYXJjaFN0YXJ0KQordGVtcGxhdGUgPE1hdGNo
VHlwZSB0eXBlPiBpbnQgZ2V0U2NhbGVkVmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZh
bHVlcywgaW50IHZhbHVlVG9NYXRjaCwgaW50IHNlYXJjaFN0YXJ0KQogewogICAgIGNvbnN0IGlu
dCogZGF0YVN0YXJ0ID0gc2NhbGVkVmFsdWVzLmRhdGEoKTsKICAgICBjb25zdCBpbnQqIGRhdGFF
bmQgPSBkYXRhU3RhcnQgKyBzY2FsZWRWYWx1ZXMuc2l6ZSgpOwpAQCAtNTYsMzMgKzY4LDYgQEAg
dGVtcGxhdGUgPE1hdGNoVHlwZSB0eXBlPiBzdGF0aWMgaW50IGdldAogICAgIH0KIH0KIAotaW50
IEltYWdlRGVjb2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3Rh
cnQpCi17Ci0gICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29s
dW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IEltYWdlRGVjb2Rlcjo6bG93ZXJC
b3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0gICAgcmV0dXJuIGdl
dFNjYWxlZFZhbHVlPExvd2VyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0
YXJ0KTsKLX0KLQotaW50IEltYWdlRGVjb2Rlcjo6c2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFy
Y2hTdGFydCkKLXsKLSAgICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1fc2NhbGVkUm93
cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZpbGxTY2Fs
ZWRWYWx1ZXMoVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywgZG91YmxlIHNjYWxlUmF0ZSwgaW50
IGxlbmd0aCkKLXsKLSAgICBkb3VibGUgaW5mbGF0ZVJhdGUgPSAxLiAvIHNjYWxlUmF0ZTsKLSAg
ICBzY2FsZWRWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KHN0YXRpY19jYXN0PGludD4obGVuZ3RoICog
c2NhbGVSYXRlICsgMC41KSk7Ci0gICAgZm9yIChpbnQgc2NhbGVkSW5kZXggPSAwOzspIHsKLSAg
ICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihzY2FsZWRJbmRleCAqIGluZmxhdGVS
YXRlICsgMC41KTsKLSAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBz
Y2FsZWRWYWx1ZXMuYXBwZW5kKGluZGV4KTsKLSAgICAgICAgICAgICsrc2NhbGVkSW5kZXg7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQogfQogCiB2b2lkIEltYWdl
RGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCkKQEAgLTEwMSw2ICs4NiwyMSBA
QCB2b2lkIEltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0YUlmTmVjCiAgICAgZmlsbFNjYWxl
ZFZhbHVlcyhtX3NjYWxlZFJvd3MsIHNjYWxlLCBoZWlnaHQpOwogfQogCitpbnQgSW1hZ2VEZWNv
ZGVyOjp1cHBlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKK3sKKyAg
ICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8VXBwZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmln
WCwgc2VhcmNoU3RhcnQpOworfQorCitpbnQgSW1hZ2VEZWNvZGVyOjpsb3dlckJvdW5kU2NhbGVk
WChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKK3sKKyAgICByZXR1cm4gZ2V0U2NhbGVkVmFs
dWU8TG93ZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmlnWCwgc2VhcmNoU3RhcnQpOworfQor
CitpbnQgSW1hZ2VEZWNvZGVyOjpzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQor
eworICAgIHJldHVybiBnZXRTY2FsZWRWYWx1ZTxFeGFjdD4obV9zY2FsZWRSb3dzLCBvcmlnWSwg
c2VhcmNoU3RhcnQpOworfQorCiAjZW5kaWYgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38693</attachid>
            <date>2009-08-27 15:30:37 -0700</date>
            <delta_ts>2009-08-27 16:16:55 -0700</delta_ts>
            <desc>Clean up ImageDecoder*.cpp in preparation for fixing bug 28785</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>9069</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODM4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyOSBAQAorMjAwOS0wOC0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisgICAgICAg
IENsZWFuIHVwIEltYWdlRGVjb2RlciouY3BwIGEgYml0LgorCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDogUHV0IGZ1bmN0aW9ucyBpbiB0aGUgc2Ft
ZQorICAgICAgICAgIG9yZGVyIGFzIGluIHRoZSBoZWFkZXIgZmlsZS4gIEFsc28sIHNpbmNlIHRo
ZXJlJ3MgYWxyZWFkeSBhbiBhbm9ueW1vdXMKKyAgICAgICAgICBuYW1lc3BhY2UgaW4gdGhpcyBm
aWxlLCB1c2UgaXQgdG8gZW5jbG9zZSB0aGUgbG9jYWwgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnVwcGVyQm91
bmRTY2FsZWRYKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNj
YWxlZFgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzY2FsZWRZKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OndpZHRoKTogU3R5bGUgZml4LgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOiBTdHlsZSBmaXguCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YSk6IEVuc3VyZSBt
X3NpemUgaXMgc2V0IGNvcnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
YXNOZXdOYXRpdmVJbWFnZSk6IFJlbW92ZSB1bm5lZWRlZCB0ZW1wLgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOiBTaW1wbGlmeS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOiBUcnkgYW5kIGNvbGxlY3Qgc3BhY2Vk
LW91dCB0ZW1wcyB1bmRlciBsb29wIGNvbW1lbnQgdG8gc2hvdyB0aGV5J3JlIGFsbCByZWxhdGVk
LiAgVXNlIHNpemVfdCBmb3IgaXRlcmF0aW5nIG92ZXIgZWxlbWVudHMgb2YgYSBWZWN0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OndpZHRoKTogU3R5bGUgZml4LgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOiBTdHlsZSBmaXguCisKIDIwMDktMDgt
MjcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NzgzNikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOSArMzgsMjEgQEAgZW51bSBNYXRjaFR5cGUgewogICAgIExvd2VyQm91bmQKIH07CiAK
K2lubGluZSB2b2lkIGZpbGxTY2FsZWRWYWx1ZXMoVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywg
ZG91YmxlIHNjYWxlUmF0ZSwgaW50IGxlbmd0aCkKK3sKKyAgICBkb3VibGUgaW5mbGF0ZVJhdGUg
PSAxLiAvIHNjYWxlUmF0ZTsKKyAgICBzY2FsZWRWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KHN0YXRp
Y19jYXN0PGludD4obGVuZ3RoICogc2NhbGVSYXRlICsgMC41KSk7CisgICAgZm9yIChpbnQgc2Nh
bGVkSW5kZXggPSAwOzspIHsKKyAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihz
Y2FsZWRJbmRleCAqIGluZmxhdGVSYXRlICsgMC41KTsKKyAgICAgICAgaWYgKGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICBzY2FsZWRWYWx1ZXMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAg
ICAgICsrc2NhbGVkSW5kZXg7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQogfQogCi10ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IHN0YXRpYyBpbnQgZ2V0U2NhbGVk
VmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywgaW50IHZhbHVlVG9NYXRjaCwg
aW50IHNlYXJjaFN0YXJ0KQordGVtcGxhdGUgPE1hdGNoVHlwZSB0eXBlPiBpbnQgZ2V0U2NhbGVk
VmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywgaW50IHZhbHVlVG9NYXRjaCwg
aW50IHNlYXJjaFN0YXJ0KQogewogICAgIGNvbnN0IGludCogZGF0YVN0YXJ0ID0gc2NhbGVkVmFs
dWVzLmRhdGEoKTsKICAgICBjb25zdCBpbnQqIGRhdGFFbmQgPSBkYXRhU3RhcnQgKyBzY2FsZWRW
YWx1ZXMuc2l6ZSgpOwpAQCAtNTYsMzMgKzY4LDYgQEAgdGVtcGxhdGUgPE1hdGNoVHlwZSB0eXBl
PiBzdGF0aWMgaW50IGdldAogICAgIH0KIH0KIAotaW50IEltYWdlRGVjb2Rlcjo6dXBwZXJCb3Vu
ZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0gICAgcmV0dXJuIGdldFNj
YWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0
KTsKLX0KLQotaW50IEltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBp
bnQgc2VhcmNoU3RhcnQpCi17Ci0gICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPExvd2VyQm91bmQ+
KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IEltYWdlRGVj
b2Rlcjo6c2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCkKLXsKLSAgICByZXR1cm4g
Z2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZpbGxTY2FsZWRWYWx1ZXMoVmVjdG9yPGludD4mIHNj
YWxlZFZhbHVlcywgZG91YmxlIHNjYWxlUmF0ZSwgaW50IGxlbmd0aCkKLXsKLSAgICBkb3VibGUg
aW5mbGF0ZVJhdGUgPSAxLiAvIHNjYWxlUmF0ZTsKLSAgICBzY2FsZWRWYWx1ZXMucmVzZXJ2ZUNh
cGFjaXR5KHN0YXRpY19jYXN0PGludD4obGVuZ3RoICogc2NhbGVSYXRlICsgMC41KSk7Ci0gICAg
Zm9yIChpbnQgc2NhbGVkSW5kZXggPSAwOzspIHsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZWRJbmRleCAqIGluZmxhdGVSYXRlICsgMC41KTsKLSAgICAgICAgaWYg
KGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBzY2FsZWRWYWx1ZXMuYXBwZW5kKGluZGV4
KTsKLSAgICAgICAgICAgICsrc2NhbGVkSW5kZXg7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQogfQogCiB2b2lkIEltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KCkKQEAgLTEwMSw2ICs4NiwyMSBAQCB2b2lkIEltYWdlRGVjb2Rlcjo6cHJl
cGFyZVNjYWxlRGF0YUlmTmVjCiAgICAgZmlsbFNjYWxlZFZhbHVlcyhtX3NjYWxlZFJvd3MsIHNj
YWxlLCBoZWlnaHQpOwogfQogCitpbnQgSW1hZ2VEZWNvZGVyOjp1cHBlckJvdW5kU2NhbGVkWChp
bnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKK3sKKyAgICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8
VXBwZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmlnWCwgc2VhcmNoU3RhcnQpOworfQorCitp
bnQgSW1hZ2VEZWNvZGVyOjpsb3dlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hT
dGFydCkKK3sKKyAgICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8TG93ZXJCb3VuZD4obV9zY2FsZWRD
b2x1bW5zLCBvcmlnWCwgc2VhcmNoU3RhcnQpOworfQorCitpbnQgSW1hZ2VEZWNvZGVyOjpzY2Fs
ZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQoreworICAgIHJldHVybiBnZXRTY2FsZWRW
YWx1ZTxFeGFjdD4obV9zY2FsZWRSb3dzLCBvcmlnWSwgc2VhcmNoU3RhcnQpOworfQorCiAjZW5k
aWYgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlRGVjb2RlckNhaXJvLmNwcAkocmV2aXNpb24gNDc4MzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEzLDExICsxMTMsMTMgQEAgUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJh
dG9yPShjbwogICAgIHJldHVybiAqdGhpczsKIH0KIAotaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgo
KSBjb25zdCB7CitpbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0Cit7CiAgICAgcmV0dXJu
IG1fc2l6ZS53aWR0aCgpOwogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdCB7
CitpbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdAorewogICAgIHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFp
a3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAJKHJldmlzaW9uIDQ3
ODM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29k
ZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
PEJpdG1hcC5oPgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUkdCQTMyQnVmZmVyOjpSR0JB
MzJCdWZmZXIoKQpAQCAtNjEsNiArNjAsNyBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1h
cERhdGEoY29uc3QgCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fYnl0ZXMgPSBvdGhlci5tX2J5
dGVzOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKICAgICBzZXRIYXNBbHBoYShvdGhlci5t
X2hhc0FscGhhKTsKIH0KIApAQCAtNzksMTEgKzc5LDggQEAgYm9vbCBSR0JBMzJCdWZmZXI6OnNl
dFNpemUoaW50IG5ld1dpZHRoLAogCiBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3
TmF0aXZlSW1hZ2UoKSBjb25zdAogewotICAgIGNvbnN0IHZvaWQqIGJ5dGVzID0gbV9ieXRlcy5k
YXRhKCk7Ci0KICAgICBCQml0bWFwKiBibXAgPSBuZXcgQkJpdG1hcChCUmVjdCgwLCAwLCB3aWR0
aCgpLCBoZWlnaHQoKSksIEJfUkdCMzIpOwotICAgIGJtcC0+U2V0Qml0cyhieXRlcywgbV9zaXpl
LndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCksIDAsIEJfUkdCMzIpOwotCisgICAgYm1wLT5TZXRC
aXRzKG1fYnl0ZXMuZGF0YSgpLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSwgMCwg
Ql9SR0IzMik7CiAgICAgcmV0dXJuIGJtcDsKIH0KIApAQCAtMTA3LDkgKzEwNCw3IEBAIFJHQkEz
MkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY28KICAgICBpZiAodGhpcyA9PSAmb3Ro
ZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIG1fYnl0ZXMgPSBvdGhlci5tX2J5dGVz
OwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5oYXNB
bHBoYSgpKTsKKyAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7CiAgICAgc2V0UmVjdChvdGhlci5y
ZWN0KCkpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24o
b3RoZXIuZHVyYXRpb24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3d4L0ltYWdlRGVjb2Rlcld4LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCShyZXZpc2lvbiA0NzgzNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NiwyNCArODYsMTkgQEAgYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNp
emUoaW50IG5ld1dpZHRoLAogCiBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0
aXZlSW1hZ2UoKSBjb25zdAogewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gKGNv
bnN0IHVuc2lnbmVkIGNoYXIqKW1fYnl0ZXMuZGF0YSgpOwotICAgIAotICAgIHR5cGVkZWYgd3hQ
aXhlbERhdGE8d3hCaXRtYXAsIHd4QWxwaGFQaXhlbEZvcm1hdD4gV3hQaXhlbERhdGE7Ci0KICAg
ICB3eEJpdG1hcCogYm1wID0gbmV3IHd4Qml0bWFwKHdpZHRoKCksIGhlaWdodCgpLCAzMik7Cisg
ICAgdHlwZWRlZiB3eFBpeGVsRGF0YTx3eEJpdG1hcCwgd3hBbHBoYVBpeGVsRm9ybWF0PiBXeFBp
eGVsRGF0YTsKICAgICBXeFBpeGVsRGF0YSBkYXRhKCpibXApOwogICAgIAorICAgIC8vIE5COiBJ
dCBhcHBlYXJzIHRoYXQgdGhlIGRhdGEgaXMgaW4gQkdSQSBmb3JtYXQgaW5zdGVhZCBvZiBSR0JB
IGZvcm1hdC4KKyAgICAvLyBUaGlzIGNvZGUgd29ya3MgcHJvcGVybHkgb24gYm90aCBwcGMgYW5k
IGludGVsLCBtZWFuaW5nIHRoZSBpc3N1ZSBpcworICAgIC8vIGxpa2VseSBub3QgYW4gaXNzdWUg
b2YgYnl0ZSBvcmRlciBnZXR0aW5nIG1peGVkIHVwIG9uIGRpZmZlcmVudCBhcmNocy4gCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopbV9ieXRl
cy5kYXRhKCk7CiAgICAgaW50IHJvd0NvdW50ZXIgPSAwOwogICAgIGxvbmcgcGl4ZWxDb3VudGVy
ID0gMDsKLSAgICAKICAgICBXeFBpeGVsRGF0YTo6SXRlcmF0b3IgcChkYXRhKTsKLSAgICAKICAg
ICBXeFBpeGVsRGF0YTo6SXRlcmF0b3Igcm93U3RhcnQgPSBwOyAKLSAgICAKLSAgICAvLyBOQjog
SXQgYXBwZWFycyB0aGF0IHRoZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdC
QSBmb3JtYXQuCi0gICAgLy8gVGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5IG9uIGJvdGggcHBjIGFu
ZCBpbnRlbCwgbWVhbmluZyB0aGUgaXNzdWUgaXMKLSAgICAvLyBsaWtlbHkgbm90IGFuIGlzc3Vl
IG9mIGJ5dGUgb3JkZXIgZ2V0dGluZyBtaXhlZCB1cCBvbiBkaWZmZXJlbnQgYXJjaHMuIAotICAg
IGZvciAobG9uZyBpID0gMDsgaSA8IG1fYnl0ZXMuc2l6ZSgpICogc2l6ZW9mKFBpeGVsRGF0YSk7
IGkgKz0gc2l6ZW9mKFBpeGVsRGF0YSkpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Ynl0ZXMuc2l6ZSgpICogc2l6ZW9mKFBpeGVsRGF0YSk7IGkgKz0gc2l6ZW9mKFBpeGVsRGF0YSkp
IHsKICAgICAgICAgcC5SZWQoKSA9IGJ5dGVzW2krMl07CiAgICAgICAgIHAuR3JlZW4oKSA9IGJ5
dGVzW2krMV07CiAgICAgICAgIHAuQmx1ZSgpID0gYnl0ZXNbaSswXTsKQEAgLTExMiwxMiArMTA3
LDExIEBAIE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmUKICAgICAgICAg
cCsrOwogCiAgICAgICAgIHBpeGVsQ291bnRlcisrOwotICAgICAgICBpZiAoIChwaXhlbENvdW50
ZXIgJSB3aWR0aCgpICkgPT0gMCApIHsKKyAgICAgICAgaWYgKChwaXhlbENvdW50ZXIgJSB3aWR0
aCgpKSA9PSAwKSB7CiAgICAgICAgICAgICByb3dDb3VudGVyKys7CiAgICAgICAgICAgICBwID0g
cm93U3RhcnQ7CiAgICAgICAgICAgICBwLk1vdmVUbyhkYXRhLCAwLCByb3dDb3VudGVyKTsKICAg
ICAgICAgfQotCiAgICAgfQogI2lmICF3eENIRUNLX1ZFUlNJT04oMiw5LDApCiAgICAgYm1wLT5V
c2VBbHBoYSgpOwpAQCAtMTI1LDcgKzExOSw3IEBAIE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZl
cjo6YXNOZXdOYXRpdmUKICAgICBBU1NFUlQoYm1wLT5Jc09rKCkpOwogCiAjaWYgVVNFKFdYR0Mp
Ci0gICAgd3hHcmFwaGljc0JpdG1hcCogYml0bWFwID0gIG5ldyB3eEdyYXBoaWNzQml0bWFwKHd4
R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCktPkNyZWF0ZUJpdG1hcCgqYm1w
KSk7CisgICAgd3hHcmFwaGljc0JpdG1hcCogYml0bWFwID0gbmV3IHd4R3JhcGhpY3NCaXRtYXAo
d3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKS0+Q3JlYXRlQml0bWFwKCpi
bXApKTsKICAgICBkZWxldGUgYm1wOwogICAgIHJldHVybiBiaXRtYXA7CiAjZWxzZQpAQCAtMTYx
LDExICsxNTUsMTMgQEAgUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjbwog
ICAgIHJldHVybiAqdGhpczsKIH0KIAotaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdCB7
CitpbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0Cit7CiAgICAgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOwogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdCB7CitpbnQgUkdC
QTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdAorewogICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38694</attachid>
            <date>2009-08-27 15:38:57 -0700</date>
            <delta_ts>2009-08-27 16:15:26 -0700</delta_ts>
            <desc>Clean up ImageSource.* in preparation for more fixes on bug 27965</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>4510</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODM4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAwOS0wOC0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisgICAgICAg
IENsZWFuIHVwIEltYWdlU291cmNlLiogaW4gcHJlcGFyYXRpb24gZm9yIG1vcmUgZml4ZXMgb24g
YnVnIDI3OTY1LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
OiBQdXQgZnVuY3Rpb25zIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluIGhlYWRlciBmaWxlLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6IFNob3J0ZW4uCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6IFNob3J0ZW4uCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6IFNob3J0ZW4uCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KTogU2hvcnRlbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOiBTaG9ydGVuICNpZmRlZiBzZWN0
aW9uIGEgYml0IGJ5IHNoYXJpbmcgY29tbW9uIHR5cGVkZWZzLgorCiAyMDA5LTA4LTI3ICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAJKHJldmlzaW9uIDQ3ODM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwzNCArMTQ0LDIyIEBAIFN0cmluZyBJ
bWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSAKIAogYm9vbCBJbWFnZVNvdXJjZTo6aXNT
aXplQXZhaWxhYmxlKCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7CisgICAgcmV0
dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkgOiBmYWxzZTsKIH0K
IAogSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29k
ZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5z
aXplKCk7CisgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+c2l6ZSgpIDogSW50U2l6
ZSgpOwogfQogCiBJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNp
emUoKTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOwor
ICAgIHJldHVybiBtX2RlY29kZXIgPyBmcmFtZVNpemVBdEluZGV4KGluZGV4KSA6IEludFNpemUo
KTsKIH0KIAogaW50IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQoKQogewotICAgIGlmICgh
bV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Ci0KLSAgICByZXR1cm4g
bV9kZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9k
ZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6IGNBbmltYXRpb25Ob25lOwogfQogCiBzaXplX3Qg
SW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdApAQCAtMTk4LDE1ICsxODYsNiBAQCBOYXRp
dmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBCiAgICAgcmV0dXJuIGJ1ZmZlci0+
YXNOZXdOYXRpdmVJbWFnZSgpOwogfQogCi1ib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsKLX0KLQogZmxvYXQgSW1hZ2VT
b3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIW1f
ZGVjb2RlcikKQEAgLTIzNyw0ICsyMTYsMTMgQEAgYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgocwogICAgICAgICBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCktPmhhc0FscGhhKCkgOiB0cnVlOwogfQogCitib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXIt
PnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsKK30KKwogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiA0NzgzNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksMzkgKzU5LDMyIEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiBjbGFzcyBTdHJpbmc7CiAKLSNpZiBQTEFURk9STShXWCkKLWNsYXNzIEltYWdlRGVjb2RlcjsK
LXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLXR5cGVkZWYgY29u
c3QgVmVjdG9yPGNoYXI+KiBOYXRpdmVCeXRlUHRyOwotI2lmIFVTRShXWEdDKQotdHlwZWRlZiB3
eEdyYXBoaWNzQml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKLSNlbHNlCi10eXBlZGVmIHd4Qml0bWFw
KiBOYXRpdmVJbWFnZVB0cjsKLSNlbmRpZgotI2VsaWYgUExBVEZPUk0oQ0cpCisjaWYgUExBVEZP
Uk0oQ0cpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0
eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShRVCkKIGNs
YXNzIEltYWdlRGVjb2RlclF0OwogdHlwZWRlZiBJbWFnZURlY29kZXJRdCogTmF0aXZlSW1hZ2VT
b3VyY2VQdHI7CiB0eXBlZGVmIFFQaXhtYXAqIE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgUExBVEZP
Uk0oQ0FJUk8pCisjZWxzZQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRlZiBJbWFnZURlY29k
ZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2lmIFBMQVRGT1JNKFdYKQorI2lmIFVTRShXWEdD
KQordHlwZWRlZiB3eEdyYXBoaWNzQml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKKyNlbHNlCit0eXBl
ZGVmIHd4Qml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKKyNlbmRpZgorI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCiB0eXBlZGVmIGNhaXJvX3N1cmZhY2VfdCogTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFU
Rk9STShTS0lBKQotY2xhc3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5h
dGl2ZUltYWdlU291cmNlUHRyOwogdHlwZWRlZiBOYXRpdmVJbWFnZVNraWEqIE5hdGl2ZUltYWdl
UHRyOwogI2VsaWYgUExBVEZPUk0oSEFJS1UpCi1jbGFzcyBJbWFnZURlY29kZXI7Ci10eXBlZGVm
IEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIEJCaXRtYXAqIE5h
dGl2ZUltYWdlUHRyOwogI2VsaWYgUExBVEZPUk0oV0lOQ0UpCi1jbGFzcyBJbWFnZURlY29kZXI7
Ci10eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIFJl
ZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwogI2VuZGlmCisjZW5kaWYKIAogY29u
c3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRpb25Ob25l
ID0gLTI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46606</attachid>
            <date>2010-01-14 14:37:16 -0800</date>
            <delta_ts>2010-01-14 14:45:13 -0800</delta_ts>
            <desc>Condense downsampling logic</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>28634</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzI5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTQgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IGltYWdlIGRlY29kZXJzIGJ5IG1ha2luZyBkb3duc2FtcGxpbmcgZnVuY3Rpb25z
IGF2YWlsYWJsZSBhdAorICAgICAgICBhbGwgdGltZXMsIGFsbG93aW5nIG11Y2ggZHVwbGljYXRl
ZCBsb2dpYyB0byBiZSBjb2xsYXBzZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODc1MQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNjYWxlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzZXRNYXhOdW1QaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFi
bGUpOgorCiAyMDEwLTAxLTE0ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEyICszNSw2IEBACiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjZW5kaWYKIAotI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0jaWZuZGVmIElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUwotI2RlZmluZSBJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkdfTUFYX05VTUJFUl9PRl9QSVhFTFMgKDEwMjQgKiAxMDI0KQotI2VuZGlm
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3Vy
Y2UoKQpAQCAtODEsNiArNzUsOSBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgbV9kZWNvZGVyID0gc3RhdGlj
X2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhKSk7
CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyNpZm5kZWYgSU1BR0Vf
REVDT0RFUl9ET1dOX1NBTVBMSU5HX01BWF9OVU1CRVJfT0ZfUElYRUxTCisjZGVmaW5lIElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUyAoMTAyNCAqIDEwMjQp
CisjZW5kaWYKICAgICAgICAgaWYgKG1fZGVjb2RlcikKICAgICAgICAgICAgIG1fZGVjb2Rlci0+
c2V0TWF4TnVtUGl4ZWxzKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09G
X1BJWEVMUyk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw5ICsyMyw3IEBACiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIAotI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2VuZGlm
CiAKICNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZURlY29k
ZXIuaCIKQEAgLTE4NCw4ICsxODIsNiBAQCBpbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25z
dAogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0K
IG5hbWVzcGFjZSB7CiAKIGVudW0gTWF0Y2hUeXBlIHsKQEAgLTIxMCw2ICsyMDYsOSBAQCBpbmxp
bmUgdm9pZCBmaWxsU2NhbGVkVmFsdWVzKFZlY3RvcjxpbnQ+CiAKIHRlbXBsYXRlIDxNYXRjaFR5
cGUgdHlwZT4gaW50IGdldFNjYWxlZFZhbHVlKGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1
ZXMsIGludCB2YWx1ZVRvTWF0Y2gsIGludCBzZWFyY2hTdGFydCkKIHsKKyAgICBpZiAoc2NhbGVk
VmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9NYXRjaDsKKwogICAgIGNv
bnN0IGludCogZGF0YVN0YXJ0ID0gc2NhbGVkVmFsdWVzLmRhdGEoKTsKICAgICBjb25zdCBpbnQq
IGRhdGFFbmQgPSBkYXRhU3RhcnQgKyBzY2FsZWRWYWx1ZXMuc2l6ZSgpOwogICAgIGNvbnN0IGlu
dCogbWF0Y2hlZCA9IHN0ZDo6bG93ZXJfYm91bmQoZGF0YVN0YXJ0ICsgc2VhcmNoU3RhcnQsIGRh
dGFFbmQsIHZhbHVlVG9NYXRjaCk7CkBAIC0yMjgsMTggKzIyNywxOSBAQCB0ZW1wbGF0ZSA8TWF0
Y2hUeXBlIHR5cGU+IGludCBnZXRTY2FsZWRWCiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJl
U2NhbGVEYXRhSWZOZWNlc3NhcnkoKQogewotICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgp
OwotICAgIGludCBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgaW50IHdpZHRoID0gc2l6
ZSgpLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKICAgICBpbnQg
bnVtUGl4ZWxzID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgaWYgKG1fbWF4TnVtUGl4ZWxzIDw9IDAg
fHwgbnVtUGl4ZWxzIDw9IG1fbWF4TnVtUGl4ZWxzKSB7CisgICAgaWYgKG1fbWF4TnVtUGl4ZWxz
ID4gMCAmJiBudW1QaXhlbHMgPiBtX21heE51bVBpeGVscykgeworICAgICAgICBtX3NjYWxlZCA9
IHRydWU7CisgICAgICAgIGRvdWJsZSBzY2FsZSA9IHNxcnQobV9tYXhOdW1QaXhlbHMgLyAoZG91
YmxlKW51bVBpeGVscyk7CisgICAgICAgIGZpbGxTY2FsZWRWYWx1ZXMobV9zY2FsZWRDb2x1bW5z
LCBzY2FsZSwgd2lkdGgpOworICAgICAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkUm93cywg
c2NhbGUsIGhlaWdodCk7CisgICAgfSBlbHNlIGlmIChtX3NjYWxlZCkgewogICAgICAgICBtX3Nj
YWxlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2NhbGVkQ29sdW1ucy5j
bGVhcigpOworICAgICAgICBtX3NjYWxlZFJvd3MuY2xlYXIoKTsKICAgICB9Ci0KLSAgICBtX3Nj
YWxlZCA9IHRydWU7Ci0gICAgZG91YmxlIHNjYWxlID0gc3FydChtX21heE51bVBpeGVscyAvIChk
b3VibGUpbnVtUGl4ZWxzKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkQ29sdW1ucywg
c2NhbGUsIHdpZHRoKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkUm93cywgc2NhbGUs
IGhlaWdodCk7CiB9CiAKIGludCBJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRYKGludCBv
cmlnWCwgaW50IHNlYXJjaFN0YXJ0KQpAQCAtMjY3LDYgKzI2Nyw0IEBAIGludCBJbWFnZURlY29k
ZXI6OnNjYWxlZFkoaW50IG9yaWdZLCBpbnQKICAgICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhh
Y3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKIH0KIAotI2VuZGlmIC8vIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0KIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMyOTAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAsMTEgKzEzMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAot
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgIGNvbnN0IElu
dFJlY3QmIHNjYWxlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFJlY3Q7IH0KLSAgICAg
ICAgdm9pZCBzZXRTY2FsZWRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9zY2FsZWRSZWN0ID0g
cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShRVCkKICAgICAgICAgdm9pZCBzZXREZWNvZGVk
SW1hZ2UoY29uc3QgUUltYWdlJiBpbWFnZSk7CiAgICAgICAgIFFJbWFnZSBkZWNvZGVkSW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CkBAIC0xOTIsOSArMTg3LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAgLy8gVGhlIGFuaW1hdGlv
biBkZWxheS4KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJh
bWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgotI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgIEludFJlY3QgbV9zY2FsZWRSZWN0
OwotI2VuZGlmCiAgICAgfTsKIAogICAgIC8vIFRoZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVz
ZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGltYWdlIGZvcm1hdCBkZWNvZGVycwpAQCAt
MjEwLDEwICsyMDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICA6IG1fZmFp
bGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1faXNBbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKICAgICAgICAgICAgICwgbV9tYXhOdW1QaXhlbHMoLTEpCiAgICAg
ICAgICAgICAsIG1fc2NhbGVkKGZhbHNlKQotI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQog
CkBAIC0yNTIsNiArMjQyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3NpemU7CiAgICAgICAgIH0KIAorICAgICAgICBJbnRTaXplIHNjYWxlZFNpemUoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zY2FsZWQgPyBJbnRTaXplKG1f
c2NhbGVkQ29sdW1ucy5zaXplKCksIG1fc2NhbGVkUm93cy5zaXplKCkpIDogc2l6ZSgpOworICAg
ICAgICB9CisKICAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiBmcmFtZSB8aW5kZXh8LiAg
VGhpcyB3aWxsIG9ubHkgZGlmZmVyIGZyb20gc2l6ZSgpCiAgICAgICAgIC8vIGZvciBmb3JtYXRz
IHdoZXJlIGRpZmZlcmVudCBmcmFtZXMgYXJlIGRpZmZlcmVudCBzaXplcyAobmFtZWx5IElDTywK
ICAgICAgICAgLy8gd2hlcmUgZWFjaCBmcmFtZSByZXByZXNlbnRzIGEgZGlmZmVyZW50IGljb24g
d2l0aGluIHRoZSBtYXN0ZXIgZmlsZSkuCkBAIC0zMDcsMjYgKzMwMiwyMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAg
ICAgICB2b2lkIHNldE1heE51bVBpeGVscyhpbnQgbSkgeyBtX21heE51bVBpeGVscyA9IG07IH0K
LSAgICAgICAgSW50U2l6ZSBzY2FsZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWQgPyBJ
bnRTaXplKG1fc2NhbGVkQ29sdW1ucy5zaXplKCksIG1fc2NhbGVkUm93cy5zaXplKCkpIDogbV9z
aXplOyB9CiAjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQogICAgICAgICB2b2lkIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2Fy
eSgpOwogICAgICAgICBpbnQgdXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNo
U3RhcnQgPSAwKTsKICAgICAgICAgaW50IGxvd2VyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50
IHNlYXJjaFN0YXJ0ID0gMCk7CiAgICAgICAgIGludCB1cHBlckJvdW5kU2NhbGVkWShpbnQgb3Jp
Z1ksIGludCBzZWFyY2hTdGFydCA9IDApOwogICAgICAgICBpbnQgbG93ZXJCb3VuZFNjYWxlZFko
aW50IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKICAgICAgICAgaW50IHNjYWxlZFkoaW50
IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKLSNlbmRpZgogCiAgICAgICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgZGF0YS4KLSNpZiBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpbnQgbV9tYXhOdW1QaXhlbHM7CiAg
ICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkQ29sdW1uczsKICAgICAgICAgVmVjdG9yPGludD4g
bV9zY2FsZWRSb3dzOwogICAgICAgICBib29sIG1fc2NhbGVkOwotI2VuZGlmCiAgICAgICAgIFZl
Y3RvcjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKICAgICAgICAgYm9vbCBtX2Zh
aWxlZDsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzI5MCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0OCw5ICsyNDgsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2
YWlsYWJsZSh1CiB7CiAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAg
ICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yNzIsMjcgKzI3MCwxNSBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgp
IC0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKIAogICAgIFJHQkEzMkJ1ZmZlciogY29uc3Qg
YnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBidWZmZXItPnNl
dFJlY3QoZnJhbWVSZWN0KTsKKyAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1l
UmVjdC54KCkpOworICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5y
aWdodCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0
LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5ib3R0
b20oKSwgdG9wKTsKKyAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0
IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQotICAgIGlmIChtX3NjYWxlZCkgewotICAgICAgICBpbnQgbGVmdCA9IHVwcGVy
Qm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwotICAgICAgICBpbnQgcmlnaHQgPSBsb3dlckJv
dW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7Ci0gICAgICAgIGludCB0b3AgPSB1
cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IGxv
d2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5ib3R0b20oKSwgdG9wKTsKLSAgICAgICAgYnVmZmVy
LT5zZXRTY2FsZWRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAt
IHRvcCkpOwotICAgIH0gZWxzZQotICAgICAgICBidWZmZXItPnNldFNjYWxlZFJlY3QoZnJhbWVS
ZWN0KTsKLSNlbmRpZgotICAgIAogICAgIGlmIChmcmFtZUluZGV4ID09IDApIHsKICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBw
cmV2aW91cyBkYXRhLgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0g
ICAgICAgIGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7Ci0jZWxzZQot
ICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2l6ZSgpOwotI2VuZGlmCi0gICAg
ICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5o
ZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndp
ZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzIyLDEzICsz
MDgsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBm
cmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBp
eGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0jaWYgRU5BQkxFKElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZS
ZWN0ID0gcHJldkJ1ZmZlci0+c2NhbGVkUmVjdCgpOwotICAgICAgICAgICAgY29uc3QgSW50U2l6
ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKLSNlbHNlCiAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnJlY3QoKTsKLSAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzaXplKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoKGZy
YW1lSW5kZXggPT0gMCkKICAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRS
ZWN0KEludFBvaW50KCksIGJ1ZmZlclNpemUpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFy
aW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKQEAg
LTM1OCwyNyArMzM5LDYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1
bgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weU9uZVBpeGVs
KGNvbnN0IEdJRkltYWdlRGVjb2RlclByaXZhdGUqIHJlYWRlciwgY29uc3QgdW5zaWduZWQgY2hh
ciogc291cmNlQWRkciwgdW5zaWduZWQgY2hhciogY29sb3JNYXAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZSwgYm9vbCB3cml0ZVRyYW5zcGFy
ZW50UGl4ZWxzLCBSR0JBMzJCdWZmZXImIGJ1ZmZlciwgaW50IHgsIGludCAgeSwgYm9vbCYgc2F3
QWxwaGEpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICpzb3VyY2VB
ZGRyOwotICAgIGlmICgoIXJlYWRlci0+aXNUcmFuc3BhcmVudCgpIHx8IChzb3VyY2VWYWx1ZSAh
PSByZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFw
U2l6ZSkpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNvdXJjZVZhbHVlKSAqIDM7Ci0gICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIGNv
bG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2Nv
bG9ySW5kZXggKyAyXSwgMjU1KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzYXdBbHBoYSA9IHRy
dWU7Ci0gICAgICAgIC8vIFdlIG1heSBvciBtYXkgbm90IG5lZWQgdG8gd3JpdGUgdHJhbnNwYXJl
bnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCi0gICAgICAgIC8vIElmIHdlJ3JlIGNvbXBvc2l0aW5n
IGFnYWluc3QgYSBwcmV2aW91cyBpbWFnZSwgaXQncyB3cm9uZywgYW5kIGlmCi0gICAgICAgIC8v
IHdlJ3JlIHdyaXRpbmcgYXRvcCBhIGNsZWFyZWQsIGZ1bGx5IHRyYW5zcGFyZW50IGJ1ZmZlciwg
aXQncwotICAgICAgICAvLyB1bm5lY2Vzc2FyeTsgYnV0IGlmIHdlJ3JlIGRlY29kaW5nIGFuIGlu
dGVybGFjZWQgZ2lmIGFuZAotICAgICAgICAvLyBkaXNwbGF5aW5nIGl0ICJIYWViZXJsaSItc3R5
bGUsIHdlIG11c3Qgd3JpdGUgdGhlc2UgZm9yIHBhc3NlcwotICAgICAgICAvLyBiZXlvbmQgdGhl
IGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0aGUKLSAg
ICAgICAgLy8gbGF0ZXIgb25lcy4KLSAgICAgICAgaWYgKHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMp
Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKLSAgICB9Ci19
Ci0KIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUlu
ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IHJvd0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyKiByb3dFbmQsCkBAIC0zODgsMTIgKzM0OCwxNiBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3codW5zCiB7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3Jk
aW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8v
IG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8gKG1fcmVh
ZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4KLSAgICBpbnQg
eCA9IG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKLSAgICBpbnQgeSA9IG1fcmVhZGVyLT5mcmFt
ZVlPZmZzZXQoKSArIHJvd051bWJlcjsKLQotICAgIC8vIFNhbml0eS1jaGVjayB0aGUgYXJndW1l
bnRzLgotICAgIGlmICgocm93QnVmZmVyID09IDApIHx8ICh5ID49IHNpemUoKS5oZWlnaHQoKSkp
CisgICAgLy8gKG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNl
dCgpKS4gIFRoZXJlIGlzIG5vCisgICAgLy8gZ3VhcmFudGVlIHRoYXQKKyAgICAvLyAocm93RW5k
IC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0
KCkpLCBzbworICAgIC8vIHdlIG11c3QgZW5zdXJlIHdlIGRvbid0IHJ1biBvZmYgdGhlIGVuZCBv
ZiBlaXRoZXIgdGhlIHNvdXJjZSBkYXRhIG9yIHRoZQorICAgIC8vIHJvdydzIFgtY29vcmRpbmF0
ZXMuCisgICAgaW50IHhCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRYKG1fcmVhZGVyLT5mcmFtZVhP
ZmZzZXQoKSk7CisgICAgaW50IHlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKG1fcmVhZGVyLT5m
cmFtZVlPZmZzZXQoKSArIHJvd051bWJlcik7CisgICAgaW50IHhFbmQgPSBsb3dlckJvdW5kU2Nh
bGVkWChzdGQ6Om1pbih4QmVnaW4gKyAocm93RW5kIC0gcm93QnVmZmVyKSwgc2l6ZSgpLndpZHRo
KCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOworICAgIGludCB5RW5kID0gbG93ZXJCb3VuZFNjYWxl
ZFkoc3RkOjptaW4oeUJlZ2luICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUo
KS5oZWlnaHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CisgICAgaWYgKChyb3dCdWZmZXIgPT0g
MCkgfHwgKHhCZWdpbiA8IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8
ICh5RW5kIDw9IHlCZWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRo
ZSBjb2xvcm1hcC4KQEAgLTQwOCw1OCArMzcyLDMwIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyh1bnMKICAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
Ci0gICAgaW50IGRlc3RZQmVnaW4gPSB5OwotICAgIGludCBkZXN0WUVuZCA9IHN0ZDo6bWluKHkg
KyBzdGF0aWNfY2FzdDxpbnQ+KHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBp
bnQgZGVzdFhCZWdpbiA9IHg7Ci0gICAgaW50IGRlc3RYRW5kID0gc3RkOjptaW4oeCArIChyb3dF
bmQgLSByb3dCdWZmZXIpLCBzaXplKCkud2lkdGgoKSk7Ci0KLSAgICBpZiAobV9zY2FsZWQpIHsK
LSAgICAgICAgZGVzdFlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKGRlc3RZQmVnaW4pOwotICAg
ICAgICBpZiAoZGVzdFlCZWdpbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgZGVzdFlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShkZXN0WUVuZCAtIDEsIGRlc3RZQmVnaW4g
KyAxKTsKLSAgICAgICAgaWYgKGRlc3RZRW5kIDwgZGVzdFlCZWdpbikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgIGRlc3RYQmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWChkZXN0
WEJlZ2luKTsKLSAgICAgICAgaWYgKGRlc3RYQmVnaW4gPCAwKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGRlc3RYRW5kID0gbG93ZXJCb3VuZFNjYWxlZFgoZGVzdFhFbmQgLSAx
LCBkZXN0WEJlZ2luICsgMSk7Ci0gICAgICAgIGlmIChkZXN0WEVuZCA8IGRlc3RYQmVnaW4pCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICArK2Rlc3RYRW5kOwotICAgICAgICAr
K2Rlc3RZRW5kOwotICAgICAgICB4ID0gZGVzdFhCZWdpbjsKLSAgICAgICAgeSA9IGRlc3RZQmVn
aW47Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0
YSBpbnRvIHRoZSBmcmFtZS4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0Ci0gICAgLy8gKHJv
d0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9m
ZnNldCgpKSwgc28KLSAgICAvLyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSBl
bmQgb2YgZWl0aGVyIHRoZSBzb3VyY2UgZGF0YSBvciB0aGUKLSAgICAvLyByb3cncyBYLWNvb3Jk
aW5hdGVzLgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgaWYg
KG1fc2NhbGVkKSB7Ci0gICAgICAgIGZvciAoOyB4IDwgZGVzdFhFbmQ7ICsreCkgewotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQWRkciA9IHJvd0J1ZmZlciArIG1fc2NhbGVkQ29s
dW1uc1t4XSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKLSAgICAgICAgICAgIGNvcHlPbmVQ
aXhlbChtX3JlYWRlciwgc291cmNlQWRkciwgY29sb3JNYXAsIGNvbG9yTWFwU2l6ZSwgd3JpdGVU
cmFuc3BhcmVudFBpeGVscywgYnVmZmVyLCB4LCB5LCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSk7
CisgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAK
KyAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/IG1f
c2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAoc291cmNlVmFsdWUgIT0gbV9y
ZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6
ZSkpIHsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihzb3VyY2VWYWx1ZSkgKiAzOworICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwg
eUJlZ2luLCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBj
b2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBt
YXkgb3IgbWF5IG5vdCBuZWVkIHRvIHdyaXRlIHRyYW5zcGFyZW50IHBpeGVscyB0byB0aGUgYnVm
ZmVyLgorICAgICAgICAgICAgLy8gSWYgd2UncmUgY29tcG9zaXRpbmcgYWdhaW5zdCBhIHByZXZp
b3VzIGltYWdlLCBpdCdzIHdyb25nLCBhbmQgaWYKKyAgICAgICAgICAgIC8vIHdlJ3JlIHdyaXRp
bmcgYXRvcCBhIGNsZWFyZWQsIGZ1bGx5IHRyYW5zcGFyZW50IGJ1ZmZlciwgaXQncworICAgICAg
ICAgICAgLy8gdW5uZWNlc3Nhcnk7IGJ1dCBpZiB3ZSdyZSBkZWNvZGluZyBhbiBpbnRlcmxhY2Vk
IGdpZiBhbmQKKyAgICAgICAgICAgIC8vIGRpc3BsYXlpbmcgaXQgIkhhZWJlcmxpIi1zdHlsZSwg
d2UgbXVzdCB3cml0ZSB0aGVzZSBmb3IgcGFzc2VzCisgICAgICAgICAgICAvLyBiZXlvbmQgdGhl
IGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0aGUKKyAg
ICAgICAgICAgIC8vIGxhdGVyIG9uZXMuCisgICAgICAgICAgICBpZiAod3JpdGVUcmFuc3BhcmVu
dFBpeGVscykKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5QmVnaW4sIDAsIDAs
IDAsIDApOwogICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSAgICBmb3IgKHVuc2lnbmVk
IGNoYXIqIHNvdXJjZUFkZHIgPSByb3dCdWZmZXI7IHNvdXJjZUFkZHIgPCByb3dFbmQgJiYgeCA8
IHNpemUoKS53aWR0aCgpOyArK3NvdXJjZUFkZHIsICsreCkKLSAgICAgICAgY29weU9uZVBpeGVs
KG1fcmVhZGVyLCBzb3VyY2VBZGRyLCBjb2xvck1hcCwgY29sb3JNYXBTaXplLCB3cml0ZVRyYW5z
cGFyZW50UGl4ZWxzLCBidWZmZXIsIHgsIHksIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhKTsKLQot
ICAgICAvLyBUZWxsIHRoZSBmcmFtZSB0byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVkIGJlLgot
ICAgIGlmIChyZXBlYXRDb3VudCA+IDEpIHsKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQotICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyhkZXN0WEJlZ2luLCBkZXN0
WEVuZCwgZGVzdFlCZWdpbiwgZGVzdFlFbmQpOwotI2Vsc2UKLSAgICAgICAgYnVmZmVyLmNvcHlS
b3dOVGltZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5LCBzdGQ6Om1pbih5ICsgc3Rh
dGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkpOwotI2VuZGlmCiAg
ICAgfQogCisgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVl
ZCBiZS4KKyAgICBpZiAocmVwZWF0Q291bnQgPiAxKQorICAgICAgICBidWZmZXIuY29weVJvd05U
aW1lcyh4QmVnaW4sIHhFbmQsIHlCZWdpbiwgeUVuZCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNDc4LDExICs0MTQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0
ZSh1bnNpCiAgICAgaWYgKCFtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBU
aGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFuc3BhcmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0
IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVzdWx0aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFy
ZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhhKGZhbHNlKS4KLSNpZiBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBpZiAoYnVmZmVyLnNjYWxlZFJlY3QoKS5jb250
YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQotI2Vsc2UKLSAgICAgICAg
aWYgKGJ1ZmZlci5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkK
LSNlbmRpZgorICAgICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBv
aW50KCksIHNjYWxlZFNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZh
bHNlKTsKICAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDApIHsKICAgICAgICAgICAgIC8v
IFRyaWNreSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkgaWYgZXZl
cnl3aGVyZQpAQCAtNTA3LDExICs0MzksNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVj
dCBpcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVj
dCwgd2Uga25vdyB0aGUgY3VycmVudCBmcmFtZSBoYXMgbm8gYWxwaGEuCiAgICAgICAgICAgICBp
ZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3Nl
T3ZlcndyaXRlQmdjb2xvcikKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5H
KQotICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5z
Y2FsZWRSZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+c2NhbGVkUmVjdCgpKSkKLSNlbHNlCiAg
ICAgICAgICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3Qo
KS5jb250YWlucyhwcmV2QnVmZmVyLT5yZWN0KCkpKQotI2VuZGlmCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEs
NiArNDMxLDE0IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAorYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7
CisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAgLTQ2MCw3OCAr
NDY4LDYgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplTwogICAgIH0K
IH0KIAotc3RhdGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBp
bnQgZGVzdFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBzcmNXaWR0aAotI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkQ29sdW1ucwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi17Ci0jaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKLSAgICBpZiAoc2NhbGVkKSB7Ci0gICAgICAgIGludCBudW1D
b2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbnVtQ29sdW1uczsgKyt4KSB7Ci0gICAgICAgICAgICBKU0FNUExFKiBqc2FtcGxlID0gc3Jj
ICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjID0ganNhbXBs
ZVswXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG0gPSBqc2FtcGxlWzFdOwotICAgICAgICAgICAg
dW5zaWduZWQgeSA9IGpzYW1wbGVbMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBrID0ganNhbXBs
ZVszXTsKLSAgICAgICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgYyAqIGsgLyAyNTUsIG0g
KiBrIC8gMjU1LCB5ICogayAvIDI1NSwgMHhGRik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotICAgIGZvciAoSkRJTUVOU0lPTiB4ID0gMDsgeCA8IHNyY1dpZHRo
OyArK3gpIHsKLSAgICAgICAgdW5zaWduZWQgYyA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWduZWQg
bSA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWduZWQgeSA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWdu
ZWQgayA9ICpzcmMrKzsKLQotICAgICAgICAvLyBTb3VyY2UgaXMgJ0ludmVydGVkIENNWUsnLCBv
dXRwdXQgaXMgUkdCLgotICAgICAgICAvLyBTZWU6IGh0dHA6Ly93d3cuZWFzeXJnYi5jb20vbWF0
aC5waHA/TUFUSD1NMTIjdGV4dDEyCi0gICAgICAgIC8vIE9yOiAgaHR0cDovL3d3dy5pbGtlcmF0
YWxheS5jb20vY29sb3JzcGFjZXNmYXEucGhwI3JnYgotCi0gICAgICAgIC8vIEZyb20gQ01ZSyB0
byBDTVkKLSAgICAgICAgLy8gQyA9IEMgKiAoIDEgLSBLICkgKyBLCi0gICAgICAgIC8vIE0gPSBN
ICogKCAxIC0gSyApICsgSwotICAgICAgICAvLyBZID0gWSAqICggMSAtIEsgKSArIEsKLQotICAg
ICAgICAvLyBGcm9tIEludmVydGVkIENNWUsgdG8gQ01ZIGlzIHRodXM6Ci0gICAgICAgIC8vIEMg
PSAoMS1pQykgKiAoMSAtICgxLWlLKSkgKyAoMS1pSykgPT4gMSAtIGlDKmlLCi0gICAgICAgIC8v
IFNhbWUgZm9yIE0gYW5kIFkKLQotICAgICAgICAvLyBDb252ZXJ0IGZyb20gQ01ZICgwLi4xKSB0
byBSR0IgKDAuLjEpCi0gICAgICAgIC8vIFIgPSAxIC0gQyA9PiAxIC0gKDEgLSBpQyppSykgPT4g
aUMqaUsKLSAgICAgICAgLy8gRyA9IDEgLSBNID0+IDEgLSAoMSAtIGlNKmlLKSA9PiBpTSppSwot
ICAgICAgICAvLyBCID0gMSAtIFkgPT4gMSAtICgxIC0gaVkqaUspID0+IGlZKmlLCi0KLSAgICAg
ICAgZGVzdC5zZXRSR0JBKHgsIGRlc3RZLCBjICogayAvIDI1NSwgbSAqIGsgLyAyNTUsIHkgKiBr
IC8gMjU1LCAweEZGKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRSR0JUb1JHQkEo
UkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBz
cmNXaWR0aAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYg
c2NhbGVkQ29sdW1ucwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi17
Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBpZiAoc2NhbGVk
KSB7Ci0gICAgICAgIGludCBudW1Db2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7Ci0gICAgICAgICAgICBK
U0FNUExFKiBqc2FtcGxlID0gc3JjICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7Ci0gICAgICAgICAg
ICBkZXN0LnNldFJHQkEoeCwgZGVzdFksIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVb
Ml0sIDB4RkYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBmb3IgKEpESU1FTlNJT04geCA9IDA7IHggPCBzcmNXaWR0aDsgKyt4KSB7Ci0gICAgICAgIHVu
c2lnbmVkIHIgPSAqc3JjKys7Ci0gICAgICAgIHVuc2lnbmVkIGcgPSAqc3JjKys7Ci0gICAgICAg
IHVuc2lnbmVkIGIgPSAqc3JjKys7Ci0gICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgciwg
ZywgYiwgMHhGRik7Ci0gICAgfQotfQotCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNj
YW5saW5lcygpCiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC01
NDAsMTUgKzQ3Niw4IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkK
ICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgUkdCQTMy
QnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaW50IGJ1ZmZl
cldpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgIGludCBidWZmZXJIZWlnaHQgPSBzaXpl
KCkuaGVpZ2h0KCk7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAg
ICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRo
L2hlaWdodC4KLSAgICAgICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgICAgICBidWZmZXJXaWR0
aCA9IG1fc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgICAgICBidWZmZXJIZWlnaHQgPSBt
X3NjYWxlZFJvd3Muc2l6ZSgpOwotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgaW50IGJ1ZmZl
cldpZHRoID0gbV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnMuc2l6ZSgpIDogc2l6ZSgpLndpZHRo
KCk7CisgICAgICAgIGludCBidWZmZXJIZWlnaHQgPSBtX3NjYWxlZCA/IG1fc2NhbGVkUm93cy5z
aXplKCkgOiBzaXplKCkuaGVpZ2h0KCk7CiAKICAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShi
dWZmZXJXaWR0aCwgYnVmZmVySGVpZ2h0KSkgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVl
OwpAQCAtNTcyLDI3ICs1MDEsMzIgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoKQogICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhpbmZvLCBzYW1wbGVzLCAx
KSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGludCBkZXN0WSA9
IHNvdXJjZVk7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAg
ICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgICAgICBkZXN0WSA9IHNjYWxlZFkoc291cmNlWSk7
Ci0gICAgICAgICAgICBpZiAoZGVzdFkgPCAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpbnQgZGVzdFkgPSBzY2FsZWRZKHNvdXJjZVkpOworICAgICAgICBpZiAoZGVzdFkg
PCAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludCB3aWR0aCA9IG1fc2NhbGVk
ID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IGluZm8tPm91dHB1dF93aWR0aDsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBKU0FNUExFKiBq
c2FtcGxlID0gKnNhbXBsZXMgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAq
ICgoaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IpID8gMyA6IDQpOworICAgICAgICAg
ICAgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQorICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXRSR0JBKHgsIGRlc3RZLCBqc2FtcGxlWzBdLCBqc2FtcGxlWzFdLCBqc2FtcGxl
WzJdLCAweEZGKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9
PSBKQ1NfQ01ZSykgeworICAgICAgICAgICAgICAgIC8vIFNvdXJjZSBpcyAnSW52ZXJ0ZWQgQ01Z
SycsIG91dHB1dCBpcyBSR0IuCisgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwOi8vd3d3LmVh
c3lyZ2IuY29tL21hdGgucGhwP01BVEg9TTEyI3RleHQxMgorICAgICAgICAgICAgICAgIC8vIE9y
OiAgaHR0cDovL3d3dy5pbGtlcmF0YWxheS5jb20vY29sb3JzcGFjZXNmYXEucGhwI3JnYgorICAg
ICAgICAgICAgICAgIC8vIEZyb20gQ01ZSyB0byBDTVk6CisgICAgICAgICAgICAgICAgLy8gWCA9
ICAgWCAgICAqICgxIC0gICBLICAgKSArICAgSyAgW2ZvciBYID0gQywgTSwgb3IgWV0KKyAgICAg
ICAgICAgICAgICAvLyBUaHVzLCBmcm9tIEludmVydGVkIENNWUsgdG8gQ01ZIGlzOgorICAgICAg
ICAgICAgICAgIC8vIFggPSAoMS1pWCkgKiAoMSAtICgxLWlLKSkgKyAoMS1pSykgPT4gMSAtIGlY
KmlLCisgICAgICAgICAgICAgICAgLy8gRnJvbSBDTVkgKDAuLjEpIHRvIFJHQiAoMC4uMSk6Cisg
ICAgICAgICAgICAgICAgLy8gUiA9IDEgLSBDID0+IDEgLSAoMSAtIGlDKmlLKSA9PiBpQyppSyAg
W0cgYW5kIEIgc2ltaWxhcl0KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBrID0ganNhbXBsZVsz
XTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwganNhbXBsZVswXSAq
IGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8gMjU1LCBqc2FtcGxlWzJdICogayAvIDI1NSwgMHhG
Rik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlu
Zm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQotICAgICAgICAgICAgY29udmVydFJHQlRv
UkdCQShidWZmZXIsIGRlc3RZLCAqc2FtcGxlcywgaW5mby0+b3V0cHV0X3dpZHRoLCBtX3NjYWxl
ZCwgbV9zY2FsZWRDb2x1bW5zKTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby0+b3V0X2NvbG9yX3Nw
YWNlID09IEpDU19DTVlLKQotICAgICAgICAgICAgY29udmVydENNWUtUb1JHQkEoYnVmZmVyLCBk
ZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1fc2NhbGVkQ29s
dW1ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0g
ICAgICAgIGlmIChpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikKLSAgICAgICAgICAg
IGNvbnZlcnRSR0JUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93
aWR0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01Z
SykKLSAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgZGVzdFksICpzYW1wbGVz
LCBpbmZvLT5vdXRwdXRfd2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gNTMyOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUg
aW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1NpemVBdmFpbGFibGUoKTsKIAorICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZl
ciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC01
OCwxNiArNjAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgb3V0cHV0U2Nh
bmxpbmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKLSNpZiBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBib29sIHNldFNpemUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgIHByaXZhdGU6CiAgICAgICAgIEpQ
RUdJbWFnZVJlYWRlciogbV9yZWFkZXI7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2
aXNpb24gNTMyOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsOSArMjU2LDcgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgICAgICAgICBsb25nam1wKHBu
Zy0+am1wYnVmLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotI2lmIEVOQUJM
RShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIHByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSgpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaW50IGJpdERlcHRoLCBjb2xvclR5
cGUsIGludGVybGFjZVR5cGUsIGNvbXByZXNzaW9uVHlwZSwgZmlsdGVyVHlwZSwgY2hhbm5lbHM7
CkBAIC0zMzAsMTMgKzMyOCw4IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAg
UkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1
ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSNpZiBFTkFCTEUo
SU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpbnQgd2lkdGggPSBtX3NjYWxl
ZCA/IG1fc2NhbGVkQ29sdW1ucy5zaXplKCkgOiBzaXplKCkud2lkdGgoKTsKICAgICAgICAgaW50
IGhlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IHNpemUoKS5oZWlnaHQo
KTsKLSNlbHNlCi0gICAgICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwotICAgICAgICBp
bnQgaGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOwotI2VuZGlmCiAgICAgICAgIGlmICghYnVmZmVy
LnNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFBOR0lt
YWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRlcigpLT5wbmdQdHIoKSkp
LT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICAgICAgbG9uZ2ptcChyZWFkZXIoKS0+cG5nUHRy
KCktPmptcGJ1ZiwgMSk7CkBAIC0zOTYsMzMgKzM4OSwxNSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgICAgIHJvdyA9IHJvd0J1ZmZlcjsKIAogICAgIC8v
IENvcHkgdGhlIGRhdGEgaW50byBvdXIgYnVmZmVyLgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCi0gICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgIGludCBkZXN0WSA9
IHNjYWxlZFkocm93SW5kZXgpOwotICAgICAgICBpZiAoZGVzdFkgPCAwKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpbnQgY29sdW1ucyA9IG1fc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0g
ICAgICAgIGJvb2wgc2F3QWxwaGEgPSBidWZmZXIuaGFzQWxwaGEoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjb2x1bW5zOyArK3gpIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhl
bCA9IHJvdyArIG1fc2NhbGVkQ29sdW1uc1t4XSAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBh
bHBoYSA9IHBpeGVsWzNdOwotICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgZGVzdFksIHBp
eGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKLSAgICAgICAgICAgIGlmICghc2F3
QWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICBzYXdBbHBoYSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgaW50IHdpZHRoID0gbV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnMu
c2l6ZSgpIDogc2l6ZSgpLndpZHRoKCk7CisgICAgaW50IGRlc3RZID0gc2NhbGVkWShyb3dJbmRl
eCk7CisgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
ICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwogICAgIGJvb2wgc2F3QWxwaGEgPSBidWZm
ZXIuaGFzQWxwaGEoKTsKICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAg
ICAgICAgdW5zaWduZWQgcmVkID0gKnJvdysrOwotICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICpy
b3crKzsKLSAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICpyb3crKzsKLSAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSAoaGFzQWxwaGEgPyAqcm93KysgOiAyNTUpOwotICAgICAgICBidWZmZXIuc2V0UkdC
QSh4LCByb3dJbmRleCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICBwbmdfYnl0
ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAqIGNv
bG9yQ2hhbm5lbHM7CisgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFsz
XSA6IDI1NTsKKyAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgZGVzdFksIHBpeGVsWzBdLCBwaXhl
bFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgaWYgKCFzYXdBbHBoYSAmJiBhbHBoYSA8
IDI1NSkgewogICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOwogICAgICAgICAgICAgYnVmZmVy
LnNldEhhc0FscGhhKHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46609</attachid>
            <date>2010-01-14 14:45:13 -0800</date>
            <delta_ts>2010-01-14 15:35:31 -0800</delta_ts>
            <desc>Condense downsampling logic, v2</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>28654</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzI5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTQgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IGltYWdlIGRlY29kZXJzIGJ5IG1ha2luZyBkb3duc2FtcGxpbmcgZnVuY3Rpb25z
IGF2YWlsYWJsZSBhdAorICAgICAgICBhbGwgdGltZXMsIGFsbG93aW5nIG11Y2ggZHVwbGljYXRl
ZCBsb2dpYyB0byBiZSBjb2xsYXBzZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODc1MQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNjYWxlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzZXRNYXhOdW1QaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFi
bGUpOgorCiAyMDEwLTAxLTE0ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEyICszNSw2IEBACiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjZW5kaWYKIAotI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0jaWZuZGVmIElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUwotI2RlZmluZSBJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkdfTUFYX05VTUJFUl9PRl9QSVhFTFMgKDEwMjQgKiAxMDI0KQotI2VuZGlm
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3Vy
Y2UoKQpAQCAtODEsNiArNzUsOSBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgbV9kZWNvZGVyID0gc3RhdGlj
X2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhKSk7
CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyNpZm5kZWYgSU1BR0Vf
REVDT0RFUl9ET1dOX1NBTVBMSU5HX01BWF9OVU1CRVJfT0ZfUElYRUxTCisjZGVmaW5lIElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUyAoMTAyNCAqIDEwMjQp
CisjZW5kaWYKICAgICAgICAgaWYgKG1fZGVjb2RlcikKICAgICAgICAgICAgIG1fZGVjb2Rlci0+
c2V0TWF4TnVtUGl4ZWxzKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09G
X1BJWEVMUyk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw5ICsyMyw3IEBACiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIAotI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2VuZGlm
CiAKICNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZURlY29k
ZXIuaCIKQEAgLTE4NCw4ICsxODIsNiBAQCBpbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25z
dAogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0K
IG5hbWVzcGFjZSB7CiAKIGVudW0gTWF0Y2hUeXBlIHsKQEAgLTIxMCw2ICsyMDYsOSBAQCBpbmxp
bmUgdm9pZCBmaWxsU2NhbGVkVmFsdWVzKFZlY3RvcjxpbnQ+CiAKIHRlbXBsYXRlIDxNYXRjaFR5
cGUgdHlwZT4gaW50IGdldFNjYWxlZFZhbHVlKGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1
ZXMsIGludCB2YWx1ZVRvTWF0Y2gsIGludCBzZWFyY2hTdGFydCkKIHsKKyAgICBpZiAoc2NhbGVk
VmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9NYXRjaDsKKwogICAgIGNv
bnN0IGludCogZGF0YVN0YXJ0ID0gc2NhbGVkVmFsdWVzLmRhdGEoKTsKICAgICBjb25zdCBpbnQq
IGRhdGFFbmQgPSBkYXRhU3RhcnQgKyBzY2FsZWRWYWx1ZXMuc2l6ZSgpOwogICAgIGNvbnN0IGlu
dCogbWF0Y2hlZCA9IHN0ZDo6bG93ZXJfYm91bmQoZGF0YVN0YXJ0ICsgc2VhcmNoU3RhcnQsIGRh
dGFFbmQsIHZhbHVlVG9NYXRjaCk7CkBAIC0yMjgsMTggKzIyNywxOSBAQCB0ZW1wbGF0ZSA8TWF0
Y2hUeXBlIHR5cGU+IGludCBnZXRTY2FsZWRWCiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJl
U2NhbGVEYXRhSWZOZWNlc3NhcnkoKQogewotICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgp
OwotICAgIGludCBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgaW50IHdpZHRoID0gc2l6
ZSgpLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKICAgICBpbnQg
bnVtUGl4ZWxzID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgaWYgKG1fbWF4TnVtUGl4ZWxzIDw9IDAg
fHwgbnVtUGl4ZWxzIDw9IG1fbWF4TnVtUGl4ZWxzKSB7CisgICAgaWYgKG1fbWF4TnVtUGl4ZWxz
ID4gMCAmJiBudW1QaXhlbHMgPiBtX21heE51bVBpeGVscykgeworICAgICAgICBtX3NjYWxlZCA9
IHRydWU7CisgICAgICAgIGRvdWJsZSBzY2FsZSA9IHNxcnQobV9tYXhOdW1QaXhlbHMgLyAoZG91
YmxlKW51bVBpeGVscyk7CisgICAgICAgIGZpbGxTY2FsZWRWYWx1ZXMobV9zY2FsZWRDb2x1bW5z
LCBzY2FsZSwgd2lkdGgpOworICAgICAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkUm93cywg
c2NhbGUsIGhlaWdodCk7CisgICAgfSBlbHNlIGlmIChtX3NjYWxlZCkgewogICAgICAgICBtX3Nj
YWxlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2NhbGVkQ29sdW1ucy5j
bGVhcigpOworICAgICAgICBtX3NjYWxlZFJvd3MuY2xlYXIoKTsKICAgICB9Ci0KLSAgICBtX3Nj
YWxlZCA9IHRydWU7Ci0gICAgZG91YmxlIHNjYWxlID0gc3FydChtX21heE51bVBpeGVscyAvIChk
b3VibGUpbnVtUGl4ZWxzKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkQ29sdW1ucywg
c2NhbGUsIHdpZHRoKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkUm93cywgc2NhbGUs
IGhlaWdodCk7CiB9CiAKIGludCBJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRYKGludCBv
cmlnWCwgaW50IHNlYXJjaFN0YXJ0KQpAQCAtMjY3LDYgKzI2Nyw0IEBAIGludCBJbWFnZURlY29k
ZXI6OnNjYWxlZFkoaW50IG9yaWdZLCBpbnQKICAgICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhh
Y3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKIH0KIAotI2VuZGlmIC8vIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0KIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMyOTAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAsMTEgKzEzMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAot
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgIGNvbnN0IElu
dFJlY3QmIHNjYWxlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFJlY3Q7IH0KLSAgICAg
ICAgdm9pZCBzZXRTY2FsZWRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9zY2FsZWRSZWN0ID0g
cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShRVCkKICAgICAgICAgdm9pZCBzZXREZWNvZGVk
SW1hZ2UoY29uc3QgUUltYWdlJiBpbWFnZSk7CiAgICAgICAgIFFJbWFnZSBkZWNvZGVkSW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CkBAIC0xOTIsOSArMTg3LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAgLy8gVGhlIGFuaW1hdGlv
biBkZWxheS4KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJh
bWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgotI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgIEludFJlY3QgbV9zY2FsZWRSZWN0
OwotI2VuZGlmCiAgICAgfTsKIAogICAgIC8vIFRoZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVz
ZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGltYWdlIGZvcm1hdCBkZWNvZGVycwpAQCAt
MjEwLDEwICsyMDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICA6IG1fZmFp
bGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1faXNBbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKICAgICAgICAgICAgICwgbV9tYXhOdW1QaXhlbHMoLTEpCiAgICAg
ICAgICAgICAsIG1fc2NhbGVkKGZhbHNlKQotI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQog
CkBAIC0yNTIsNiArMjQyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3NpemU7CiAgICAgICAgIH0KIAorICAgICAgICBJbnRTaXplIHNjYWxlZFNpemUoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zY2FsZWQgPyBJbnRTaXplKG1f
c2NhbGVkQ29sdW1ucy5zaXplKCksIG1fc2NhbGVkUm93cy5zaXplKCkpIDogc2l6ZSgpOworICAg
ICAgICB9CisKICAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiBmcmFtZSB8aW5kZXh8LiAg
VGhpcyB3aWxsIG9ubHkgZGlmZmVyIGZyb20gc2l6ZSgpCiAgICAgICAgIC8vIGZvciBmb3JtYXRz
IHdoZXJlIGRpZmZlcmVudCBmcmFtZXMgYXJlIGRpZmZlcmVudCBzaXplcyAobmFtZWx5IElDTywK
ICAgICAgICAgLy8gd2hlcmUgZWFjaCBmcmFtZSByZXByZXNlbnRzIGEgZGlmZmVyZW50IGljb24g
d2l0aGluIHRoZSBtYXN0ZXIgZmlsZSkuCkBAIC0zMDcsMjYgKzMwMiwyMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAg
ICAgICB2b2lkIHNldE1heE51bVBpeGVscyhpbnQgbSkgeyBtX21heE51bVBpeGVscyA9IG07IH0K
LSAgICAgICAgSW50U2l6ZSBzY2FsZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWQgPyBJ
bnRTaXplKG1fc2NhbGVkQ29sdW1ucy5zaXplKCksIG1fc2NhbGVkUm93cy5zaXplKCkpIDogbV9z
aXplOyB9CiAjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQogICAgICAgICB2b2lkIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2Fy
eSgpOwogICAgICAgICBpbnQgdXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNo
U3RhcnQgPSAwKTsKICAgICAgICAgaW50IGxvd2VyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50
IHNlYXJjaFN0YXJ0ID0gMCk7CiAgICAgICAgIGludCB1cHBlckJvdW5kU2NhbGVkWShpbnQgb3Jp
Z1ksIGludCBzZWFyY2hTdGFydCA9IDApOwogICAgICAgICBpbnQgbG93ZXJCb3VuZFNjYWxlZFko
aW50IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKICAgICAgICAgaW50IHNjYWxlZFkoaW50
IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKLSNlbmRpZgogCiAgICAgICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgZGF0YS4KLSNpZiBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpbnQgbV9tYXhOdW1QaXhlbHM7CiAg
ICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkQ29sdW1uczsKICAgICAgICAgVmVjdG9yPGludD4g
bV9zY2FsZWRSb3dzOwogICAgICAgICBib29sIG1fc2NhbGVkOwotI2VuZGlmCiAgICAgICAgIFZl
Y3RvcjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKICAgICAgICAgYm9vbCBtX2Zh
aWxlZDsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzI5MCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0OCw5ICsyNDgsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2
YWlsYWJsZSh1CiB7CiAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAg
ICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yNzIsMjcgKzI3MCwxNSBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgp
IC0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKIAogICAgIFJHQkEzMkJ1ZmZlciogY29uc3Qg
YnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBidWZmZXItPnNl
dFJlY3QoZnJhbWVSZWN0KTsKKyAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1l
UmVjdC54KCkpOworICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5y
aWdodCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0
LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5ib3R0
b20oKSwgdG9wKTsKKyAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0
IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQotICAgIGlmIChtX3NjYWxlZCkgewotICAgICAgICBpbnQgbGVmdCA9IHVwcGVy
Qm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwotICAgICAgICBpbnQgcmlnaHQgPSBsb3dlckJv
dW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7Ci0gICAgICAgIGludCB0b3AgPSB1
cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IGxv
d2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5ib3R0b20oKSwgdG9wKTsKLSAgICAgICAgYnVmZmVy
LT5zZXRTY2FsZWRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAt
IHRvcCkpOwotICAgIH0gZWxzZQotICAgICAgICBidWZmZXItPnNldFNjYWxlZFJlY3QoZnJhbWVS
ZWN0KTsKLSNlbmRpZgotICAgIAogICAgIGlmIChmcmFtZUluZGV4ID09IDApIHsKICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBw
cmV2aW91cyBkYXRhLgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0g
ICAgICAgIGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7Ci0jZWxzZQot
ICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2l6ZSgpOwotI2VuZGlmCi0gICAg
ICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5o
ZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndp
ZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzIyLDEzICsz
MDgsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBm
cmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBp
eGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0jaWYgRU5BQkxFKElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZS
ZWN0ID0gcHJldkJ1ZmZlci0+c2NhbGVkUmVjdCgpOwotICAgICAgICAgICAgY29uc3QgSW50U2l6
ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKLSNlbHNlCiAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnJlY3QoKTsKLSAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzaXplKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoKGZy
YW1lSW5kZXggPT0gMCkKICAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRS
ZWN0KEludFBvaW50KCksIGJ1ZmZlclNpemUpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFy
aW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKQEAg
LTM1OCwyNyArMzM5LDYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1
bgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weU9uZVBpeGVs
KGNvbnN0IEdJRkltYWdlRGVjb2RlclByaXZhdGUqIHJlYWRlciwgY29uc3QgdW5zaWduZWQgY2hh
ciogc291cmNlQWRkciwgdW5zaWduZWQgY2hhciogY29sb3JNYXAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZSwgYm9vbCB3cml0ZVRyYW5zcGFy
ZW50UGl4ZWxzLCBSR0JBMzJCdWZmZXImIGJ1ZmZlciwgaW50IHgsIGludCAgeSwgYm9vbCYgc2F3
QWxwaGEpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICpzb3VyY2VB
ZGRyOwotICAgIGlmICgoIXJlYWRlci0+aXNUcmFuc3BhcmVudCgpIHx8IChzb3VyY2VWYWx1ZSAh
PSByZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFw
U2l6ZSkpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNvdXJjZVZhbHVlKSAqIDM7Ci0gICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIGNv
bG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2Nv
bG9ySW5kZXggKyAyXSwgMjU1KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzYXdBbHBoYSA9IHRy
dWU7Ci0gICAgICAgIC8vIFdlIG1heSBvciBtYXkgbm90IG5lZWQgdG8gd3JpdGUgdHJhbnNwYXJl
bnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCi0gICAgICAgIC8vIElmIHdlJ3JlIGNvbXBvc2l0aW5n
IGFnYWluc3QgYSBwcmV2aW91cyBpbWFnZSwgaXQncyB3cm9uZywgYW5kIGlmCi0gICAgICAgIC8v
IHdlJ3JlIHdyaXRpbmcgYXRvcCBhIGNsZWFyZWQsIGZ1bGx5IHRyYW5zcGFyZW50IGJ1ZmZlciwg
aXQncwotICAgICAgICAvLyB1bm5lY2Vzc2FyeTsgYnV0IGlmIHdlJ3JlIGRlY29kaW5nIGFuIGlu
dGVybGFjZWQgZ2lmIGFuZAotICAgICAgICAvLyBkaXNwbGF5aW5nIGl0ICJIYWViZXJsaSItc3R5
bGUsIHdlIG11c3Qgd3JpdGUgdGhlc2UgZm9yIHBhc3NlcwotICAgICAgICAvLyBiZXlvbmQgdGhl
IGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0aGUKLSAg
ICAgICAgLy8gbGF0ZXIgb25lcy4KLSAgICAgICAgaWYgKHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMp
Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKLSAgICB9Ci19
Ci0KIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUlu
ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IHJvd0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyKiByb3dFbmQsCkBAIC0zODgsMTIgKzM0OCwxNiBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3codW5zCiB7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3Jk
aW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8v
IG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8gKG1fcmVh
ZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4KLSAgICBpbnQg
eCA9IG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKLSAgICBpbnQgeSA9IG1fcmVhZGVyLT5mcmFt
ZVlPZmZzZXQoKSArIHJvd051bWJlcjsKLQotICAgIC8vIFNhbml0eS1jaGVjayB0aGUgYXJndW1l
bnRzLgotICAgIGlmICgocm93QnVmZmVyID09IDApIHx8ICh5ID49IHNpemUoKS5oZWlnaHQoKSkp
CisgICAgLy8gKG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNl
dCgpKS4gIFRoZXJlIGlzIG5vCisgICAgLy8gZ3VhcmFudGVlIHRoYXQKKyAgICAvLyAocm93RW5k
IC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0
KCkpLCBzbworICAgIC8vIHdlIG11c3QgZW5zdXJlIHdlIGRvbid0IHJ1biBvZmYgdGhlIGVuZCBv
ZiBlaXRoZXIgdGhlIHNvdXJjZSBkYXRhIG9yIHRoZQorICAgIC8vIHJvdydzIFgtY29vcmRpbmF0
ZXMuCisgICAgaW50IHhCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRYKG1fcmVhZGVyLT5mcmFtZVhP
ZmZzZXQoKSk7CisgICAgaW50IHlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKG1fcmVhZGVyLT5m
cmFtZVlPZmZzZXQoKSArIHJvd051bWJlcik7CisgICAgaW50IHhFbmQgPSBsb3dlckJvdW5kU2Nh
bGVkWChzdGQ6Om1pbih4QmVnaW4gKyAocm93RW5kIC0gcm93QnVmZmVyKSwgc2l6ZSgpLndpZHRo
KCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOworICAgIGludCB5RW5kID0gbG93ZXJCb3VuZFNjYWxl
ZFkoc3RkOjptaW4oeUJlZ2luICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUo
KS5oZWlnaHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CisgICAgaWYgKCFyb3dCdWZmZXIgfHwg
KHhCZWdpbiA8IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5k
IDw9IHlCZWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRoZSBjb2xv
cm1hcC4KQEAgLTQwOCw1OCArMzcyLDMwIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyh1bnMKICAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAg
aW50IGRlc3RZQmVnaW4gPSB5OwotICAgIGludCBkZXN0WUVuZCA9IHN0ZDo6bWluKHkgKyBzdGF0
aWNfY2FzdDxpbnQ+KHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBpbnQgZGVz
dFhCZWdpbiA9IHg7Ci0gICAgaW50IGRlc3RYRW5kID0gc3RkOjptaW4oeCArIChyb3dFbmQgLSBy
b3dCdWZmZXIpLCBzaXplKCkud2lkdGgoKSk7Ci0KLSAgICBpZiAobV9zY2FsZWQpIHsKLSAgICAg
ICAgZGVzdFlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKGRlc3RZQmVnaW4pOwotICAgICAgICBp
ZiAoZGVzdFlCZWdpbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVz
dFlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShkZXN0WUVuZCAtIDEsIGRlc3RZQmVnaW4gKyAxKTsK
LSAgICAgICAgaWYgKGRlc3RZRW5kIDwgZGVzdFlCZWdpbikKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgIGRlc3RYQmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWChkZXN0WEJlZ2lu
KTsKLSAgICAgICAgaWYgKGRlc3RYQmVnaW4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGRlc3RYRW5kID0gbG93ZXJCb3VuZFNjYWxlZFgoZGVzdFhFbmQgLSAxLCBkZXN0
WEJlZ2luICsgMSk7Ci0gICAgICAgIGlmIChkZXN0WEVuZCA8IGRlc3RYQmVnaW4pCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICArK2Rlc3RYRW5kOwotICAgICAgICArK2Rlc3RZ
RW5kOwotICAgICAgICB4ID0gZGVzdFhCZWdpbjsKLSAgICAgICAgeSA9IGRlc3RZQmVnaW47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRv
IHRoZSBmcmFtZS4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0Ci0gICAgLy8gKHJvd0VuZCAt
IHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgp
KSwgc28KLSAgICAvLyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSBlbmQgb2Yg
ZWl0aGVyIHRoZSBzb3VyY2UgZGF0YSBvciB0aGUKLSAgICAvLyByb3cncyBYLWNvb3JkaW5hdGVz
LgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgaWYgKG1fc2Nh
bGVkKSB7Ci0gICAgICAgIGZvciAoOyB4IDwgZGVzdFhFbmQ7ICsreCkgewotICAgICAgICAgICAg
dW5zaWduZWQgY2hhciogc291cmNlQWRkciA9IHJvd0J1ZmZlciArIG1fc2NhbGVkQ29sdW1uc1t4
XSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKLSAgICAgICAgICAgIGNvcHlPbmVQaXhlbCht
X3JlYWRlciwgc291cmNlQWRkciwgY29sb3JNYXAsIGNvbG9yTWFwU2l6ZSwgd3JpdGVUcmFuc3Bh
cmVudFBpeGVscywgYnVmZmVyLCB4LCB5LCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSk7CisgICAg
Ly8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAKKyAgICBm
b3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1uc1t4XSA6IHgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKKyAgICAgICAgaWYg
KCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAoc291cmNlVmFsdWUgIT0gbV9yZWFkZXIt
PnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsK
KyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pihzb3VyY2VWYWx1ZSkgKiAzOworICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeUJlZ2lu
LCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1h
cFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBtYXkgb3Ig
bWF5IG5vdCBuZWVkIHRvIHdyaXRlIHRyYW5zcGFyZW50IHBpeGVscyB0byB0aGUgYnVmZmVyLgor
ICAgICAgICAgICAgLy8gSWYgd2UncmUgY29tcG9zaXRpbmcgYWdhaW5zdCBhIHByZXZpb3VzIGlt
YWdlLCBpdCdzIHdyb25nLCBhbmQgaWYKKyAgICAgICAgICAgIC8vIHdlJ3JlIHdyaXRpbmcgYXRv
cCBhIGNsZWFyZWQsIGZ1bGx5IHRyYW5zcGFyZW50IGJ1ZmZlciwgaXQncworICAgICAgICAgICAg
Ly8gdW5uZWNlc3Nhcnk7IGJ1dCBpZiB3ZSdyZSBkZWNvZGluZyBhbiBpbnRlcmxhY2VkIGdpZiBh
bmQKKyAgICAgICAgICAgIC8vIGRpc3BsYXlpbmcgaXQgIkhhZWJlcmxpIi1zdHlsZSwgd2UgbXVz
dCB3cml0ZSB0aGVzZSBmb3IgcGFzc2VzCisgICAgICAgICAgICAvLyBiZXlvbmQgdGhlIGZpcnN0
LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0aGUKKyAgICAgICAg
ICAgIC8vIGxhdGVyIG9uZXMuCisgICAgICAgICAgICBpZiAod3JpdGVUcmFuc3BhcmVudFBpeGVs
cykKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5QmVnaW4sIDAsIDAsIDAsIDAp
OwogICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSAgICBmb3IgKHVuc2lnbmVkIGNoYXIq
IHNvdXJjZUFkZHIgPSByb3dCdWZmZXI7IHNvdXJjZUFkZHIgPCByb3dFbmQgJiYgeCA8IHNpemUo
KS53aWR0aCgpOyArK3NvdXJjZUFkZHIsICsreCkKLSAgICAgICAgY29weU9uZVBpeGVsKG1fcmVh
ZGVyLCBzb3VyY2VBZGRyLCBjb2xvck1hcCwgY29sb3JNYXBTaXplLCB3cml0ZVRyYW5zcGFyZW50
UGl4ZWxzLCBidWZmZXIsIHgsIHksIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhKTsKLQotICAgICAv
LyBUZWxsIHRoZSBmcmFtZSB0byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVkIGJlLgotICAgIGlm
IChyZXBlYXRDb3VudCA+IDEpIHsKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBM
SU5HKQotICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyhkZXN0WEJlZ2luLCBkZXN0WEVuZCwg
ZGVzdFlCZWdpbiwgZGVzdFlFbmQpOwotI2Vsc2UKLSAgICAgICAgYnVmZmVyLmNvcHlSb3dOVGlt
ZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5LCBzdGQ6Om1pbih5ICsgc3RhdGljX2Nh
c3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkpOwotI2VuZGlmCiAgICAgfQog
CisgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVlZCBiZS4K
KyAgICBpZiAocmVwZWF0Q291bnQgPiAxKQorICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyh4
QmVnaW4sIHhFbmQsIHlCZWdpbiwgeUVuZCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
NDc4LDExICs0MTQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNp
CiAgICAgaWYgKCFtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBUaGUgd2hv
bGUgZnJhbWUgd2FzIG5vbi10cmFuc3BhcmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBl
bnRpcmUKICAgICAgICAgLy8gcmVzdWx0aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFyZW50LCBh
bmQgd2UgY2FuIHNldEhhc0FscGhhKGZhbHNlKS4KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQotICAgICAgICBpZiAoYnVmZmVyLnNjYWxlZFJlY3QoKS5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQotI2Vsc2UKLSAgICAgICAgaWYgKGJ1
ZmZlci5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkKLSNlbmRp
ZgorICAgICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCks
IHNjYWxlZFNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsK
ICAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDApIHsKICAgICAgICAgICAgIC8vIFRyaWNr
eSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkgaWYgZXZlcnl3aGVy
ZQpAQCAtNTA3LDExICs0MzksNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0
ZSh1bnNpCiAgICAgICAgICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBj
b250YWluZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Ug
a25vdyB0aGUgY3VycmVudCBmcmFtZSBoYXMgbm8gYWxwaGEuCiAgICAgICAgICAgICBpZiAoKHBy
ZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3Zlcndy
aXRlQmdjb2xvcikKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAg
ICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5zY2FsZWRS
ZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+c2NhbGVkUmVjdCgpKSkKLSNlbHNlCiAgICAgICAg
ICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250
YWlucyhwcmV2QnVmZmVyLT5yZWN0KCkpKQotI2VuZGlmCiAgICAgICAgICAgICAgICAgYnVmZmVy
LnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNiArNDMx
LDE0IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1
cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAorYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisgICAg
aWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAgLTQ2MCw3OCArNDY4LDYg
QEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplTwogICAgIH0KIH0KIAot
c3RhdGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVz
dFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBzcmNXaWR0aAotI2lmIEVOQUJMRShJTUFHRV9E
RUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGJv
b2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkQ29sdW1ucwotI2VuZGlmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApCi17Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBpZiAoc2NhbGVkKSB7Ci0gICAgICAgIGludCBudW1Db2x1bW5z
ID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVt
Q29sdW1uczsgKyt4KSB7Ci0gICAgICAgICAgICBKU0FNUExFKiBqc2FtcGxlID0gc3JjICsgc2Nh
bGVkQ29sdW1uc1t4XSAqIDM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjID0ganNhbXBsZVswXTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIG0gPSBqc2FtcGxlWzFdOwotICAgICAgICAgICAgdW5zaWdu
ZWQgeSA9IGpzYW1wbGVbMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBrID0ganNhbXBsZVszXTsK
LSAgICAgICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgYyAqIGsgLyAyNTUsIG0gKiBrIC8g
MjU1LCB5ICogayAvIDI1NSwgMHhGRik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotICAgIGZvciAoSkRJTUVOU0lPTiB4ID0gMDsgeCA8IHNyY1dpZHRoOyArK3gp
IHsKLSAgICAgICAgdW5zaWduZWQgYyA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWduZWQgbSA9ICpz
cmMrKzsKLSAgICAgICAgdW5zaWduZWQgeSA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWduZWQgayA9
ICpzcmMrKzsKLQotICAgICAgICAvLyBTb3VyY2UgaXMgJ0ludmVydGVkIENNWUsnLCBvdXRwdXQg
aXMgUkdCLgotICAgICAgICAvLyBTZWU6IGh0dHA6Ly93d3cuZWFzeXJnYi5jb20vbWF0aC5waHA/
TUFUSD1NMTIjdGV4dDEyCi0gICAgICAgIC8vIE9yOiAgaHR0cDovL3d3dy5pbGtlcmF0YWxheS5j
b20vY29sb3JzcGFjZXNmYXEucGhwI3JnYgotCi0gICAgICAgIC8vIEZyb20gQ01ZSyB0byBDTVkK
LSAgICAgICAgLy8gQyA9IEMgKiAoIDEgLSBLICkgKyBLCi0gICAgICAgIC8vIE0gPSBNICogKCAx
IC0gSyApICsgSwotICAgICAgICAvLyBZID0gWSAqICggMSAtIEsgKSArIEsKLQotICAgICAgICAv
LyBGcm9tIEludmVydGVkIENNWUsgdG8gQ01ZIGlzIHRodXM6Ci0gICAgICAgIC8vIEMgPSAoMS1p
QykgKiAoMSAtICgxLWlLKSkgKyAoMS1pSykgPT4gMSAtIGlDKmlLCi0gICAgICAgIC8vIFNhbWUg
Zm9yIE0gYW5kIFkKLQotICAgICAgICAvLyBDb252ZXJ0IGZyb20gQ01ZICgwLi4xKSB0byBSR0Ig
KDAuLjEpCi0gICAgICAgIC8vIFIgPSAxIC0gQyA9PiAxIC0gKDEgLSBpQyppSykgPT4gaUMqaUsK
LSAgICAgICAgLy8gRyA9IDEgLSBNID0+IDEgLSAoMSAtIGlNKmlLKSA9PiBpTSppSwotICAgICAg
ICAvLyBCID0gMSAtIFkgPT4gMSAtICgxIC0gaVkqaUspID0+IGlZKmlLCi0KLSAgICAgICAgZGVz
dC5zZXRSR0JBKHgsIGRlc3RZLCBjICogayAvIDI1NSwgbSAqIGsgLyAyNTUsIHkgKiBrIC8gMjU1
LCAweEZGKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRSR0JUb1JHQkEoUkdCQTMy
QnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBzcmNXaWR0
aAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVk
Q29sdW1ucwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi17Ci0jaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBpZiAoc2NhbGVkKSB7Ci0g
ICAgICAgIGludCBudW1Db2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7Ci0gICAgICAgICAgICBKU0FNUExF
KiBqc2FtcGxlID0gc3JjICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7Ci0gICAgICAgICAgICBkZXN0
LnNldFJHQkEoeCwgZGVzdFksIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0sIDB4
RkYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBmb3Ig
KEpESU1FTlNJT04geCA9IDA7IHggPCBzcmNXaWR0aDsgKyt4KSB7Ci0gICAgICAgIHVuc2lnbmVk
IHIgPSAqc3JjKys7Ci0gICAgICAgIHVuc2lnbmVkIGcgPSAqc3JjKys7Ci0gICAgICAgIHVuc2ln
bmVkIGIgPSAqc3JjKys7Ci0gICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgciwgZywgYiwg
MHhGRik7Ci0gICAgfQotfQotCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cygpCiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC01NDAsMTcg
KzQ3Niw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAv
LyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgUkdCQTMyQnVmZmVy
JiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaW50IGJ1ZmZlcldpZHRo
ID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgIGludCBidWZmZXJIZWlnaHQgPSBzaXplKCkuaGVp
Z2h0KCk7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAgICAg
Ly8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRoL2hlaWdo
dC4KLSAgICAgICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgICAgICBidWZmZXJXaWR0aCA9IG1f
c2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgICAgICBidWZmZXJIZWlnaHQgPSBtX3NjYWxl
ZFJvd3Muc2l6ZSgpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBpZiAoIWJ1ZmZlci5z
ZXRTaXplKGJ1ZmZlcldpZHRoLCBidWZmZXJIZWlnaHQpKSB7CisgICAgICAgIGlmICghYnVmZmVy
LnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsK
ICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtNTcyLDI3ICs0OTgsMzIgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpv
dXRwdXRTY2FubGluZXMoKQogICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhpbmZvLCBz
YW1wbGVzLCAxKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlu
dCBkZXN0WSA9IHNvdXJjZVk7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykKLSAgICAgICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgICAgICBkZXN0WSA9IHNjYWxlZFko
c291cmNlWSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFkgPCAwKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpbnQgZGVzdFkgPSBzY2FsZWRZKHNvdXJjZVkpOworICAgICAgICBp
ZiAoZGVzdFkgPCAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludCB3aWR0aCA9
IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IGluZm8tPm91dHB1dF93aWR0aDsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBK
U0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNb
eF0gOiB4KSAqICgoaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IpID8gMyA6IDQpOwor
ICAgICAgICAgICAgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQorICAgICAg
ICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIGRlc3RZLCBqc2FtcGxlWzBdLCBqc2FtcGxlWzFd
LCBqc2FtcGxlWzJdLCAweEZGKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xv
cl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgICAgICAgICAgICAgIC8vIFNvdXJjZSBpcyAnSW52
ZXJ0ZWQgQ01ZSycsIG91dHB1dCBpcyBSR0IuCisgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRw
Oi8vd3d3LmVhc3lyZ2IuY29tL21hdGgucGhwP01BVEg9TTEyI3RleHQxMgorICAgICAgICAgICAg
ICAgIC8vIE9yOiAgaHR0cDovL3d3dy5pbGtlcmF0YWxheS5jb20vY29sb3JzcGFjZXNmYXEucGhw
I3JnYgorICAgICAgICAgICAgICAgIC8vIEZyb20gQ01ZSyB0byBDTVk6CisgICAgICAgICAgICAg
ICAgLy8gWCA9ICAgWCAgICAqICgxIC0gICBLICAgKSArICAgSyAgW2ZvciBYID0gQywgTSwgb3Ig
WV0KKyAgICAgICAgICAgICAgICAvLyBUaHVzLCBmcm9tIEludmVydGVkIENNWUsgdG8gQ01ZIGlz
OgorICAgICAgICAgICAgICAgIC8vIFggPSAoMS1pWCkgKiAoMSAtICgxLWlLKSkgKyAoMS1pSykg
PT4gMSAtIGlYKmlLCisgICAgICAgICAgICAgICAgLy8gRnJvbSBDTVkgKDAuLjEpIHRvIFJHQiAo
MC4uMSk6CisgICAgICAgICAgICAgICAgLy8gUiA9IDEgLSBDID0+IDEgLSAoMSAtIGlDKmlLKSA9
PiBpQyppSyAgW0cgYW5kIEIgc2ltaWxhcl0KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBrID0g
anNhbXBsZVszXTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwganNh
bXBsZVswXSAqIGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8gMjU1LCBqc2FtcGxlWzJdICogayAv
IDI1NSwgMHhGRik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQotICAgICAgICAgICAgY29u
dmVydFJHQlRvUkdCQShidWZmZXIsIGRlc3RZLCAqc2FtcGxlcywgaW5mby0+b3V0cHV0X3dpZHRo
LCBtX3NjYWxlZCwgbV9zY2FsZWRDb2x1bW5zKTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby0+b3V0
X2NvbG9yX3NwYWNlID09IEpDU19DTVlLKQotICAgICAgICAgICAgY29udmVydENNWUtUb1JHQkEo
YnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2FsZWQsIG1f
c2NhbGVkQ29sdW1ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSNlbHNlCi0gICAgICAgIGlmIChpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikKLSAg
ICAgICAgICAgIGNvbnZlcnRSR0JUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8t
Pm91dHB1dF93aWR0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9
PSBKQ1NfQ01ZSykKLSAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwgZGVzdFks
ICpzYW1wbGVzLCBpbmZvLT5vdXRwdXRfd2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMyOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2hldGhlciBvciBub3Qg
dGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKIAorICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwogICAgICAgICB2aXJ0dWFsIFJH
QkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC01OCwxNiArNjAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
b3V0cHV0U2NhbmxpbmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKLSNpZiBF
TkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBib29sIHNldFNpemUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgIHByaXZhdGU6CiAg
ICAgICAgIEpQRUdJbWFnZVJlYWRlciogbV9yZWFkZXI7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmNwcAkocmV2aXNpb24gNTMyOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsOSArMjU2LDcg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgICAgICAgICBs
b25nam1wKHBuZy0+am1wYnVmLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIHByZXBhcmVT
Y2FsZURhdGFJZk5lY2Vzc2FyeSgpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaW50IGJpdERlcHRo
LCBjb2xvclR5cGUsIGludGVybGFjZVR5cGUsIGNvbXByZXNzaW9uVHlwZSwgZmlsdGVyVHlwZSwg
Y2hhbm5lbHM7CkBAIC0zMzAsMTQgKzMyOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dB
dmFpbGFibGUodW5zaWcKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVk
ZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAg
ICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSNp
ZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBpbnQgd2lkdGgg
PSBtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1ucy5zaXplKCkgOiBzaXplKCkud2lkdGgoKTsKLSAg
ICAgICAgaW50IGhlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IHNpemUo
KS5oZWlnaHQoKTsKLSNlbHNlCi0gICAgICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwot
ICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOwotI2VuZGlmCi0gICAgICAgIGlm
ICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIu
c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkgewog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVz
c2l2ZV9wdHIocmVhZGVyKCktPnBuZ1B0cigpKSktPmRlY29kaW5nRmFpbGVkKCk7CiAgICAgICAg
ICAgICBsb25nam1wKHJlYWRlcigpLT5wbmdQdHIoKS0+am1wYnVmLCAxKTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM5NiwzMyArMzg3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dB
dmFpbGFibGUodW5zaWcKICAgICAgICAgcm93ID0gcm93QnVmZmVyOwogCiAgICAgLy8gQ29weSB0
aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKLSAgICBpZiAobV9zY2FsZWQpIHsKLSAgICAgICAgaW50IGRlc3RZID0gc2NhbGVk
WShyb3dJbmRleCk7Ci0gICAgICAgIGlmIChkZXN0WSA8IDApCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGludCBjb2x1bW5zID0gbV9zY2FsZWRDb2x1bW5zLnNpemUoKTsKLSAgICAgICAg
Ym9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGNvbHVtbnM7ICsreCkgewotICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93
ICsgbV9zY2FsZWRDb2x1bW5zW3hdICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0g
cGl4ZWxbM107Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwgcGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwotICAgICAgICAgICAgaWYgKCFzYXdBbHBoYSAm
JiBhbHBoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKKyAgICBpbnQgZGVz
dFkgPSBzY2FsZWRZKHJvd0luZGV4KTsKKyAgICBpZiAoZGVzdFkgPCAwKQogICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0gICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7CiAgICAg
Ym9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOwogICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykgewotICAgICAgICB1bnNpZ25lZCByZWQgPSAqcm93Kys7Ci0gICAgICAg
IHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOwotICAgICAgICB1bnNpZ25lZCBibHVlID0gKnJvdysr
OwotICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IChoYXNBbHBoYSA/ICpyb3crKyA6IDI1NSk7Ci0g
ICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHJvd0luZGV4LCByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7CisgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKKyAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OworICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBk
ZXN0WSwgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAgICBpZiAo
IXNhd0FscGhhICYmIGFscGhhIDwgMjU1KSB7CiAgICAgICAgICAgICBzYXdBbHBoYSA9IHRydWU7
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46614</attachid>
            <date>2010-01-14 15:35:31 -0800</date>
            <delta_ts>2010-01-14 17:46:30 -0800</delta_ts>
            <desc>Condense downsampling logic, v3</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>29173</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzI5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTQgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IGltYWdlIGRlY29kZXJzIGJ5IG1ha2luZyBkb3duc2FtcGxpbmcgZnVuY3Rpb25z
IGF2YWlsYWJsZSBhdAorICAgICAgICBhbGwgdGltZXMsIGFsbG93aW5nIG11Y2ggZHVwbGljYXRl
ZCBsb2dpYyB0byBiZSBjb2xsYXBzZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODc1MQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNjYWxlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzZXRNYXhOdW1QaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFi
bGUpOgorCiAyMDEwLTAxLTE0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UgcmV0dXJuIDAgaWYgdGhlIHJlc291cmNl
J3MgbG9hZCBmYWlscwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSw2IEBACiAjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05f
U0FNUExJTkcpCi0jaWZuZGVmIElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVS
X09GX1BJWEVMUwotI2RlZmluZSBJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkdfTUFYX05VTUJF
Ul9PRl9QSVhFTFMgKDEwMjQgKiAxMDI0KQotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQpAQCAtODEsNiArNzUsOSBAQCB2
b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogCiAgICAgaWYgKCFtX2RlY29k
ZXIpIHsKICAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQ
dHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKKyNpZm5kZWYgSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HX01B
WF9OVU1CRVJfT0ZfUElYRUxTCisjZGVmaW5lIElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElOR19N
QVhfTlVNQkVSX09GX1BJWEVMUyAoMTAyNCAqIDEwMjQpCisjZW5kaWYKICAgICAgICAgaWYgKG1f
ZGVjb2RlcikKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUyk7CiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJ
KHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw4IEBACiAKICNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJ
TkcpCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2VuZGlmCisjaW5jbHVkZSA8Y21hdGg+CiAKICNp
bmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIK
QEAgLTE4NCw4ICsxODMsNiBAQCBpbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdAogCiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0KIG5hbWVz
cGFjZSB7CiAKIGVudW0gTWF0Y2hUeXBlIHsKQEAgLTIxMCw2ICsyMDcsOSBAQCBpbmxpbmUgdm9p
ZCBmaWxsU2NhbGVkVmFsdWVzKFZlY3RvcjxpbnQ+CiAKIHRlbXBsYXRlIDxNYXRjaFR5cGUgdHlw
ZT4gaW50IGdldFNjYWxlZFZhbHVlKGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1ZXMsIGlu
dCB2YWx1ZVRvTWF0Y2gsIGludCBzZWFyY2hTdGFydCkKIHsKKyAgICBpZiAoc2NhbGVkVmFsdWVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9NYXRjaDsKKwogICAgIGNvbnN0IGlu
dCogZGF0YVN0YXJ0ID0gc2NhbGVkVmFsdWVzLmRhdGEoKTsKICAgICBjb25zdCBpbnQqIGRhdGFF
bmQgPSBkYXRhU3RhcnQgKyBzY2FsZWRWYWx1ZXMuc2l6ZSgpOwogICAgIGNvbnN0IGludCogbWF0
Y2hlZCA9IHN0ZDo6bG93ZXJfYm91bmQoZGF0YVN0YXJ0ICsgc2VhcmNoU3RhcnQsIGRhdGFFbmQs
IHZhbHVlVG9NYXRjaCk7CkBAIC0yMjgsMTggKzIyOCwxOSBAQCB0ZW1wbGF0ZSA8TWF0Y2hUeXBl
IHR5cGU+IGludCBnZXRTY2FsZWRWCiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKQogewotICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAg
IGludCBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgaW50IHdpZHRoID0gc2l6ZSgpLndp
ZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUGl4
ZWxzID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgaWYgKG1fbWF4TnVtUGl4ZWxzIDw9IDAgfHwgbnVt
UGl4ZWxzIDw9IG1fbWF4TnVtUGl4ZWxzKSB7CisgICAgaWYgKG1fbWF4TnVtUGl4ZWxzID4gMCAm
JiBudW1QaXhlbHMgPiBtX21heE51bVBpeGVscykgeworICAgICAgICBtX3NjYWxlZCA9IHRydWU7
CisgICAgICAgIGRvdWJsZSBzY2FsZSA9IHNxcnQobV9tYXhOdW1QaXhlbHMgLyAoZG91YmxlKW51
bVBpeGVscyk7CisgICAgICAgIGZpbGxTY2FsZWRWYWx1ZXMobV9zY2FsZWRDb2x1bW5zLCBzY2Fs
ZSwgd2lkdGgpOworICAgICAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkUm93cywgc2NhbGUs
IGhlaWdodCk7CisgICAgfSBlbHNlIGlmIChtX3NjYWxlZCkgewogICAgICAgICBtX3NjYWxlZCA9
IGZhbHNlOwotICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2NhbGVkQ29sdW1ucy5jbGVhcigp
OworICAgICAgICBtX3NjYWxlZFJvd3MuY2xlYXIoKTsKICAgICB9Ci0KLSAgICBtX3NjYWxlZCA9
IHRydWU7Ci0gICAgZG91YmxlIHNjYWxlID0gc3FydChtX21heE51bVBpeGVscyAvIChkb3VibGUp
bnVtUGl4ZWxzKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkQ29sdW1ucywgc2NhbGUs
IHdpZHRoKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVzKG1fc2NhbGVkUm93cywgc2NhbGUsIGhlaWdo
dCk7CiB9CiAKIGludCBJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRYKGludCBvcmlnWCwg
aW50IHNlYXJjaFN0YXJ0KQpAQCAtMjY3LDYgKzI2OCw0IEBAIGludCBJbWFnZURlY29kZXI6OnNj
YWxlZFkoaW50IG9yaWdZLCBpbnQKICAgICByZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1f
c2NhbGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMyOTApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzAsMTEgKzEzMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAotI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgIGNvbnN0IEludFJlY3Qm
IHNjYWxlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFJlY3Q7IH0KLSAgICAgICAgdm9p
ZCBzZXRTY2FsZWRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9zY2FsZWRSZWN0ID0gcjsgfQot
I2VuZGlmCi0KICNpZiBQTEFURk9STShRVCkKICAgICAgICAgdm9pZCBzZXREZWNvZGVkSW1hZ2Uo
Y29uc3QgUUltYWdlJiBpbWFnZSk7CiAgICAgICAgIFFJbWFnZSBkZWNvZGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlOyB9CkBAIC0xOTIsOSArMTg3LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAgLy8gVGhlIGFuaW1hdGlvbiBkZWxh
eS4KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBk
YXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgotI2lmIEVOQUJMRShJTUFHRV9E
RUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgIEludFJlY3QgbV9zY2FsZWRSZWN0OwotI2Vu
ZGlmCiAgICAgfTsKIAogICAgIC8vIFRoZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBh
IGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGltYWdlIGZvcm1hdCBkZWNvZGVycwpAQCAtMjA3LDEz
ICsxOTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBiaWdnZXN0IHNpemUg
dGhhdCBkZWNvZGVkIGltYWdlcyBjYW4gaGF2ZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkZWZsYXRl
IHRob3NlCiAgICAgICAgIC8vIGltYWdlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiBtX21heE51bVBp
eGVscy4gKE5vdCBzdXBwb3J0ZWQgYnkgYWxsIGltYWdlIGRlY29kZXJzIHlldCkKICAgICAgICAg
SW1hZ2VEZWNvZGVyKCkKLSAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2UpCisgICAgICAgICAg
ICA6IG1fc2NhbGVkKGZhbHNlKQorICAgICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKICAgICAg
ICAgICAgICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzQWxsRGF0
YVJlY2VpdmVkKGZhbHNlKQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CiAgICAgICAgICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQotICAgICAgICAgICAgLCBtX3NjYWxl
ZChmYWxzZSkKLSNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjUyLDYgKzI0Miwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9zaXplOwogICAg
ICAgICB9CiAKKyAgICAgICAgSW50U2l6ZSBzY2FsZWRTaXplKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fc2NhbGVkID8gSW50U2l6ZShtX3NjYWxlZENvbHVtbnMuc2l6
ZSgpLCBtX3NjYWxlZFJvd3Muc2l6ZSgpKSA6IHNpemUoKTsKKyAgICAgICAgfQorCiAgICAgICAg
IC8vIFJldHVybnMgdGhlIHNpemUgb2YgZnJhbWUgfGluZGV4fC4gIFRoaXMgd2lsbCBvbmx5IGRp
ZmZlciBmcm9tIHNpemUoKQogICAgICAgICAvLyBmb3IgZm9ybWF0cyB3aGVyZSBkaWZmZXJlbnQg
ZnJhbWVzIGFyZSBkaWZmZXJlbnQgc2l6ZXMgKG5hbWVseSBJQ08sCiAgICAgICAgIC8vIHdoZXJl
IGVhY2ggZnJhbWUgcmVwcmVzZW50cyBhIGRpZmZlcmVudCBpY29uIHdpdGhpbiB0aGUgbWFzdGVy
IGZpbGUpLgpAQCAtMzA3LDI2ICszMDIsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgdm9pZCBzZXRNYXhO
dW1QaXhlbHMoaW50IG0pIHsgbV9tYXhOdW1QaXhlbHMgPSBtOyB9Ci0gICAgICAgIEludFNpemUg
c2NhbGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkID8gSW50U2l6ZShtX3NjYWxlZENv
bHVtbnMuc2l6ZSgpLCBtX3NjYWxlZFJvd3Muc2l6ZSgpKSA6IG1fc2l6ZTsgfQogI2VuZGlmCiAK
ICAgICBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykK
ICAgICAgICAgdm9pZCBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKICAgICAgICAgaW50
IHVwcGVyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CiAgICAg
ICAgIGludCBsb3dlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCA9IDAp
OwogICAgICAgICBpbnQgdXBwZXJCb3VuZFNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2VhcmNoU3Rh
cnQgPSAwKTsKICAgICAgICAgaW50IGxvd2VyQm91bmRTY2FsZWRZKGludCBvcmlnWSwgaW50IHNl
YXJjaFN0YXJ0ID0gMCk7CiAgICAgICAgIGludCBzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJj
aFN0YXJ0ID0gMCk7Ci0jZW5kaWYKIAogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2Rh
dGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKLSAgICAgICAgaW50IG1fbWF4TnVtUGl4ZWxzOwogICAgICAgICBWZWN0b3I8aW50
PiBtX3NjYWxlZENvbHVtbnM7CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkUm93czsKICAg
ICAgICAgYm9vbCBtX3NjYWxlZDsKLSNlbmRpZgogICAgICAgICBWZWN0b3I8UkdCQTMyQnVmZmVy
PiBtX2ZyYW1lQnVmZmVyQ2FjaGU7CiAgICAgICAgIGJvb2wgbV9mYWlsZWQ7CiAKQEAgLTM0NSw2
ICszMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludFNpemUgbV9zaXplOwog
ICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZTsKICAgICAgICAgYm9vbCBtX2lzQWxsRGF0YVJl
Y2VpdmVkOworICAgICAgICBpbnQgbV9tYXhOdW1QaXhlbHM7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzI5MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0OCw5ICsyNDgsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6
ZU5vd0F2YWlsYWJsZSh1CiB7CiAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSNlbmRpZgogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0yNzIsMjcgKzI3MCwxNSBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6
aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhl
aWdodCgpIC0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKIAogICAgIFJHQkEzMkJ1ZmZlciog
Y29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBidWZm
ZXItPnNldFJlY3QoZnJhbWVSZWN0KTsKKyAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRY
KGZyYW1lUmVjdC54KCkpOworICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1l
UmVjdC5yaWdodCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJh
bWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVj
dC5ib3R0b20oKSwgdG9wKTsKKyAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3As
IHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQotICAgIGlmIChtX3NjYWxlZCkgewotICAgICAgICBpbnQgbGVmdCA9
IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwotICAgICAgICBpbnQgcmlnaHQgPSBs
b3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7Ci0gICAgICAgIGludCB0
b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICAgICAgaW50IGJvdHRv
bSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5ib3R0b20oKSwgdG9wKTsKLSAgICAgICAg
YnVmZmVyLT5zZXRTY2FsZWRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJv
dHRvbSAtIHRvcCkpOwotICAgIH0gZWxzZQotICAgICAgICBidWZmZXItPnNldFNjYWxlZFJlY3Qo
ZnJhbWVSZWN0KTsKLSNlbmRpZgotICAgIAogICAgIGlmIChmcmFtZUluZGV4ID09IDApIHsKICAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9u
IGFueSBwcmV2aW91cyBkYXRhLgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJ
TkcpCi0gICAgICAgIGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7Ci0j
ZWxzZQotICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2l6ZSgpOwotI2VuZGlm
Ci0gICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVy
U2l6ZS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6
ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKICAgICAgICAgICAgIG1fZmFp
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzIy
LDEzICszMDgsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2
aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0
aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0jaWYgRU5BQkxF
KElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+c2NhbGVkUmVjdCgpOwotICAgICAgICAgICAgY29uc3Qg
SW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKLSNlbHNlCiAgICAgICAgICAgICBj
b25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnJlY3QoKTsKLSAgICAgICAgICAg
IGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzaXplKCk7Ci0jZW5kaWYKKyAgICAgICAgICAg
IGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBp
ZiAoKGZyYW1lSW5kZXggPT0gMCkKICAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlu
cyhJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlclNpemUpKSkgewogICAgICAgICAgICAgICAgIC8v
IENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hv
bGUKQEAgLTM1OCwyNyArMzM5LDYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcih1bgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weU9u
ZVBpeGVsKGNvbnN0IEdJRkltYWdlRGVjb2RlclByaXZhdGUqIHJlYWRlciwgY29uc3QgdW5zaWdu
ZWQgY2hhciogc291cmNlQWRkciwgdW5zaWduZWQgY2hhciogY29sb3JNYXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZSwgYm9vbCB3cml0ZVRy
YW5zcGFyZW50UGl4ZWxzLCBSR0JBMzJCdWZmZXImIGJ1ZmZlciwgaW50IHgsIGludCAgeSwgYm9v
bCYgc2F3QWxwaGEpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICpz
b3VyY2VBZGRyOwotICAgIGlmICgoIXJlYWRlci0+aXNUcmFuc3BhcmVudCgpIHx8IChzb3VyY2VW
YWx1ZSAhPSByZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNv
bG9yTWFwU2l6ZSkpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNvdXJjZVZhbHVlKSAqIDM7Ci0gICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgs
IHksIGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9y
TWFwW2NvbG9ySW5kZXggKyAyXSwgMjU1KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzYXdBbHBo
YSA9IHRydWU7Ci0gICAgICAgIC8vIFdlIG1heSBvciBtYXkgbm90IG5lZWQgdG8gd3JpdGUgdHJh
bnNwYXJlbnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCi0gICAgICAgIC8vIElmIHdlJ3JlIGNvbXBv
c2l0aW5nIGFnYWluc3QgYSBwcmV2aW91cyBpbWFnZSwgaXQncyB3cm9uZywgYW5kIGlmCi0gICAg
ICAgIC8vIHdlJ3JlIHdyaXRpbmcgYXRvcCBhIGNsZWFyZWQsIGZ1bGx5IHRyYW5zcGFyZW50IGJ1
ZmZlciwgaXQncwotICAgICAgICAvLyB1bm5lY2Vzc2FyeTsgYnV0IGlmIHdlJ3JlIGRlY29kaW5n
IGFuIGludGVybGFjZWQgZ2lmIGFuZAotICAgICAgICAvLyBkaXNwbGF5aW5nIGl0ICJIYWViZXJs
aSItc3R5bGUsIHdlIG11c3Qgd3JpdGUgdGhlc2UgZm9yIHBhc3NlcwotICAgICAgICAvLyBiZXlv
bmQgdGhlIGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0
aGUKLSAgICAgICAgLy8gbGF0ZXIgb25lcy4KLSAgICAgICAgaWYgKHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpCi0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKLSAg
ICB9Ci19Ci0KIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBm
cmFtZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIqIHJvd0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyKiByb3dFbmQsCkBAIC0zODgsMTIgKzM0OCwxNiBAQCBib29sIEdJRkltYWdl
RGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiB7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5k
IGNvb3JkaW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwog
ICAgIC8vIG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8g
KG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4KLSAg
ICBpbnQgeCA9IG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKLSAgICBpbnQgeSA9IG1fcmVhZGVy
LT5mcmFtZVlPZmZzZXQoKSArIHJvd051bWJlcjsKLQotICAgIC8vIFNhbml0eS1jaGVjayB0aGUg
YXJndW1lbnRzLgotICAgIGlmICgocm93QnVmZmVyID09IDApIHx8ICh5ID49IHNpemUoKS5oZWln
aHQoKSkpCisgICAgLy8gKG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1l
WU9mZnNldCgpKS4gIFRoZXJlIGlzIG5vCisgICAgLy8gZ3VhcmFudGVlIHRoYXQKKyAgICAvLyAo
cm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVY
T2Zmc2V0KCkpLCBzbworICAgIC8vIHdlIG11c3QgZW5zdXJlIHdlIGRvbid0IHJ1biBvZmYgdGhl
IGVuZCBvZiBlaXRoZXIgdGhlIHNvdXJjZSBkYXRhIG9yIHRoZQorICAgIC8vIHJvdydzIFgtY29v
cmRpbmF0ZXMuCisgICAgaW50IHhCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRYKG1fcmVhZGVyLT5m
cmFtZVhPZmZzZXQoKSk7CisgICAgaW50IHlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKG1fcmVh
ZGVyLT5mcmFtZVlPZmZzZXQoKSArIHJvd051bWJlcik7CisgICAgaW50IHhFbmQgPSBsb3dlckJv
dW5kU2NhbGVkWChzdGQ6Om1pbih4QmVnaW4gKyAocm93RW5kIC0gcm93QnVmZmVyKSwgc2l6ZSgp
LndpZHRoKCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOworICAgIGludCB5RW5kID0gbG93ZXJCb3Vu
ZFNjYWxlZFkoc3RkOjptaW4oeUJlZ2luICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCks
IHNpemUoKS5oZWlnaHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CisgICAgaWYgKCFyb3dCdWZm
ZXIgfHwgKHhCZWdpbiA8IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8
ICh5RW5kIDw9IHlCZWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRo
ZSBjb2xvcm1hcC4KQEAgLTQwOCw1OCArMzcyLDMwIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyh1bnMKICAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
Ci0gICAgaW50IGRlc3RZQmVnaW4gPSB5OwotICAgIGludCBkZXN0WUVuZCA9IHN0ZDo6bWluKHkg
KyBzdGF0aWNfY2FzdDxpbnQ+KHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBp
bnQgZGVzdFhCZWdpbiA9IHg7Ci0gICAgaW50IGRlc3RYRW5kID0gc3RkOjptaW4oeCArIChyb3dF
bmQgLSByb3dCdWZmZXIpLCBzaXplKCkud2lkdGgoKSk7Ci0KLSAgICBpZiAobV9zY2FsZWQpIHsK
LSAgICAgICAgZGVzdFlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKGRlc3RZQmVnaW4pOwotICAg
ICAgICBpZiAoZGVzdFlCZWdpbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgZGVzdFlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShkZXN0WUVuZCAtIDEsIGRlc3RZQmVnaW4g
KyAxKTsKLSAgICAgICAgaWYgKGRlc3RZRW5kIDwgZGVzdFlCZWdpbikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgIGRlc3RYQmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWChkZXN0
WEJlZ2luKTsKLSAgICAgICAgaWYgKGRlc3RYQmVnaW4gPCAwKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGRlc3RYRW5kID0gbG93ZXJCb3VuZFNjYWxlZFgoZGVzdFhFbmQgLSAx
LCBkZXN0WEJlZ2luICsgMSk7Ci0gICAgICAgIGlmIChkZXN0WEVuZCA8IGRlc3RYQmVnaW4pCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICArK2Rlc3RYRW5kOwotICAgICAgICAr
K2Rlc3RZRW5kOwotICAgICAgICB4ID0gZGVzdFhCZWdpbjsKLSAgICAgICAgeSA9IGRlc3RZQmVn
aW47Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0
YSBpbnRvIHRoZSBmcmFtZS4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0Ci0gICAgLy8gKHJv
d0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9m
ZnNldCgpKSwgc28KLSAgICAvLyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSBl
bmQgb2YgZWl0aGVyIHRoZSBzb3VyY2UgZGF0YSBvciB0aGUKLSAgICAvLyByb3cncyBYLWNvb3Jk
aW5hdGVzLgotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgaWYg
KG1fc2NhbGVkKSB7Ci0gICAgICAgIGZvciAoOyB4IDwgZGVzdFhFbmQ7ICsreCkgewotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQWRkciA9IHJvd0J1ZmZlciArIG1fc2NhbGVkQ29s
dW1uc1t4XSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKLSAgICAgICAgICAgIGNvcHlPbmVQ
aXhlbChtX3JlYWRlciwgc291cmNlQWRkciwgY29sb3JNYXAsIGNvbG9yTWFwU2l6ZSwgd3JpdGVU
cmFuc3BhcmVudFBpeGVscywgYnVmZmVyLCB4LCB5LCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSk7
CisgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAK
KyAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/IG1f
c2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAoc291cmNlVmFsdWUgIT0gbV9y
ZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6
ZSkpIHsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihzb3VyY2VWYWx1ZSkgKiAzOworICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwg
eUJlZ2luLCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBj
b2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBt
YXkgb3IgbWF5IG5vdCBuZWVkIHRvIHdyaXRlIHRyYW5zcGFyZW50IHBpeGVscyB0byB0aGUgYnVm
ZmVyLgorICAgICAgICAgICAgLy8gSWYgd2UncmUgY29tcG9zaXRpbmcgYWdhaW5zdCBhIHByZXZp
b3VzIGltYWdlLCBpdCdzIHdyb25nLCBhbmQgaWYKKyAgICAgICAgICAgIC8vIHdlJ3JlIHdyaXRp
bmcgYXRvcCBhIGNsZWFyZWQsIGZ1bGx5IHRyYW5zcGFyZW50IGJ1ZmZlciwgaXQncworICAgICAg
ICAgICAgLy8gdW5uZWNlc3Nhcnk7IGJ1dCBpZiB3ZSdyZSBkZWNvZGluZyBhbiBpbnRlcmxhY2Vk
IGdpZiBhbmQKKyAgICAgICAgICAgIC8vIGRpc3BsYXlpbmcgaXQgIkhhZWJlcmxpIi1zdHlsZSwg
d2UgbXVzdCB3cml0ZSB0aGVzZSBmb3IgcGFzc2VzCisgICAgICAgICAgICAvLyBiZXlvbmQgdGhl
IGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0aGUKKyAg
ICAgICAgICAgIC8vIGxhdGVyIG9uZXMuCisgICAgICAgICAgICBpZiAod3JpdGVUcmFuc3BhcmVu
dFBpeGVscykKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5QmVnaW4sIDAsIDAs
IDAsIDApOwogICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSAgICBmb3IgKHVuc2lnbmVk
IGNoYXIqIHNvdXJjZUFkZHIgPSByb3dCdWZmZXI7IHNvdXJjZUFkZHIgPCByb3dFbmQgJiYgeCA8
IHNpemUoKS53aWR0aCgpOyArK3NvdXJjZUFkZHIsICsreCkKLSAgICAgICAgY29weU9uZVBpeGVs
KG1fcmVhZGVyLCBzb3VyY2VBZGRyLCBjb2xvck1hcCwgY29sb3JNYXBTaXplLCB3cml0ZVRyYW5z
cGFyZW50UGl4ZWxzLCBidWZmZXIsIHgsIHksIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhKTsKLQot
ICAgICAvLyBUZWxsIHRoZSBmcmFtZSB0byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVkIGJlLgot
ICAgIGlmIChyZXBlYXRDb3VudCA+IDEpIHsKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQotICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyhkZXN0WEJlZ2luLCBkZXN0
WEVuZCwgZGVzdFlCZWdpbiwgZGVzdFlFbmQpOwotI2Vsc2UKLSAgICAgICAgYnVmZmVyLmNvcHlS
b3dOVGltZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5LCBzdGQ6Om1pbih5ICsgc3Rh
dGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkpOwotI2VuZGlmCiAg
ICAgfQogCisgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVl
ZCBiZS4KKyAgICBpZiAocmVwZWF0Q291bnQgPiAxKQorICAgICAgICBidWZmZXIuY29weVJvd05U
aW1lcyh4QmVnaW4sIHhFbmQsIHlCZWdpbiwgeUVuZCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNDc4LDExICs0MTQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0
ZSh1bnNpCiAgICAgaWYgKCFtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBU
aGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFuc3BhcmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0
IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVzdWx0aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFy
ZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhhKGZhbHNlKS4KLSNpZiBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBpZiAoYnVmZmVyLnNjYWxlZFJlY3QoKS5jb250
YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQotI2Vsc2UKLSAgICAgICAg
aWYgKGJ1ZmZlci5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkK
LSNlbmRpZgorICAgICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBv
aW50KCksIHNjYWxlZFNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZh
bHNlKTsKICAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDApIHsKICAgICAgICAgICAgIC8v
IFRyaWNreSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkgaWYgZXZl
cnl3aGVyZQpAQCAtNTA3LDExICs0MzksNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVj
dCBpcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVj
dCwgd2Uga25vdyB0aGUgY3VycmVudCBmcmFtZSBoYXMgbm8gYWxwaGEuCiAgICAgICAgICAgICBp
ZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3Nl
T3ZlcndyaXRlQmdjb2xvcikKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5H
KQotICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5z
Y2FsZWRSZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+c2NhbGVkUmVjdCgpKSkKLSNlbHNlCiAg
ICAgICAgICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3Qo
KS5jb250YWlucyhwcmV2QnVmZmVyLT5yZWN0KCkpKQotI2VuZGlmCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDUzMjkwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEs
NiArNDMxLDE0IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAorYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7
CisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAgLTQ2MCw3OCAr
NDY4LDYgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplTwogICAgIH0K
IH0KIAotc3RhdGljIHZvaWQgY29udmVydENNWUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBp
bnQgZGVzdFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBzcmNXaWR0aAotI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkQ29sdW1ucwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi17Ci0jaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKLSAgICBpZiAoc2NhbGVkKSB7Ci0gICAgICAgIGludCBudW1D
b2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbnVtQ29sdW1uczsgKyt4KSB7Ci0gICAgICAgICAgICBKU0FNUExFKiBqc2FtcGxlID0gc3Jj
ICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjID0ganNhbXBs
ZVswXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG0gPSBqc2FtcGxlWzFdOwotICAgICAgICAgICAg
dW5zaWduZWQgeSA9IGpzYW1wbGVbMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBrID0ganNhbXBs
ZVszXTsKLSAgICAgICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgYyAqIGsgLyAyNTUsIG0g
KiBrIC8gMjU1LCB5ICogayAvIDI1NSwgMHhGRik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotICAgIGZvciAoSkRJTUVOU0lPTiB4ID0gMDsgeCA8IHNyY1dpZHRo
OyArK3gpIHsKLSAgICAgICAgdW5zaWduZWQgYyA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWduZWQg
bSA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWduZWQgeSA9ICpzcmMrKzsKLSAgICAgICAgdW5zaWdu
ZWQgayA9ICpzcmMrKzsKLQotICAgICAgICAvLyBTb3VyY2UgaXMgJ0ludmVydGVkIENNWUsnLCBv
dXRwdXQgaXMgUkdCLgotICAgICAgICAvLyBTZWU6IGh0dHA6Ly93d3cuZWFzeXJnYi5jb20vbWF0
aC5waHA/TUFUSD1NMTIjdGV4dDEyCi0gICAgICAgIC8vIE9yOiAgaHR0cDovL3d3dy5pbGtlcmF0
YWxheS5jb20vY29sb3JzcGFjZXNmYXEucGhwI3JnYgotCi0gICAgICAgIC8vIEZyb20gQ01ZSyB0
byBDTVkKLSAgICAgICAgLy8gQyA9IEMgKiAoIDEgLSBLICkgKyBLCi0gICAgICAgIC8vIE0gPSBN
ICogKCAxIC0gSyApICsgSwotICAgICAgICAvLyBZID0gWSAqICggMSAtIEsgKSArIEsKLQotICAg
ICAgICAvLyBGcm9tIEludmVydGVkIENNWUsgdG8gQ01ZIGlzIHRodXM6Ci0gICAgICAgIC8vIEMg
PSAoMS1pQykgKiAoMSAtICgxLWlLKSkgKyAoMS1pSykgPT4gMSAtIGlDKmlLCi0gICAgICAgIC8v
IFNhbWUgZm9yIE0gYW5kIFkKLQotICAgICAgICAvLyBDb252ZXJ0IGZyb20gQ01ZICgwLi4xKSB0
byBSR0IgKDAuLjEpCi0gICAgICAgIC8vIFIgPSAxIC0gQyA9PiAxIC0gKDEgLSBpQyppSykgPT4g
aUMqaUsKLSAgICAgICAgLy8gRyA9IDEgLSBNID0+IDEgLSAoMSAtIGlNKmlLKSA9PiBpTSppSwot
ICAgICAgICAvLyBCID0gMSAtIFkgPT4gMSAtICgxIC0gaVkqaUspID0+IGlZKmlLCi0KLSAgICAg
ICAgZGVzdC5zZXRSR0JBKHgsIGRlc3RZLCBjICogayAvIDI1NSwgbSAqIGsgLyAyNTUsIHkgKiBr
IC8gMjU1LCAweEZGKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRSR0JUb1JHQkEo
UkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgSkRJTUVOU0lPTiBz
cmNXaWR0aAotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIGJvb2wgc2NhbGVkLCBjb25zdCBWZWN0b3I8aW50PiYg
c2NhbGVkQ29sdW1ucwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi17
Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBpZiAoc2NhbGVk
KSB7Ci0gICAgICAgIGludCBudW1Db2x1bW5zID0gc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7Ci0gICAgICAgICAgICBK
U0FNUExFKiBqc2FtcGxlID0gc3JjICsgc2NhbGVkQ29sdW1uc1t4XSAqIDM7Ci0gICAgICAgICAg
ICBkZXN0LnNldFJHQkEoeCwgZGVzdFksIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVb
Ml0sIDB4RkYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBmb3IgKEpESU1FTlNJT04geCA9IDA7IHggPCBzcmNXaWR0aDsgKyt4KSB7Ci0gICAgICAgIHVu
c2lnbmVkIHIgPSAqc3JjKys7Ci0gICAgICAgIHVuc2lnbmVkIGcgPSAqc3JjKys7Ci0gICAgICAg
IHVuc2lnbmVkIGIgPSAqc3JjKys7Ci0gICAgICAgIGRlc3Quc2V0UkdCQSh4LCBkZXN0WSwgciwg
ZywgYiwgMHhGRik7Ci0gICAgfQotfQotCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNj
YW5saW5lcygpCiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC01
NDAsMTcgKzQ3Niw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkK
ICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgUkdCQTMy
QnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaW50IGJ1ZmZl
cldpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgIGludCBidWZmZXJIZWlnaHQgPSBzaXpl
KCkuaGVpZ2h0KCk7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAg
ICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRo
L2hlaWdodC4KLSAgICAgICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgICAgICBidWZmZXJXaWR0
aCA9IG1fc2NhbGVkQ29sdW1ucy5zaXplKCk7Ci0gICAgICAgICAgICBidWZmZXJIZWlnaHQgPSBt
X3NjYWxlZFJvd3Muc2l6ZSgpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBpZiAoIWJ1
ZmZlci5zZXRTaXplKGJ1ZmZlcldpZHRoLCBidWZmZXJIZWlnaHQpKSB7CisgICAgICAgIGlmICgh
YnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQo
KSkpIHsKICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtNTcyLDI3ICs0OTgsMzIgQEAgYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhp
bmZvLCBzYW1wbGVzLCAxKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIGludCBkZXN0WSA9IHNvdXJjZVk7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKLSAgICAgICAgaWYgKG1fc2NhbGVkKSB7Ci0gICAgICAgICAgICBkZXN0WSA9IHNj
YWxlZFkoc291cmNlWSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFkgPCAwKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpbnQgZGVzdFkgPSBzY2FsZWRZKHNvdXJjZVkpOworICAg
ICAgICBpZiAoZGVzdFkgPCAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludCB3
aWR0aCA9IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IGluZm8tPm91dHB1dF93
aWR0aDsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAg
ICAgICBKU0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENv
bHVtbnNbeF0gOiB4KSAqICgoaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IpID8gMyA6
IDQpOworICAgICAgICAgICAgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQor
ICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIGRlc3RZLCBqc2FtcGxlWzBdLCBqc2Ft
cGxlWzFdLCBqc2FtcGxlWzJdLCAweEZGKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGluZm8tPm91
dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgICAgICAgICAgICAgIC8vIFNvdXJjZSBp
cyAnSW52ZXJ0ZWQgQ01ZSycsIG91dHB1dCBpcyBSR0IuCisgICAgICAgICAgICAgICAgLy8gU2Vl
OiBodHRwOi8vd3d3LmVhc3lyZ2IuY29tL21hdGgucGhwP01BVEg9TTEyI3RleHQxMgorICAgICAg
ICAgICAgICAgIC8vIE9yOiAgaHR0cDovL3d3dy5pbGtlcmF0YWxheS5jb20vY29sb3JzcGFjZXNm
YXEucGhwI3JnYgorICAgICAgICAgICAgICAgIC8vIEZyb20gQ01ZSyB0byBDTVk6CisgICAgICAg
ICAgICAgICAgLy8gWCA9ICAgWCAgICAqICgxIC0gICBLICAgKSArICAgSyAgW2ZvciBYID0gQywg
TSwgb3IgWV0KKyAgICAgICAgICAgICAgICAvLyBUaHVzLCBmcm9tIEludmVydGVkIENNWUsgdG8g
Q01ZIGlzOgorICAgICAgICAgICAgICAgIC8vIFggPSAoMS1pWCkgKiAoMSAtICgxLWlLKSkgKyAo
MS1pSykgPT4gMSAtIGlYKmlLCisgICAgICAgICAgICAgICAgLy8gRnJvbSBDTVkgKDAuLjEpIHRv
IFJHQiAoMC4uMSk6CisgICAgICAgICAgICAgICAgLy8gUiA9IDEgLSBDID0+IDEgLSAoMSAtIGlD
KmlLKSA9PiBpQyppSyAgW0cgYW5kIEIgc2ltaWxhcl0KKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBrID0ganNhbXBsZVszXTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0
WSwganNhbXBsZVswXSAqIGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8gMjU1LCBqc2FtcGxlWzJd
ICogayAvIDI1NSwgMHhGRik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGluZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKQotICAgICAgICAg
ICAgY29udmVydFJHQlRvUkdCQShidWZmZXIsIGRlc3RZLCAqc2FtcGxlcywgaW5mby0+b3V0cHV0
X3dpZHRoLCBtX3NjYWxlZCwgbV9zY2FsZWRDb2x1bW5zKTsKLSAgICAgICAgZWxzZSBpZiAoaW5m
by0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19DTVlLKQotICAgICAgICAgICAgY29udmVydENNWUtU
b1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMsIGluZm8tPm91dHB1dF93aWR0aCwgbV9zY2Fs
ZWQsIG1fc2NhbGVkQ29sdW1ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSNlbHNlCi0gICAgICAgIGlmIChpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JH
QikKLSAgICAgICAgICAgIGNvbnZlcnRSR0JUb1JHQkEoYnVmZmVyLCBkZXN0WSwgKnNhbXBsZXMs
IGluZm8tPm91dHB1dF93aWR0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZm8tPm91dF9jb2xvcl9z
cGFjZSA9PSBKQ1NfQ01ZSykKLSAgICAgICAgICAgIGNvbnZlcnRDTVlLVG9SR0JBKGJ1ZmZlciwg
ZGVzdFksICpzYW1wbGVzLCBpbmZvLT5vdXRwdXRfd2lkdGgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMyOTApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw2ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2hldGhlciBv
ciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKIAorICAgICAgICB2aXJ0dWFsIGJvb2wg
c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwogICAgICAgICB2aXJ0
dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAg
ICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC01OCwxNiArNjAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAK
LSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBib29sIHNl
dFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgIHByaXZh
dGU6CiAgICAgICAgIEpQRUdJbWFnZVJlYWRlciogbV9yZWFkZXI7CiAgICAgfTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gNTMyOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsOSAr
MjU2LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgICAg
ICAgICBsb25nam1wKHBuZy0+am1wYnVmLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIHBy
ZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaW50IGJp
dERlcHRoLCBjb2xvclR5cGUsIGludGVybGFjZVR5cGUsIGNvbXByZXNzaW9uVHlwZSwgZmlsdGVy
VHlwZSwgY2hhbm5lbHM7CkBAIC0zMzAsMTQgKzMyOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUodW5zaWcKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBp
ZiBuZWVkZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
IHsKLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBpbnQg
d2lkdGggPSBtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1ucy5zaXplKCkgOiBzaXplKCkud2lkdGgo
KTsKLSAgICAgICAgaW50IGhlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6
IHNpemUoKS5oZWlnaHQoKTsKLSNlbHNlCi0gICAgICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0
aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZSgpLmhlaWdodCgpOwotI2VuZGlmCi0gICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgaWYgKCFi
dWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgp
KSkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9w
cm9ncmVzc2l2ZV9wdHIocmVhZGVyKCktPnBuZ1B0cigpKSktPmRlY29kaW5nRmFpbGVkKCk7CiAg
ICAgICAgICAgICBsb25nam1wKHJlYWRlcigpLT5wbmdQdHIoKS0+am1wYnVmLCAxKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTM5NiwzMyArMzg3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUodW5zaWcKICAgICAgICAgcm93ID0gcm93QnVmZmVyOwogCiAgICAgLy8g
Q29weSB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBpZiAobV9zY2FsZWQpIHsKLSAgICAgICAgaW50IGRlc3RZID0g
c2NhbGVkWShyb3dJbmRleCk7Ci0gICAgICAgIGlmIChkZXN0WSA8IDApCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGludCBjb2x1bW5zID0gbV9zY2FsZWRDb2x1bW5zLnNpemUoKTsKLSAg
ICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGNvbHVtbnM7ICsreCkgewotICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVs
ID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW3hdICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gcGl4ZWxbM107Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCBkZXN0WSwgcGl4
ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwotICAgICAgICAgICAgaWYgKCFzYXdB
bHBoYSAmJiBhbHBoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHNhd0FscGhhID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKKyAgICBp
bnQgZGVzdFkgPSBzY2FsZWRZKHJvd0luZGV4KTsKKyAgICBpZiAoZGVzdFkgPCAwKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7
CiAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOwogICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgICB1bnNpZ25lZCByZWQgPSAqcm93Kys7Ci0g
ICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOwotICAgICAgICB1bnNpZ25lZCBibHVlID0g
KnJvdysrOwotICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IChoYXNBbHBoYSA/ICpyb3crKyA6IDI1
NSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHJvd0luZGV4LCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7CisgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1f
c2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKKyAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OworICAgICAgICBidWZmZXIuc2V0UkdC
QSh4LCBkZXN0WSwgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAg
ICBpZiAoIXNhd0FscGhhICYmIGFscGhhIDwgMjU1KSB7CiAgICAgICAgICAgICBzYXdBbHBoYSA9
IHRydWU7CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46709</attachid>
            <date>2010-01-15 13:40:42 -0800</date>
            <delta_ts>2010-01-15 15:54:24 -0800</delta_ts>
            <desc>Use OwnPtrs and remove GIFImageDecoderPrivate</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21637</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzM0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDEtMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IGltYWdlIGRlY29kZXJzIHNsaWdodGx5IGJ5IHVzaW5nIE93blB0ciBpbnN0ZWFk
IG9mIHJhdyBwb2ludGVycworICAgICAgICBhbmQgZWxpbWluYXRpbmcgYSBiYXNpY2FsbHktdXNl
bGVzcyB3cmFwcGVyIGNsYXNzIGluIHRoZSBHSUYgZGVjb2Rlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXJRdDo6SW1hZ2VEZWNvZGVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyUXQ6On5JbWFnZURlY29kZXJRdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJR
dDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6aW50ZXJuYWxS
ZWFkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmZhaWxSZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGlu
Z0hhbHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93
KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQTkdJbWFnZURlY29kZXI6On5QTkdJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVy
QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxh
YmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmg6CisKIDIwMTAtMDEtMTUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkocmV2aXNpb24gNTMzNDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTYgKzQ3LDEyIEBAIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpj
cmVhdGUoY29uc3QKIH0KIAogSW1hZ2VEZWNvZGVyUXQ6OkltYWdlRGVjb2RlclF0KCkKLSAgICA6
ICBtX2J1ZmZlcigwKQotICAgICwgbV9yZWFkZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50
KGNBbmltYXRpb25Ob25lKQorICAgIDogbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUp
CiB7CiB9CiAKIEltYWdlRGVjb2RlclF0Ojp+SW1hZ2VEZWNvZGVyUXQoKQogewotICAgIGRlbGV0
ZSBtX3JlYWRlcjsKLSAgICBkZWxldGUgbV9idWZmZXI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVy
UXQ6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKQEAg
LTc3LDEwICs3MywxMCBAQCB2b2lkIEltYWdlRGVjb2RlclF0OjpzZXREYXRhKFNoYXJlZEJ1ZmZl
CiAKICAgICAvLyBBdHRlbXB0IHRvIGxvYWQgdGhlIGRhdGEKICAgICBRQnl0ZUFycmF5IGltYWdl
RGF0YSA9IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSk7Ci0gICAgbV9idWZmZXIgPSBuZXcgUUJ1ZmZlcjsKKyAgICBtX2J1ZmZlci5zZXQobmV3
IFFCdWZmZXIpOwogICAgIG1fYnVmZmVyLT5zZXREYXRhKGltYWdlRGF0YSk7CiAgICAgbV9idWZm
ZXItPm9wZW4oUUJ1ZmZlcjo6UmVhZE9ubHkpOwotICAgIG1fcmVhZGVyID0gbmV3IFFJbWFnZVJl
YWRlcihtX2J1ZmZlciwgbV9mb3JtYXQpOworICAgIG1fcmVhZGVyLnNldChuZXcgUUltYWdlUmVh
ZGVyKG1fYnVmZmVyLCBtX2Zvcm1hdCkpOwogCiAgICAgLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBK
UEVHIGRlY29kZXIgdG8gdXNlIEpEQ1RfSUZBU1QKICAgICBtX3JlYWRlci0+c2V0UXVhbGl0eSg0
OSk7CkBAIC0xODMsMTAgKzE3OSw4IEBAIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsUmVh
ZEltYWdlKHMKICAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zdGF0dXMoKSAhPSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICBk
ZWxldGUgbV9yZWFkZXI7Ci0gICAgZGVsZXRlIG1fYnVmZmVyOwotICAgIG1fYnVmZmVyID0gMDsK
LSAgICBtX3JlYWRlciA9IDA7CisgICAgbV9yZWFkZXIuY2xlYXIoKTsKKyAgICBtX2J1ZmZlci5j
bGVhcigpOwogfQogCiB2b2lkIEltYWdlRGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1cnJlbnRJ
bWFnZShzaXplX3QgZnJhbWVJbmRleCkKQEAgLTIzNCwxMCArMjI4LDggQEAgdm9pZCBJbWFnZURl
Y29kZXJRdDo6Zm9yY2VMb2FkRXZlcnl0aGluZwogdm9pZCBJbWFnZURlY29kZXJRdDo6ZmFpbFJl
YWQoKQogewogICAgIHNldEZhaWxlZCgpOwotICAgIGRlbGV0ZSBtX3JlYWRlcjsKLSAgICBkZWxl
dGUgbV9idWZmZXI7Ci0gICAgbV9yZWFkZXIgPSAwOwotICAgIG1fYnVmZmVyID0gMDsKKyAgICBt
X3JlYWRlci5jbGVhcigpOworICAgIG1fYnVmZmVyLmNsZWFyKCk7CiB9CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgJKHJldmlzaW9u
IDUzMzQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8UXRDb3JlL1FMaXN0
PgogI2luY2x1ZGUgPFF0Q29yZS9RSGFzaD4KICNpbmNsdWRlIDxRdENvcmUvUUJ1ZmZlcj4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsOCAr
NjcsOCBAQCBwcml2YXRlOgogCiBwcml2YXRlOgogICAgIFFCeXRlQXJyYXkgbV9mb3JtYXQ7Ci0g
ICAgUUJ1ZmZlciogbV9idWZmZXI7Ci0gICAgUUltYWdlUmVhZGVyKiBtX3JlYWRlcjsKKyAgICBP
d25QdHI8UUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgT3duUHRyPFFJbWFnZVJlYWRlcj4gbV9yZWFk
ZXI7CiAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CiB9OwogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5jcHAJKHJldmlzaW9uIDUzMzQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNzAgKzI5
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR0lGSW1hZ2VEZWNvZGVyUHJp
dmF0ZSB7Ci1wdWJsaWM6Ci0gICAgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZShHSUZJbWFnZURlY29k
ZXIqIGRlY29kZXIgPSAwKQotICAgICAgICA6IG1fcmVhZGVyKGRlY29kZXIpCi0gICAgICAgICwg
bV9yZWFkT2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAgIH5HSUZJbWFnZURlY29kZXJQcml2
YXRlKCkKLSAgICB7Ci0gICAgICAgIG1fcmVhZGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgYm9v
bCBkZWNvZGUoU2hhcmVkQnVmZmVyKiBkYXRhLCAKLSAgICAgICAgICAgICAgICBHSUZJbWFnZURl
Y29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksCi0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhbHRGcmFtZSA9IC0xKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEtPmRhdGEo
KSArIG1fcmVhZE9mZnNldCwgZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhhbHRGcmFtZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZnJhbWVDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZGVyLmltYWdlc19jb3VudDsgfQotICAgIGludCByZXBldGl0aW9uQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5sb29wX2NvdW50OyB9Ci0KLSAgICB2b2lkIHNldFJl
YWRPZmZzZXQodW5zaWduZWQgbykgeyBtX3JlYWRPZmZzZXQgPSBvOyB9Ci0KLSAgICBib29sIGlz
VHJhbnNwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5mcmFtZV9yZWFkZXItPmlzX3Ry
YW5zcGFyZW50OyB9Ci0KLSAgICB2b2lkIGdldENvbG9yTWFwKHVuc2lnbmVkIGNoYXIqJiBtYXAs
IHVuc2lnbmVkJiBzaXplKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fcmVhZGVyLmZyYW1l
X3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgewotICAgICAgICAgICAgbWFwID0g
bV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKLSAgICAgICAgICAgIHNpemUg
PSAodW5zaWduZWQpbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWFwID0gbV9yZWFkZXIuZ2xvYmFsX2NvbG9y
bWFwOwotICAgICAgICAgICAgc2l6ZSA9IG1fcmVhZGVyLmdsb2JhbF9jb2xvcm1hcF9zaXplOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZnJhbWVYT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT54X29mZnNldDsgfQotICAgIHVuc2lnbmVkIGZy
YW1lWU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmZyYW1lX3JlYWRlci0+eV9vZmZz
ZXQ7IH0KLSAgICB1bnNpZ25lZCBmcmFtZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkZXIu
ZnJhbWVfcmVhZGVyLT53aWR0aDsgfQotICAgIHVuc2lnbmVkIGZyYW1lSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5oZWlnaHQ7IH0KLQotICAgIGludCB0cmFu
c3BhcmVudFBpeGVsKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT50cGl4
ZWw7IH0KLQotICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkZXIu
ZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgR0lGSW1hZ2VSZWFk
ZXIgbV9yZWFkZXI7Ci0gICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OwotfTsKLQogR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoKQogICAgIDogbV9mcmFtZUNvdW50VmFsaWQodHJ1ZSkK
ICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKLSAgICAsIG1fcmVh
ZGVyKDApCisgICAgLCBtX3JlYWRPZmZzZXQoMCkKIHsKIH0KIAogR0lGSW1hZ2VEZWNvZGVyOjp+
R0lGSW1hZ2VEZWNvZGVyKCkKIHsKLSAgICBkZWxldGUgbV9yZWFkZXI7CiB9CiAKIC8vIFRha2Ug
dGhlIGRhdGEgYW5kIHN0b3JlIGl0LgpAQCAtMTA5LDcgKzU0LDcgQEAgdm9pZCBHSUZJbWFnZURl
Y29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogCiAgICAgLy8gQ3JlYXRlIHRoZSBHSUYgcmVhZGVy
LgogICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQotICAgICAgICBtX3JlYWRlciA9IG5l
dyBHSUZJbWFnZURlY29kZXJQcml2YXRlKHRoaXMpOworICAgICAgICBtX3JlYWRlci5zZXQobmV3
IEdJRkltYWdlUmVhZGVyKHRoaXMpKTsKIH0KIAogLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUg
aW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCkBAIC0xMzIsMTMgKzc3LDEzIEBAIHNp
emVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAgICAvLyBzbG93bHkuICBN
aWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8gY2xvbmUgb3VyIGV4aXN0aW5nIHJlYWQgc2Vz
c2lvbiB0byBwcmVzZXJ2ZQogICAgICAgICAvLyBzdGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBj
cmF3bCBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQK
ICAgICAgICAgLy8gSW1hZ2VJTyBkb2VzIG9uIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xz
IGFsbCB0aGUgZGF0YSBhZ2FpbikuCi0gICAgICAgIEdJRkltYWdlRGVjb2RlclByaXZhdGUgcmVh
ZGVyOworICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFkZXIoMCk7CiAgICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbWF5IGZhaWwsIGJ1dCB3ZSB3YW50IHRvIGtlZXAgYW55IHBhcnRpYWwgZGF0YSBp
dCBtYXkKICAgICAgICAgLy8gaGF2ZSBkZWNvZGVkLCBzbyBkb24ndCBtYXJrIGl0IGlzIGludmFs
aWQuIElmIHRoZXJlIGlzIGFuIG92ZXJmbG93CiAgICAgICAgIC8vIG9yIHNvbWUgc2VyaW91cyBl
cnJvciwgbV9mYWlsZWQgd2lsbCBoYXZlIGdvdHRlbiBzZXQgZm9yIHVzLgotICAgICAgICByZWFk
ZXIuZGVjb2RlKG1fZGF0YS5nZXQoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5KTsKKyAgICAgICAgcmVh
ZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5LCAtMSk7CiAgICAgICAgIG1fZnJhbWVDb3VudFZhbGlk
ID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuZnJhbWVD
b3VudCgpKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2Vz
X2NvdW50KTsKICAgICB9CiAKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsK
QEAgLTE2MSw3ICsxMDYsNyBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQo
KSBjCiAgICAgICAgIC8vIGNBbmltYXRpb25Mb29wT25jZSAoLTEpIHdoZW4gaXRzIGN1cnJlbnQg
aW5jYXJuYXRpb24gaGFzbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIHNlZW4gYSBsb29wIGNvdW50
IHlldDsgaW4gdGhpcyBjYXNlIHdlIHJldHVybiBvdXIgcHJldmlvdXNseS1jYWNoZWQKICAgICAg
ICAgLy8gdmFsdWUuCi0gICAgICAgIGNvbnN0IGludCByZXBldGl0aW9uQ291bnQgPSBtX3JlYWRl
ci0+cmVwZXRpdGlvbkNvdW50KCk7CisgICAgICAgIGNvbnN0IGludCByZXBldGl0aW9uQ291bnQg
PSBtX3JlYWRlci0+bG9vcF9jb3VudDsKICAgICAgICAgaWYgKHJlcGV0aXRpb25Db3VudCAhPSBj
TG9vcENvdW50Tm90U2VlbikKICAgICAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gcmVwZXRp
dGlvbkNvdW50OwogICAgIH0KQEAgLTIzNSwxMiArMTgwLDEwIEBAIHZvaWQgR0lGSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXUKICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLmdldCgpLCBxdWVy
eSwgaGFsdEF0RnJhbWUpOworICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1
bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXpl
KCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7CiAgICAgCi0gICAgaWYgKG1f
ZmFpbGVkKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKLSAgICAgICAgbV9yZWFkZXIgPSAw
OwotICAgIH0KKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9
CiAKIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgpAQCAtMjU0LDIwICsxOTcsMjAg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUodQogCiB2b2lkIEdJRklt
YWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KQogewotICAgIG1f
cmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsKKyAgICBt
X3JlYWRPZmZzZXQgPSBtX2RhdGEtPnNpemUoKSAtIGJ5dGVzTGVmdDsKIH0KIAogYm9vbCBHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogewogICAg
IC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KLSAgICBJbnRSZWN0
IGZyYW1lUmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZz
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBtX3JlYWRlci0+ZnJhbWVXaWR0aCgpLCBtX3Jl
YWRlci0+ZnJhbWVIZWlnaHQoKSk7CisgICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZyYW1lUmVh
ZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFt
ZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCwgZnJhbWVSZWFkZXItPndp
ZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVS
ZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgYnVmZmVyLgog
ICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IHNpemUoKS53aWR0aCgpKQotICAgICAgICBmcmFt
ZVJlY3Quc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCkp
OworICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFtZVJlYWRl
ci0+eF9vZmZzZXQpOwogICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCkuaGVpZ2h0
KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gbV9yZWFk
ZXItPmZyYW1lWU9mZnNldCgpKTsKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCku
aGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQpOwogCiAgICAgUkdCQTMyQnVmZmVyKiBj
b25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogICAgIGludCBs
ZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CkBAIC0zNDYsMjQgKzI4OSwz
MCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0Q291bnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxz
KQogeworICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVyLT5m
cmFtZV9yZWFkZXI7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5hdGVzIHN1cHBs
aWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8vIG9yaWdpbiB3aXRo
aW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8gKG1fcmVhZGVyLT5mcmFtZVhP
ZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4gIFRoZXJlIGlzIG5vCi0gICAgLy8g
Z3VhcmFudGVlIHRoYXQKLSAgICAvLyAocm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgpLndp
ZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCkpLCBzbworICAgIC8vIChmcmFtZVJlYWRl
ci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCkuICBUaGVyZSBpcyBubyBndWFyYW50
ZWUKKyAgICAvLyB0aGF0IChyb3dFbmQgLSByb3dCdWZmZXIpID09IChzaXplKCkud2lkdGgoKSAt
IGZyYW1lUmVhZGVyLT54X29mZnNldCksIHNvCiAgICAgLy8gd2UgbXVzdCBlbnN1cmUgd2UgZG9u
J3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291cmNlIGRhdGEgb3IgdGhlCiAgICAg
Ly8gcm93J3MgWC1jb29yZGluYXRlcy4KLSAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3VuZFNjYWxl
ZFgobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKLSAgICBpbnQgeUJlZ2luID0gdXBwZXJCb3Vu
ZFNjYWxlZFkobV9yZWFkZXItPmZyYW1lWU9mZnNldCgpICsgcm93TnVtYmVyKTsKKyAgICBpbnQg
eEJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICBp
bnQgeUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWFkZXItPnlfb2Zmc2V0ICsgcm93
TnVtYmVyKTsKICAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHhCZWdp
biArIHN0YXRpY19jYXN0PGludD4ocm93RW5kIC0gcm93QnVmZmVyKSwgc2l6ZSgpLndpZHRoKCkp
IC0gMSwgeEJlZ2luICsgMSkgKyAxOwogICAgIGludCB5RW5kID0gbG93ZXJCb3VuZFNjYWxlZFko
c3RkOjptaW4oeUJlZ2luICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5o
ZWlnaHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CiAgICAgaWYgKCFyb3dCdWZmZXIgfHwgKHhC
ZWdpbiA8IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9
IHlCZWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRoZSBjb2xvcm1h
cC4KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsKICAgICB1bnNpZ25lZCBjb2xv
ck1hcFNpemU7Ci0gICAgdW5zaWduZWQgY2hhciogY29sb3JNYXA7Ci0gICAgbV9yZWFkZXItPmdl
dENvbG9yTWFwKGNvbG9yTWFwLCBjb2xvck1hcFNpemUpOworICAgIGlmIChmcmFtZVJlYWRlci0+
aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgeworICAgICAgICBjb2xvck1hcCA9IGZyYW1lUmVh
ZGVyLT5sb2NhbF9jb2xvcm1hcDsKKyAgICAgICAgY29sb3JNYXBTaXplID0gKHVuc2lnbmVkKWZy
YW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIGNv
bG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcDsKKyAgICAgICAgY29sb3JNYXBTaXpl
ID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcF9zaXplOworICAgIH0KICAgICBpZiAoIWNvbG9y
TWFwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMzc0LDggKzMyMyw4IEBAIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIFdyaXRlIG9uZSByb3cn
cyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAgICAgZm9yIChpbnQgeCA9IHhCZWdp
bjsgeCA8IHhFbmQ7ICsreCkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZh
bHVlID0gKihyb3dCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAt
IG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSk7Ci0gICAgICAgIGlmICgoIW1fcmVhZGVyLT5pc1Ry
YW5zcGFyZW50KCkgfHwgKHNvdXJjZVZhbHVlICE9IG1fcmVhZGVyLT50cmFuc3BhcmVudFBpeGVs
KCkpKSAmJiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/IG1fc2Nh
bGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICAgICAgaWYg
KCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFtZVJl
YWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXplKSkgewogICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNvdXJj
ZVZhbHVlKSAqIDM7CiAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5QmVnaW4sIGNvbG9y
TWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2NvbG9y
SW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ0OCw5ICszOTcsOCBAQCB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6Z2lmQ29tcGxldGUoKQogewogICAgIGlmIChtX3JlYWRlcikKLSAgICAgICAgbV9yZXBl
dGl0aW9uQ291bnQgPSBtX3JlYWRlci0+cmVwZXRpdGlvbkNvdW50KCk7Ci0gICAgZGVsZXRlIG1f
cmVhZGVyOwotICAgIG1fcmVhZGVyID0gMDsKKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBt
X3JlYWRlci0+bG9vcF9jb3VudDsKKyAgICBtX3JlYWRlci5jbGVhcigpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMzNDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDExIEBACiAjZGVmaW5lIEdJRkltYWdlRGVjb2Rlcl9oCiAK
ICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdJRkltYWdlUmVhZGVyOwogCi0gICAgY2xhc3MgR0lG
SW1hZ2VEZWNvZGVyUHJpdmF0ZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIC8vIFRoaXMg
Y2xhc3MgZGVjb2RlcyB0aGUgR0lGIGltYWdlIGZvcm1hdC4KICAgICBjbGFzcyBHSUZJbWFnZURl
Y29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKQEAgLTgwLDcgKzgxLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIG1fZnJhbWVDb3VudFZhbGlkOwogICAgICAgICBib29s
IG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRp
b25Db3VudDsKLSAgICAgICAgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9yZWFkZXI7CisgICAg
ICAgIE93blB0cjxHSUZJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CisgICAgICAgIHVuc2lnbmVkIG1f
cmVhZE9mZnNldDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAw
LDEyICs0MDAsMTEgQEAgdm9pZCB0ZXJtX3NvdXJjZSAoal9kZWNvbXByZXNzX3B0ciBqZCkKIH0K
IAogSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2RlcigpCi06IG1fcmVhZGVyKDApCi17
fQoreworfQogCiBKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2RlcigpCiB7Ci0gICAg
ZGVsZXRlIG1fcmVhZGVyOwogfQogCiAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KQEAg
LTQxOSw3ICs0MTgsNyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVm
CiAKICAgICAvLyBDcmVhdGUgdGhlIEpQRUcgcmVhZGVyLgogICAgIGlmICghbV9yZWFkZXIgJiYg
IW1fZmFpbGVkKQotICAgICAgICBtX3JlYWRlciA9IG5ldyBKUEVHSW1hZ2VSZWFkZXIodGhpcyk7
CisgICAgICAgIG1fcmVhZGVyLnNldChuZXcgSlBFR0ltYWdlUmVhZGVyKHRoaXMpKTsKIH0KIAog
Ly8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5
ZXQuCkBAIC00NjIsMTAgKzQ2MSw4IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJv
b2wgc2l6ZU8KIAogICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZm
ZXIoKSwgc2l6ZU9ubHkpOwogCi0gICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNh
Y2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMy
QnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkgewotICAgICAgICBkZWxldGUgbV9yZWFkZXI7Ci0gICAg
ICAgIG1fcmVhZGVyID0gMDsKLSAgICB9CisgICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1
ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICAgICAgbV9yZWFkZXIuY2xlYXIoKTsK
IH0KIAogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNkZWZpbmUgSlBFR0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNTUsMTMgKzU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRl
Y29kZShib29sIHNpemVPbmx5ID0gZmFsc2UpOwogCi0gICAgICAgIEpQRUdJbWFnZVJlYWRlciog
cmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KLQogICAgICAgICBib29sIG91dHB1dFNjYW5s
aW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSlBFR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsKKyAgICAgICAgT3duUHRyPEpQRUdJbWFn
ZVJlYWRlcj4gbV9yZWFkZXI7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MCwxMyArMTUwLDExIEBAIHByaXZhdGU6CiB9OwogCiBQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdl
RGVjb2RlcigpCi0gICAgOiBtX3JlYWRlcigwKQogewogfQogCiBQTkdJbWFnZURlY29kZXI6On5Q
TkdJbWFnZURlY29kZXIoKQogewotICAgIGRlbGV0ZSBtX3JlYWRlcjsKIH0KIAogLy8gVGFrZSB0
aGUgZGF0YSBhbmQgc3RvcmUgaXQuCkBAIC0xNzAsNyArMTY4LDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogCiAgICAgLy8gQ3JlYXRlIHRoZSBQTkcgcmVhZGVy
LgogICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQotICAgICAgICBtX3JlYWRlciA9IG5l
dyBQTkdJbWFnZVJlYWRlcih0aGlzKTsKKyAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBQTkdJbWFn
ZVJlYWRlcih0aGlzKSk7CiB9CiAKIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0
aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgpAQCAtMjA1LDEwICsyMDMsOCBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9uCiAKICAgICBtX3JlYWRlci0+ZGVjb2RlKCpt
X2RhdGEsIHNpemVPbmx5KTsKICAgICAKLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsK
LSAgICAgICAgbV9yZWFkZXIgPSAwOwotICAgIH0KKyAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQorICAgICAgICBtX3JlYWRlci5jbGVh
cigpOwogfQogCiB2b2lkIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0
X2NoYXJwIGVycm9yTXNnKQpAQCAtMjM3LDggKzIzMyw4IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpkZWNvZGluZ0ZhaWxlZCgpCiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFi
bGUoKQogewotICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsKLSAgICBw
bmdfaW5mb3AgaW5mbyA9IHJlYWRlcigpLT5pbmZvUHRyKCk7CisgICAgcG5nX3N0cnVjdHAgcG5n
ID0gbV9yZWFkZXItPnBuZ1B0cigpOworICAgIHBuZ19pbmZvcCBpbmZvID0gbV9yZWFkZXItPmlu
Zm9QdHIoKTsKICAgICBwbmdfdWludF8zMiB3aWR0aCA9IHBuZy0+d2lkdGg7CiAgICAgcG5nX3Vp
bnRfMzIgaGVpZ2h0ID0gcG5nLT5oZWlnaHQ7CiAgICAgCkBAIC0zMDUsMTEgKzMwMSwxMSBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICBjaGFubmVscyA9IHBu
Z19nZXRfY2hhbm5lbHMocG5nLCBpbmZvKTsKICAgICBBU1NFUlQoY2hhbm5lbHMgPT0gMyB8fCBj
aGFubmVscyA9PSA0KTsKIAotICAgIHJlYWRlcigpLT5zZXRIYXNBbHBoYShjaGFubmVscyA9PSA0
KTsKKyAgICBtX3JlYWRlci0+c2V0SGFzQWxwaGEoY2hhbm5lbHMgPT0gNCk7CiAKLSAgICBpZiAo
cmVhZGVyKCktPmRlY29kaW5nU2l6ZU9ubHkoKSkgeworICAgIGlmIChtX3JlYWRlci0+ZGVjb2Rp
bmdTaXplT25seSgpKSB7CiAgICAgICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBzaXplLCBo
YWx0IHRoZSByZWFkZXIuICAgICAKLSAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZzZXQocmVh
ZGVyKCktPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAg
bV9yZWFkZXItPnNldFJlYWRPZmZzZXQobV9yZWFkZXItPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBw
bmctPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgcG5nLT5idWZmZXJfc2l6ZSA9IDA7CiAgICAgfQog
fQpAQCAtMzI5LDggKzMyNSw4IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsK
ICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewog
ICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRT
aXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29k
ZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihyZWFkZXIoKS0+cG5nUHRyKCkpKS0+ZGVjb2Rp
bmdGYWlsZWQoKTsKLSAgICAgICAgICAgIGxvbmdqbXAocmVhZGVyKCktPnBuZ1B0cigpLT5qbXBi
dWYsIDEpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dl
dF9wcm9ncmVzc2l2ZV9wdHIobV9yZWFkZXItPnBuZ1B0cigpKSktPmRlY29kaW5nRmFpbGVkKCk7
CisgICAgICAgICAgICBsb25nam1wKG1fcmVhZGVyLT5wbmdQdHIoKS0+am1wYnVmLCAxKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJH
QkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKQEAgLTMzOSw4ICszMzUsOCBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgICAgIC8vIEZvciBQTkdzLCB0aGUg
ZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZlci5zZXRS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAKLSAgICAgICAgaWYgKHJlYWRlcigp
LT5wbmdQdHIoKS0+aW50ZXJsYWNlZCkKLSAgICAgICAgICAgIHJlYWRlcigpLT5jcmVhdGVJbnRl
cmxhY2VCdWZmZXIoKHJlYWRlcigpLT5oYXNBbHBoYSgpID8gNCA6IDMpICogc2l6ZSgpLndpZHRo
KCkgKiBzaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBpZiAobV9yZWFkZXItPnBuZ1B0cigpLT5p
bnRlcmxhY2VkKQorICAgICAgICAgICAgbV9yZWFkZXItPmNyZWF0ZUludGVybGFjZUJ1ZmZlcigo
bV9yZWFkZXItPmhhc0FscGhhKCkgPyA0IDogMykgKiBzaXplKCkud2lkdGgoKSAqIHNpemUoKS5o
ZWlnaHQoKSk7CiAgICAgfQogCiAgICAgaWYgKHJvd0J1ZmZlciA9PSAwKQpAQCAtMzc0LDExICsz
NzAsMTEgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICog
b2xkIHJvdyBhbmQgdGhlIG5ldyByb3cuCiAgICAgKi8KIAotICAgIHBuZ19zdHJ1Y3RwIHBuZyA9
IHJlYWRlcigpLT5wbmdQdHIoKTsKLSAgICBib29sIGhhc0FscGhhID0gcmVhZGVyKCktPmhhc0Fs
cGhhKCk7CisgICAgcG5nX3N0cnVjdHAgcG5nID0gbV9yZWFkZXItPnBuZ1B0cigpOworICAgIGJv
b2wgaGFzQWxwaGEgPSBtX3JlYWRlci0+aGFzQWxwaGEoKTsKICAgICB1bnNpZ25lZCBjb2xvckNo
YW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICBwbmdfYnl0ZXAgcm93OwotICAgIHBuZ19i
eXRlcCBpbnRlcmxhY2VCdWZmZXIgPSByZWFkZXIoKS0+aW50ZXJsYWNlQnVmZmVyKCk7CisgICAg
cG5nX2J5dGVwIGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsK
ICAgICBpZiAoaW50ZXJsYWNlQnVmZmVyKSB7CiAgICAgICAgIHJvdyA9IGludGVybGFjZUJ1ZmZl
ciArIChyb3dJbmRleCAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSk7CiAgICAgICAg
IHBuZ19wcm9ncmVzc2l2ZV9jb21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIFBOR0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTAsOCArNTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkZWNvZGUo
Ym9vbCBzaXplT25seSA9IGZhbHNlKTsKIAotICAgICAgICBQTkdJbWFnZVJlYWRlciogcmVhZGVy
KCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KLQogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSBsaWJw
bmcKICAgICAgICAgdm9pZCBkZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICB2b2lkIGhlYWRlckF2
YWlsYWJsZSgpOwpAQCAtNTksNyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgcG5nQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFBOR0ltYWdlUmVh
ZGVyKiBtX3JlYWRlcjsKKyAgICAgICAgT3duUHRyPFBOR0ltYWdlUmVhZGVyPiBtX3JlYWRlcjsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46714</attachid>
            <date>2010-01-15 15:54:24 -0800</date>
            <delta_ts>2010-01-18 09:47:25 -0800</delta_ts>
            <desc>Use OwnPtrs and remove GIFImageDecoderPrivate, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21643</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzM0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDEtMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IGltYWdlIGRlY29kZXJzIHNsaWdodGx5IGJ5IHVzaW5nIE93blB0ciBpbnN0ZWFk
IG9mIHJhdyBwb2ludGVycworICAgICAgICBhbmQgZWxpbWluYXRpbmcgYSBiYXNpY2FsbHktdXNl
bGVzcyB3cmFwcGVyIGNsYXNzIGluIHRoZSBHSUYgZGVjb2Rlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXJRdDo6SW1hZ2VEZWNvZGVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyUXQ6On5JbWFnZURlY29kZXJRdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJR
dDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6aW50ZXJuYWxS
ZWFkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmZhaWxSZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGlu
Z0hhbHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93
KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQTkdJbWFnZURlY29kZXI6On5QTkdJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVy
QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxh
YmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmg6CisKIDIwMTAtMDEtMTUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkocmV2aXNpb24gNTMzNDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTYgKzQ3LDEyIEBAIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpj
cmVhdGUoY29uc3QKIH0KIAogSW1hZ2VEZWNvZGVyUXQ6OkltYWdlRGVjb2RlclF0KCkKLSAgICA6
ICBtX2J1ZmZlcigwKQotICAgICwgbV9yZWFkZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50
KGNBbmltYXRpb25Ob25lKQorICAgIDogbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUp
CiB7CiB9CiAKIEltYWdlRGVjb2RlclF0Ojp+SW1hZ2VEZWNvZGVyUXQoKQogewotICAgIGRlbGV0
ZSBtX3JlYWRlcjsKLSAgICBkZWxldGUgbV9idWZmZXI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVy
UXQ6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKQEAg
LTc3LDEwICs3MywxMCBAQCB2b2lkIEltYWdlRGVjb2RlclF0OjpzZXREYXRhKFNoYXJlZEJ1ZmZl
CiAKICAgICAvLyBBdHRlbXB0IHRvIGxvYWQgdGhlIGRhdGEKICAgICBRQnl0ZUFycmF5IGltYWdl
RGF0YSA9IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSk7Ci0gICAgbV9idWZmZXIgPSBuZXcgUUJ1ZmZlcjsKKyAgICBtX2J1ZmZlci5zZXQobmV3
IFFCdWZmZXIpOwogICAgIG1fYnVmZmVyLT5zZXREYXRhKGltYWdlRGF0YSk7CiAgICAgbV9idWZm
ZXItPm9wZW4oUUJ1ZmZlcjo6UmVhZE9ubHkpOwotICAgIG1fcmVhZGVyID0gbmV3IFFJbWFnZVJl
YWRlcihtX2J1ZmZlciwgbV9mb3JtYXQpOworICAgIG1fcmVhZGVyLnNldChuZXcgUUltYWdlUmVh
ZGVyKG1fYnVmZmVyLmdldCgpLCBtX2Zvcm1hdCkpOwogCiAgICAgLy8gVGhpcyB3aWxsIGZvcmNl
IHRoZSBKUEVHIGRlY29kZXIgdG8gdXNlIEpEQ1RfSUZBU1QKICAgICBtX3JlYWRlci0+c2V0UXVh
bGl0eSg0OSk7CkBAIC0xODMsMTAgKzE3OSw4IEBAIHZvaWQgSW1hZ2VEZWNvZGVyUXQ6OmludGVy
bmFsUmVhZEltYWdlKHMKICAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zdGF0dXMo
KSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICBkZWxldGUgbV9yZWFkZXI7Ci0gICAgZGVsZXRlIG1fYnVmZmVyOwotICAgIG1fYnVmZmVy
ID0gMDsKLSAgICBtX3JlYWRlciA9IDA7CisgICAgbV9yZWFkZXIuY2xlYXIoKTsKKyAgICBtX2J1
ZmZlci5jbGVhcigpOwogfQogCiB2b2lkIEltYWdlRGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1
cnJlbnRJbWFnZShzaXplX3QgZnJhbWVJbmRleCkKQEAgLTIzNCwxMCArMjI4LDggQEAgdm9pZCBJ
bWFnZURlY29kZXJRdDo6Zm9yY2VMb2FkRXZlcnl0aGluZwogdm9pZCBJbWFnZURlY29kZXJRdDo6
ZmFpbFJlYWQoKQogewogICAgIHNldEZhaWxlZCgpOwotICAgIGRlbGV0ZSBtX3JlYWRlcjsKLSAg
ICBkZWxldGUgbV9idWZmZXI7Ci0gICAgbV9yZWFkZXIgPSAwOwotICAgIG1fYnVmZmVyID0gMDsK
KyAgICBtX3JlYWRlci5jbGVhcigpOworICAgIG1fYnVmZmVyLmNsZWFyKCk7CiB9CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgJKHJl
dmlzaW9uIDUzMzQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29k
ZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8UXRDb3Jl
L1FMaXN0PgogI2luY2x1ZGUgPFF0Q29yZS9RSGFzaD4KICNpbmNsdWRlIDxRdENvcmUvUUJ1ZmZl
cj4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjYsOCArNjcsOCBAQCBwcml2YXRlOgogCiBwcml2YXRlOgogICAgIFFCeXRlQXJyYXkgbV9mb3Jt
YXQ7Ci0gICAgUUJ1ZmZlciogbV9idWZmZXI7Ci0gICAgUUltYWdlUmVhZGVyKiBtX3JlYWRlcjsK
KyAgICBPd25QdHI8UUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgT3duUHRyPFFJbWFnZVJlYWRlcj4g
bV9yZWFkZXI7CiAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CiB9OwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDUzMzQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NzAgKzI5LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR0lGSW1hZ2VEZWNv
ZGVyUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0gICAgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZShHSUZJbWFn
ZURlY29kZXIqIGRlY29kZXIgPSAwKQotICAgICAgICA6IG1fcmVhZGVyKGRlY29kZXIpCi0gICAg
ICAgICwgbV9yZWFkT2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAgIH5HSUZJbWFnZURlY29k
ZXJQcml2YXRlKCkKLSAgICB7Ci0gICAgICAgIG1fcmVhZGVyLmNsb3NlKCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBkZWNvZGUoU2hhcmVkQnVmZmVyKiBkYXRhLCAKLSAgICAgICAgICAgICAgICBHSUZJ
bWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVl
cnksCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhbHRGcmFtZSA9IC0xKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEt
PmRhdGEoKSArIG1fcmVhZE9mZnNldCwgZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbHRGcmFtZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZnJhbWVDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhZGVyLmltYWdlc19jb3VudDsgfQotICAgIGludCByZXBldGl0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5sb29wX2NvdW50OyB9Ci0KLSAgICB2b2lk
IHNldFJlYWRPZmZzZXQodW5zaWduZWQgbykgeyBtX3JlYWRPZmZzZXQgPSBvOyB9Ci0KLSAgICBi
b29sIGlzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5mcmFtZV9yZWFkZXIt
PmlzX3RyYW5zcGFyZW50OyB9Ci0KLSAgICB2b2lkIGdldENvbG9yTWFwKHVuc2lnbmVkIGNoYXIq
JiBtYXAsIHVuc2lnbmVkJiBzaXplKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fcmVhZGVy
LmZyYW1lX3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgewotICAgICAgICAgICAg
bWFwID0gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKLSAgICAgICAgICAg
IHNpemUgPSAodW5zaWduZWQpbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9z
aXplOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWFwID0gbV9yZWFkZXIuZ2xvYmFs
X2NvbG9ybWFwOwotICAgICAgICAgICAgc2l6ZSA9IG1fcmVhZGVyLmdsb2JhbF9jb2xvcm1hcF9z
aXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZnJhbWVYT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT54X29mZnNldDsgfQotICAgIHVuc2ln
bmVkIGZyYW1lWU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmZyYW1lX3JlYWRlci0+
eV9vZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBmcmFtZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkZXIuZnJhbWVfcmVhZGVyLT53aWR0aDsgfQotICAgIHVuc2lnbmVkIGZyYW1lSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5oZWlnaHQ7IH0KLQotICAgIGlu
dCB0cmFuc3BhcmVudFBpeGVsKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVy
LT50cGl4ZWw7IH0KLQotICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkZXIuZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgR0lGSW1h
Z2VSZWFkZXIgbV9yZWFkZXI7Ci0gICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OwotfTsKLQogR0lG
SW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoKQogICAgIDogbV9mcmFtZUNvdW50VmFsaWQo
dHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKLSAgICAs
IG1fcmVhZGVyKDApCisgICAgLCBtX3JlYWRPZmZzZXQoMCkKIHsKIH0KIAogR0lGSW1hZ2VEZWNv
ZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKCkKIHsKLSAgICBkZWxldGUgbV9yZWFkZXI7CiB9CiAKIC8v
IFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgpAQCAtMTA5LDcgKzU0LDcgQEAgdm9pZCBHSUZJ
bWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogCiAgICAgLy8gQ3JlYXRlIHRoZSBHSUYg
cmVhZGVyLgogICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQotICAgICAgICBtX3JlYWRl
ciA9IG5ldyBHSUZJbWFnZURlY29kZXJQcml2YXRlKHRoaXMpOworICAgICAgICBtX3JlYWRlci5z
ZXQobmV3IEdJRkltYWdlUmVhZGVyKHRoaXMpKTsKIH0KIAogLy8gV2hldGhlciBvciBub3QgdGhl
IHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCkBAIC0xMzIsMTMgKzc3LDEz
IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAgICAvLyBzbG93
bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8gY2xvbmUgb3VyIGV4aXN0aW5nIHJl
YWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZQogICAgICAgICAvLyBzdGF0ZSwgYnV0IGZvciBub3cgd2Ug
anVzdCBjcmF3bCBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFu
IHdoYXQKICAgICAgICAgLy8gSW1hZ2VJTyBkb2VzIG9uIE1hYyByaWdodCBub3cgKGl0IGFsc28g
Y3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCi0gICAgICAgIEdJRkltYWdlRGVjb2RlclByaXZh
dGUgcmVhZGVyOworICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFkZXIoMCk7CiAgICAgICAgIC8v
IFRoaXMgZnVuY3Rpb24gbWF5IGZhaWwsIGJ1dCB3ZSB3YW50IHRvIGtlZXAgYW55IHBhcnRpYWwg
ZGF0YSBpdCBtYXkKICAgICAgICAgLy8gaGF2ZSBkZWNvZGVkLCBzbyBkb24ndCBtYXJrIGl0IGlz
IGludmFsaWQuIElmIHRoZXJlIGlzIGFuIG92ZXJmbG93CiAgICAgICAgIC8vIG9yIHNvbWUgc2Vy
aW91cyBlcnJvciwgbV9mYWlsZWQgd2lsbCBoYXZlIGdvdHRlbiBzZXQgZm9yIHVzLgotICAgICAg
ICByZWFkZXIuZGVjb2RlKG1fZGF0YS5nZXQoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5KTsKKyAgICAg
ICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5LCAtMSk7CiAgICAgICAgIG1fZnJhbWVDb3Vu
dFZhbGlkID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIu
ZnJhbWVDb3VudCgpKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIu
aW1hZ2VzX2NvdW50KTsKICAgICB9CiAKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNp
emUoKTsKQEAgLTE2MSw3ICsxMDYsNyBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9u
Q291bnQoKSBjCiAgICAgICAgIC8vIGNBbmltYXRpb25Mb29wT25jZSAoLTEpIHdoZW4gaXRzIGN1
cnJlbnQgaW5jYXJuYXRpb24gaGFzbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIHNlZW4gYSBsb29w
IGNvdW50IHlldDsgaW4gdGhpcyBjYXNlIHdlIHJldHVybiBvdXIgcHJldmlvdXNseS1jYWNoZWQK
ICAgICAgICAgLy8gdmFsdWUuCi0gICAgICAgIGNvbnN0IGludCByZXBldGl0aW9uQ291bnQgPSBt
X3JlYWRlci0+cmVwZXRpdGlvbkNvdW50KCk7CisgICAgICAgIGNvbnN0IGludCByZXBldGl0aW9u
Q291bnQgPSBtX3JlYWRlci0+bG9vcF9jb3VudDsKICAgICAgICAgaWYgKHJlcGV0aXRpb25Db3Vu
dCAhPSBjTG9vcENvdW50Tm90U2VlbikKICAgICAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0g
cmVwZXRpdGlvbkNvdW50OwogICAgIH0KQEAgLTIzNSwxMiArMTgwLDEwIEBAIHZvaWQgR0lGSW1h
Z2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXUKICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLmdldCgp
LCBxdWVyeSwgaGFsdEF0RnJhbWUpOworICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5yZWFkKChj
b25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRh
LT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7CiAgICAgCi0gICAg
aWYgKG1fZmFpbGVkKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKLSAgICAgICAgbV9yZWFk
ZXIgPSAwOwotICAgIH0KKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIG1fcmVhZGVyLmNsZWFy
KCk7CiB9CiAKIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgpAQCAtMjU0LDIwICsx
OTcsMjAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUodQogCiB2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KQogewot
ICAgIG1fcmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsK
KyAgICBtX3JlYWRPZmZzZXQgPSBtX2RhdGEtPnNpemUoKSAtIGJ5dGVzTGVmdDsKIH0KIAogYm9v
bCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQog
ewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KLSAgICBJ
bnRSZWN0IGZyYW1lUmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFt
ZVlPZmZzZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBtX3JlYWRlci0+ZnJhbWVXaWR0aCgp
LCBtX3JlYWRlci0+ZnJhbWVIZWlnaHQoKSk7CisgICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZy
YW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKKyAgICBJbnRSZWN0IGZyYW1lUmVj
dChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCwgZnJhbWVSZWFk
ZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgYnVm
ZmVyLgogICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IHNpemUoKS53aWR0aCgpKQotICAgICAg
ICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zm
c2V0KCkpOworICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFt
ZVJlYWRlci0+eF9vZmZzZXQpOwogICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCku
aGVpZ2h0KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0g
bV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChz
aXplKCkuaGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQpOwogCiAgICAgUkdCQTMyQnVm
ZmVyKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogICAg
IGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CkBAIC0zNDYsMjQg
KzI4OSwzMCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0Q291bnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVRyYW5zcGFyZW50
UGl4ZWxzKQogeworICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVh
ZGVyLT5mcmFtZV9yZWFkZXI7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5hdGVz
IHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8vIG9yaWdp
biB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8gKG1fcmVhZGVyLT5m
cmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4gIFRoZXJlIGlzIG5vCi0g
ICAgLy8gZ3VhcmFudGVlIHRoYXQKLSAgICAvLyAocm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6
ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCkpLCBzbworICAgIC8vIChmcmFt
ZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCkuICBUaGVyZSBpcyBubyBn
dWFyYW50ZWUKKyAgICAvLyB0aGF0IChyb3dFbmQgLSByb3dCdWZmZXIpID09IChzaXplKCkud2lk
dGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCksIHNvCiAgICAgLy8gd2UgbXVzdCBlbnN1cmUg
d2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291cmNlIGRhdGEgb3IgdGhl
CiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KLSAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3Vu
ZFNjYWxlZFgobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKLSAgICBpbnQgeUJlZ2luID0gdXBw
ZXJCb3VuZFNjYWxlZFkobV9yZWFkZXItPmZyYW1lWU9mZnNldCgpICsgcm93TnVtYmVyKTsKKyAg
ICBpbnQgeEJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsK
KyAgICBpbnQgeUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWFkZXItPnlfb2Zmc2V0
ICsgcm93TnVtYmVyKTsKICAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWlu
KHhCZWdpbiArIHN0YXRpY19jYXN0PGludD4ocm93RW5kIC0gcm93QnVmZmVyKSwgc2l6ZSgpLndp
ZHRoKCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOwogICAgIGludCB5RW5kID0gbG93ZXJCb3VuZFNj
YWxlZFkoc3RkOjptaW4oeUJlZ2luICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNp
emUoKS5oZWlnaHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CiAgICAgaWYgKCFyb3dCdWZmZXIg
fHwgKHhCZWdpbiA8IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5
RW5kIDw9IHlCZWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRoZSBj
b2xvcm1hcC4KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsKICAgICB1bnNpZ25l
ZCBjb2xvck1hcFNpemU7Ci0gICAgdW5zaWduZWQgY2hhciogY29sb3JNYXA7Ci0gICAgbV9yZWFk
ZXItPmdldENvbG9yTWFwKGNvbG9yTWFwLCBjb2xvck1hcFNpemUpOworICAgIGlmIChmcmFtZVJl
YWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgeworICAgICAgICBjb2xvck1hcCA9IGZy
YW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKKyAgICAgICAgY29sb3JNYXBTaXplID0gKHVuc2ln
bmVkKWZyYW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcDsKKyAgICAgICAgY29sb3JN
YXBTaXplID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcF9zaXplOworICAgIH0KICAgICBpZiAo
IWNvbG9yTWFwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMzc0LDggKzMyMyw4IEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIFdyaXRlIG9u
ZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAgICAgZm9yIChpbnQgeCA9
IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNv
dXJjZVZhbHVlID0gKihyb3dCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0g
OiB4KSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSk7Ci0gICAgICAgIGlmICgoIW1fcmVhZGVy
LT5pc1RyYW5zcGFyZW50KCkgfHwgKHNvdXJjZVZhbHVlICE9IG1fcmVhZGVyLT50cmFuc3BhcmVu
dFBpeGVsKCkpKSAmJiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/
IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICAg
ICAgaWYgKCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBm
cmFtZVJlYWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXplKSkgewog
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHNvdXJjZVZhbHVlKSAqIDM7CiAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5QmVnaW4s
IGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFw
W2NvbG9ySW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ0OCw5ICszOTcs
OCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiB2b2lkIEdJRklt
YWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQogewogICAgIGlmIChtX3JlYWRlcikKLSAgICAgICAg
bV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+cmVwZXRpdGlvbkNvdW50KCk7Ci0gICAgZGVs
ZXRlIG1fcmVhZGVyOwotICAgIG1fcmVhZGVyID0gMDsKKyAgICAgICAgbV9yZXBldGl0aW9uQ291
bnQgPSBtX3JlYWRlci0+bG9vcF9jb3VudDsKKyAgICBtX3JlYWRlci5jbGVhcigpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTMzNDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDExIEBACiAjZGVmaW5lIEdJRkltYWdlRGVjb2Rl
cl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdJRkltYWdlUmVhZGVyOwogCi0gICAgY2xh
c3MgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIC8v
IFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgR0lGIGltYWdlIGZvcm1hdC4KICAgICBjbGFzcyBHSUZJ
bWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKQEAgLTgwLDcgKzgxLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fZnJhbWVDb3VudFZhbGlkOwogICAgICAg
ICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBtX3Jl
cGV0aXRpb25Db3VudDsKLSAgICAgICAgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9yZWFkZXI7
CisgICAgICAgIE93blB0cjxHSUZJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CisgICAgICAgIHVuc2ln
bmVkIG1fcmVhZE9mZnNldDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAwLDEyICs0MDAsMTEgQEAgdm9pZCB0ZXJtX3NvdXJjZSAoal9kZWNvbXByZXNzX3B0ciBq
ZCkKIH0KIAogSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2RlcigpCi06IG1fcmVhZGVy
KDApCi17fQoreworfQogCiBKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2RlcigpCiB7
Ci0gICAgZGVsZXRlIG1fcmVhZGVyOwogfQogCiAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBp
dC4KQEAgLTQxOSw3ICs0MTgsNyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OnNldERhdGEoU2hh
cmVkQnVmCiAKICAgICAvLyBDcmVhdGUgdGhlIEpQRUcgcmVhZGVyLgogICAgIGlmICghbV9yZWFk
ZXIgJiYgIW1fZmFpbGVkKQotICAgICAgICBtX3JlYWRlciA9IG5ldyBKUEVHSW1hZ2VSZWFkZXIo
dGhpcyk7CisgICAgICAgIG1fcmVhZGVyLnNldChuZXcgSlBFR0ltYWdlUmVhZGVyKHRoaXMpKTsK
IH0KIAogLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVj
b2RlZCB5ZXQuCkBAIC00NjIsMTAgKzQ2MSw4IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgc2l6ZU8KIAogICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRh
LT5idWZmZXIoKSwgc2l6ZU9ubHkpOwogCi0gICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1
ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkgewotICAgICAgICBkZWxldGUgbV9yZWFkZXI7
Ci0gICAgICAgIG1fcmVhZGVyID0gMDsKLSAgICB9CisgICAgaWYgKG1fZmFpbGVkIHx8ICghbV9m
cmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICAgICAgbV9yZWFkZXIuY2xl
YXIoKTsKIH0KIAogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNkZWZpbmUgSlBFR0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTUsMTMgKzU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
b2lkIGRlY29kZShib29sIHNpemVPbmx5ID0gZmFsc2UpOwogCi0gICAgICAgIEpQRUdJbWFnZVJl
YWRlciogcmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KLQogICAgICAgICBib29sIG91dHB1
dFNjYW5saW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgSlBFR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsKKyAgICAgICAgT3duUHRyPEpQ
RUdJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MCwxMyArMTUwLDExIEBAIHByaXZhdGU6CiB9OwogCiBQTkdJbWFnZURlY29kZXI6OlBO
R0ltYWdlRGVjb2RlcigpCi0gICAgOiBtX3JlYWRlcigwKQogewogfQogCiBQTkdJbWFnZURlY29k
ZXI6On5QTkdJbWFnZURlY29kZXIoKQogewotICAgIGRlbGV0ZSBtX3JlYWRlcjsKIH0KIAogLy8g
VGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCkBAIC0xNzAsNyArMTY4LDcgQEAgdm9pZCBQTkdJ
bWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogCiAgICAgLy8gQ3JlYXRlIHRoZSBQTkcg
cmVhZGVyLgogICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQotICAgICAgICBtX3JlYWRl
ciA9IG5ldyBQTkdJbWFnZVJlYWRlcih0aGlzKTsKKyAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBQ
TkdJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiAKIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGlu
Zm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgpAQCAtMjA1LDEwICsyMDMsOCBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9uCiAKICAgICBtX3JlYWRlci0+ZGVj
b2RlKCptX2RhdGEsIHNpemVPbmx5KTsKICAgICAKLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3Jl
YWRlcjsKLSAgICAgICAgbV9yZWFkZXIgPSAwOwotICAgIH0KKyAgICBpZiAobV9mYWlsZWQgfHwg
KCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQorICAgICAgICBtX3JlYWRl
ci5jbGVhcigpOwogfQogCiB2b2lkIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZywgcG5n
X2NvbnN0X2NoYXJwIGVycm9yTXNnKQpAQCAtMjM3LDggKzIzMyw4IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpCiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUoKQogewotICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsK
LSAgICBwbmdfaW5mb3AgaW5mbyA9IHJlYWRlcigpLT5pbmZvUHRyKCk7CisgICAgcG5nX3N0cnVj
dHAgcG5nID0gbV9yZWFkZXItPnBuZ1B0cigpOworICAgIHBuZ19pbmZvcCBpbmZvID0gbV9yZWFk
ZXItPmluZm9QdHIoKTsKICAgICBwbmdfdWludF8zMiB3aWR0aCA9IHBuZy0+d2lkdGg7CiAgICAg
cG5nX3VpbnRfMzIgaGVpZ2h0ID0gcG5nLT5oZWlnaHQ7CiAgICAgCkBAIC0zMDUsMTEgKzMwMSwx
MSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICBjaGFubmVs
cyA9IHBuZ19nZXRfY2hhbm5lbHMocG5nLCBpbmZvKTsKICAgICBBU1NFUlQoY2hhbm5lbHMgPT0g
MyB8fCBjaGFubmVscyA9PSA0KTsKIAotICAgIHJlYWRlcigpLT5zZXRIYXNBbHBoYShjaGFubmVs
cyA9PSA0KTsKKyAgICBtX3JlYWRlci0+c2V0SGFzQWxwaGEoY2hhbm5lbHMgPT0gNCk7CiAKLSAg
ICBpZiAocmVhZGVyKCktPmRlY29kaW5nU2l6ZU9ubHkoKSkgeworICAgIGlmIChtX3JlYWRlci0+
ZGVjb2RpbmdTaXplT25seSgpKSB7CiAgICAgICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBz
aXplLCBoYWx0IHRoZSByZWFkZXIuICAgICAKLSAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZz
ZXQocmVhZGVyKCktPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKKyAg
ICAgICAgbV9yZWFkZXItPnNldFJlYWRPZmZzZXQobV9yZWFkZXItPmN1cnJlbnRCdWZmZXJTaXpl
KCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgcG5nLT5idWZmZXJfc2l6ZSA9IDA7CiAg
ICAgfQogfQpAQCAtMzI5LDggKzMyNSw4IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUodW5zaWcKICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkgewogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBz
Y2FsZWRTaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQTkdJbWFn
ZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihyZWFkZXIoKS0+cG5nUHRyKCkpKS0+
ZGVjb2RpbmdGYWlsZWQoKTsKLSAgICAgICAgICAgIGxvbmdqbXAocmVhZGVyKCktPnBuZ1B0cigp
LT5qbXBidWYsIDEpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4o
cG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9yZWFkZXItPnBuZ1B0cigpKSktPmRlY29kaW5nRmFp
bGVkKCk7CisgICAgICAgICAgICBsb25nam1wKG1fcmVhZGVyLT5wbmdQdHIoKS0+am1wYnVmLCAx
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBidWZmZXIuc2V0U3Rh
dHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKQEAgLTMzOSw4ICszMzUsOCBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgICAgIC8vIEZvciBQTkdz
LCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZl
ci5zZXRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAKLSAgICAgICAgaWYgKHJl
YWRlcigpLT5wbmdQdHIoKS0+aW50ZXJsYWNlZCkKLSAgICAgICAgICAgIHJlYWRlcigpLT5jcmVh
dGVJbnRlcmxhY2VCdWZmZXIoKHJlYWRlcigpLT5oYXNBbHBoYSgpID8gNCA6IDMpICogc2l6ZSgp
LndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBpZiAobV9yZWFkZXItPnBuZ1B0
cigpLT5pbnRlcmxhY2VkKQorICAgICAgICAgICAgbV9yZWFkZXItPmNyZWF0ZUludGVybGFjZUJ1
ZmZlcigobV9yZWFkZXItPmhhc0FscGhhKCkgPyA0IDogMykgKiBzaXplKCkud2lkdGgoKSAqIHNp
emUoKS5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgaWYgKHJvd0J1ZmZlciA9PSAwKQpAQCAtMzc0
LDExICszNzAsMTEgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwog
ICAgICogb2xkIHJvdyBhbmQgdGhlIG5ldyByb3cuCiAgICAgKi8KIAotICAgIHBuZ19zdHJ1Y3Rw
IHBuZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsKLSAgICBib29sIGhhc0FscGhhID0gcmVhZGVyKCkt
Pmhhc0FscGhhKCk7CisgICAgcG5nX3N0cnVjdHAgcG5nID0gbV9yZWFkZXItPnBuZ1B0cigpOwor
ICAgIGJvb2wgaGFzQWxwaGEgPSBtX3JlYWRlci0+aGFzQWxwaGEoKTsKICAgICB1bnNpZ25lZCBj
b2xvckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICBwbmdfYnl0ZXAgcm93OwotICAg
IHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIgPSByZWFkZXIoKS0+aW50ZXJsYWNlQnVmZmVyKCk7
CisgICAgcG5nX2J5dGVwIGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZm
ZXIoKTsKICAgICBpZiAoaW50ZXJsYWNlQnVmZmVyKSB7CiAgICAgICAgIHJvdyA9IGludGVybGFj
ZUJ1ZmZlciArIChyb3dJbmRleCAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSk7CiAg
ICAgICAgIHBuZ19wcm9ncmVzc2l2ZV9jb21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1MzM0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIFBOR0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNTAsOCArNTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBk
ZWNvZGUoYm9vbCBzaXplT25seSA9IGZhbHNlKTsKIAotICAgICAgICBQTkdJbWFnZVJlYWRlciog
cmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KLQogICAgICAgICAvLyBDYWxsYmFja3MgZnJv
bSBsaWJwbmcKICAgICAgICAgdm9pZCBkZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICB2b2lkIGhl
YWRlckF2YWlsYWJsZSgpOwpAQCAtNTksNyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgcG5nQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFBOR0lt
YWdlUmVhZGVyKiBtX3JlYWRlcjsKKyAgICAgICAgT3duUHRyPFBOR0ltYWdlUmVhZGVyPiBtX3Jl
YWRlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48689</attachid>
            <date>2010-02-12 18:55:35 -0800</date>
            <delta_ts>2010-02-12 19:07:15 -0800</delta_ts>
            <desc>Style/code cleanup</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>115375</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM2IEBACisyMDEwLTAyLTEyICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb2RlIGNsZWFudXAgaW4gSW1hZ2VEZWNvZGVyczsgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODc1MQorCisg
ICAgICAgICogTWFrZSBjb2RlIG1vc3RseSBjb21wbHkgd2l0aCB0aGUgc3R5bGUgZ3VpZGUgKHN3
aXRjaCBpbmRlbnRpbmcsIHVzZSBvZgorICAgICAgICAgICIhIiB2cy4gIj09IDAiLCBkb24ndCB1
bm5lY2Vzc2FyaWx5IHdyYXAgbGluZXMsIGV0Yy4pCisgICAgICAgICogRWxpbWluYXRlIG1fYWxs
RGF0YVJlY2VpdmVkIGluIElDTy9CTVAgZGVjb2RlcnMgc2luY2UgaXQncyBpbiB0aGUKKyAgICAg
ICAgICBiYXNlIEltYWdlRGVjb2RlciBjbGFzcworICAgICAgICAqIFJlbW92ZSBzb21lIHVzZWxl
c3Mgb3Igd3JvbmcgY29tbWVudHMsIGFkZCBvdGhlcnMKKyAgICAgICAgKiBXcmFwIGNvbW1lbnRz
IGF0IDgwIGNvbHVtbnMgKG1vc3QgYWxyZWFkeSB3ZXJlKSBmb3IKKyAgICAgICAgICBjb25zaXN0
ZW5jeS9yZWFkYWJpbGl0eQorICAgICAgICAqIEF2b2lkIGNhc3RzIGJ5IHVzaW5nIGNvcnJlY3Qg
dmFyaWFibGUgdHlwZXMKKyAgICAgICAgKiBDb25zaXN0ZW50IG5hbWluZyBvZiBkZWNvZGUoKSBm
dW5jdGlvbi9hcmdzCisgICAgICAgICogU2hvcnRlciBjb2RlIGluIHNvbWUgcGxhY2VzCisgICAg
ICAgICogTWFrZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBvcmRlciBtYXRjaAorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXJRdDo6Zm9yY2VMb2FkRXZlcnl0aGluZyk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VE
ZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6Qk1QSW1hZ2VE
ZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCTVBJbWFnZURlY29kZXI6OmRlY29kZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZURlY29kZXI6OnByb2Nlc3NGaWxlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZURlY29kZXI6OnJlYWRVaW50MzIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJl
YWRlcjo6Qk1QSW1hZ2VSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6
OmRlY29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cmVhZEluZm9I
ZWFkZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzSW5m
b0hlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cmVhZEluZm9IZWFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlk
KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzQml0bWFza3MpOgor
ICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NDb2xvclRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnBhc3RFbmRPZkltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlUmVhZGVyOjpyZWFkQ3VycmVudFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdl
UmVhZGVyOjpnZXRDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6
OmdldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRJKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRSR0JBKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpzaXplTm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VS
ZWFkZXI6OmRvX2x6dyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cmVhZCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAgICAg
IChHSUZJbWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklDT0ltYWdlRGVjb2Rlcjo6SUNPSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklD
T0ltYWdlRGVjb2Rlcjo6fklDT0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJQ09J
bWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpm
cmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmNvbXBhcmVFbnRy
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6c2V0RGF0YUZvclBOR0Rl
Y29kZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlRGlyZWN0b3J5KToK
KyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cmVhZERpcmVjdG9yeUVudHJ5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnJlYWRVaW50MTYpOgorICAgICAg
ICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpyZWFkVWludDMyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6SlBFR0ltYWdl
UmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6c2tpcEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmVycm9yX2V4aXQpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbF9pbnB1dF9idWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6dGVybV9zb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlBF
R0ltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpqcGVn
Q29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kaW5nRmFpbGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmRlY29kaW5nV2FybmluZyk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJBdmFpbGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBu
Z0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQTkdJbWFnZVJl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
TkdJbWFnZVJlYWRlcjo6Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURl
Y29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURl
Y29kZXI6OmhlYWRlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29k
ZXI6OnJvd0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnBu
Z0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldERlY29kZWRJbWFnZSk6CisKIDIw
MTAtMDItMTEgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlRGVjb2RlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkocmV2aXNpb24gNTQ3MjcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw3IEBAIHNpemVfdCBJbWFnZURlY29kZXJRdDo6ZnJhbWVDb3VudCgpCiAg
ICAgICAgICAgICAvLyBGaXh1cCBmb3IgUXQgZGVjb2RlcnMuLi4gaW1hZ2VDb3VudCgpIGlzIHdy
b25nCiAgICAgICAgICAgICAvLyBhbmQganVtcFRvTmV4dEltYWdlIGRvZXMgbm90IHdvcmsgZWl0
aGVyLi4uIHNvCiAgICAgICAgICAgICAvLyB3ZSB3aWxsIGhhdmUgdG8gcGFyc2UgZXZlcnl0aGlu
Zy4uLgotICAgICAgICAgICAgaWYgKGltYWdlQ291bnQgPT0gMCkKKyAgICAgICAgICAgIGlmICgh
aW1hZ2VDb3VudCkKICAgICAgICAgICAgICAgICBmb3JjZUxvYWRFdmVyeXRoaW5nKCk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShp
bWFnZUNvdW50KTsKQEAgLTEzMiwxMyArMTMyLDEzIEBAIFJHQkEzMkJ1ZmZlciogSW1hZ2VEZWNv
ZGVyUXQ6OmZyYW1lQnVmZmUKICAgICAvLyBJbiBjYXNlIHRoZSBJbWFnZURlY29kZXJRdCBnb3Qg
cmVjcmVhdGVkIHdlIGRvbid0IGtub3cKICAgICAvLyB5ZXQgaG93IG1hbnkgaW1hZ2VzIHdlIGFy
ZSBnb2luZyB0byBoYXZlIGFuZCBuZWVkIHRvCiAgICAgLy8gZmluZCB0aGF0IG91dCBub3cuCi0g
ICAgaW50IGNvdW50ID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKLSAgICBpZiAoIW1fZmFp
bGVkICYmIGNvdW50ID09IDApIHsKKyAgICBzaXplX3QgY291bnQgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGUuc2l6ZSgpOworICAgIGlmICghbV9mYWlsZWQgJiYgIWNvdW50KSB7CiAgICAgICAgIGludGVy
bmFsRGVjb2RlU2l6ZSgpOwogICAgICAgICBjb3VudCA9IGZyYW1lQ291bnQoKTsKICAgICB9CiAK
LSAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCkpCisgICAgaWYgKGlu
ZGV4ID49IGNvdW50KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJh
bWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQg
SW1hZ2VEZWNvZGVyUXQ6OmZvcmNlTG9hZEV2ZXJ5dGhpbmcKICAgICBkbyB7CiAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoKytpbWFnZUNvdW50KTsKICAgICAgICAgaW50ZXJuYWxI
YW5kbGVDdXJyZW50SW1hZ2UoaW1hZ2VDb3VudCAtIDEpOwotICAgIH0gd2hpbGUoIW1fZmFpbGVk
KTsKKyAgICB9IHdoaWxlICghbV9mYWlsZWQpOwogCiAgICAgLy8gSWYgd2UgZmFpbGVkIGRlY29k
aW5nIHRoZSBmaXJzdCBpbWFnZSB3ZSBhY3R1YWxseQogICAgIC8vIGhhdmUgbm8gaW1hZ2VzIGFu
ZCBuZWVkIHRvIGtlZXAgbV9mYWlsZWQgc2V0IHRvCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NDcyNykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRC
dWZmZXIoY2hhCiAKIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhKQogewotICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBm
aWd1cmUgb3V0IHdoYXQga2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdpdGguCisgICAgLy8g
V2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdl
IHdlJ3JlIGRlYWxpbmcKKyAgICAvLyB3aXRoLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
YXhNYXJrZXJMZW5ndGggPSA0OwogICAgIGNoYXIgY29udGVudHNbbWF4TWFya2VyTGVuZ3RoXTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbWF4
TWFya2VyTGVuZ3RoLCBkYXRhLCAwKTsKQEAgLTY4LDE2ICs2OSwxMSBAQCBJbWFnZURlY29kZXIq
IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0CiAgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VE
ZWNvZGVyKCk7CiAKICAgICAvLyBUZXN0IGZvciBQTkcuCi0gICAgaWYgKHVDb250ZW50c1swXT09
MHg4OSAmJgotICAgICAgICB1Q29udGVudHNbMV09PTB4NTAgJiYKLSAgICAgICAgdUNvbnRlbnRz
WzJdPT0weDRFICYmCi0gICAgICAgIHVDb250ZW50c1szXT09MHg0NykKKyAgICBpZiAoIW1lbWNt
cChjb250ZW50cywgIlx4ODlceDUwXHg0RVx4NDciLCA0KSkKICAgICAgICAgcmV0dXJuIG5ldyBQ
TkdJbWFnZURlY29kZXIoKTsKIAogICAgIC8vIEpQRUcKLSAgICBpZiAodUNvbnRlbnRzWzBdPT0w
eEZGICYmCi0gICAgICAgIHVDb250ZW50c1sxXT09MHhEOCAmJgotICAgICAgICB1Q29udGVudHNb
Ml09PTB4RkYpCisgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKSkK
ICAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAvLyBCTVAKQEAg
LTg2LDggKzgyLDcgQEAgSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdAog
CiAgICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEg
Mi1ieXRlIDEuCiAgICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDIt
Ynl0ZSAyLgotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAwMCIsIDQp
IHx8Ci0gICAgICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwgNCkpCisg
ICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFceDAwIiwgNCkgfHwgIW1lbWNt
cChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAiLCA0KSkKICAgICAgICAgcmV0dXJuIG5ldyBJ
Q09JbWFnZURlY29kZXIoKTsKIAogICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0
aGUgaGVjayB0aGlzIGlzLgpAQCAtMTA4LDEwICsxMDMsMTAgQEAgdm9pZCBSR0JBMzJCdWZmZXI6
OmNsZWFyKCkKIHsKICAgICBtX2J5dGVzLmNsZWFyKCk7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVt
cHR5OwotICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFy
RnJhbWVCdWZmZXJDYWNoZSgpCi0gICAgLy8gY2FsbHMgdGhpcyB0byBmcmVlIHRoZSBiaXRtYXAg
ZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCi0gICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkg
YW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCi0gICAgLy8gb3RoZXIg
bWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCisgICAgLy8gTk9URTogRG8gbm90IHJl
c2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhp
cworICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxp
a2UgaW5pdEZyYW1lQnVmZmVyKCkgYW5kCisgICAgLy8gZnJhbWVDb21wbGV0ZSgpIG1heSBzdGls
bCBuZWVkIHRvIHJlYWQgb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUKKyAgICAvLyBs
YXRlci4KIH0KIAogdm9pZCBSR0JBMzJCdWZmZXI6Onplcm9GaWxsKCkKQEAgLTEzMiw4ICsxMjcs
OCBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3QgCiAKIGJvb2wgUkdC
QTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKIHsKLSAgICAv
LyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSBp
ZiB0aGUKLSAgICAvLyByZXF1ZXN0ZWQgc2l6ZSB3YXMgdG9vIGJpZy4uLgorICAgIC8vIE5PVEU6
IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZSBy
ZXF1ZXN0ZWQKKyAgICAvLyBzaXplIHdhcyB0b28gYmlnLi4uCiAgICAgbV9ieXRlcy5yZXNpemUo
bmV3V2lkdGggKiBuZXdIZWlnaHQpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CiAKQEAgLTE5NSwxMyArMTkwLDExIEBAIGlubGluZSB2b2lkIGZpbGxTY2FsZWRW
YWx1ZXMoVmVjdG9yPGludD4KIHsKICAgICBkb3VibGUgaW5mbGF0ZVJhdGUgPSAxLiAvIHNjYWxl
UmF0ZTsKICAgICBzY2FsZWRWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KHN0YXRpY19jYXN0PGludD4o
bGVuZ3RoICogc2NhbGVSYXRlICsgMC41KSk7Ci0gICAgZm9yIChpbnQgc2NhbGVkSW5kZXggPSAw
OzspIHsKKyAgICBmb3IgKGludCBzY2FsZWRJbmRleCA9IDA7IDsgKytzY2FsZWRJbmRleCkgewog
ICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlZEluZGV4ICogaW5mbGF0
ZVJhdGUgKyAwLjUpOwotICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAg
IHNjYWxlZFZhbHVlcy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgKytzY2FsZWRJbmRleDsK
LSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgc2NhbGVkVmFsdWVzLmFwcGVuZChpbmRleCk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDU0NzI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTggKzQ1LDIxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIFRoZSBSR0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2Vu
dHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBSR0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIg
aXMgd2hhdCBhbGwKLSAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAg
RnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQg
dGhpcyBidWZmZXIuCisgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0
aGUgZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMgorICAgIC8vIGZvcm1hdC4gIFRoaXMgYnVm
ZmVyIGlzIHdoYXQgYWxsIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uCisgICAg
Ly8gRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5k
ZWQgdGhpcyBidWZmZXIuCiAgICAgY2xhc3MgUkdCQTMyQnVmZmVyIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFtZVBhcnRpYWwsIEZyYW1l
Q29tcGxldGUgfTsKICAgICAgICAgZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKLSAgICAgICAg
ICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1
cmUgeW91IGF1ZGl0IGFsbAotICAgICAgICAgICAgLy8gdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5
IGNhc3QgcmF3IHZhbHVlcyB0by9mcm9tIHRoZXNlIGNvbnN0YW50cy4KKyAgICAgICAgICAgIC8v
IElmIHlvdSBjaGFuZ2UgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1cmUgeW91
IGF1ZGl0CisgICAgICAgICAgICAvLyBhbGwgdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5IGNhc3Qg
cmF3IHZhbHVlcyB0by9mcm9tIHRoZXNlCisgICAgICAgICAgICAvLyBjb25zdGFudHMuCiAgICAg
ICAgICAgICBEaXNwb3NlTm90U3BlY2lmaWVkLCAgICAgICAvLyBMZWF2ZSBmcmFtZSBpbiBmcmFt
ZWJ1ZmZlcgogICAgICAgICAgICAgRGlzcG9zZUtlZXAsICAgICAgICAgICAgICAgLy8gTGVhdmUg
ZnJhbWUgaW4gZnJhbWVidWZmZXIKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9y
LCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50Ci0gICAgICAgICAgICBEaXNwb3NlT3Zl
cndyaXRlUHJldmlvdXMsICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1ZmZlciBj
b250ZW50cworICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzLCAgLy8gQ2xlYXIg
ZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07CiAjaWYgUExBVEZPUk0oU0tJQSkg
fHwgUExBVEZPUk0oUVQpCiAgICAgICAgIHR5cGVkZWYgdWludDMyX3QgUGl4ZWxEYXRhOwpAQCAt
MTc4LDI2ICsxODEsMzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0b3I8UGl4
ZWxEYXRhPiBtX2J5dGVzOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAgLy8gVGhlIHNp
emUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KLSAgICAgICAgYm9v
bCBtX2hhc0FscGhhOyAgICAgIC8vIFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUgcGl4ZWxzIGlu
IHRoZSBidWZmZXIgaGF2ZSB0cmFuc3BhcmVuY3kuCisgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsg
ICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRyYW5zcGFyZW5jeS4KICNlbmRp
ZgotICAgICAgICBJbnRSZWN0IG1fcmVjdDsgICAgICAgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdp
bmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4gdGhlIG92ZXJhbGwgYnVmZmVyLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRp
cmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxs
IGltYWdlIHNpemUuCi0gICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOyAvLyBXaGV0aGVyIG9y
IG5vdCB0aGlzIGZyYW1lIGlzIGNvbXBsZXRlbHkgZmluaXNoZWQgZGVjb2RpbmcuCisgICAgICAg
IEludFJlY3QgbV9yZWN0OyAgICAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lm
aWVkIGZyYW1lIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG92
ZXJhbGwgYnVmZmVyLiAgVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMg
d2hvc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2Fz
IHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaW1hZ2Ugc2l6ZS4KKyAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIg
b3Igbm90IHRoaXMgZnJhbWUgaXMgY29tcGxldGVseQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZmluaXNoZWQgZGVjb2RpbmcuCiAgICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247
ICAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1f
ZGlzcG9zYWxNZXRob2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGF0IHRv
IGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJh
bWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGF0IHRvIGRvIHdpdGggdGhp
cyBmcmFtZSdzIGRhdGEgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5p
dGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgogICAgIH07CiAKLSAgICAvLyBUaGUgSW1hZ2VEZWNv
ZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3Jt
YXQgZGVjb2RlcnMKLSAgICAvLyAoZS5nLiwgR0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUg
ZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNvZGUgaW50byBSR0JBMzIgZm9ybWF0Ci0gICAgLy8gYW5k
IHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhlIFJHQkEzMiBmcmFtZSBjYWNoZS4KKyAgICAvLyBU
aGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWZp
YyBpbWFnZSBmb3JtYXQKKyAgICAvLyBkZWNvZGVycyAoZS5nLiwgR0lGLCBKUEcsIFBORywgSUNP
KSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNvZGUKKyAgICAvLyBpbnRvIFJHQkEz
MiBmb3JtYXQgYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhlIFJHQkEzMiBmcmFtZSBjYWNo
ZS4KKyAgICAvLworICAgIC8vIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpIGFs
bG93cyBpbWFnZSBkZWNvZGVycyB0byB3cml0ZQorICAgIC8vIGRpcmVjdGx5IHRvIHNjYWxlZCBv
dXRwdXQgYnVmZmVycyBieSBkb3duIHNhbXBsaW5nLiBDYWxsCisgICAgLy8gc2V0TWF4TnVtUGl4
ZWxzKCkgdG8gc3BlY2lmeSB0aGUgYmlnZ2VzdCBzaXplIHRoYXQgZGVjb2RlZCBpbWFnZXMgY2Fu
CisgICAgLy8gaGF2ZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkZWZsYXRlIHRob3NlIGltYWdlcyB0
aGF0IGFyZSBiaWdnZXIgdGhhbgorICAgIC8vIG1fbWF4TnVtUGl4ZWxzLiAoTm90IHN1cHBvcnRl
ZCBieSBhbGwgaW1hZ2UgZGVjb2RlcnMgeWV0KQogICAgIGNsYXNzIEltYWdlRGVjb2RlciA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICAvLyBFTkFCTEUoSU1BR0Vf
REVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxvd3MgaW1hZ2UgZGVjb2RlcnMgdG8gd3JpdGUgZGly
ZWN0bHkgdG8KLSAgICAgICAgLy8gc2NhbGVkIG91dHB1dCBidWZmZXJzIGJ5IGRvd24gc2FtcGxp
bmcuIENhbGwgc2V0TWF4TnVtUGl4ZWxzKCkgdG8gc3BlY2lmeSB0aGUKLSAgICAgICAgLy8gYmln
Z2VzdCBzaXplIHRoYXQgZGVjb2RlZCBpbWFnZXMgY2FuIGhhdmUuIEltYWdlIGRlY29kZXJzIHdp
bGwgZGVmbGF0ZSB0aG9zZQotICAgICAgICAvLyBpbWFnZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4g
bV9tYXhOdW1QaXhlbHMuIChOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBpbWFnZSBkZWNvZGVycyB5ZXQp
CiAgICAgICAgIEltYWdlRGVjb2RlcigpCiAgICAgICAgICAgICA6IG1fc2NhbGVkKGZhbHNlKQog
ICAgICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKQEAgLTIxNCwyMSArMjI0LDIyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gbmVlZGluZyB0byB3cml0ZSBhIGRlZGljYXRlZCBz
ZXREYXRhKCkgaW1wbGVtZW50YXRpb24uCiAgICAgICAgIHN0YXRpYyBJbWFnZURlY29kZXIqIGNy
ZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEpOwogCi0gICAgICAgIC8vIFRoZSB0aGUgZmls
ZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFuIHVuZGVjb2RlZCBpbWFn
ZSBvZiB0aGlzIHR5cGUuCisgICAgICAgIC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVz
dWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFuIHVuZGVjb2RlZCBpbWFnZQorICAgICAgICAvLyBvZiB0
aGlzIHR5cGUuCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3QgPSAwOwogCi0gICAgICAgIC8vIEFsbCBzcGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBk
byBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YSB0aGV5IGFyZSBnaXZlbi4KICAgICAgICAgYm9vbCBp
c0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0K
KwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2RhdGEgPSBkYXRhOwog
ICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhh
cyBiZWVuIGRlY29kZWQgeWV0LiBUaGlzIGRlZmF1bHQKLSAgICAgICAgLy8gaW1wbGVtZW50YXRp
b24ganVzdCByZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFuZCB3ZSBoYXZl
IG5vdAotICAgICAgICAvLyBzZWVuIGEgZmFpbHVyZS4gRGVjb2RlcnMgbWF5IHdhbnQgdG8gb3Zl
cnJpZGUgdGhpcyB0byBsYXppbHkgZGVjb2RlCi0gICAgICAgIC8vIGVub3VnaCBvZiB0aGUgaW1h
Z2UgdG8gZ2V0IHRoZSBzaXplLgorICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBp
bmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhpcworICAgICAgICAvLyBkZWZhdWx0
IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIGhhcyBiZWVuIHNl
dCBhbmQKKyAgICAgICAgLy8gd2UgaGF2ZSBub3Qgc2VlbiBhIGZhaWx1cmUuIERlY29kZXJzIG1h
eSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8KKyAgICAgICAgLy8gbGF6aWx5IGRlY29kZSBlbm91
Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KICAgICAgICAgdmlydHVhbCBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhbV9mYWlsZWQg
JiYgbV9zaXplQXZhaWxhYmxlOyAKQEAgLTI1NiwxMCArMjY3LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIHJldHVybiBzaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBDYWxsZWQgYnkgdGhlIGltYWdlIGRlY29kZXJzIHRvIHNldCB0aGVpciBkZWNvZGVkIHNpemUs
IHRoaXMgYWxzbyBjaGVjawotICAgICAgICAvLyB0aGUgc2l6ZSBmb3IgdmFsaWRpdHkuIEl0IHdp
bGwgcmV0dXJuIHRydWUgaWYgdGhlIHNpemUgd2FzIHNldCwgb3IgZmFsc2UKLSAgICAgICAgLy8g
aWYgdGhlcmUgaXMgYW4gZXJyb3IuIE9uIGVycm9yLCB0aGUgbV9mYWlsZWQgZmxhZyB3aWxsIGJl
IHNldCBhbmQgdGhlCi0gICAgICAgIC8vIGNhbGxlciBzaG91bGQgaW1tZWRpYXRlbHkgc3RvcCBk
ZWNvZGluZy4KKyAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBpbWFnZSBkZWNvZGVycyB0byBzZXQg
dGhlaXIgZGVjb2RlZCBzaXplLCB0aGlzIGFsc28KKyAgICAgICAgLy8gY2hlY2tzIHRoZSBzaXpl
IGZvciB2YWxpZGl0eS4gSXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2l6ZSB3YXMKKyAgICAg
ICAgLy8gc2V0LCBvciBmYWxzZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4gT24gZXJyb3IsIHRoZSBt
X2ZhaWxlZCBmbGFnIHdpbGwKKyAgICAgICAgLy8gYmUgc2V0IGFuZCB0aGUgY2FsbGVyIHNob3Vs
ZCBpbW1lZGlhdGVseSBzdG9wIGRlY29kaW5nLgogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkgewpAQCAtMjcxLDI5ICsyODIsMzAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAg
Q2xhc3NlcyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgZnJhbWVzCi0gICAgICAgIC8vIHdpbGwgc2Nh
biB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlciBpZiB0aGV5IG5lZWQgdG8gKHdpdGhvdXQg
bmVjZXNzYXJpbHkKLSAgICAgICAgLy8gZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZy
YW1lcykuCisgICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1h
Z2UuICBDbGFzc2VzIHRoYXQgc3VwcG9ydAorICAgICAgICAvLyBtdWx0aXBsZSBmcmFtZXMgd2ls
bCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZvciB0aGUgYW5zd2VyIGlmIHRoZXkgbmVlZAorICAgICAg
ICAvLyB0byAod2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2aWR1
YWwgZnJhbWVzKS4KICAgICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgpIHsgcmV0dXJu
IDE7IH0KIAogICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0g
Zm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291
bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQogCi0gICAgICAgIC8vIENhbGxl
ZCB0byBvYnRhaW4gdGhlIFJHQkEzMkJ1ZmZlciBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVu
ZGVyaW5nLiAgVGhlCi0gICAgICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFzIG11
Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZwotICAgICAgICAvLyBiYWNr
IHRoZSBidWZmZXIuCisgICAgICAgIC8vIENhbGxlZCB0byBvYnRhaW4gdGhlIFJHQkEzMkJ1ZmZl
ciBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVuZGVyaW5nLgorICAgICAgICAvLyBUaGUgZGVj
b2RlciBwbHVnaW4gd2lsbCBkZWNvZGUgYXMgbXVjaCBvZiB0aGUgZnJhbWUgYXMgaXQgY2FuIGJl
Zm9yZQorICAgICAgICAvLyBoYW5kaW5nIGJhY2sgdGhlIGJ1ZmZlci4KICAgICAgICAgdmlydHVh
bCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpID0gMDsKIAotICAgICAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBzdXBw
b3J0cyBhbHBoYSB0cmFuc3BhcmVuY3kuCisgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSB1
bmRlcmx5aW5nIGltYWdlIGZvcm1hdCBldmVuIHN1cHBvcnRzIGFscGhhCisgICAgICAgIC8vIHRy
YW5zcGFyZW5jeS4KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBt
X2ZhaWxlZDsgfQogICAgICAgICB2b2lkIHNldEZhaWxlZCgpIHsgbV9mYWlsZWQgPSB0cnVlOyB9
CiAKICAgICAgICAgLy8gV2lwZSBvdXQgZnJhbWVzIGluIHRoZSBmcmFtZSBidWZmZXIgY2FjaGUg
YmVmb3JlIHxjbGVhckJlZm9yZUZyYW1lfCwKLSAgICAgICAgLy8gYXNzdW1pbmcgdGhpcyBjYW4g
YmUgZG9uZSB3aXRob3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlmZmVyZW50IGRlY29kZXJzCi0g
ICAgICAgIC8vIHBsYWNlIGRpZmZlcmVudCByZXN0cmljdGlvbnMgb24gd2hhdCBmcmFtZXMgYXJl
IHNhZmUgdG8gZGVzdHJveSwgc28gdGhpcwotICAgICAgICAvLyBpcyBsZWZ0IHRvIHRoZW0gdG8g
aW1wbGVtZW50LgorICAgICAgICAvLyBhc3N1bWluZyB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQg
YnJlYWtpbmcgZGVjb2RpbmcuICBEaWZmZXJlbnQKKyAgICAgICAgLy8gZGVjb2RlcnMgcGxhY2Ug
ZGlmZmVyZW50IHJlc3RyaWN0aW9ucyBvbiB3aGF0IGZyYW1lcyBhcmUgc2FmZSB0bworICAgICAg
ICAvLyBkZXN0cm95LCBzbyB0aGlzIGlzIGxlZnQgdG8gdGhlbSB0byBpbXBsZW1lbnQuCiAgICAg
ICAgIC8vIEZvciBjb252ZW5pZW5jZSdzIHNha2UsIHdlIHByb3ZpZGUgYSBkZWZhdWx0IChlbXB0
eSkgaW1wbGVtZW50YXRpb24sCiAgICAgICAgIC8vIHNpbmNlIGluIHByYWN0aWNlIG9ubHkgR0lG
cyB3aWxsIGV2ZXIgdXNlIHRoaXMuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0IHNpemVfdCBzaXplT2ZGaWxlSGVhZGVyID0g
MTQ7CiAKIEJNUEltYWdlRGVjb2Rlcjo6Qk1QSW1hZ2VEZWNvZGVyKCkKLSAgICA6IEltYWdlRGVj
b2RlcigpCi0gICAgLCBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKLSAgICAsIG1fZGVjb2RlZE9m
ZnNldCgwKQorICAgIDogbV9kZWNvZGVkT2Zmc2V0KDApCiB7CiB9CiAKQEAgLTUzLDcgKzUxLDYg
QEAgdm9pZCBCTVBJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogICAgICAgICByZXR1
cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
LSAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKICAgICBpZiAobV9yZWFk
ZXIpCiAgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKGRhdGEpOwogfQpAQCAtNjEsNyArNTgsNyBA
QCB2b2lkIEJNUEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmCiBib29sIEJNUEltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKIHsKICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCkgJiYgIWZhaWxlZCgpKQotICAgICAgICBkZWNvZGVXaXRoQ2hlY2tGb3JE
YXRhRW5kZWQodHJ1ZSk7CisgICAgICAgIGRlY29kZSh0cnVlKTsKIAogICAgIHJldHVybiBJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQpAQCAtNzYsMzEgKzczLDI5IEBAIFJHQkEz
MkJ1ZmZlciogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKIAogICAgIFJHQkEzMkJ1ZmZlciog
YnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOwogICAgIGlmIChidWZmZXItPnN0
YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiAhZmFpbGVkKCkpCi0gICAg
ICAgIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChmYWxzZSk7CisgICAgICAgIGRlY29kZShm
YWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotdm9pZCBCTVBJbWFnZURlY29kZXI6OmRl
Y29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChib29sIG9ubHlTaXplKQordm9pZCBCTVBJbWFnZURl
Y29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogewogICAgIGlmIChmYWlsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQg
d2UndmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwogICAgIC8vIGhhcyBmYWlsZWQu
Ci0gICAgaWYgKCFkZWNvZGUob25seVNpemUpICYmIG1fYWxsRGF0YVJlY2VpdmVkKQorICAgIGlm
ICghZGVjb2RlSGVscGVyKG9ubHlTaXplKSAmJiBpc0FsbERhdGFSZWNlaXZlZCgpKQogICAgICAg
ICBzZXRGYWlsZWQoKTsKIH0KIAotYm9vbCBCTVBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9u
bHlTaXplKQorYm9vbCBCTVBJbWFnZURlY29kZXI6OmRlY29kZUhlbHBlcihib29sIG9ubHlTaXpl
KQogewogICAgIHNpemVfdCBpbWdEYXRhT2Zmc2V0ID0gMDsKLSAgICBpZiAoKG1fZGVjb2RlZE9m
ZnNldCA8IHNpemVPZkZpbGVIZWFkZXIpCi0gICAgICAgICYmICFwcm9jZXNzRmlsZUhlYWRlcigm
aW1nRGF0YU9mZnNldCkpCisgICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPCBzaXplT2ZGaWxlSGVh
ZGVyKSAmJiAhcHJvY2Vzc0ZpbGVIZWFkZXIoJmltZ0RhdGFPZmZzZXQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fcmVhZGVyKSB7Ci0gICAgICAgIG1fcmVhZGVyLnNldChu
ZXcgQk1QSW1hZ2VSZWFkZXIodGhpcywgbV9kZWNvZGVkT2Zmc2V0LCBpbWdEYXRhT2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSk7CisgICAgICAg
IG1fcmVhZGVyLnNldChuZXcgQk1QSW1hZ2VSZWFkZXIodGhpcywgbV9kZWNvZGVkT2Zmc2V0LCBp
bWdEYXRhT2Zmc2V0LCBmYWxzZSkpOwogICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShtX2RhdGEu
Z2V0KCkpOwogICAgIH0KIApAQCAtMTE4LDggKzExMyw3IEBAIGJvb2wgQk1QSW1hZ2VEZWNvZGVy
Ojpwcm9jZXNzRmlsZUhlYWRlcigKICAgICBBU1NFUlQoIW1fZGVjb2RlZE9mZnNldCk7CiAgICAg
aWYgKG1fZGF0YS0+c2l6ZSgpIDwgc2l6ZU9mRmlsZUhlYWRlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGNvbnN0IHVpbnQxNl90IGZpbGVUeXBlID0KLSAgICAgICAgKG1fZGF0YS0+ZGF0
YSgpWzBdIDw8IDgpIHwgc3RhdGljX2Nhc3Q8dWludDhfdD4obV9kYXRhLT5kYXRhKClbMV0pOwor
ICAgIGNvbnN0IHVpbnQxNl90IGZpbGVUeXBlID0gKG1fZGF0YS0+ZGF0YSgpWzBdIDw8IDgpIHwg
c3RhdGljX2Nhc3Q8dWludDhfdD4obV9kYXRhLT5kYXRhKClbMV0pOwogICAgICppbWdEYXRhT2Zm
c2V0ID0gcmVhZFVpbnQzMigxMCk7CiAgICAgbV9kZWNvZGVkT2Zmc2V0ID0gc2l6ZU9mRmlsZUhl
YWRlcjsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDU0NzI3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDI5ICs1MCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgaW5saW5lIHVpbnQzMl90IHJlYWRVaW50MzIoaW50IG9mZnNldCkgY29uc3QKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEJNUEltYWdlUmVhZGVyOjpyZWFkVWludDMyKG1fZGF0
YS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RlY29kZWRPZmZzZXQgKyBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIEJNUEltYWdlUmVh
ZGVyOjpyZWFkVWludDMyKG1fZGF0YS5nZXQoKSwgbV9kZWNvZGVkT2Zmc2V0ICsgb2Zmc2V0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIERlY29kZXMgdGhlIGltYWdlLiAgSWYgfG9ubHlTaXpl
fCBpcyB0cnVlLCBzdG9wcyBkZWNvZGluZyBhZnRlcgogICAgICAgICAvLyBjYWxjdWxhdGluZyB0
aGUgaW1hZ2Ugc2l6ZS4gIElmIGRlY29kaW5nIGZhaWxzIGJ1dCB0aGVyZSBpcyBubyBtb3JlCiAg
ICAgICAgIC8vIGRhdGEgY29taW5nLCBzZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcuCi0g
ICAgICAgIHZvaWQgZGVjb2RlV2l0aENoZWNrRm9yRGF0YUVuZGVkKGJvb2wgb25seVNpemUpOwor
ICAgICAgICB2b2lkIGRlY29kZShib29sIG9ubHlTaXplKTsKIAogICAgICAgICAvLyBEZWNvZGVz
IHRoZSBpbWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2RpbmcgYWZ0ZXIK
ICAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGltYWdlIHNpemUuICBSZXR1cm5zIHdoZXRoZXIg
ZGVjb2Rpbmcgc3VjY2VlZGVkLgotICAgICAgICAvLyBOT1RFOiBVc2VkIGludGVybmFsbHkgYnkg
ZGVjb2RlV2l0aENoZWNrRm9yRGF0YUVuZGVkKCkuICBPdGhlciBwZW9wbGUKLSAgICAgICAgLy8g
c2hvdWxkIG5vdCBjYWxsIHRoaXMuCi0gICAgICAgIGJvb2wgZGVjb2RlKGJvb2wgb25seVNpemUp
OworICAgICAgICBib29sIGRlY29kZUhlbHBlcihib29sIG9ubHlTaXplKTsKIAogICAgICAgICAv
LyBQcm9jZXNzZXMgdGhlIGZpbGUgaGVhZGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEu
ICBTZXRzCiAgICAgICAgIC8vIHwqaW1nRGF0YU9mZnNldHwgYmFzZWQgb24gdGhlIGhlYWRlciBj
b250ZW50cy4gIFJldHVybnMgdHJ1ZSBpZiB0aGUKICAgICAgICAgLy8gZmlsZSBoZWFkZXIgY291
bGQgYmUgZGVjb2RlZC4KICAgICAgICAgYm9vbCBwcm9jZXNzRmlsZUhlYWRlcihzaXplX3QqIGlt
Z0RhdGFPZmZzZXQpOwogCi0gICAgICAgIC8vIFRydWUgaWYgd2UndmUgc2VlbiBhbGwgdGhlIGRh
dGEuCi0gICAgICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0KICAgICAgICAgLy8gQW4gaW5k
ZXggaW50byB8bV9kYXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxyZWFkeSBkZWNv
ZGVkLgogICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHRyYWNrcyBkYXRhIF90aGlzXyBj
bGFzcyBkZWNvZGVzOyBvbmNlIHRoZQogICAgICAgICAvLyBCTVBJbWFnZVJlYWRlciB0YWtlcyBv
dmVyIHRoaXMgd2lsbCBub3QgYmUgdXBkYXRlZCBmdXJ0aGVyLgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAko
cmV2aXNpb24gNTQ3MjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMyw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQk1QSW1hZ2VSZWFkZXI6OkJNUEltYWdlUmVhZGVyKEltYWdl
RGVjb2RlciogcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBk
ZWNvZGVkQW5kSGVhZGVyT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBpbWdEYXRhT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
dXNlc0FuZE1hc2spCitCTVBJbWFnZVJlYWRlcjo6Qk1QSW1hZ2VSZWFkZXIoSW1hZ2VEZWNvZGVy
KiBwYXJlbnQsIHNpemVfdCBkZWNvZGVkQW5kSGVhZGVyT2Zmc2V0LCBzaXplX3QgaW1nRGF0YU9m
ZnNldCwgYm9vbCB1c2VzQW5kTWFzaykKICAgICA6IG1fcGFyZW50KHBhcmVudCkKICAgICAsIG1f
YnVmZmVyKDApCiAgICAgLCBtX2RlY29kZWRPZmZzZXQoZGVjb2RlZEFuZEhlYWRlck9mZnNldCkK
QEAgLTYzLDggKzYwLDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25s
eQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBSZWFkIGFuZCBwcm9jZXNzIGluZm8g
aGVhZGVyLgotICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0IDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9p
bmZvSGVhZGVyLmJpU2l6ZSkpCi0gICAgICAgICYmICFwcm9jZXNzSW5mb0hlYWRlcigpKQorICAg
IGlmICgobV9kZWNvZGVkT2Zmc2V0IDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJp
U2l6ZSkpICYmICFwcm9jZXNzSW5mb0hlYWRlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBwcm9jZXNzSW5mb0hlYWRlcigpIHNldCB0aGUgc2l6ZSwgc28gaWYgdGhhdCdzIGFs
bCB3ZSBuZWVkZWQsIHdlJ3JlIGRvbmUuCkBAIC04Miw4ICs3OCw3IEBAIGJvb2wgQk1QSW1hZ2VS
ZWFkZXI6OmRlY29kZUJNUChib29sIG9ubHkKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1
ZmZlciBpZiBuZWVkZWQuCiAgICAgQVNTRVJUKG1fYnVmZmVyKTsgIC8vIFBhcmVudCBzaG91bGQg
c2V0IHRoaXMgYmVmb3JlIGFza2luZyB1cyB0byBkZWNvZGUhCiAgICAgaWYgKG1fYnVmZmVyLT5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFtX2J1
ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICgh
bV9idWZmZXItPnNldFNpemUobV9wYXJlbnQtPnNpemUoKS53aWR0aCgpLCBtX3BhcmVudC0+c2l6
ZSgpLmhlaWdodCgpKSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsgIC8vIFVuYWJs
ZSB0byBhbGxvY2F0ZS4KICAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6
OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwg
d2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpAQCAtMTAwLDkgKzk1LDcg
QEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogCiAgICAgLy8gRGVj
b2RlIHRoZSBkYXRhLgogICAgIGlmICgobV9hbmRNYXNrU3RhdGUgIT0gRGVjb2RpbmcpICYmICFw
YXN0RW5kT2ZJbWFnZSgwKSkgewotICAgICAgICBpZiAoKG1faW5mb0hlYWRlci5iaUNvbXByZXNz
aW9uID09IFJMRTQpCi0gICAgICAgICAgICB8fCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24g
PT0gUkxFOCkKLSAgICAgICAgICAgIHx8IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBS
TEUyNCkpIHsKKyAgICAgICAgaWYgKChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEU0
KSB8fCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFOCkgfHwgKG1faW5mb0hlYWRl
ci5iaUNvbXByZXNzaW9uID09IFJMRTI0KSkgewogICAgICAgICAgICAgaWYgKCFwcm9jZXNzUkxF
RGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIGlm
ICghcHJvY2Vzc05vblJMRURhdGEoZmFsc2UsIDApKQpAQCAtMTMzLDggKzEyNiw3IEBAIGJvb2wg
Qk1QSW1hZ2VSZWFkZXI6OnJlYWRJbmZvSGVhZGVyU2l6ZSgKIHsKICAgICAvLyBHZXQgc2l6ZSBv
ZiBpbmZvIGhlYWRlci4KICAgICBBU1NFUlQobV9kZWNvZGVkT2Zmc2V0ID09IG1faGVhZGVyT2Zm
c2V0KTsKLSAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA+IG1fZGF0YS0+c2l6ZSgpKQotICAgICAg
ICB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IDQpKQorICAgIGlmICgo
bV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpIHx8ICgobV9kYXRhLT5zaXplKCkgLSBt
X2RlY29kZWRPZmZzZXQpIDwgNCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2luZm9I
ZWFkZXIuYmlTaXplID0gcmVhZFVpbnQzMigwKTsKICAgICAvLyBEb24ndCBpbmNyZW1lbnQgbV9k
ZWNvZGVkT2Zmc2V0IGhlcmUsIGl0IGp1c3QgbWFrZXMgdGhlIGNvZGUgaW4KQEAgLTE0Myw5ICsx
MzUsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlclNpemUoCiAgICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGhlYWRlciB0byBvdmVyZmxvdyAod2hpY2ggd291bGQgYmUgaGFybWxl
c3MgaGVyZSwgYnV0CiAgICAgLy8gcHJvYmxlbWF0aWMgb3IgYXQgbGVhc3QgY29uZnVzaW5nIGlu
IG90aGVyIHBsYWNlcyksIG9yIHRvIG92ZXJydW4gdGhlCiAgICAgLy8gaW1hZ2UgZGF0YS4KLSAg
ICBpZiAoKChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpIDwgbV9oZWFkZXJP
ZmZzZXQpCi0gICAgICAgIHx8IChtX2ltZ0RhdGFPZmZzZXQKLSAgICAgICAgICAgICYmIChtX2lt
Z0RhdGFPZmZzZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSkpKQor
ICAgIGlmICgoKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkgPCBtX2hlYWRl
ck9mZnNldCkgfHwgKG1faW1nRGF0YU9mZnNldCAmJiAobV9pbWdEYXRhT2Zmc2V0IDwgKG1faGVh
ZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkpKSkKICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwogCiAgICAgLy8gU2VlIGlmIHRoaXMgaXMgYSBoZWFkZXIgc2l6ZSB3ZSB1bmRlcnN0
YW5kOgpAQCAtMTU2LDkgKzE0Niw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnJlYWRJbmZvSGVh
ZGVyU2l6ZSgKICAgICBlbHNlIGlmICgobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSA0MCkgfHwgaXNX
aW5kb3dzVjRQbHVzKCkpCiAgICAgICAgIDsKICAgICAvLyBPUy8yIDIueDogYW55IG11bHRpcGxl
IG9mIDQgYmV0d2VlbiAxNiBhbmQgNjQsIGluY2x1c2l2ZSwgb3IgNDIgb3IgNDYKLSAgICBlbHNl
IGlmICgobV9pbmZvSGVhZGVyLmJpU2l6ZSA+PSAxNikgJiYgKG1faW5mb0hlYWRlci5iaVNpemUg
PD0gNjQpCi0gICAgICAgICAgICAgJiYgKCgobV9pbmZvSGVhZGVyLmJpU2l6ZSAmIDMpID09IDAp
IHx8IChtX2luZm9IZWFkZXIuYmlTaXplID09IDQyKQotICAgICAgICAgICAgICAgICB8fCAobV9p
bmZvSGVhZGVyLmJpU2l6ZSA9PSA0NikpKQorICAgIGVsc2UgaWYgKChtX2luZm9IZWFkZXIuYmlT
aXplID49IDE2KSAmJiAobV9pbmZvSGVhZGVyLmJpU2l6ZSA8PSA2NCkgJiYgKCEobV9pbmZvSGVh
ZGVyLmJpU2l6ZSAmIDMpIHx8IChtX2luZm9IZWFkZXIuYmlTaXplID09IDQyKSB8fCAobV9pbmZv
SGVhZGVyLmJpU2l6ZSA9PSA0NikpKQogICAgICAgICBtX2lzT1MyMnggPSB0cnVlOwogICAgIGVs
c2UKICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwpAQCAtMTcwLDkgKzE1OCw3IEBAIGJvb2wg
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKIHsKICAgICAvLyBSZWFkIGluZm8g
aGVhZGVyLgogICAgIEFTU0VSVChtX2RlY29kZWRPZmZzZXQgPT0gbV9oZWFkZXJPZmZzZXQpOwot
ICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpCi0gICAgICAgIHx8ICgo
bV9kYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgbV9pbmZvSGVhZGVyLmJpU2l6ZSkK
LSAgICAgICAgfHwgIXJlYWRJbmZvSGVhZGVyKCkpCisgICAgaWYgKChtX2RlY29kZWRPZmZzZXQg
PiBtX2RhdGEtPnNpemUoKSkgfHwgKChtX2RhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkg
PCBtX2luZm9IZWFkZXIuYmlTaXplKSB8fCAhcmVhZEluZm9IZWFkZXIoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIG1fZGVjb2RlZE9mZnNldCArPSBtX2luZm9IZWFkZXIuYmlTaXplOwog
CkBAIC0xODgsMTEgKzE3NCw5IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVh
ZGVyKCkKICAgICAvLyBjb2xvcnMiLCBzbyBzZXQgaXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9m
IGNvbG9ycyBmb3IgdGhpcyBiaXQgZGVwdGguCiAgICAgLy8gQWxzbyBkbyB0aGlzIGZvciBiaXRt
YXBzIHRoYXQgcHV0IHRvbyBsYXJnZSBhIHZhbHVlIGhlcmUuCiAgICAgaWYgKG1faW5mb0hlYWRl
ci5iaUJpdENvdW50IDwgMTYpIHsKLSAgICAgIGNvbnN0IHVpbnQzMl90IG1heENvbG9ycyA9Ci0g
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpIDw8IG1faW5mb0hlYWRlci5iaUJpdENv
dW50OwotICAgICAgaWYgKChtX2luZm9IZWFkZXIuYmlDbHJVc2VkID09IDApCi0gICAgICAgICAg
fHwgKG1faW5mb0hlYWRlci5iaUNsclVzZWQgPiBtYXhDb2xvcnMpKQotICAgICAgICBtX2luZm9I
ZWFkZXIuYmlDbHJVc2VkID0gbWF4Q29sb3JzOworICAgICAgY29uc3QgdWludDMyX3QgbWF4Q29s
b3JzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpIDw8IG1faW5mb0hlYWRlci5iaUJpdENvdW50
OworICAgICAgaWYgKCFtX2luZm9IZWFkZXIuYmlDbHJVc2VkIHx8IChtX2luZm9IZWFkZXIuYmlD
bHJVc2VkID4gbWF4Q29sb3JzKSkKKyAgICAgICAgICBtX2luZm9IZWFkZXIuYmlDbHJVc2VkID0g
bWF4Q29sb3JzOwogICAgIH0KIAogICAgIC8vIEZvciBhbnkgYml0bWFwcyB0aGF0IHNldCB0aGVp
ciBCaXRDb3VudCB0byB0aGUgd3JvbmcgdmFsdWUsIHJlc2V0IHRoZQpAQCAtMjA2LDcgKzE5MCw3
IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAvLyBUZWxs
IGNhbGxlciB3aGF0IHN0aWxsIG5lZWRzIHRvIGJlIHByb2Nlc3NlZC4KICAgICBpZiAobV9pbmZv
SGVhZGVyLmJpQml0Q291bnQgPj0gMTYpCiAgICAgICAgIG1fbmVlZFRvUHJvY2Vzc0JpdG1hc2tz
ID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA+IDApCisgICAg
ZWxzZSBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQpCiAgICAgICAgIG1fbmVlZFRvUHJvY2Vz
c0NvbG9yVGFibGUgPSB0cnVlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDYsOCArMjMwLDcg
QEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cmVhZEluZm9IZWFkZXIoKQogICAgICAgICB9IGVsc2Ug
aWYgKGJpQ29tcHJlc3Npb24gPiA1KQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOyAg
Ly8gU29tZSB0eXBlIHdlIGRvbid0IHVuZGVyc3RhbmQuCiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID0KLSAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDb21wcmVzc2lvblR5cGU+KGJpQ29tcHJlc3Npb24pOworICAgICAgICAgICAgbV9pbmZv
SGVhZGVyLmJpQ29tcHJlc3Npb24gPSBzdGF0aWNfY2FzdDxDb21wcmVzc2lvblR5cGU+KGJpQ29t
cHJlc3Npb24pOwogICAgIH0KIAogICAgIC8vIFJlYWQgY29sb3JzIHVzZWQsIGlmIHByZXNlbnQu
CkBAIC0yODgsNyArMjcxLDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6aXNJbmZvSGVhZGVyVmFs
aWQoKQogewogICAgIC8vIE5vbi1wb3NpdGl2ZSB3aWR0aHMvaGVpZ2h0cyBhcmUgaW52YWxpZC4g
IChXZSd2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlCiAgICAgLy8gc2lnbiBvZiB0aGUgaGVpZ2h0IGZv
ciB0b3AtZG93biBiaXRtYXBzLikKLSAgICBpZiAoKG1faW5mb0hlYWRlci5iaVdpZHRoIDw9IDAp
IHx8IChtX2luZm9IZWFkZXIuYmlIZWlnaHQgPT0gMCkpCisgICAgaWYgKChtX2luZm9IZWFkZXIu
YmlXaWR0aCA8PSAwKSB8fCAhbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBPbmx5IFdpbmRvd3MgVjMrIGhhcyB0b3AtZG93biBiaXRtYXBzLgpA
QCAtMjk2LDE2ICsyNzksMTAgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6aXNJbmZvSGVhZGVyVmFs
aWQoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPbmx5IGJpdCBkZXB0aHMgb2Yg
MSwgNCwgOCwgb3IgMjQgYXJlIHVuaXZlcnNhbGx5IHN1cHBvcnRlZC4KLSAgICBpZiAoKG1faW5m
b0hlYWRlci5iaUJpdENvdW50ICE9IDEpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSA0
KQotICAgICAgICAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gOCkKLSAgICAgICAgJiYg
KG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDI0KSkgeworICAgIGlmICgobV9pbmZvSGVhZGVy
LmJpQml0Q291bnQgIT0gMSkgJiYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDQpICYmICht
X2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSA4KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQg
IT0gMjQpKSB7CiAgICAgICAgIC8vIFdpbmRvd3MgVjMrIGFkZGl0aW9uYWxseSBzdXBwb3J0cyBi
aXQgZGVwdGhzIG9mIDAgKGZvciBlbWJlZGRlZAogICAgICAgICAvLyBKUEVHL1BORyBpbWFnZXMp
LCAxNiwgYW5kIDMyLgotICAgICAgICBpZiAobV9pc09TMjF4IHx8IG1faXNPUzIyeCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKChtX2luZm9IZWFkZXIuYmlCaXRDb3Vu
dCAhPSAwKQotICAgICAgICAgICAgJiYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDE2KQot
ICAgICAgICAgICAgJiYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDMyKSkKKyAgICAgICAg
aWYgKG1faXNPUzIxeCB8fCBtX2lzT1MyMnggfHwgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICYm
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxNikgJiYgKG1faW5mb0hlYWRlci5iaUJpdENv
dW50ICE9IDMyKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zMTQs
NyArMjkxLDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6aXNJbmZvSGVhZGVyVmFsaWQoKQogICAg
IC8vIHNvbWUgY29tcHJlc3Npb24gdHlwZXMuCiAgICAgc3dpdGNoIChtX2luZm9IZWFkZXIuYmlD
b21wcmVzc2lvbikgewogICAgIGNhc2UgUkdCOgotICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJp
Qml0Q291bnQgPT0gMCkKKyAgICAgICAgaWYgKCFtX2luZm9IZWFkZXIuYmlCaXRDb3VudCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMyMyw0NiArMzAw
LDM4IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKICAgICAgICAg
Ly8gQ29tcHJlc3Npb24gPSBSTEU0IiAod2hpY2ggbWVhbnMgIjQgYml0LCBidXQgd2l0aCBhIDIt
Y29sb3IgdGFibGUiKSwKICAgICAgICAgLy8gc28gYWxzbyBhbGxvdyB0aGUgcGFsZXR0ZWQgUkxF
IGNvbXByZXNzaW9uIHR5cGVzIHRvIGhhdmUgdG9vIGxvdyBhCiAgICAgICAgIC8vIGJpdCBjb3Vu
dDsgd2UnbGwgY29ycmVjdCB0aGlzIGxhdGVyLgotICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJp
Qml0Q291bnQgPT0gMCB8fCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA+IDgpCisgICAgICAgIGlm
ICghbV9pbmZvSGVhZGVyLmJpQml0Q291bnQgfHwgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID4g
OCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBSTEU0OgogICAgICAgICAvLyBTZWUgY29tbWVudHMgaW4gUkxFOC4KLSAgICAgICAgaWYgKG1f
aW5mb0hlYWRlci5iaUJpdENvdW50ID09IDAgfHwgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiA0
KQorICAgICAgICBpZiAoIW1faW5mb0hlYWRlci5iaUJpdENvdW50IHx8IChtX2luZm9IZWFkZXIu
YmlCaXRDb3VudCA+IDQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQklURklFTERTOgogICAgICAgICAvLyBPbmx5IHZhbGlkIGZvciBXaW5k
b3dzIFYzKy4KLSAgICAgICAgaWYgKG1faXNPUzIxeCB8fCBtX2lzT1MyMngpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0g
MTYpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAzMikpCisgICAgICAgIGlmIChtX2lz
T1MyMXggfHwgbV9pc09TMjJ4IHx8ICgobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMTYpICYm
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAzMikpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSlBFRzoKICAgICBjYXNlIFBORzoKICAg
ICAgICAgLy8gT25seSB2YWxpZCBmb3IgV2luZG93cyBWMysuCi0gICAgICAgIGlmIChtX2lzT1My
MXggfHwgbV9pc09TMjJ4KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMCkKKyAgICAgICAgaWYgKG1faXNPUzIxeCB8fCBt
X2lzT1MyMnggfHwgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBIVUZGTUFOMUQ6CiAgICAgICAgIC8v
IE9ubHkgdmFsaWQgZm9yIE9TLzIgMi54LgotICAgICAgICBpZiAoIW1faXNPUzIyeCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50
ICE9IDEpCisgICAgICAgIGlmICghbV9pc09TMjJ4IHx8IChtX2luZm9IZWFkZXIuYmlCaXRDb3Vu
dCAhPSAxKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFJMRTI0OgogICAgICAgICAvLyBPbmx5IHZhbGlkIGZvciBPUy8yIDIueC4KLSAgICAg
ICAgaWYgKCFtX2lzT1MyMngpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAyNCkKKyAgICAgICAgaWYgKCFtX2lzT1MyMngg
fHwgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDI0KSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgCkBAIC0zNzQsOCArMzQzLDcgQEAgYm9vbCBCTVBJ
bWFnZVJlYWRlcjo6aXNJbmZvSGVhZGVyVmFsaWQoKQogICAgIH0KIAogICAgIC8vIFRvcC1kb3du
IGJpdG1hcHMgY2Fubm90IGJlIGNvbXByZXNzZWQ7IHRoZXkgbXVzdCBiZSBSR0Igb3IgQklURklF
TERTLgotICAgIGlmIChtX2lzVG9wRG93biAmJiAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24g
IT0gUkdCKQotICAgICAgICAmJiAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gIT0gQklURklF
TERTKSkKKyAgICBpZiAobV9pc1RvcERvd24gJiYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9u
ICE9IFJHQikgJiYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uICE9IEJJVEZJRUxEUykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJlamVjdCB0aGUgZm9sbG93aW5nIHZhbGlk
IGJpdG1hcCB0eXBlcyB0aGF0IHdlIGRvbid0IGN1cnJlbnRseSBib3RoZXIKQEAgLTM4NSwxMyAr
MzUzLDExIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKICAgICAv
LyAgICogQml0bWFwcyBsYXJnZXIgdGhhbiAyXjE2IHBpeGVscyBpbiBlaXRoZXIgZGltZW5zaW9u
IChXaW5kb3dzCiAgICAgLy8gICAgIHByb2JhYmx5IGRvZXNuJ3QgZHJhdyB0aGVzZSB3ZWxsIGFu
eXdheSwgYW5kIHRoZSBkZWNvZGVkIGRhdGEgd291bGQKICAgICAvLyAgICAgdGFrZSBhIGxvdCBv
ZiBtZW1vcnkpLgotICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGggPj0gKDEgPDwgMTYpKQot
ICAgICAgICB8fCAobV9pbmZvSGVhZGVyLmJpSGVpZ2h0ID49ICgxIDw8IDE2KSkpCisgICAgaWYg
KChtX2luZm9IZWFkZXIuYmlXaWR0aCA+PSAoMSA8PCAxNikpIHx8IChtX2luZm9IZWFkZXIuYmlI
ZWlnaHQgPj0gKDEgPDwgMTYpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vICAgKiBX
aW5kb3dzIFYzKyBKUEVHLWluLUJNUCBhbmQgUE5HLWluLUJNUCBiaXRtYXBzIChzdXBwb3NlZGx5
IG5vdCBmb3VuZAogICAgIC8vICAgICBpbiB0aGUgd2lsZCwgb25seSB1c2VkIHRvIHNlbmQgZGF0
YSB0byBwcmludGVycz8pLgotICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0g
SlBFRykKLSAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFBORykpCisg
ICAgaWYgKChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBKUEVHKSB8fCAobV9pbmZvSGVh
ZGVyLmJpQ29tcHJlc3Npb24gPT0gUE5HKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
ICAgKiBPUy8yIDIueCBIdWZmbWFuLWVuY29kZWQgbW9ub2Nocm9tZSBiaXRtYXBzIChzZWUKICAg
ICAvLyAgICAgIGh0dHA6Ly93d3cuZmlsZWZvcm1hdC5pbmZvL21pcnJvci9lZ2ZmL2NoMDlfMDUu
aHRtICwgcmU6ICJHMzFEIgpAQCAtNDEzLDExICszNzksOCBAQCBib29sIEJNUEltYWdlUmVhZGVy
Ojpwcm9jZXNzQml0bWFza3MoKQogICAgICAgICAvLyAxNiBiaXRzOiAgICBNU0IgPC0gICAgICAg
ICAgICAgICAgICAgICB4UlJSUlJHRyBHR0dCQkJCQiAtPiBMU0IKICAgICAgICAgLy8gMjQvMzIg
Yml0czogTVNCIDwtIFtBQUFBQUFBQV0gUlJSUlJSUlIgR0dHR0dHR0cgQkJCQkJCQkIgLT4gTFNC
CiAgICAgICAgIGNvbnN0IGludCBudW1CaXRzID0gKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09
IDE2KSA/IDUgOiA4OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSAyOyArK2kpIHsKLSAg
ICAgICAgICAgIG1fYml0TWFza3NbaV0gPQotICAgICAgICAgICAgICAgICgoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KDEpIDw8IChudW1CaXRzICogKDMgLSBpKSkpIC0gMSkgXgotICAgICAgICAgICAg
ICAgICgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpIDw8IChudW1CaXRzICogKDIgLSBpKSkpIC0g
MSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gMjsgKytpKQorICAg
ICAgICAgICAgbV9iaXRNYXNrc1tpXSA9ICgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpIDw8IChu
dW1CaXRzICogKDMgLSBpKSkpIC0gMSkgXiAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCAo
bnVtQml0cyAqICgyIC0gaSkpKSAtIDEpOwogCiAgICAgICAgIC8vIEZvciBXaW5kb3dzIFY0KyAz
Mi1iaXQgUkdCLCBkb24ndCBvdmVyd3JpdGUgdGhlIGFscGhhIG1hc2sgZnJvbSB0aGUKICAgICAg
ICAgLy8gaGVhZGVyIChzZWUgbm90ZSBpbiByZWFkSW5mb0hlYWRlcigpKS4KQEAgLTQzMSwxMCAr
Mzk0LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0JpdG1hc2tzKCkKIAogICAgICAg
ICAvLyBGYWlsIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIGZpbGUgc3BhY2UgZm9yIHRoZSBiaXRt
YXNrcy4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBTSVpFT0ZfQklUTUFTS1MgPSAxMjsK
LSAgICAgICAgaWYgKCgobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgU0la
RU9GX0JJVE1BU0tTKSA8Ci0gICAgICAgICAgICAgICAgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZv
SGVhZGVyLmJpU2l6ZSkpCi0gICAgICAgICAgICB8fCAobV9pbWdEYXRhT2Zmc2V0ICYmIChtX2lt
Z0RhdGFPZmZzZXQgPAotICAgICAgICAgICAgICAgIChtX2hlYWRlck9mZnNldCArIG1faW5mb0hl
YWRlci5iaVNpemUgKyBTSVpFT0ZfQklUTUFTS1MpKSkpCisgICAgICAgIGlmICgoKG1faGVhZGVy
T2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSArIFNJWkVPRl9CSVRNQVNLUykgPCAobV9oZWFk
ZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSkgfHwgKG1faW1nRGF0YU9mZnNldCAmJiAo
bV9pbWdEYXRhT2Zmc2V0IDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSAr
IFNJWkVPRl9CSVRNQVNLUykpKSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKIAog
ICAgICAgICAvLyBSZWFkIGJpdG1hc2tzLgpAQCAtNDYxLDggKzQyMSw3IEBAIGJvb2wgQk1QSW1h
Z2VSZWFkZXI6OnByb2Nlc3NCaXRtYXNrcygpCiAgICAgICAgIC8vIHNwZWNpZnkgYSBib2d1cyBh
bHBoYSBjaGFubmVsIGluIGJpdHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgcGl4ZWwKICAgICAg
ICAgLy8gZGF0YSAoZm9yIGV4YW1wbGUsIGJpdHMgMjUtMzEgaW4gYSAyNC1iaXQgUkdCIGZvcm1h
dCkuCiAgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA8IDMyKQotICAgICAgICAg
ICAgbV9iaXRNYXNrc1tpXSAmPQotICAgICAgICAgICAgICAgICgoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KDEpIDw8IG1faW5mb0hlYWRlci5iaUJpdENvdW50KSAtIDEpOworICAgICAgICAgICAgbV9i
aXRNYXNrc1tpXSAmPSAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCBtX2luZm9IZWFkZXIu
YmlCaXRDb3VudCkgLSAxKTsKIAogICAgICAgICAvLyBGb3IgZW1wdHkgbWFza3MgKGNvbW1vbiBv
biB0aGUgYWxwaGEgY2hhbm5lbCwgZXNwZWNpYWxseSBhZnRlciB0aGUKICAgICAgICAgLy8gdHJp
bW1pbmcgYWJvdmUpLCBxdWlja2x5IGNsZWFyIHRoZSBzaGlmdHMgYW5kIGNvbnRpbnVlLCB0byBh
dm9pZCBhbgpAQCAtNTA3LDE1ICs0NjYsMTEgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c0NvbG9yVGFibGUoKQogICAgIG1fdGFibGVTaXplSW5CeXRlcyA9IG1faW5mb0hlYWRlci5iaUNs
clVzZWQgKiAobV9pc09TMjF4ID8gMyA6IDQpOwogCiAgICAgLy8gRmFpbCBpZiB3ZSBkb24ndCBo
YXZlIGVub3VnaCBmaWxlIHNwYWNlIGZvciB0aGUgY29sb3IgdGFibGUuCi0gICAgaWYgKCgobV9o
ZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5dGVzKSA8
Ci0gICAgICAgICAgICAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSkKLSAg
ICAgICAgfHwgKG1faW1nRGF0YU9mZnNldCAmJiAobV9pbWdEYXRhT2Zmc2V0IDwKLSAgICAgICAg
ICAgIChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUgKyBtX3RhYmxlU2l6ZUlu
Qnl0ZXMpKSkpCisgICAgaWYgKCgobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXpl
ICsgbV90YWJsZVNpemVJbkJ5dGVzKSA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5i
aVNpemUpKSB8fCAobV9pbWdEYXRhT2Zmc2V0ICYmIChtX2ltZ0RhdGFPZmZzZXQgPCAobV9oZWFk
ZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5dGVzKSkpKQog
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAKICAgICAvLyBSZWFkIGNvbG9yIHRhYmxlLgot
ICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpCi0gICAgICAgIHx8ICgo
bV9kYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgbV90YWJsZVNpemVJbkJ5dGVzKSkK
KyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA+IG1fZGF0YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+
c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IG1fdGFibGVTaXplSW5CeXRlcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBtX2NvbG9yVGFibGUucmVzaXplKG1faW5mb0hlYWRlci5iaUNs
clVzZWQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmZvSGVhZGVyLmJpQ2xyVXNl
ZDsgKytpKSB7CkBAIC01NzMsNyArNTI4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c1JMRURhdGEoKQogICAgICAgICAvLyB0aGUgaW1hZ2UuCiAgICAgICAgIGNvbnN0IHVpbnQ4X3Qg
Y291bnQgPSBtX2RhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXRdOwogICAgICAgICBjb25zdCB1
aW50OF90IGNvZGUgPSBtX2RhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAxXTsKLSAgICAg
ICAgaWYgKCgoY291bnQgIT0gMCkgfHwgKGNvZGUgIT0gMSkpICYmIHBhc3RFbmRPZkltYWdlKDAp
KQorICAgICAgICBpZiAoKGNvdW50IHx8IChjb2RlICE9IDEpKSAmJiBwYXN0RW5kT2ZJbWFnZSgw
KSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKIAogICAgICAgICAvLyBEZWNvZGUu
CkBAIC01OTAsMTAgKzU0NSw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRh
KCkKIAogICAgICAgICAgICAgY2FzZSAxOiAgLy8gTWFnaWMgdG9rZW46IEVPRgogICAgICAgICAg
ICAgICAgIC8vIFNraXAgYW55IHJlbWFpbmluZyBwaXhlbHMgaW4gdGhlIGltYWdlLgotICAgICAg
ICAgICAgICAgIGlmICgobV9jb29yZC54KCkgPCBtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHx8IChtX2lzVG9wRG93bgotICAgICAgICAgICAgICAgICAgICAg
ICAgPyAobV9jb29yZC55KCkgPCAobV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSAtIDEpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgOiAobV9jb29yZC55KCkgPiAwKSkpCisgICAgICAgICAgICAg
ICAgaWYgKChtX2Nvb3JkLngoKSA8IG1fcGFyZW50LT5zaXplKCkud2lkdGgoKSkgfHwgKG1faXNU
b3BEb3duID8gKG1fY29vcmQueSgpIDwgKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKSkg
OiAobV9jb29yZC55KCkgPiAwKSkpCiAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRI
YXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjA3LDEw
ICs1NTksOSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YSgpCiAgICAgICAg
ICAgICAgICAgLy8gcGFzdCB0aGUgZW5kIG9mIHRoZSBpbWFnZS4KICAgICAgICAgICAgICAgICBj
b25zdCB1aW50OF90IGR4ID0gbV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgMl07CiAg
ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBkeSA9IG1fZGF0YS0+ZGF0YSgpW21fZGVjb2Rl
ZE9mZnNldCArIDNdOwotICAgICAgICAgICAgICAgIGlmICgoZHggIT0gMCkgfHwgKGR5ICE9IDAp
KQorICAgICAgICAgICAgICAgIGlmIChkeCB8fCBkeSkKICAgICAgICAgICAgICAgICAgICAgbV9i
dWZmZXItPnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICAgICAgICAgIGlmICgoKG1fY29vcmQu
eCgpICsgZHgpID4gbV9wYXJlbnQtPnNpemUoKS53aWR0aCgpKSB8fAotICAgICAgICAgICAgICAg
ICAgICBwYXN0RW5kT2ZJbWFnZShkeSkpCisgICAgICAgICAgICAgICAgaWYgKCgobV9jb29yZC54
KCkgKyBkeCkgPiBtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCkpIHx8IHBhc3RFbmRPZkltYWdlKGR5
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogCiAgICAgICAgICAg
ICAgICAgLy8gU2tpcCBpbnRlcnZlbmluZyBwaXhlbHMuCkBAIC02MzcsOCArNTg4LDcgQEAgYm9v
bCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEoKQogICAgICAgICAgICAgLy8gVGhlIGZv
bGxvd2luZyBjb2xvciBkYXRhIGlzIHJlcGVhdGVkIGZvciB8Y291bnR8IHRvdGFsIHBpeGVscy4K
ICAgICAgICAgICAgIC8vIFN0cmFuZ2VseSwgc29tZSBCTVBzIHNlZW0gdG8gc3BlY2lmeSBleGNl
c3NpdmVseSBsYXJnZSBjb3VudHMKICAgICAgICAgICAgIC8vIGhlcmU7IGlnbm9yZSBwaXhlbHMg
cGFzdCB0aGUgZW5kIG9mIHRoZSByb3cuCi0gICAgICAgICAgICBjb25zdCBpbnQgZW5kWCA9Ci0g
ICAgICAgICAgICAgICAgc3RkOjptaW4obV9jb29yZC54KCkgKyBjb3VudCwgbV9wYXJlbnQtPnNp
emUoKS53aWR0aCgpKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBlbmRYID0gc3RkOjptaW4obV9j
b29yZC54KCkgKyBjb3VudCwgbV9wYXJlbnQtPnNpemUoKS53aWR0aCgpKTsKIAogICAgICAgICAg
ICAgaWYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTI0KSB7CiAgICAgICAgICAg
ICAgICAgLy8gQmFpbCBpZiB0aGVyZSBpc24ndCBlbm91Z2ggZGF0YS4KQEAgLTY0Niw4ICs1OTYs
NyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YSgpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIC8vIE9uZSBCR1IgdHJpcGxl
IHRoYXQgd2UgY29weSB8Y291bnR8IHRpbWVzLgotICAgICAgICAgICAgICAgIGZpbGxSR0JBKGVu
ZFgsIG1fZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDNdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDJdLCBjb2RlLCAweGZm
KTsKKyAgICAgICAgICAgICAgICBmaWxsUkdCQShlbmRYLCBtX2RhdGEtPmRhdGEoKVttX2RlY29k
ZWRPZmZzZXQgKyAzXSwgbV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgMl0sIGNvZGUs
IDB4ZmYpOwogICAgICAgICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArPSA0OwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBSTEU4IGhhcyBvbmUgY29sb3IgaW5kZXgg
dGhhdCBnZXRzIHJlcGVhdGVkOyBSTEU0IGhhcyB0d28KQEAgLTY1OCw4ICs2MDcsNyBAQCBib29s
IEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YSgpCiAgICAgICAgICAgICAgICAgICAgIGNv
bG9ySW5kZXhlc1swXSA9IChjb2xvckluZGV4ZXNbMF0gPj4gNCkgJiAweGY7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbG9ySW5kZXhlc1sxXSAmPSAweGY7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICgoY29sb3JJbmRleGVzWzBdID49IG1faW5mb0hlYWRlci5iaUNsclVz
ZWQpCi0gICAgICAgICAgICAgICAgICAgIHx8IChjb2xvckluZGV4ZXNbMV0gPj0gbV9pbmZvSGVh
ZGVyLmJpQ2xyVXNlZCkpCisgICAgICAgICAgICAgICAgaWYgKChjb2xvckluZGV4ZXNbMF0gPj0g
bV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCkgfHwgKGNvbG9ySW5kZXhlc1sxXSA+PSBtX2luZm9IZWFk
ZXIuYmlDbHJVc2VkKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwog
ICAgICAgICAgICAgICAgIGZvciAoaW50IHdoaWNoID0gMDsgbV9jb29yZC54KCkgPCBlbmRYOyAp
IHsKICAgICAgICAgICAgICAgICAgICAgc2V0SShjb2xvckluZGV4ZXNbd2hpY2hdKTsKQEAgLTY4
OSw5ICs2MzcsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0YShiCiAg
ICAgLy8gcmVxdWlyZXMuCiAgICAgY29uc3Qgc2l6ZV90IHBpeGVsc1BlckJ5dGUgPSA4IC8gbV9p
bmZvSGVhZGVyLmJpQml0Q291bnQ7CiAgICAgY29uc3Qgc2l6ZV90IGJ5dGVzUGVyUGl4ZWwgPSBt
X2luZm9IZWFkZXIuYmlCaXRDb3VudCAvIDg7Ci0gICAgY29uc3Qgc2l6ZV90IHVucGFkZGVkTnVt
Qnl0ZXMgPSAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPCAxNikKLSAgICAgICAgPyAoKG51bVBp
eGVscyArIHBpeGVsc1BlckJ5dGUgLSAxKSAvIHBpeGVsc1BlckJ5dGUpCi0gICAgICAgIDogKG51
bVBpeGVscyAqIGJ5dGVzUGVyUGl4ZWwpOworICAgIGNvbnN0IHNpemVfdCB1bnBhZGRlZE51bUJ5
dGVzID0gKG1faW5mb0hlYWRlci5iaUJpdENvdW50IDwgMTYpID8gKChudW1QaXhlbHMgKyBwaXhl
bHNQZXJCeXRlIC0gMSkgLyBwaXhlbHNQZXJCeXRlKSA6IChudW1QaXhlbHMgKiBieXRlc1BlclBp
eGVsKTsKICAgICAvLyBSTEUgcnVucyBhcmUgemVyby1wYWRkZWQgYXQgdGhlIGVuZCB0byBhIG11
bHRpcGxlIG9mIDE2IGJpdHMuICBOb24tUkxFCiAgICAgLy8gZGF0YSBpcyBpbiByb3dzIGFuZCBp
cyB6ZXJvLXBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDMyIGJpdHMuCiAgICAgY29uc3Qgc2l6ZV90
IGFsaWduQml0cyA9IGluUkxFID8gMSA6IDM7CkBAIC03MTEsMTAgKzY1Nyw4IEBAIGJvb2wgQk1Q
SW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVEYXRhKGIKICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QgbWFzayA9ICgxIDw8IG1faW5mb0hlYWRlci5iaUJpdENvdW50KSAtIDE7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBieXRlID0gMDsgYnl0ZSA8IHVucGFkZGVkTnVtQnl0ZXM7ICsrYnl0ZSkg
ewogICAgICAgICAgICAgICAgIHVpbnQ4X3QgcGl4ZWxEYXRhID0gbV9kYXRhLT5kYXRhKClbbV9k
ZWNvZGVkT2Zmc2V0ICsgYnl0ZV07Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgcGl4ZWwg
PSAwOwotICAgICAgICAgICAgICAgICAgICAgKHBpeGVsIDwgcGl4ZWxzUGVyQnl0ZSkgJiYgKG1f
Y29vcmQueCgpIDwgZW5kWCk7ICsrcGl4ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IGNvbG9ySW5kZXggPQotICAgICAgICAgICAgICAgICAgICAgICAgKHBpeGVsRGF0YSA+
PiAoOCAtIG1faW5mb0hlYWRlci5iaUJpdENvdW50KSkgJiBtYXNrOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IHBpeGVsID0gMDsgKHBpeGVsIDwgcGl4ZWxzUGVyQnl0ZSkgJiYgKG1fY29v
cmQueCgpIDwgZW5kWCk7ICsrcGl4ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6
ZV90IGNvbG9ySW5kZXggPSAocGl4ZWxEYXRhID4+ICg4IC0gbV9pbmZvSGVhZGVyLmJpQml0Q291
bnQpKSAmIG1hc2s7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2FuZE1hc2tTdGF0ZSA9PSBE
ZWNvZGluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8g
YWNjdXJhdGVseSByZXByZXNlbnQgYW4gQU5EICsgWE9SCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBvcGVyYXRpb24gYXMgYW4gUkdCQSBpbWFnZSwgc28gd2hlcmUgdGhlIEFORCB2YWx1ZXMK
QEAgLTc0OSw3ICs2OTMsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0
YShiCiAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHdoZXJlIGFsbCBhbHBoYSB2YWx1ZXMgYXJl
IDI1NTsgb3BhcXVlIGltYWdlcyBhcmUKICAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgdG8gZHJh
dy4KICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSBnZXRBbHBoYShwaXhlbCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX3NlZW5Ob25aZXJvQWxwaGFQaXhlbCAmJiAoYWxwaGEgPT0gMCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW1fc2Vlbk5vblplcm9BbHBoYVBpeGVsICYmICFhbHBoYSkg
ewogICAgICAgICAgICAgICAgICAgICBtX3NlZW5aZXJvQWxwaGFQaXhlbCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGFscGhhID0gMjU1OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmgJKHJldmlzaW9uIDU0NzI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB1aW50MzJfdCByZXN1bHQ7CiAg
ICAgICAgICAgICBtZW1jcHkoJnJlc3VsdCwgJmRhdGEtPmRhdGEoKVtvZmZzZXRdLCA0KTsKICAg
ICAgICAgI2lmIENQVShCSUdfRU5ESUFOKQotICAgICAgICAgICAgcmVzdWx0ID0gKChyZXN1bHQg
JiAweGZmKSA8PCAyNCkgfCAoKHJlc3VsdCAmIDB4ZmYwMCkgPDwgOCkgfAotICAgICAgICAgICAg
ICAgICgocmVzdWx0ICYgMHhmZjAwMDApID4+IDgpIHwgKChyZXN1bHQgJiAweGZmMDAwMDAwKSA+
PiAyNCk7CisgICAgICAgICAgICByZXN1bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDI0KSB8ICgo
cmVzdWx0ICYgMHhmZjAwKSA8PCA4KSB8ICgocmVzdWx0ICYgMHhmZjAwMDApID4+IDgpIHwgKChy
ZXN1bHQgJiAweGZmMDAwMDAwKSA+PiAyNCk7CiAgICAgICAgICNlbmRpZgogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtNjcsMTAgKzY2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyB8c3RhcnRPZmZzZXR8IHBvaW50cyB0byB0aGUgc3RhcnQgb2Yg
dGhlIEJNUCB3aXRoaW4gdGhlIGZpbGUuCiAgICAgICAgIC8vIHxidWZmZXJ8IHBvaW50cyBhdCBh
biBlbXB0eSBSR0JBMzJCdWZmZXIgdGhhdCB3ZSdsbCBpbml0aWFsaXplIGFuZAogICAgICAgICAv
LyBmaWxsIHdpdGggZGVjb2RlZCBkYXRhLgotICAgICAgICBCTVBJbWFnZVJlYWRlcihJbWFnZURl
Y29kZXIqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlY29kZWRBbmRI
ZWFkZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbWdEYXRhT2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNBbmRNYXNrKTsKKyAgICAgICAgQk1Q
SW1hZ2VSZWFkZXIoSW1hZ2VEZWNvZGVyKiBwYXJlbnQsIHNpemVfdCBkZWNvZGVkQW5kSGVhZGVy
T2Zmc2V0LCBzaXplX3QgaW1nRGF0YU9mZnNldCwgYm9vbCB1c2VzQW5kTWFzayk7CiAKICAgICAg
ICAgdm9pZCBzZXRCdWZmZXIoUkdCQTMyQnVmZmVyKiBidWZmZXIpIHsgbV9idWZmZXIgPSBidWZm
ZXI7IH0KICAgICAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkgeyBtX2RhdGEg
PSBkYXRhOyB9CkBAIC0xNzksOSArMTc1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBpbWFnZSIsIHNvIGRvd253YXJkcyBmb3IgbV9pc1RvcERvd24gaW1hZ2VzIGFuZCB1cHdh
cmRzIG90aGVyd2lzZS4KICAgICAgICAgaW5saW5lIGJvb2wgcGFzdEVuZE9mSW1hZ2UoaW50IG51
bVJvd3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2lzVG9wRG93bgotICAgICAg
ICAgICAgICAgID8gKChtX2Nvb3JkLnkoKSArIG51bVJvd3MpID49IG1fcGFyZW50LT5zaXplKCku
aGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgOiAoKG1fY29vcmQueSgpIC0gbnVtUm93cykgPCAw
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2lzVG9wRG93biA/ICgobV9jb29yZC55KCkgKyBudW1S
b3dzKSA+PSBtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpKSA6ICgobV9jb29yZC55KCkgLSBudW1S
b3dzKSA8IDApOwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgcGl4ZWwgZGF0
YSBmb3IgdGhlIGN1cnJlbnQgWCBjb29yZGluYXRlIGluIGEgdWludDMyX3QuCkBAIC0yMDMsOCAr
MTk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgIHVpbnQzMl90IHBp
eGVsOwogICAgICAgICAgICAgICAgIG1lbWNweSgmcGl4ZWwsICZtX2RhdGEtPmRhdGEoKVttX2Rl
Y29kZWRPZmZzZXQgKyBvZmZzZXRdLCAzKTsKICAgICAgICAgI2lmIENQVShCSUdfRU5ESUFOKQot
ICAgICAgICAgICAgICAgIHBpeGVsID0gKChwaXhlbCAmIDB4ZmYwMCkgPDwgOCkgfCAoKHBpeGVs
ICYgMHhmZjAwMDApID4+IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgKChwaXhlbCAmIDB4ZmYw
MDAwMDApID4+IDI0KTsKKyAgICAgICAgICAgICAgICBwaXhlbCA9ICgocGl4ZWwgJiAweGZmMDAp
IDw8IDgpIHwgKChwaXhlbCAmIDB4ZmYwMDAwKSA+PiA4KSB8ICgocGl4ZWwgJiAweGZmMDAwMDAw
KSA+PiAyNCk7CiAgICAgICAgICNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybiBwaXhlbDsK
ICAgICAgICAgICAgIH0KQEAgLTIyMiwxNyArMjE1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gaW4gdGhlIGdpdmVuIHBpeGVsIGRhdGEuCiAgICAgICAgIGlubGluZSB1bnNp
Z25lZCBnZXRDb21wb25lbnQodWludDMyX3QgcGl4ZWwsIGludCBjb21wb25lbnQpIGNvbnN0CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoKHBpeGVsICYgbV9iaXRNYXNrc1tjb21wb25l
bnRdKSA+PgotICAgICAgICAgICAgICAgIG1fYml0U2hpZnRzUmlnaHRbY29tcG9uZW50XSkgPDwg
bV9iaXRTaGlmdHNMZWZ0W2NvbXBvbmVudF07CisgICAgICAgICAgICByZXR1cm4gKChwaXhlbCAm
IG1fYml0TWFza3NbY29tcG9uZW50XSkgPj4gbV9iaXRTaGlmdHNSaWdodFtjb21wb25lbnRdKSA8
PCBtX2JpdFNoaWZ0c0xlZnRbY29tcG9uZW50XTsKICAgICAgICAgfQogCiAgICAgICAgIGlubGlu
ZSB1bnNpZ25lZCBnZXRBbHBoYSh1aW50MzJfdCBwaXhlbCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgLy8gRm9yIGltYWdlcyB3aXRob3V0IGFscGhhLCByZXR1cm4gYWxwaGEgb2YgMHhm
Zi4KLSAgICAgICAgICAgIGlmIChtX2JpdE1hc2tzWzNdID09IDApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDB4ZmY7Ci0KLSAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnQocGl4ZWwsIDMp
OworICAgICAgICAgICAgcmV0dXJuIG1fYml0TWFza3NbM10gPyBnZXRDb21wb25lbnQocGl4ZWws
IDMpIDogMHhmZjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgcGl4
ZWwgdG8gdGhlIGNvbG9yIGdpdmVuIGJ5IHxjb2xvckluZGV4fC4gIFRoaXMgYWxzbwpAQCAtMjQw
LDkgKzIyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gcmlnaHQgYnkgb25l
LgogICAgICAgICBpbmxpbmUgdm9pZCBzZXRJKHNpemVfdCBjb2xvckluZGV4KQogICAgICAgICB7
Ci0gICAgICAgICAgICBzZXRSR0JBKG1fY29sb3JUYWJsZVtjb2xvckluZGV4XS5yZ2JSZWQsCi0g
ICAgICAgICAgICAgICAgICAgIG1fY29sb3JUYWJsZVtjb2xvckluZGV4XS5yZ2JHcmVlbiwKLSAg
ICAgICAgICAgICAgICAgICAgbV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYkJsdWUsIDB4ZmYp
OworICAgICAgICAgICAgc2V0UkdCQShtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiUmVkLCBt
X2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiR3JlZW4sIG1fY29sb3JUYWJsZVtjb2xvckluZGV4
XS5yZ2JCbHVlLCAweGZmKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIExpa2Ugc2V0SSgpLCBi
dXQgd2l0aCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnQgdmFsdWVzIHNwZWNpZmllZC4KQEAgLTI1
MSw4ICsyMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYmx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSkKICAgICAgICAgewotICAgICAgICAgICAgbV9idWZmZXItPnNldFJHQkEobV9jb29y
ZC54KCksIG1fY29vcmQueSgpLCByZWQsIGdyZWVuLCBibHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxwaGEpOworICAgICAgICAgICAgbV9idWZmZXItPnNldFJHQkEobV9jb29y
ZC54KCksIG1fY29vcmQueSgpLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgICAgICAg
ICBtX2Nvb3JkLm1vdmUoMSwgMCk7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShy
ZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoKQotICAg
IDogbV9mcmFtZUNvdW50VmFsaWQodHJ1ZSkKKyAgICA6IG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0
YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25M
b29wT25jZSkKICAgICAsIG1fcmVhZE9mZnNldCgwKQogewpAQCAtNDAsNTYgKzQwLDQ1IEBAIEdJ
RkltYWdlRGVjb2Rlcjo6fkdJRkltYWdlRGVjb2RlcigpCiB7CiB9CiAKLS8vIFRha2UgdGhlIGRh
dGEgYW5kIHN0b3JlIGl0Lgogdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAgICBpZiAobV9mYWlsZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIC8vIENhY2hlIG91ciBuZXcgZGF0YS4KICAgICBJbWFnZURl
Y29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIAotICAgIC8vIE91ciBmcmFt
ZSBjb3VudCBpcyBub3cgdW5rbm93bi4KLSAgICBtX2ZyYW1lQ291bnRWYWxpZCA9IGZhbHNlOwor
ICAgIC8vIFdlIG5lZWQgdG8gcmVzY2FuIHRoZSBmcmFtZSBjb3VudCwgYXMgdGhlIG5ldyBkYXRh
IG1heSBoYXZlIGNoYW5nZWQgaXQuCisgICAgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJh
bWVDb3VudCA9IGZhbHNlOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBHSUYgcmVhZGVyLgogICAgIGlm
ICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQogICAgICAgICBtX3JlYWRlci5zZXQobmV3IEdJRklt
YWdlUmVhZGVyKHRoaXMpKTsKIH0KIAotLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3Jt
YXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiBib29sIEdJRkltYWdlRGVjb2Rlcjo6aXNTaXpl
QXZhaWxhYmxlKCkKIHsKICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkg
JiYgIWZhaWxlZCgpICYmIG1fcmVhZGVyKQotICAgICAgICAgZGVjb2RlKEdJRlNpemVRdWVyeSwg
MCk7CisgICAgICAgICBkZWNvZGUoMCwgR0lGU2l6ZVF1ZXJ5KTsKIAogICAgIHJldHVybiBJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi0vLyBUaGUgdG90YWwgbnVtYmVyIG9m
IGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgV2lsbCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZvciB0aGUg
YW5zd2VyCi0vLyAod2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2
aWR1YWwgZnJhbWVzKS4KIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewot
ICAgIC8vIElmIHRoZSBkZWNvZGVyIGhhZCBhbiBlYXJsaWVyIGVycm9yLCB3ZSB3aWxsIGp1c3Qg
cmV0dXJuIHdoYXQgd2UgaGFkIGRlY29kZWQKLSAgICAvLyBzbyBmYXIuCi0gICAgaWYgKCFtX2Zy
YW1lQ291bnRWYWxpZCkgewotICAgICAgICAvLyBGSVhNRTogU2Nhbm5pbmcgYWxsIHRoZSBkYXRh
IGhhcyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEgd2VyZSB0byBjb21lIGluIHJlYWxseQot
ICAgICAgICAvLyBzbG93bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8gY2xvbmUg
b3VyIGV4aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZQotICAgICAgICAvLyBzdGF0ZSwg
YnV0IGZvciBub3cgd2UganVzdCBjcmF3bCBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBp
cyBubyB3b3JzZSB0aGFuIHdoYXQKLSAgICAgICAgLy8gSW1hZ2VJTyBkb2VzIG9uIE1hYyByaWdo
dCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCisgICAgaWYgKCFtX2Fs
cmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7CisgICAgICAgIC8vIEZJWE1FOiBT
Y2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlvciBpZiB0aGUgZGF0YSB3ZXJl
IHRvCisgICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4gIE1pZ2h0IGJlIGludGVyZXN0
aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKKyAgICAgICAgLy8gZXhpc3RpbmcgcmVhZCBzZXNzaW9u
IHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGNyYXdsCisgICAgICAgIC8v
IGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdvcnNlIHRoYW4gd2hhdCBJbWFn
ZUlPIGRvZXMgb24KKyAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAoaXQgYWxzbyBjcmF3bHMgYWxs
IHRoZSBkYXRhIGFnYWluKS4KICAgICAgICAgR0lGSW1hZ2VSZWFkZXIgcmVhZGVyKDApOwotICAg
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBmYWlsLCBidXQgd2Ugd2FudCB0byBrZWVwIGFueSBw
YXJ0aWFsIGRhdGEgaXQgbWF5Ci0gICAgICAgIC8vIGhhdmUgZGVjb2RlZCwgc28gZG9uJ3QgbWFy
ayBpdCBpcyBpbnZhbGlkLiBJZiB0aGVyZSBpcyBhbiBvdmVyZmxvdwotICAgICAgICAvLyBvciBz
b21lIHNlcmlvdXMgZXJyb3IsIG1fZmFpbGVkIHdpbGwgaGF2ZSBnb3R0ZW4gc2V0IGZvciB1cy4K
ICAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgp
LCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLTEpKTsKLSAgICAgICAgbV9mcmFtZUNvdW50VmFsaWQgPSB0cnVlOworICAgICAgICBtX2Fs
cmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2VzX2NvdW50KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKIH0KIAotLy8gVGhlIG51bWJlciBvZiBy
ZXBldGl0aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmltYXRpb24gbG9vcC4KIGludCBHSUZJbWFn
ZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyB2YWx1ZSBj
YW4gYXJyaXZlIGF0IGFueSBwb2ludCBpbiB0aGUgaW1hZ2UgZGF0YSBzdHJlYW0uICBNb3N0IEdJ
RnMKQEAgLTEyMCw3ICsxMDksNyBAQCBSR0JBMzJCdWZmZXIqIEdJRkltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmCiAKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2lu
ZGV4XTsKICAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBs
ZXRlICYmIG1fcmVhZGVyKQotICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCArIDEp
OyAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KKyAgICAgICAgZGVjb2RlKGluZGV4ICsgMSwgR0lGRnVs
bFF1ZXJ5KTsgIC8vIERlY29kZSB0aGlzIGZyYW1lLgogICAgIHJldHVybiAmZnJhbWU7CiB9CiAK
QEAgLTEyOSw3ICsxMTgsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZl
ckNhCiAgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBpZiB0aGUgZGVjb2RlciB3YXMgZGVzdHJv
eWVkIHdoaWxlIGFuaW1hdGluZywgd2UKICAgICAvLyBjYW4gYmUgYXNrZWQgdG8gY2xlYXIgbW9y
ZSBmcmFtZXMgdGhhbiB3ZSBjdXJyZW50bHkgaGF2ZS4KICAgICBpZiAobV9mcmFtZUJ1ZmZlckNh
Y2hlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAg
ICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRvLgogCiAgICAgLy8gVGhlICItMSIgaGVyZSBpcyB0
cmlja3kuICBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGNsZWFyQmVmb3JlRnJhbWV8IGlzIHRoZQog
ICAgIC8vIGxhc3QgZnJhbWUgd2Ugd2lzaCB0byBwcmVzZXJ2ZSwgYnV0IHJhdGhlciB0aGF0IHdl
IG5ldmVyIHdhbnQgdG8gY2xlYXIKQEAgLTE3NCwyMyArMTYzLDExIEBAIHZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICB9CiB9CiAKLS8vIEZlZWQgZGF0YSB0byB0
aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXVl
cnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQotewotICAgIGlmIChtX2ZhaWxlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPnJlYWQoKGNvbnN0IHVuc2lnbmVk
IGNoYXIqKW1fZGF0YS0+ZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEtPnNpemUoKSAtIG1f
cmVhZE9mZnNldCwgcXVlcnksIGhhbHRBdEZyYW1lKTsKLSAgICAKLSAgICBpZiAobV9mYWlsZWQp
Ci0gICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7Ci19Ci0KLS8vIENhbGxiYWNrcyBmcm9tIHRoZSBH
SUYgcmVhZGVyLgogYm9vbCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhl
aWdodCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHByZXBhcmVTY2FsZURhdGFJZk5l
Y2Vzc2FyeSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjAwLDk0ICsxNzcsNyBAQCB2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zCiAgICAgbV9yZWFkT2Zmc2V0ID0g
bV9kYXRhLT5zaXplKCkgLSBieXRlc0xlZnQ7CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKLXsKLSAgICAvLyBJbml0aWFsaXpl
IHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCi0gICAgY29uc3QgR0lGRnJhbWVSZWFkZXIq
IGZyYW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKLSAgICBJbnRSZWN0IGZyYW1l
UmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCwgZnJhbWVS
ZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0
aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUg
YnVmZmVyLgotICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IHNpemUoKS53aWR0aCgpKQotICAg
ICAgICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9v
ZmZzZXQpOwotICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCkuaGVpZ2h0KCkpCi0g
ICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gZnJhbWVSZWFkZXIt
Pnlfb2Zmc2V0KTsKLQotICAgIFJHQkEzMkJ1ZmZlciogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVC
dWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRY
KGZyYW1lUmVjdC54KCkpOwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1l
UmVjdC5yaWdodCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJh
bWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVj
dC5ib3R0b20oKSwgdG9wKTsKLSAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3As
IHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7Ci0KLSAgICBpZiAoZnJhbWVJbmRleCA9PSAw
KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVs
eWluZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KLSAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUo
c2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKLSAgICAgICAg
ICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBm
cmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCi0gICAgICAgIC8vIGRpc3Bvc2Fs
IG1ldGhvZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQotICAgICAgICAvLyBu
by1vcHMgaW4gdGVybXMgb2YgY2hhbmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJhbWUg
Y29tcGFyZWQgdG8KLSAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIHRoZSBwcmV2aW91
cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhlCi0gICAgICAgIC8vIGZpcnN0IGZy
YW1lIHNwZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCi0gICAg
ICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBs
ZXRlbHkgZW1wdHkgaW1hZ2UuKQotICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIqIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgIFJHQkEzMkJ1
ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0KLSAgICAgICAgICAgIHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7Ci0gICAgICAgIHdoaWxlICgoZnJhbWVJbmRleCA+IDAp
Ci0gICAgICAgICAgICAgICAmJiAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VP
dmVyd3JpdGVQcmV2aW91cykpIHsKLSAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1
ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1
ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQocHJldkJ1
ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKLQotICAgICAg
ICBpZiAoKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8
fAotICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZUtl
ZXApKSB7Ci0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3Rh
cnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgICAgICBidWZmZXItPmNvcHlCaXRt
YXBEYXRhKCpwcmV2QnVmZmVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdl
IHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0
Ci0gICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9m
IHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1
ZmZlci0+cmVjdCgpOwotICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNj
YWxlZFNpemUoKTsKLSAgICAgICAgICAgIGlmICgoZnJhbWVJbmRleCA9PSAwKQotICAgICAgICAg
ICAgICAgIHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyU2l6
ZSkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBh
IGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQotICAgICAgICAgICAgICAgIC8vIGltYWdlLCBy
ZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAo
IWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1ZmZlciwgdGhl
biBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAgICAgYnVmZmVyLT5jb3B5Qml0bWFw
RGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55
KCk7IHkgPCBwcmV2UmVjdC5ib3R0b20oKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3QucmlnaHQoKTsgKyt4KQotICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAwKSAmJiAo
cHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKLSAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFz
QWxwaGEodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBV
cGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCi0gICAgYnVmZmVyLT5z
ZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwotCi0gICAgLy8gUmVzZXQgdGhl
IGFscGhhIHBpeGVsIHRyYWNrZXIgZm9yIHRoaXMgZnJhbWUuCi0gICAgbV9jdXJyZW50QnVmZmVy
U2F3QWxwaGEgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByb3dOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0Q291bnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVRyYW5zcGFy
ZW50UGl4ZWxzKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVk
IGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93
RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRl
VHJhbnNwYXJlbnRQaXhlbHMpCiB7CiAgICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZyYW1lUmVh
ZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKICAgICAvLyBUaGUgcGl4ZWwgZGF0YSBhbmQg
Y29vcmRpbmF0ZXMgc3VwcGxpZWQgdG8gdXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSdzCkBA
IC0zNjUsNyArMjU1LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5z
aQogICAgICAgICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3
ZSBjYW4gc2V0SGFzQWxwaGEoZmFsc2UpLgogICAgICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250
YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQogICAgICAgICAgICAgYnVm
ZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDAp
IHsKKyAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCkgewogICAgICAgICAgICAgLy8gVHJpY2t5
IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJl
CiAgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2ZSBhbHBoYS4gIFRv
IGtub3cgd2hldGhlciB0aGlzIGlzCiAgICAgICAgICAgICAvLyB0cnVlLCB3ZSBjaGVjayB0aGUg
c3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRvZXNuJ3QgaGF2ZQpAQCAtMzc1LDgg
KzI2NSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAgICAg
ICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkgdGhl
IHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKS4KICAg
ICAgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVy
Q2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgIHdoaWxlICgoZnJhbWVJbmRleCA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0g
UkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKQorICAgICAgICAgICAgd2hp
bGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMy
QnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKQogICAgICAgICAgICAgICAgIHByZXZC
dWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAKICAgICAgICAgICAg
IC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NlTm90U3BlY2lmaWVkIG9yIERpc3Bvc2VLZWVw
IGZyYW1lLCB0aGVuCkBAIC0zODcsOCArMjc2LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUodW5zaQogICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIGNhc2Ug
aXMgYSBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCiAgICAgICAgICAgICAvLyBp
dCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQg
ZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Uga25vdyB0aGUgY3VycmVudCBmcmFtZSBo
YXMgbm8gYWxwaGEuCi0gICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikKLSAgICAgICAgICAg
ICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucmVjdCgpLmNvbnRhaW5z
KHByZXZCdWZmZXItPnJlY3QoKSkpCisgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikgJiYg
IXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250YWlucyhwcmV2QnVm
ZmVyLT5yZWN0KCkpKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC00MDEsNCArMjg5LDkzIEBAIHZvaWQgR0lGSW1hZ2VEZWNv
ZGVyOjpnaWZDb21wbGV0ZSgpCiAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0KIAordm9pZCBHSUZJ
bWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkgcXVlcnkp
Cit7CisgICAgaWYgKG1fZmFpbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZhaWxlZCA9
ICFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkgKyBt
X3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFsdEF0
RnJhbWUpOworCisgICAgaWYgKG1fZmFpbGVkKQorICAgICAgICBtX3JlYWRlci5jbGVhcigpOwor
fQorCitib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1l
SW5kZXgpCit7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVmZmVy
LgorICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVyLT5mcmFt
ZV9yZWFkZXI7CisgICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVSZWFkZXItPnhfb2Zmc2V0LCBm
cmFtZVJlYWRlci0+eV9vZmZzZXQsIGZyYW1lUmVhZGVyLT53aWR0aCwgZnJhbWVSZWFkZXItPmhl
aWdodCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVjdCBkb2Vzbid0IGV4dGVuZCBv
dXRzaWRlIHRoZSBidWZmZXIuCisgICAgaWYgKGZyYW1lUmVjdC5yaWdodCgpID4gc2l6ZSgpLndp
ZHRoKCkpCisgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAtIGZyYW1l
UmVhZGVyLT54X29mZnNldCk7CisgICAgaWYgKGZyYW1lUmVjdC5ib3R0b20oKSA+IHNpemUoKS5o
ZWlnaHQoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBm
cmFtZVJlYWRlci0+eV9vZmZzZXQpOworCisgICAgUkdCQTMyQnVmZmVyKiBjb25zdCBidWZmZXIg
PSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGludCBsZWZ0ID0gdXBwZXJC
b3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNj
YWxlZFgoZnJhbWVSZWN0LnJpZ2h0KCksIGxlZnQpOworICAgIGludCB0b3AgPSB1cHBlckJvdW5k
U2NhbGVkWShmcmFtZVJlY3QueSgpKTsKKyAgICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxl
ZFkoZnJhbWVSZWN0LmJvdHRvbSgpLCB0b3ApOworICAgIGJ1ZmZlci0+c2V0UmVjdChJbnRSZWN0
KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKKyAgICAKKyAgICBpZiAo
IWZyYW1lSW5kZXgpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdl
J3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgorICAgICAgICBpZiAoIWJ1ZmZl
ci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkg
eworICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRl
IGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKKyAgICAgICAg
Ly8gZGlzcG9zYWwgbWV0aG9kLgorICAgICAgICAvLworICAgICAgICAvLyBGcmFtZXMgdGhhdCB1
c2UgdGhlIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5Cisg
ICAgICAgIC8vIG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRpbmcgc3RhdGUg
b2YgYSBmcmFtZSBjb21wYXJlZCB0bworICAgICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2Yg
dGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUKKyAgICAgICAg
Ly8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0cmVhdGVk
IGxpa2UKKyAgICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0
IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCisgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZl
ciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAgICAg
ICAgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVm
ZmVyLT5kaXNwb3NhbE1ldGhvZCgpOworICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJl
dk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpIHsKKyAg
ICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07
CisgICAgICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMy
QnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKworICAgICAgICBpZiAoKHByZXZNZXRob2QgPT0gUkdC
QTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhvZCA9PSBSR0JBMzJC
dWZmZXI6OkRpc3Bvc2VLZWVwKSkgeworICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3Qg
ZnJhbWUgYXMgdGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lLgorICAgICAgICAgICAg
YnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFu
c3BhcmVudCwgd2l0aG91dAorICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUg
aW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCisgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBw
cmV2UmVjdCA9IHByZXZCdWZmZXItPnJlY3QoKTsKKyAgICAgICAgICAgIGNvbnN0IEludFNpemUm
IGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXgg
fHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkg
eworICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFt
ZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKKyAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0
cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCisgICAgICAgICAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xl
YXIganVzdCBpdHMgZnJhbWUuCisgICAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEo
KnByZXZCdWZmZXIpOworICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5
IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkgeworICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0LnJpZ2h0KCk7ICsreCkKKyAgICAgICAgICAg
ICAgICAgICAgICBidWZmZXItPnNldFJHQkEoeCwgeSwgMCwgMCwgMCwgMCk7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgaWYgKChwcmV2UmVjdC53aWR0aCgpID4gMCkgJiYgKHByZXZS
ZWN0LmhlaWdodCgpID4gMCkpCisgICAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhh
KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXBkYXRl
IG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgorICAgIGJ1ZmZlci0+c2V0U3Rh
dHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKworICAgIC8vIFJlc2V0IHRoZSBhbHBo
YSBwaXhlbCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgorICAgIG1fY3VycmVudEJ1ZmZlclNhd0Fs
cGhhID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw0OCArMzcsMzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdJRkltYWdlRGVj
b2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgR0lGSW1h
Z2VEZWNvZGVyKCk7Ci0gICAgICAgIH5HSUZJbWFnZURlY29kZXIoKTsKKyAgICAgICAgdmlydHVh
bCB+R0lGSW1hZ2VEZWNvZGVyKCk7CiAKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiZ2lmIjsgfQorICAgICAgICBlbnVtIEdJRlF1ZXJ5
IHsgR0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwogCi0g
ICAgICAgIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgorICAgICAgICAvLyBJbWFnZURl
Y29kZXIKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7
IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgICAgICAvLyBXaGV0aGVyIG9y
IG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KICAgICAgICAg
dmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwotCi0gICAgICAgIC8vIFRoZSB0b3RhbCBu
dW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEg
Zm9yIHRoZSBhbnN3ZXIKLSAgICAgICAgLy8gKHdpdGhvdXQgbmVjZXNzYXJpbHkgZGVjb2Rpbmcg
YWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCiAgICAgICAgIHZpcnR1YWwgc2l6ZV90IGZy
YW1lQ291bnQoKTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBl
cmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0
aW9uQ291bnQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFy
RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAKLSAgICAgICAgdmly
dHVhbCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJu
IDA7IH0KLQotICAgICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVl
cnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwotCi0gICAgICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5
LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSk7Ci0KICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhl
IEdJRiByZWFkZXIuCiAgICAgICAgIGJvb2wgc2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25l
ZCBieXRlc0xlZnQpOwotICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1l
SW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1
bnNpZ25lZCByb3dOdW1iZXIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOworICAgICAgICBib29s
IGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1
ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIHVuc2lnbmVk
IHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwogICAgICAgICB2b2lk
IGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlv
biwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKICAg
ICAgICAgdm9pZCBnaWZDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gQ2Fs
bGVkIHRvIGluaXRpYWxpemUgdGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiBpbmRleCwg
YmFzZWQgb24gdGhlCi0gICAgICAgIC8vIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0aG9k
LiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gT24gZmFpbHVyZSwKLSAgICAgICAgLy8gdGhpcyB3
aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KKyAgICAgICAgLy8gSWYgdGhlIHF1ZXJ5IGlz
IEdJRkZ1bGxRdWVyeSwgZGVjb2RlcyB0aGUgaW1hZ2UgdXAgdG8gKGJ1dCBub3QKKyAgICAgICAg
Ly8gaW5jbHVkaW5nKSB8aGFsdEF0RnJhbWV8LiAgT3RoZXJ3aXNlLCBkZWNvZGVzIGFzIG11Y2gg
YXMgaXMgbmVlZGVkIHRvCisgICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnksIGlnbm9yaW5nIGJp
dG1hcCBkYXRhLgorICAgICAgICB2b2lkIGRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lG
UXVlcnkpOworCisgICAgICAgIC8vIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBmcmFtZSBidWZm
ZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJhc2VkIG9uCisgICAgICAgIC8vIHRoZSBwcmV2aW91
cyBmcmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9uCisg
ICAgICAgIC8vIGZhaWx1cmUsIHRoaXMgd2lsbCBtYXJrIHRoZSBpbWFnZSBhcyBmYWlsZWQuCiAg
ICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpOwogCi0gICAg
ICAgIGJvb2wgbV9mcmFtZUNvdW50VmFsaWQ7CisgICAgICAgIGJvb2wgbV9hbHJlYWR5U2Nhbm5l
ZFRoaXNEYXRhRm9yRnJhbWVDb3VudDsKICAgICAgICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdB
bHBoYTsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CiAgICAgICAgIE93
blB0cjxHSUZJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lv
biA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ24KICAgICAgIC8qIENoZWNrIGZvciBleHBsaWNp
dCBlbmQtb2Ytc3RyZWFtIGNvZGUgKi8KICAgICAgIGlmIChjb2RlID09IChjbGVhcl9jb2RlICsg
MSkpIHsKICAgICAgICAgLyogZW5kLW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0ZXIg
YWxsIGltYWdlIGRhdGEgKi8KLSAgICAgICAgcmV0dXJuIHJvd3NfcmVtYWluaW5nID09IDA7Cisg
ICAgICAgIHJldHVybiAhcm93c19yZW1haW5pbmc7CiAgICAgICB9CiAKICAgICAgIGlmIChvbGRj
b2RlID09IC0xKSB7CkBAIC00OTQsMTEgKzQ5NCwxMSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpy
ZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgLyogQWxsIEdJRiBmaWxlcyBiZWdpbiB3aXRoICJHSUY4
N2EiIG9yICJHSUY4OWEiICovCiAgICAgY2FzZSBnaWZfdHlwZToKICAgICB7Ci0gICAgICBpZiAo
IXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4OWEiLCA2KSkgeworICAgICAgaWYgKCFzdHJuY21wKChj
aGFyKilxLCAiR0lGODlhIiwgNikpCiAgICAgICAgIHZlcnNpb24gPSA4OTsKLSAgICAgIH0gZWxz
ZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkgeworICAgICAgZWxzZSBpZiAo
IXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkKICAgICAgICAgdmVyc2lvbiA9IDg3Owot
ICAgICAgfSBlbHNlIHsKKyAgICAgIGVsc2UgewogICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsK
ICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC03MTIsOSArNzEyLDEwIEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgICAgLy8gYW5kIGRvZXNuJ3QgZG8g
YW55dGhpbmcsIGFzIG91ciBzdHJlYW1pbmcvYnVmZmVyaW5nIHRha2VzIGNhcmUgb2YgaXQgYWxs
Li4uCiAgICAgICAgIC8vIFNlZTogaHR0cDovL3NlbW1peC5wbC9jb2xvci9leGdyYWYvZWVnMjQu
aHRtCiAgICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7Ci0gICAg
ICB9IGVsc2UKLSAgICAgICAgc3RhdGUgPSBnaWZfZXJyb3I7IC8vIDAsMy03IGFyZSB5ZXQgdG8g
YmUgZGVmaW5lZCBuZXRzY2FwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4
dGVuc2lvbiBjb2RlcworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0
byBiZSBkZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcworICAgICAgICBzdGF0ZSA9IGdp
Zl9lcnJvcjsKKyAgICAgIH0KIAogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtODkzLDggKzg5NCw4
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKIAogICAgICAgICAv
LyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KICAgICAgICAgaWYgKGNsaWVu
dHB0ciAmJiBmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgY2xpZW50cHRyLT5mcmFtZUNvbXBsZXRl
KGltYWdlc19kZWNvZGVkIC0gMSwgZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2Qp
OworICAgICAgICAgIGNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEs
IGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2Qp
OworICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9t
IHRoaXMgaW1hZ2UgKi8KICAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewpAQCAtOTE5LDcgKzky
MCw2IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKIAogICAgIC8v
IEhhbmRsZSBnZW5lcmFsIGVycm9ycwogICAgIGNhc2UgZ2lmX2Vycm9yOgotICAgICAgLy8gbnNH
SUZEZWNvZGVyMjo6RW5kR0lGKGdzLT5jbGllbnRwdHIsIGdzLT5sb29wX2NvdW50KTsKICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5oCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMCArMTk0
LDYgQEAgc3RydWN0IEdJRkltYWdlUmVhZGVyIHsKICAgICB9CiAKICAgICB+R0lGSW1hZ2VSZWFk
ZXIoKSB7Ci0gICAgICAgIGNsb3NlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbG9zZSgpIHsKICAg
ICAgICAgZGVsZXRlIFtdZ2xvYmFsX2NvbG9ybWFwOwogICAgICAgICBnbG9iYWxfY29sb3JtYXAg
PSAwOwogICAgICAgICBkZWxldGUgZnJhbWVfcmVhZGVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShy
ZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lD
T0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDExIEBAIHN0YXRp
YyBjb25zdCBzaXplX3Qgc2l6ZU9mRGlyZWN0b3J5ID0gNjsKIHN0YXRpYyBjb25zdCBzaXplX3Qg
c2l6ZU9mRGlyRW50cnkgPSAxNjsKIAogSUNPSW1hZ2VEZWNvZGVyOjpJQ09JbWFnZURlY29kZXIo
KQotICAgIDogSW1hZ2VEZWNvZGVyKCkKLSAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQot
ICAgICwgbV9kZWNvZGVkT2Zmc2V0KDApCisgICAgOiBtX2RlY29kZWRPZmZzZXQoMCkKK3sKK30K
KworSUNPSW1hZ2VEZWNvZGVyOjp+SUNPSW1hZ2VEZWNvZGVyKCkKIHsKIH0KIApAQCAtNTcsMTAg
KzU5LDggQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogICAgICAg
ICByZXR1cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKLSAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKIAotICAgIGZv
ciAoQk1QUmVhZGVyczo6aXRlcmF0b3IgaShtX2JtcFJlYWRlcnMuYmVnaW4oKSk7Ci0gICAgICAg
ICBpICE9IG1fYm1wUmVhZGVycy5lbmQoKTsgKytpKSB7CisgICAgZm9yIChCTVBSZWFkZXJzOjpp
dGVyYXRvciBpKG1fYm1wUmVhZGVycy5iZWdpbigpKTsgaSAhPSBtX2JtcFJlYWRlcnMuZW5kKCk7
ICsraSkgewogICAgICAgICBpZiAoKmkpCiAgICAgICAgICAgICAoKmkpLT5zZXREYXRhKGRhdGEp
OwogICAgIH0KQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OnNldERhdGEo
U2hhcmVkQnVmZgogYm9vbCBJQ09JbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7CiAg
ICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQotICAgICAgICBkZWNvZGVX
aXRoQ2hlY2tGb3JEYXRhRW5kZWQoMCwgdHJ1ZSk7CisgICAgICAgIGRlY29kZSgwLCB0cnVlKTsK
IAogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQpAQCAtODMs
OCArODMsNyBAQCBJbnRTaXplIElDT0ltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0CiAKIEludFNp
emUgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QK
IHsKLSAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1fZGlyRW50cmllcy5zaXplKCkpKSA/
Ci0gICAgICAgIG1fZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgpOworICAgIHJldHVy
biAoaW5kZXggJiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVz
W2luZGV4XS5tX3NpemUgOiBzaXplKCk7CiB9CiAKIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRT
aXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCkBAIC0xMDEsNyArMTAwLDcgQEAg
Ym9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgdwogCiBzaXplX3QgSUNPSW1h
Z2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKIHsKLSAgICBkZWNvZGVXaXRoQ2hlY2tGb3JEYXRhRW5k
ZWQoMCwgdHJ1ZSk7CisgICAgZGVjb2RlKDAsIHRydWUpOwogICAgIGlmIChtX2ZyYW1lQnVmZmVy
Q2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fZGly
RW50cmllcy5zaXplKCkpOwogICAgIC8vIENBVVRJT046IFdlIG11c3Qgbm90IHJlc2l6ZSBtX2Zy
YW1lQnVmZmVyQ2FjaGUgYWdhaW4gYWZ0ZXIgdGhpcywgYXMKQEAgLTExNyw3ICsxMTYsNyBAQCBS
R0JBMzJCdWZmZXIqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBhbmQgaWYgdGhpcyBpcyBhIEJN
UCwgZGVjb2RlLgotICAgIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChpbmRleCwgZmFsc2Up
OworICAgIGRlY29kZShpbmRleCwgZmFsc2UpOwogCiAgICAgLy8gUE5HcyBkZWNvZGUgaW50byB0
aGVpciBvd24gZnJhbWVidWZmZXJzLCBzbyBvbmx5IHVzZSBvdXIgaW50ZXJuYWwgY2FjaGUKICAg
ICAvLyBmb3Igbm9uLVBOR3MgKEJNUCBvciB1bmtub3duKS4KQEAgLTEzOSwxNyArMTM4LDEyIEBA
IFJHQkEzMkJ1ZmZlciogSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKIH0KIAogLy8gc3RhdGlj
Ci1ib29sIElDT0ltYWdlRGVjb2Rlcjo6Y29tcGFyZUVudHJpZXMoY29uc3QgSWNvbkRpcmVjdG9y
eUVudHJ5JiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElj
b25EaXJlY3RvcnlFbnRyeSYgYikKK2Jvb2wgSUNPSW1hZ2VEZWNvZGVyOjpjb21wYXJlRW50cmll
cyhjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGEsIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYg
YikKIHsKLSAgICAvLyBMYXJnZXIgaWNvbnMgYXJlIGJldHRlci4KKyAgICAvLyBMYXJnZXIgaWNv
bnMgYXJlIGJldHRlci4gIEFmdGVyIHRoYXQsIGhpZ2hlciBiaXQtZGVwdGggaWNvbnMgYXJlIGJl
dHRlci4KICAgICBjb25zdCBpbnQgYUVudHJ5QXJlYSA9IGEubV9zaXplLndpZHRoKCkgKiBhLm1f
c2l6ZS5oZWlnaHQoKTsKICAgICBjb25zdCBpbnQgYkVudHJ5QXJlYSA9IGIubV9zaXplLndpZHRo
KCkgKiBiLm1fc2l6ZS5oZWlnaHQoKTsKLSAgICBpZiAoYUVudHJ5QXJlYSAhPSBiRW50cnlBcmVh
KQotICAgICAgICByZXR1cm4gKGFFbnRyeUFyZWEgPiBiRW50cnlBcmVhKTsKLQotICAgIC8vIEhp
Z2hlciBiaXQtZGVwdGggaWNvbnMgYXJlIGJldHRlci4KLSAgICByZXR1cm4gKGEubV9iaXRDb3Vu
dCA+IGIubV9iaXRDb3VudCk7CisgICAgcmV0dXJuIChhRW50cnlBcmVhID09IGJFbnRyeUFyZWEp
ID8gKGEubV9iaXRDb3VudCA+IGIubV9iaXRDb3VudCkgOiAoYUVudHJ5QXJlYSA+IGJFbnRyeUFy
ZWEpOwogfQogCiB2b2lkIElDT0ltYWdlRGVjb2Rlcjo6c2V0RGF0YUZvclBOR0RlY29kZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKQEAgLTE2MSwyMSArMTU1LDE4IEBAIHZvaWQgSUNPSW1hZ2VEZWNv
ZGVyOjpzZXREYXRhRm9yUE5HRGVjb2QKICAgICAvLyBDb3B5IG91dCBQTkcgZGF0YSB0byBhIHNl
cGFyYXRlIHZlY3RvciBhbmQgc2VuZCB0byB0aGUgUE5HIGRlY29kZXIuCiAgICAgLy8gRklYTUU6
IFNhdmUgdGhpcyBjb3B5IGJ5IG1ha2luZyB0aGUgUE5HIGRlY29kZXIgYWJsZSB0byB0YWtlIGFu
CiAgICAgLy8gb3B0aW9uYWwgb2Zmc2V0LgotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHBuZ0Rh
dGEoCi0gICAgICAgIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCZtX2RhdGEtPmRhdGEoKVtkaXJFbnRy
eS5tX2ltYWdlT2Zmc2V0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT5z
aXplKCkgLSBkaXJFbnRyeS5tX2ltYWdlT2Zmc2V0KSk7Ci0gICAgbV9wbmdEZWNvZGVyc1tpbmRl
eF0tPnNldERhdGEocG5nRGF0YS5nZXQoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHBuZ0RhdGEoU2hhcmVkQnVmZmVyOjpjcmVhdGUoJm1fZGF0YS0+ZGF0
YSgpW2RpckVudHJ5Lm1faW1hZ2VPZmZzZXRdLCBtX2RhdGEtPnNpemUoKSAtIGRpckVudHJ5Lm1f
aW1hZ2VPZmZzZXQpKTsKKyAgICBtX3BuZ0RlY29kZXJzW2luZGV4XS0+c2V0RGF0YShwbmdEYXRh
LmdldCgpLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKIH0KIAotdm9pZCBJQ09JbWFnZURlY29kZXI6
OmRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChzaXplX3QgaW5kZXgsIGJvb2wgb25seVNpemUp
Cit2b2lkIElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKHNpemVfdCBpbmRleCwgYm9vbCBvbmx5U2l6
ZSkKIHsKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdl
IGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0
YSwgZGVjb2RpbmcKICAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlmICgoIWRlY29kZURpcmVjdG9y
eSgpIHx8ICghb25seVNpemUgJiYgIWRlY29kZUF0SW5kZXgoaW5kZXgpKSkKLSAgICAgICAgJiYg
bV9hbGxEYXRhUmVjZWl2ZWQpCisgICAgaWYgKCghZGVjb2RlRGlyZWN0b3J5KCkgfHwgKCFvbmx5
U2l6ZSAmJiAhZGVjb2RlQXRJbmRleChpbmRleCkpKSAmJiBpc0FsbERhdGFSZWNlaXZlZCgpKQog
ICAgICAgICBzZXRGYWlsZWQoKTsKIH0KIApAQCAtMTg2LDkgKzE3Nyw3IEBAIGJvb2wgSUNPSW1h
Z2VEZWNvZGVyOjpkZWNvZGVEaXJlY3RvcnkoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBSZWFkIGFuZCBwcm9jZXNzIGRpcmVjdG9yeSBlbnRyaWVzLgotICAgIHJldHVybiAobV9k
ZWNvZGVkT2Zmc2V0ID49Ci0gICAgICAgICAgICAoc2l6ZU9mRGlyZWN0b3J5ICsgKG1fZGlyRW50
cmllcy5zaXplKCkgKiBzaXplT2ZEaXJFbnRyeSkpKQotICAgICAgICB8fCBwcm9jZXNzRGlyZWN0
b3J5RW50cmllcygpOworICAgIHJldHVybiAobV9kZWNvZGVkT2Zmc2V0ID49IChzaXplT2ZEaXJl
Y3RvcnkgKyAobV9kaXJFbnRyaWVzLnNpemUoKSAqIHNpemVPZkRpckVudHJ5KSkpIHx8IHByb2Nl
c3NEaXJlY3RvcnlFbnRyaWVzKCk7CiB9CiAKIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVB
dEluZGV4KHNpemVfdCBpbmRleCkKQEAgLTIwMiw4ICsxOTEsNyBAQCBib29sIElDT0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlQXRJbmRleChzaXplCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUg
YWxyZWFkeSBzaXplZCBtX2ZyYW1lQnVmZmVyQ2FjaGUgYmVmb3JlIHRoaXMsIGFuZAogICAgICAg
ICAgICAgLy8gd2UgbXVzdCBub3QgcmVzaXplIGl0IGFnYWluIGxhdGVyIChzZWUgY2F1dGlvbiBp
biBmcmFtZUNvdW50KCkpLgogICAgICAgICAgICAgQVNTRVJUKG1fZnJhbWVCdWZmZXJDYWNoZS5z
aXplKCkgPT0gbV9kaXJFbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBtX2JtcFJlYWRlcnNb
aW5kZXhdLnNldCgKLSAgICAgICAgICAgICAgICBuZXcgQk1QSW1hZ2VSZWFkZXIodGhpcywgZGly
RW50cnkubV9pbWFnZU9mZnNldCwgMCwgdHJ1ZSkpOworICAgICAgICAgICAgbV9ibXBSZWFkZXJz
W2luZGV4XS5zZXQobmV3IEJNUEltYWdlUmVhZGVyKHRoaXMsIGRpckVudHJ5Lm1faW1hZ2VPZmZz
ZXQsIDAsIHRydWUpKTsKICAgICAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRleF0tPnNldERhdGEo
bV9kYXRhLmdldCgpKTsKICAgICAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRleF0tPnNldEJ1ZmZl
cigmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VU
eXBlID09IFBORykgewpAQCAtMjU5LDE4ICsyNDcsMTQgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6
OnByb2Nlc3NEaXJlY3RvcnlFbgogewogICAgIC8vIFJlYWQgZGlyZWN0b3J5IGVudHJpZXMuCiAg
ICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBzaXplT2ZEaXJlY3RvcnkpOwotICAgIGlmICgo
bV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpCi0gICAgICAgIHx8ICgobV9kYXRhLT5z
aXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwKLSAgICAgICAgICAgIChtX2RpckVudHJpZXMuc2l6
ZSgpICogc2l6ZU9mRGlyRW50cnkpKSkKKyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA+IG1fZGF0
YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IChtX2Rp
ckVudHJpZXMuc2l6ZSgpICogc2l6ZU9mRGlyRW50cnkpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGZvciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVz
LmJlZ2luKCkpOwotICAgICAgICAgaSAhPSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkKKyAgICBm
b3IgKEljb25EaXJlY3RvcnlFbnRyaWVzOjppdGVyYXRvciBpKG1fZGlyRW50cmllcy5iZWdpbigp
KTsgaSAhPSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkKICAgICAgICAgKmkgPSByZWFkRGlyZWN0
b3J5RW50cnkoKTsgIC8vIFVwZGF0ZXMgbV9kZWNvZGVkT2Zmc2V0LgogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugb2Zmc2V0cyBhcmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBk
aXJlY3RvcnkKICAgICAvLyBlbnRyaWVzLgotICAgIGZvciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6
Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOwotICAgICAgICAgaSAhPSBtX2RpckVu
dHJpZXMuZW5kKCk7ICsraSkgeworICAgIGZvciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6Oml0ZXJh
dG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOyBpICE9IG1fZGlyRW50cmllcy5lbmQoKTsgKytp
KSB7CiAgICAgICAgIGlmIChpLT5tX2ltYWdlT2Zmc2V0IDwgbV9kZWNvZGVkT2Zmc2V0KSB7CiAg
ICAgICAgICAgICBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMw
OSw4ICsyOTMsNyBAQCBJQ09JbWFnZURlY29kZXI6Okljb25EaXJlY3RvcnlFbnRyeSBJQ09JCiAg
ICAgLy8gdGhpcyBpc24ndCBxdWl0ZSB3aGF0IHRoZSBiaXRtYXAgaW5mbyBoZWFkZXIgc2F5cyBs
YXRlciwgYXMgd2Ugb25seSB1c2UKICAgICAvLyB0aGlzIHZhbHVlIHRvIGRldGVybWluZSB3aGlj
aCBpY29uIGVudHJ5IGlzIGJlc3QuCiAgICAgaWYgKCFlbnRyeS5tX2JpdENvdW50KSB7Ci0gICAg
ICAgIGludCBjb2xvckNvdW50ID0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1f
ZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDJdKTsKKyAgICAgICAgaW50IGNvbG9yQ291
bnQgPSBzdGF0aWNfY2FzdDx1aW50OF90PihtX2RhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQg
KyAyXSk7CiAgICAgICAgIGlmICghY29sb3JDb3VudCkKICAgICAgICAgICAgIGNvbG9yQ291bnQg
PSAyNTY7ICAvLyBWYWd1ZSBpbiB0aGUgc3BlYywgbmVlZGVkIGJ5IHJlYWwtd29ybGQgaWNvbnMu
CiAgICAgICAgIGZvciAoLS1jb2xvckNvdW50OyBjb2xvckNvdW50OyBjb2xvckNvdW50ID4+PSAx
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDU0NzI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIElDT0ltYWdlRGVjb2Rl
ciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgSUNPSW1hZ2VE
ZWNvZGVyKCk7CisgICAgICAgIHZpcnR1YWwgfklDT0ltYWdlRGVjb2RlcigpOwogCiAgICAgICAg
IC8vIEltYWdlRGVjb2RlcgogICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuICJpY28iOyB9CkBAIC02NywxOSArNjgsMTYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB8YXwgaXMgYSBwcmVmZXJh
YmxlIGljb24gZW50cnkgdG8gfGJ8LgogICAgICAgICAvLyBMYXJnZXIgc2l6ZXMsIG9yIGdyZWF0
ZXIgYml0ZGVwdGhzIGF0IHRoZSBzYW1lIHNpemUsIGFyZSBwcmVmZXJhYmxlLgotICAgICAgICBz
dGF0aWMgYm9vbCBjb21wYXJlRW50cmllcyhjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRy
eSYgYik7CisgICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmVFbnRyaWVzKGNvbnN0IEljb25EaXJl
Y3RvcnlFbnRyeSYgYSwgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBiKTsKIAogICAgICAgICBp
bmxpbmUgdWludDE2X3QgcmVhZFVpbnQxNihpbnQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gQk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MTYobV9kYXRhLmdldCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVjb2Rl
ZE9mZnNldCArIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gQk1QSW1hZ2VSZWFkZXI6OnJl
YWRVaW50MTYobV9kYXRhLmdldCgpLCBtX2RlY29kZWRPZmZzZXQgKyBvZmZzZXQpOwogICAgICAg
ICB9CiAKICAgICAgICAgaW5saW5lIHVpbnQzMl90IHJlYWRVaW50MzIoaW50IG9mZnNldCkgY29u
c3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJNUEltYWdlUmVhZGVyOjpyZWFkVWlu
dDMyKG1fZGF0YS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RlY29kZWRPZmZzZXQgKyBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIEJN
UEltYWdlUmVhZGVyOjpyZWFkVWludDMyKG1fZGF0YS5nZXQoKSwgbV9kZWNvZGVkT2Zmc2V0ICsg
b2Zmc2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZSBkZXNpcmVkIFBOR0ltYWdl
RGVjb2RlciBleGlzdHMsIGdpdmVzIGl0IHRoZSBhcHByb3ByaWF0ZSBkYXRhLgpAQCAtOTMsNyAr
OTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGRlY29kaW5nLCBpdCBtZXJl
bHkgZW5zdXJlcyB0aGUgZGVjb2RlciBpcyBjcmVhdGVkIGFuZCByZWFkeSB0bwogICAgICAgICAv
LyBkZWNvZGUuICBUaGUgY2FsbGVyIHdpbGwgdGhlbiBjYWxsIGEgZnVuY3Rpb24gb24gdGhlIFBO
R0ltYWdlRGVjb2RlcgogICAgICAgICAvLyB0aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGRlY29kaW5n
LgotICAgICAgICB2b2lkIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChzaXplX3QgaW5kZXgs
IGJvb2wgb25seVNpemUpOworICAgICAgICB2b2lkIGRlY29kZShzaXplX3QgaW5kZXgsIGJvb2wg
b25seVNpemUpOwogCiAgICAgICAgIC8vIERlY29kZXMgdGhlIGRpcmVjdG9yeSBhbmQgZGlyZWN0
b3J5IGVudHJpZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgICAgICAgLy8gZGF0YSwgYW5k
IGluaXRpYWxpemVzIG1lbWJlcnMuICBSZXR1cm5zIHRydWUgaWYgYWxsIGRlY29kaW5nCkBAIC0x
MjAsOSArMTE4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBpZiB0aGUgdHlw
ZSBjb3VsZCBiZSBkZXRlcm1pbmVkLgogICAgICAgICBJbWFnZVR5cGUgaW1hZ2VUeXBlQXRJbmRl
eChzaXplX3QpOwogCi0gICAgICAgIC8vIFRydWUgaWYgd2UndmUgc2VlbiBhbGwgdGhlIGRhdGEu
Ci0gICAgICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0KICAgICAgICAgLy8gQW4gaW5kZXgg
aW50byB8bV9kYXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxyZWFkeSBkZWNvZGVk
LgogICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHRyYWNrcyBkYXRhIF90aGlzXyBjbGFz
cyBkZWNvZGVzOyBvbmNlIHRoZQogICAgICAgICAvLyBCTVBJbWFnZVJlYWRlciB0YWtlcyBvdmVy
IHRoaXMgd2lsbCBub3QgYmUgdXBkYXRlZCBmdXJ0aGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cAkocmV2aXNpb24gNTQ3MjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE4ICs1OSwxNyBA
QCBleHRlcm4gIkMiIHsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IGRlY29kZXJfZXJy
b3JfbWdyIHsKLSAgICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgcHViOyAgLyogInB1YmxpYyIgZmll
bGRzIGZvciBJSkcgbGlicmFyeSovCi0gICAgam1wX2J1ZiBzZXRqbXBfYnVmZmVyOyAgICAgIC8q
IEZvciBoYW5kbGluZyBjYXRhc3Ryb3BpYyBlcnJvcnMgKi8KKyAgICBzdHJ1Y3QganBlZ19lcnJv
cl9tZ3IgcHViOyAgLy8gInB1YmxpYyIgZmllbGRzIGZvciBJSkcgbGlicmFyeQorICAgIGptcF9i
dWYgc2V0am1wX2J1ZmZlcjsgICAgICAvLyBGb3IgaGFuZGxpbmcgY2F0YXN0cm9waWMgZXJyb3Jz
CiB9OwogCiBlbnVtIGpzdGF0ZSB7Ci0gICAgSlBFR19IRUFERVIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBSZWFkaW5nIEpGSUYgaGVhZGVycyAqLworICAgIEpQRUdfSEVBREVSLCAgICAg
ICAgICAgICAgICAgIC8vIFJlYWRpbmcgSkZJRiBoZWFkZXJzCiAgICAgSlBFR19TVEFSVF9ERUNP
TVBSRVNTLAotICAgIEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lWRSwgICAgICAgICAgLyogT3V0
cHV0IHByb2dyZXNzaXZlIHBpeGVscyAqLwotICAgIEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFM
LCAgICAgICAgICAgLyogT3V0cHV0IHNlcXVlbnRpYWwgcGl4ZWxzICovCisgICAgSlBFR19ERUNP
TVBSRVNTX1BST0dSRVNTSVZFLCAgLy8gT3V0cHV0IHByb2dyZXNzaXZlIHBpeGVscworICAgIEpQ
RUdfREVDT01QUkVTU19TRVFVRU5USUFMLCAgIC8vIE91dHB1dCBzZXF1ZW50aWFsIHBpeGVscwog
ICAgIEpQRUdfRE9ORSwKLSAgICBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUiwgICAgICAgICAg
LyogU29tZSBpbWFnZSBmaWxlcyBoYXZlIGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogbm9uLUpQRUcgdHJhaWxlciAqLworICAgIEpQRUdfU0lOS19OT05f
SlBFR19UUkFJTEVSLCAgIC8vIFNvbWUgaW1hZ2UgZmlsZXMgaGF2ZSBhIG5vbi1KUEVHIHRyYWls
ZXIKICAgICBKUEVHX0VSUk9SICAgIAogfTsKIApAQCAtODAsMTEgKzc5LDkgQEAgdm9pZCBza2lw
X2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZAogdm9pZCB0ZXJtX3NvdXJjZShqX2RlY29t
cHJlc3NfcHRyIGpkKTsKIHZvaWQgZXJyb3JfZXhpdChqX2NvbW1vbl9wdHIgY2luZm8pOwogCi0v
KgotICogIEltcGxlbWVudGF0aW9uIG9mIGEgSlBFRyBzcmMgb2JqZWN0IHRoYXQgdW5kZXJzdGFu
ZHMgb3VyIHN0YXRlIG1hY2hpbmUKLSAqLworLy8gSW1wbGVtZW50YXRpb24gb2YgYSBKUEVHIHNy
YyBvYmplY3QgdGhhdCB1bmRlcnN0YW5kcyBvdXIgc3RhdGUgbWFjaGluZQogc3RydWN0IGRlY29k
ZXJfc291cmNlX21nciB7Ci0gIC8qIHB1YmxpYyBmaWVsZHM7IG11c3QgYmUgZmlyc3QgaW4gdGhp
cyBzdHJ1Y3QhICovCisgIC8vIHB1YmxpYyBmaWVsZHM7IG11c3QgYmUgZmlyc3QgaW4gdGhpcyBz
dHJ1Y3QhCiAgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgcHViOwogCiAgIEpQRUdJbWFnZVJlYWRl
ciAqZGVjb2RlcjsKQEAgLTEwMiwxMSArOTksMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bWVtc2V0KCZtX2luZm8sIDAsIHNpemVvZihqcGVnX2RlY29tcHJlc3Nfc3RydWN0KSk7CiAgCi0g
ICAgICAgIC8qIFdlIHNldCB1cCB0aGUgbm9ybWFsIEpQRUcgZXJyb3Igcm91dGluZXMsIHRoZW4g
b3ZlcnJpZGUgZXJyb3JfZXhpdC4gKi8KKyAgICAgICAgLy8gV2Ugc2V0IHVwIHRoZSBub3JtYWwg
SlBFRyBlcnJvciByb3V0aW5lcywgdGhlbiBvdmVycmlkZSBlcnJvcl9leGl0LgogICAgICAgICBt
X2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJm1fZXJyLnB1Yik7CiAgICAgICAgIG1fZXJyLnB1
Yi5lcnJvcl9leGl0ID0gZXJyb3JfZXhpdDsKIAotICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgaW5p
dGlhbGl6ZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0ICovCisgICAgICAgIC8vIEFsbG9jYXRl
IGFuZCBpbml0aWFsaXplIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QuCiAgICAgICAgIGpwZWdf
Y3JlYXRlX2RlY29tcHJlc3MoJm1faW5mbyk7CiAgIAogICAgICAgICBkZWNvZGVyX3NvdXJjZV9t
Z3IqIHNyYyA9IDA7CkBAIC0xMjAsNyArMTE3LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1faW5m
by5zcmMgPSAoanBlZ19zb3VyY2VfbWdyKilzcmM7CiAKLSAgICAgICAgLyogU2V0IHVwIGNhbGxi
YWNrIGZ1bmN0aW9ucy4gKi8KKyAgICAgICAgLy8gU2V0IHVwIGNhbGxiYWNrIGZ1bmN0aW9ucy4K
ICAgICAgICAgc3JjLT5wdWIuaW5pdF9zb3VyY2UgPSBpbml0X3NvdXJjZTsKICAgICAgICAgc3Jj
LT5wdWIuZmlsbF9pbnB1dF9idWZmZXIgPSBmaWxsX2lucHV0X2J1ZmZlcjsKICAgICAgICAgc3Jj
LT5wdWIuc2tpcF9pbnB1dF9kYXRhID0gc2tpcF9pbnB1dF9kYXRhOwpAQCAtMTQ4LDIyICsxNDUs
MTkgQEAgcHVibGljOgogICAgICAgICBsb25nIGJ5dGVzVG9Ta2lwID0gc3RkOjptaW4obnVtX2J5
dGVzLCAobG9uZylzcmMtPnB1Yi5ieXRlc19pbl9idWZmZXIpOwogICAgICAgICBzcmMtPnB1Yi5i
eXRlc19pbl9idWZmZXIgLT0gKHNpemVfdClieXRlc1RvU2tpcDsKICAgICAgICAgc3JjLT5wdWIu
bmV4dF9pbnB1dF9ieXRlICs9IGJ5dGVzVG9Ta2lwOwotICAgIAotICAgICAgICBpZiAobnVtX2J5
dGVzID4gYnl0ZXNUb1NraXApCi0gICAgICAgICAgICBtX2J5dGVzVG9Ta2lwID0gKHNpemVfdCko
bnVtX2J5dGVzIC0gYnl0ZXNUb1NraXApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2J5
dGVzVG9Ta2lwID0gMDsKKworICAgICAgICBtX2J5dGVzVG9Ta2lwID0gc3RkOjptYXgobnVtX2J5
dGVzIC0gYnl0ZXNUb1NraXAsIHN0YXRpY19jYXN0PGxvbmc+KDApKTsKICAgICB9CiAKLSAgICBi
b29sIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgc2l6ZU9ubHkpIHsKLSAg
ICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7Ci0gICAgICAgIAorICAgIGJvb2wg
ZGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBvbmx5U2l6ZSkgeworICAgICAg
ICBtX2RlY29kaW5nU2l6ZU9ubHkgPSBvbmx5U2l6ZTsKKwogICAgICAgICB1bnNpZ25lZCBuZXdC
eXRlQ291bnQgPSBkYXRhLnNpemUoKSAtIG1fYnVmZmVyTGVuZ3RoOwogICAgICAgICB1bnNpZ25l
ZCByZWFkT2Zmc2V0ID0gbV9idWZmZXJMZW5ndGggLSBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZm
ZXI7CiAKICAgICAgICAgbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyICs9IG5ld0J5dGVDb3Vu
dDsKICAgICAgICAgbV9pbmZvLnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gKEpPQ1RFVCopKGRhdGEu
ZGF0YSgpKSArIHJlYWRPZmZzZXQ7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHdlIHN0aWxs
IGhhdmUgYnl0ZXMgdG8gc2tpcCwgdHJ5IHRvIHNraXAgdGhvc2Ugbm93LgogICAgICAgICBpZiAo
bV9ieXRlc1RvU2tpcCkKICAgICAgICAgICAgIHNraXBCeXRlcyhtX2J5dGVzVG9Ta2lwKTsKQEAg
LTE3OCwxNzIgKzE3MiwxNTAgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNo
IChtX3N0YXRlKSB7Ci0gICAgICAgICAgICBjYXNlIEpQRUdfSEVBREVSOgotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8qIFJlYWQgZmlsZSBwYXJhbWV0ZXJzIHdpdGgganBlZ19yZWFk
X2hlYWRlcigpICovCi0gICAgICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9oZWFkZXIoJm1faW5m
bywgdHJ1ZSkgPT0gSlBFR19TVVNQRU5ERUQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwotCi0gICAgICAgICAgICAgICAgLyogbGV0IGxpYmpw
ZWcgdGFrZSBjYXJlIG9mIGdyYXktPlJHQiBhbmQgWUNiQ3ItPlJHQiBjb252ZXJzaW9ucyAqLwot
ICAgICAgICAgICAgICAgIHN3aXRjaCAobV9pbmZvLmpwZWdfY29sb3Jfc3BhY2UpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBKQ1NfR1JBWVNDQUxFOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIEpDU19SR0I6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkNTX1lDYkNyOgotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19SR0I7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQ1Nf
Q01ZSzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQ1NfWUNDSzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGpwZWdsaWIgY2Fubm90IGNvbnZlcnQgdGhlc2UgdG8gcmdiLCBidXQgaXQg
Y2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHljY2sgdG8gY215awotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19DTVlLOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgSlBFR19IRUFERVI6CisgICAgICAgICAgICAvLyBSZWFkIGZpbGUgcGFyYW1ldGVy
cyB3aXRoIGpwZWdfcmVhZF9oZWFkZXIoKS4KKyAgICAgICAgICAgIGlmIChqcGVnX3JlYWRfaGVh
ZGVyKCZtX2luZm8sIHRydWUpID09IEpQRUdfU1VTUEVOREVEKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOyAgLy8gSS9PIHN1c3BlbnNpb24uCisKKyAgICAgICAgICAgIC8vIExldCBsaWJq
cGVnIHRha2UgY2FyZSBvZiBncmF5LT5SR0IgYW5kIFlDYkNyLT5SR0IgY29udmVyc2lvbnMuCisg
ICAgICAgICAgICBzd2l0Y2ggKG1faW5mby5qcGVnX2NvbG9yX3NwYWNlKSB7CisgICAgICAgICAg
ICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgICAgICAgICBjYXNlIEpDU19SR0I6CisgICAgICAg
ICAgICBjYXNlIEpDU19ZQ2JDcjoKKyAgICAgICAgICAgICAgICBtX2luZm8ub3V0X2NvbG9yX3Nw
YWNlID0gSkNTX1JHQjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SkNTX0NNWUs6CisgICAgICAgICAgICBjYXNlIEpDU19ZQ0NLOgorICAgICAgICAgICAgICAgIC8v
IGpwZWdsaWIgY2Fubm90IGNvbnZlcnQgdGhlc2UgdG8gcmdiLCBidXQgaXQgY2FuIGNvbnZlcnQg
eWNjaworICAgICAgICAgICAgICAgIC8vIHRvIGNteWsuCisgICAgICAgICAgICAgICAgbV9pbmZv
Lm91dF9jb2xvcl9zcGFjZSA9IEpDU19DTVlLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIERvbid0IGFsbG9jYXRlIGEgZ2lhbnQgYW5k
IHN1cGVyZmx1b3VzIG1lbW9yeSBidWZmZXIKLSAgICAgICAgICAgICAgICAgKiB3aGVuIHRoZSBp
bWFnZSBpcyBhIHNlcXVlbnRpYWwgSlBFRy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgICAgICBtX2luZm8uYnVmZmVyZWRfaW1hZ2UgPSBqcGVnX2hhc19tdWx0aXBsZV9zY2Fucygm
bV9pbmZvKTsKLQotICAgICAgICAgICAgICAgIC8qIFVzZWQgdG8gc2V0IHVwIGltYWdlIHNpemUg
c28gYXJyYXlzIGNhbiBiZSBhbGxvY2F0ZWQgKi8KLSAgICAgICAgICAgICAgICBqcGVnX2NhbGNf
b3V0cHV0X2RpbWVuc2lvbnMoJm1faW5mbyk7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAg
ICAgICAgICAgICAqIE1ha2UgYSBvbmUtcm93LWhpZ2ggc2FtcGxlIGFycmF5IHRoYXQgd2lsbCBn
byBhd2F5Ci0gICAgICAgICAgICAgICAgICogd2hlbiBkb25lIHdpdGggaW1hZ2UuIEFsd2F5cyBt
YWtlIGl0IGJpZyBlbm91Z2ggdG8KLSAgICAgICAgICAgICAgICAgKiBob2xkIGFuIFJHQiByb3cu
ICBTaW5jZSB0aGlzIHVzZXMgdGhlIElKRyBtZW1vcnkKLSAgICAgICAgICAgICAgICAgKiBtYW5h
Z2VyLCBpdCBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgdGhlIGNhbGwgdG8KLSAgICAgICAgICAg
ICAgICAgKiBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuCi0gICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgaW50IHJvd19zdHJpZGUgPSBtX2luZm8ub3V0cHV0X3dpZHRoICogNDsgLy8g
UkdCQSBidWZmZXIKLQotCi0gICAgICAgICAgICAgICAgbV9zYW1wbGVzID0gKCptX2luZm8ubWVt
LT5hbGxvY19zYXJyYXkpKChqX2NvbW1vbl9wdHIpICZtX2luZm8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlBPT0xfSU1BR0UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X3N0cmlkZSwgMSk7Ci0KLSAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gSlBFR19TVEFSVF9ERUNPTVBSRVNTOwotCi0gICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIGZpbGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFi
bGUuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdl
X3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gSlBFR19FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIERvbid0IGFsbG9jYXRlIGEgZ2lhbnQgYW5k
IHN1cGVyZmx1b3VzIG1lbW9yeSBidWZmZXIgd2hlbiB0aGUKKyAgICAgICAgICAgIC8vIGltYWdl
IGlzIGEgc2VxdWVudGlhbCBKUEVHLgorICAgICAgICAgICAgbV9pbmZvLmJ1ZmZlcmVkX2ltYWdl
ID0ganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMoJm1faW5mbyk7CisKKyAgICAgICAgICAgIC8vIFVz
ZWQgdG8gc2V0IHVwIGltYWdlIHNpemUgc28gYXJyYXlzIGNhbiBiZSBhbGxvY2F0ZWQuCisgICAg
ICAgICAgICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMoJm1faW5mbyk7CisKKyAgICAgICAg
ICAgIC8vIE1ha2UgYSBvbmUtcm93LWhpZ2ggc2FtcGxlIGFycmF5IHRoYXQgd2lsbCBnbyBhd2F5
IHdoZW4gZG9uZSB3aXRoCisgICAgICAgICAgICAvLyBpbWFnZS4gQWx3YXlzIG1ha2UgaXQgYmln
IGVub3VnaCB0byBob2xkIGFuIFJHQiByb3cuICBTaW5jZSB0aGlzCisgICAgICAgICAgICAvLyB1
c2VzIHRoZSBJSkcgbWVtb3J5IG1hbmFnZXIsIGl0IG11c3QgYmUgYWxsb2NhdGVkIGJlZm9yZSB0
aGUgY2FsbAorICAgICAgICAgICAgLy8gdG8ganBlZ19zdGFydF9jb21wcmVzcygpLgorICAgICAg
ICAgICAgbV9zYW1wbGVzID0gKCptX2luZm8ubWVtLT5hbGxvY19zYXJyYXkpKChqX2NvbW1vbl9w
dHIpICZtX2luZm8sIEpQT09MX0lNQUdFLCBtX2luZm8ub3V0cHV0X3dpZHRoICogNCwgMSk7CiAK
LSAgICAgICAgICAgICAgICBpZiAobV9kZWNvZGluZ1NpemVPbmx5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGNhbiBzdG9wIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlZHVj
ZSBvdXIgYnVmZmVyIGxlbmd0aCBhbmQgYXZhaWxhYmxlIGRhdGEuCi0gICAgICAgICAgICAgICAg
ICAgIG1fYnVmZmVyTGVuZ3RoIC09IG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAotICAgICAg
ICAgICAgY2FzZSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M6Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLyogU2V0IHBhcmFtZXRlcnMgZm9yIGRlY29tcHJlc3Npb24gKi8KLSAgICAgICAg
ICAgICAgICAvKiBGSVhNRSAtLSBTaG91bGQgcmVzZXQgZGN0X21ldGhvZCBhbmQgZGl0aGVyIG1v
ZGUKLSAgICAgICAgICAgICAgICAgKiBmb3IgZmluYWwgcGFzcyBvZiBwcm9ncmVzc2l2ZSBKUEVH
Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbV9pbmZvLmRjdF9tZXRob2Qg
PSAgSkRDVF9JU0xPVzsKLSAgICAgICAgICAgICAgICBtX2luZm8uZGl0aGVyX21vZGUgPSBKRElU
SEVSX0ZTOwotICAgICAgICAgICAgICAgIG1faW5mby5kb19mYW5jeV91cHNhbXBsaW5nID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBtX2luZm8uZW5hYmxlXzJwYXNzX3F1YW50ID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgbV9pbmZvLmRvX2Jsb2NrX3Ntb290aGluZyA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICAvKiBTdGFydCBkZWNvbXByZXNzb3IgKi8KLSAgICAgICAgICAgICAgICBpZiAo
IWpwZWdfc3RhcnRfZGVjb21wcmVzcygmbV9pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCisgICAgICAgICAgICAvLyBXZSBjYW4gZmls
bCBpbiB0aGUgc2l6ZSBub3cgdGhhdCB0aGUgaGVhZGVyIGlzIGF2YWlsYWJsZS4KKyAgICAgICAg
ICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmlt
YWdlX2hlaWdodCkpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAvKiBJZiB0aGlzIGlzIGEgcHJvZ3Jlc3NpdmUgSlBFRyAuLi4gKi8KLSAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gKG1faW5mby5idWZmZXJlZF9pbWFnZSkgPyBKUEVHX0RFQ09NUFJFU1Nf
UFJPR1JFU1NJVkUgOiBKUEVHX0RFQ09NUFJFU1NfU0VRVUVOVElBTDsKKyAgICAgICAgICAgIGlm
IChtX2RlY29kaW5nU2l6ZU9ubHkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4gc3RvcCBo
ZXJlLiAgUmVkdWNlIG91ciBidWZmZXIgbGVuZ3RoIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAg
ICAgICAvLyBkYXRhLgorICAgICAgICAgICAgICAgIG1fYnVmZmVyTGVuZ3RoIC09IG1faW5mby5z
cmMtPmJ5dGVzX2luX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICBtX2luZm8uc3JjLT5ieXRlc19p
bl9idWZmZXIgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQotICAgIAotICAgICAgICAgICAgY2FzZSBKUEVHX0RFQ09NUFJFU1NfU0VRVUVOVElBTDoKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBKUEVHX0RFQ09NUFJF
U1NfU0VRVUVOVElBTCkgewotICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghbV9kZWNv
ZGVyLT5vdXRwdXRTY2FubGluZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwotICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8q
IElmIHdlJ3ZlIGNvbXBsZXRlZCBpbWFnZSBvdXRwdXQgLi4uICovCi0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IG1faW5mby5vdXRwdXRfaGVpZ2h0
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRE9ORTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgIC8vIEZBTEwgVEhST1VHSAorCisgICAgICAgIGNhc2UgSlBFR19TVEFS
VF9ERUNPTVBSRVNTOgorICAgICAgICAgICAgLy8gU2V0IHBhcmFtZXRlcnMgZm9yIGRlY29tcHJl
c3Npb24uCisgICAgICAgICAgICAvLyBGSVhNRSAtLSBTaG91bGQgcmVzZXQgZGN0X21ldGhvZCBh
bmQgZGl0aGVyIG1vZGUgZm9yIGZpbmFsIHBhc3MKKyAgICAgICAgICAgIC8vIG9mIHByb2dyZXNz
aXZlIEpQRUcuCisgICAgICAgICAgICBtX2luZm8uZGN0X21ldGhvZCA9ICBKRENUX0lTTE9XOwor
ICAgICAgICAgICAgbV9pbmZvLmRpdGhlcl9tb2RlID0gSkRJVEhFUl9GUzsKKyAgICAgICAgICAg
IG1faW5mby5kb19mYW5jeV91cHNhbXBsaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faW5mby5l
bmFibGVfMnBhc3NfcXVhbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faW5mby5kb19ibG9ja19z
bW9vdGhpbmcgPSB0cnVlOworCisgICAgICAgICAgICAvLyBTdGFydCBkZWNvbXByZXNzb3IuCisg
ICAgICAgICAgICBpZiAoIWpwZWdfc3RhcnRfZGVjb21wcmVzcygmbV9pbmZvKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgIC8vIEkvTyBzdXNwZW5zaW9uLgorCisgICAgICAgICAgICAv
LyBJZiB0aGlzIGlzIGEgcHJvZ3Jlc3NpdmUgSlBFRyAuLi4KKyAgICAgICAgICAgIG1fc3RhdGUg
PSAobV9pbmZvLmJ1ZmZlcmVkX2ltYWdlKSA/IEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lWRSA6
IEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMOworICAgICAgICAvLyBGQUxMIFRIUk9VR0gKKwor
ICAgICAgICBjYXNlIEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMOgorICAgICAgICAgICAgaWYg
KG1fc3RhdGUgPT0gSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUwpIHsKKyAgCisgICAgICAgICAg
ICAgICAgaWYgKCFtX2RlY29kZXItPm91dHB1dFNjYW5saW5lcygpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsgIC8vIEkvTyBzdXNwZW5zaW9uLgorICAKKyAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSd2ZSBjb21wbGV0ZWQgaW1hZ2Ugb3V0cHV0Li4uCisgICAgICAgICAgICAgICAg
QVNTRVJUKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQpOwor
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX0RPTkU7CiAgICAgICAgICAgICB9CisgICAg
ICAgIC8vIEZBTEwgVEhST1VHSAogCi0gICAgICAgICAgICBjYXNlIEpQRUdfREVDT01QUkVTU19Q
Uk9HUkVTU0lWRToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZSA9
PSBKUEVHX0RFQ09NUFJFU1NfUFJPR1JFU1NJVkUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzID0ganBlZ19jb25zdW1lX2lucHV0KCZtX2luZm8pOwotICAgICAgICAgICAgICAg
ICAgICB9IHdoaWxlICgoc3RhdHVzICE9IEpQRUdfU1VTUEVOREVEKSAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc3RhdHVzICE9IEpQRUdfUkVBQ0hFRF9FT0kpKTsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9p
bmZvLm91dHB1dF9zY2FubGluZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHNjYW4gPSBtX2luZm8uaW5wdXRfc2Nhbl9udW1iZXI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKiBpZiB3ZSBoYXZlbid0IGRpc3BsYXllZCBhbnl0aGluZyB5ZXQgKG91dHB1
dF9zY2FuX251bWJlcj09MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2UgaGF2
ZSBlbm91Z2ggZGF0YSBmb3IgYSBjb21wbGV0ZSBzY2FuLCBmb3JjZSBvdXRwdXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGFzdCBmdWxsIHNjYW4gKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKG1faW5mby5vdXRwdXRfc2Nhbl9udW1iZXIgPT0gMCkgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjYW4gPiAxKSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzICE9IEpQRUdfUkVBQ0hFRF9FT0kpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuLS07Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWpwZWdfc3RhcnRfb3V0cHV0KCZtX2luZm8sIHNjYW4pKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNpb24g
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gMHhmZmZmZmYpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmZvLm91dHB1dF9zY2FubGluZSA9IDA7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5vdXRwdXRTY2FubGluZXMoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IDApCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYW5hZ2UgdG8gcmVhZCBhbnkg
bGluZXMgLSBmbGFnIHNvIHdlIGRvbid0IGNhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganBlZ19zdGFydF9vdXRwdXQoKSBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWUgc2Nh
biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZm8ub3V0cHV0X3NjYW5s
aW5lID0gMHhmZmZmZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
IC8qIEkvTyBzdXNwZW5zaW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IG1faW5mby5v
dXRwdXRfaGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFqcGVnX2Zp
bmlzaF9vdXRwdXQoJm1faW5mbykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGpwZWdfaW5wdXRfY29tcGxldGUoJm1faW5mbykgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKG1faW5mby5pbnB1dF9zY2FuX251bWJlciA9PSBtX2luZm8ub3V0
cHV0X3NjYW5fbnVtYmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZFOgorICAgICAgICAgICAg
aWYgKG1fc3RhdGUgPT0gSlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZFKSB7CisgICAgICAgICAg
ICAgICAgaW50IHN0YXR1czsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IGpwZWdfY29uc3VtZV9pbnB1dCgmbV9pbmZvKTsKKyAgICAgICAgICAgICAg
ICB9IHdoaWxlICgoc3RhdHVzICE9IEpQRUdfU1VTUEVOREVEKSAmJiAoc3RhdHVzICE9IEpQRUdf
UkVBQ0hFRF9FT0kpKTsKKworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2luZm8ub3V0cHV0X3NjYW5saW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2NhbiA9IG1faW5mby5pbnB1dF9zY2FuX251bWJlcjsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBkaXNwbGF5ZWQgYW55dGhpbmcgeWV0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAob3V0cHV0X3NjYW5fbnVtYmVyID09IDApIGFuZCB3
ZSBoYXZlIGVub3VnaCBkYXRhIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBjb21w
bGV0ZSBzY2FuLCBmb3JjZSBvdXRwdXQgb2YgdGhlIGxhc3QgZnVsbCBzY2FuLgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2luZm8ub3V0cHV0X3NjYW5fbnVtYmVyICYmIChzY2FuID4g
MSkgJiYgKHN0YXR1cyAhPSBKUEVHX1JFQUNIRURfRU9JKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtLXNjYW47CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZm8ub3V0
cHV0X3NjYW5saW5lID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghanBlZ19zdGFydF9vdXRwdXQoJm1faW5mbywgc2NhbikpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAvLyBJL08gc3VzcGVuc2lvbi4K
ICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBK
UEVHX0RPTkU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSAweGZmZmZmZikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAwOwogCi0gICAgICAgICAg
ICBjYXNlIEpQRUdfRE9ORToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBGaW5p
c2ggZGVjb21wcmVzc2lvbiAqLwotICAgICAgICAgICAgICAgIGlmICghanBlZ19maW5pc2hfZGVj
b21wcmVzcygmbV9pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8qIEkv
TyBzdXNwZW5zaW9uICovCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5vdXRw
dXRTY2FubGluZXMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2luZm8ub3V0
cHV0X3NjYW5saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpZG4ndCBtYW5h
Z2UgdG8gcmVhZCBhbnkgbGluZXMgLSBmbGFnIHNvIHdlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZG9uJ3QgY2FsbCBqcGVnX3N0YXJ0X291dHB1dCgpIG11bHRpcGxlIHRpbWVzIGZv
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIHNjYW4uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91dHB1dF9zY2FubGluZSA9IDB4ZmZmZmZmOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAvLyBJL08gc3VzcGVuc2lvbi4K
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdf
U0lOS19OT05fSlBFR19UUkFJTEVSOworICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91
dHB1dF9zY2FubGluZSA9PSBtX2luZm8ub3V0cHV0X2hlaWdodCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFqcGVnX2ZpbmlzaF9vdXRwdXQoJm1faW5mbykpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAvLyBJL08gc3VzcGVuc2lvbi4KIAotICAgICAg
ICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChqcGVnX2lucHV0X2NvbXBsZXRlKCZtX2luZm8pICYmICht
X2luZm8uaW5wdXRfc2Nhbl9udW1iZXIgPT0gbV9pbmZvLm91dHB1dF9zY2FuX251bWJlcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRE9ORTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBKUEVHX1NJTktf
Tk9OX0pQRUdfVFJBSUxFUjoKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gRkFM
TCBUSFJPVUdICiAKLSAgICAgICAgICAgIGNhc2UgSlBFR19FUlJPUjoKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBKUEVHX0RPTkU6CisgICAgICAgICAgICAvLyBGaW5pc2gg
ZGVjb21wcmVzc2lvbi4KKyAgICAgICAgICAgIGlmICghanBlZ19maW5pc2hfZGVjb21wcmVzcygm
bV9pbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgIC8vIEkvTyBzdXNwZW5zaW9u
LgorCisgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TSU5LX05PTl9KUEVHX1RSQUlMRVI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgSlBFR19TSU5LX05PTl9K
UEVHX1RSQUlMRVI6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEpQRUdfRVJS
T1I6CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzY3LDEwICszMzksMTAgQEAgcHJpdmF0ZToKICAgICBKU0FNUEFSUkFZIG1fc2FtcGxl
czsKIH07CiAKLS8qIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXRob2QgaW4gdGhlIElK
RyBKUEVHIGRlY29kZXIgY29kZS4gKi8KKy8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlcnJvciBt
ZXRob2QgaW4gdGhlIElKRyBKUEVHIGRlY29kZXIgY29kZS4KIHZvaWQgZXJyb3JfZXhpdChqX2Nv
bW1vbl9wdHIgY2luZm8pCiB7Ci0gICAgLyogUmV0dXJuIGNvbnRyb2wgdG8gdGhlIHNldGptcCBw
b2ludC4gKi8KKyAgICAvLyBSZXR1cm4gY29udHJvbCB0byB0aGUgc2V0am1wIHBvaW50LgogICAg
IGRlY29kZXJfZXJyb3JfbWdyICplcnIgPSAoZGVjb2Rlcl9lcnJvcl9tZ3IgKikgY2luZm8tPmVy
cjsKICAgICBsb25nam1wKGVyci0+c2V0am1wX2J1ZmZlciwgLTEpOwogfQpAQCAtMzg4LDEyICsz
NjAsMTIgQEAgdm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZAogYm9vbGVh
biBmaWxsX2lucHV0X2J1ZmZlcihqX2RlY29tcHJlc3NfcHRyIGpkKQogewogICAgIC8vIE91ciBk
ZWNvZGUgc3RlcCBhbHdheXMgc2V0cyB0aGluZ3MgdXAgcHJvcGVybHksIHNvIGlmIHRoaXMgbWV0
aG9kIGlzIGV2ZXIKLSAgICAvLyBjYWxsZWQsIHRoZW4gd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiB0
aGUgYnVmZmVyLiAgQSByZXR1cm4gdmFsdWUgb2YgRkFMU0UgaW5kaWNhdGVzCi0gICAgLy8gdGhh
dCB3ZSBoYXZlIG5vIGRhdGEgdG8gc3VwcGx5IHlldC4KKyAgICAvLyBjYWxsZWQsIHRoZW4gd2Ug
aGF2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgQSByZXR1cm4gdmFsdWUgb2YgZmFsc2UK
KyAgICAvLyBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIG5vIGRhdGEgdG8gc3VwcGx5IHlldC4KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgdGVybV9zb3VyY2UgKGpfZGVjb21wcmVzc19wdHIg
amQpCit2b2lkIHRlcm1fc291cmNlKGpfZGVjb21wcmVzc19wdHIgamQpCiB7CiAgICAgZGVjb2Rl
cl9zb3VyY2VfbWdyICpzcmMgPSAoZGVjb2Rlcl9zb3VyY2VfbWdyICopamQtPnNyYzsKICAgICBz
cmMtPmRlY29kZXItPmRlY29kZXIoKS0+anBlZ0NvbXBsZXRlKCk7CkBAIC00MDcsMjEgKzM3OSwx
NyBAQCBKUEVHSW1hZ2VEZWNvZGVyOjp+SlBFR0ltYWdlRGVjb2RlcigpCiB7CiB9CiAKLS8vIFRh
a2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0Lgogdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRh
KFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7CiAgICAgaWYgKG1f
ZmFpbGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDYWNoZSBvdXIgbmV3IGRhdGEuCiAg
ICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAKLSAgICAv
LyBDcmVhdGUgdGhlIEpQRUcgcmVhZGVyLgogICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVk
KQogICAgICAgICBtX3JlYWRlci5zZXQobmV3IEpQRUdJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiAK
LS8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQg
eWV0LgogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogewogICAgIGlm
ICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAhZmFpbGVkKCkgJiYgbV9yZWFk
ZXIpCkBAIC00MzQsNiArNDAyLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVu
c2lnbmVkIAogewogICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nh
cnkoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ0OCwyMyArNDE3LDEwIEBAIFJHQkEzMkJ1
ZmZlciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWYKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJh
bWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJH
QkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAgICAgLy8gRGVjb2Rl
IHRoaXMgZnJhbWUuCi0gICAgICAgIGRlY29kZSgpOworICAgICAgICBkZWNvZGUoZmFsc2UpOwog
ICAgIHJldHVybiAmZnJhbWU7CiB9CiAKLS8vIEZlZWQgZGF0YSB0byB0aGUgSlBFRyByZWFkZXIu
Ci12b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIHNpemVPbmx5KQotewotICAgIGlm
IChtX2ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFkZXIt
PmRlY29kZShtX2RhdGEtPmJ1ZmZlcigpLCBzaXplT25seSk7Ci0KLSAgICBpZiAobV9mYWlsZWQg
fHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVsw
XS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQotICAgICAgICBtX3Jl
YWRlci5jbGVhcigpOwotfQotCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cygpCiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC01MzEsOSAr
NDg3LDIwIEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKICAgICBpZiAo
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
SGFuZCBiYWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgYnVmZmVyLCBldmVuIGlmIHRoZSBpbWFn
ZSBlbmRlZCB1cCBiZWluZyBlbXB0eS4KLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKLSAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJh
bWVDb21wbGV0ZSk7CisgICAgLy8gSGFuZCBiYWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgYnVm
ZmVyLCBldmVuIGlmIHRoZSBpbWFnZSBlbmRlZCB1cCBiZWluZworICAgIC8vIGVtcHR5LgorICAg
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBs
ZXRlKTsKK30KKwordm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkK
K3sKKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZmFpbGVkID0g
IW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgb25seVNpemUpOworCisgICAgaWYg
KG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVm
ZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAg
ICAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDI4ICszOCwyNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlBFR0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURl
Y29kZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgSlBFR0ltYWdlRGVjb2RlcigpOwotICAgICAg
ICB+SlBFR0ltYWdlRGVjb2RlcigpOworICAgICAgICB2aXJ0dWFsIH5KUEVHSW1hZ2VEZWNvZGVy
KCk7CiAKKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImpwZyI7IH0KLQotICAgICAgICAvLyBU
YWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KICAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICAgICAgLy8g
V2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQu
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKLQogICAgICAgICB2aXJ0
dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLQogICAg
ICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCk7Ci0gICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBzaXplT25seSA9
IGZhbHNlKTsKLQogICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcygpOwogICAgICAgICB2b2lk
IGpwZWdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gRGVjb2RlcyB0aGUg
aW1hZ2UuICBJZiB8b25seVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nIGFmdGVyCisgICAg
ICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLgorICAgICAgICB2b2lkIGRlY29kZShi
b29sIG9ubHlTaXplKTsKKwogICAgICAgICBPd25QdHI8SlBFR0ltYWdlUmVhZGVyPiBtX3JlYWRl
cjsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDU0NzI3KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsMjEgKzUyLDQwIEBAIGNvbnN0IGRvdWJsZSBjSW52ZXJzZUdhbW1h
ID0gMC40NTQ1NTsKIGNvbnN0IHVuc2lnbmVkIGxvbmcgY01heFBOR1NpemUgPSAxMDAwMDAwVUw7
CiAKIC8vIENhbGxlZCBpZiB0aGUgZGVjb2Rpbmcgb2YgdGhlIGltYWdlIGZhaWxzLgotc3RhdGlj
IHZvaWQgUE5HQVBJIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19jb25z
dF9jaGFycCBlcnJvcl9tc2cpOworc3RhdGljIHZvaWQgUE5HQVBJIGRlY29kaW5nRmFpbGVkKHBu
Z19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwKQoreworICAgIGxvbmdqbXAocG5nLT5qbXBi
dWYsIDEpOworfQogCi0vLyBDYWxsYmFja3MgZ2l2ZW4gdG8gdGhlIHJlYWQgc3RydWN0LiAgVGhl
IGZpcnN0IGlzIGZvciB3YXJuaW5ncyAod2Ugd2FudCB0byB0cmVhdCBhIHBhcnRpY3VsYXIgd2Fy
bmluZwotLy8gYXMgYW4gZXJyb3IsIHdoaWNoIGlzIHdoeSB3ZSBoYXZlIHRvIHJlZ2lzdGVyIHRo
aXMgY2FsbGJhY2suCi1zdGF0aWMgdm9pZCBQTkdBUEkgZGVjb2RpbmdXYXJuaW5nKHBuZ19zdHJ1
Y3RwIHBuZ19wdHIsIHBuZ19jb25zdF9jaGFycCB3YXJuaW5nX21zZyk7CisvLyBDYWxsYmFja3Mg
Z2l2ZW4gdG8gdGhlIHJlYWQgc3RydWN0LiAgVGhlIGZpcnN0IGlzIGZvciB3YXJuaW5ncyAod2Ug
d2FudCB0bworLy8gdHJlYXQgYSBwYXJ0aWN1bGFyIHdhcm5pbmcgYXMgYW4gZXJyb3IsIHdoaWNo
IGlzIHdoeSB3ZSBoYXZlIHRvIHJlZ2lzdGVyIHRoaXMKKy8vIGNhbGxiYWNrKS4KK3N0YXRpYyB2
b2lkIFBOR0FQSSBkZWNvZGluZ1dhcm5pbmcocG5nX3N0cnVjdHAgcG5nLCBwbmdfY29uc3RfY2hh
cnAgd2FybmluZ01zZykKK3sKKyAgLy8gTW96aWxsYSBkaWQgdGhpcywgc28gd2Ugd2lsbCB0b28u
CisgIC8vIENvbnZlcnQgYSB0Uk5TIHdhcm5pbmcgdG8gYmUgYW4gZXJyb3IgKHNlZQorICAvLyBo
dHRwOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTM4MSApCisgIGlm
ICghc3RybmNtcCh3YXJuaW5nTXNnLCAiTWlzc2luZyBQTFRFIGJlZm9yZSB0Uk5TIiwgMjQpKQor
ICAgICAgcG5nX2Vycm9yKHBuZywgd2FybmluZ01zZyk7Cit9CiAKIC8vIENhbGxlZCB3aGVuIHdl
IGhhdmUgb2J0YWluZWQgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIHRoZSBzaXpl
KS4KLXN0YXRpYyB2b2lkIFBOR0FQSSBoZWFkZXJBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nX3B0
ciwgcG5nX2luZm9wIGluZm9fcHRyKTsKK3N0YXRpYyB2b2lkIFBOR0FQSSBoZWFkZXJBdmFpbGFi
bGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3ApCit7CisgICAgc3RhdGljX2Nhc3Q8UE5HSW1h
Z2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSktPmhlYWRlckF2YWlsYWJs
ZSgpOworfQogCiAvLyBDYWxsZWQgd2hlbiBhIHJvdyBpcyByZWFkeS4KLXN0YXRpYyB2b2lkIFBO
R0FQSSByb3dBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIG5ld19yb3cs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIHJvd19udW0sIGlu
dCBwYXNzKTsKK3N0YXRpYyB2b2lkIFBOR0FQSSByb3dBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5n
LCBwbmdfYnl0ZXAgcm93QnVmZmVyLCBwbmdfdWludF8zMiByb3dJbmRleCwgaW50IGludGVybGFj
ZVBhc3MpCit7CisgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9n
cmVzc2l2ZV9wdHIocG5nKSktPnJvd0F2YWlsYWJsZShyb3dCdWZmZXIsIHJvd0luZGV4LCBpbnRl
cmxhY2VQYXNzKTsKK30KIAogLy8gQ2FsbGVkIHdoZW4gd2UgaGF2ZSBjb21wbGV0ZWx5IGZpbmlz
aGVkIGRlY29kaW5nIHRoZSBpbWFnZS4KLXN0YXRpYyB2b2lkIFBOR0FQSSBwbmdDb21wbGV0ZShw
bmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIpOworc3RhdGljIHZvaWQgUE5H
QVBJIHBuZ0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luZm9wKQoreworICAgIHN0YXRp
Y19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5w
bmdDb21wbGV0ZSgpOworfQogCiBjbGFzcyBQTkdJbWFnZVJlYWRlcgogewpAQCAtNzUsNyArOTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9yZWFkT2Zmc2V0KDApCiAgICAgICAgICwgbV9kZWNv
ZGluZ1NpemVPbmx5KGZhbHNlKQogICAgICAgICAsIG1faW50ZXJsYWNlQnVmZmVyKDApCi0gICAg
ICAgICwgbV9oYXNBbHBoYSgwKQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCiAgICAgICAg
ICwgbV9oYXNGaW5pc2hlZERlY29kaW5nKGZhbHNlKQogICAgICAgICAsIG1fY3VycmVudEJ1ZmZl
clNpemUoMCkKICAgICB7CkBAIC04OSwxMCArMTA4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgY2xv
c2UoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsb3NlKCkgeworICAgIHZvaWQgY2xvc2UoKQorICAg
IHsKICAgICAgICAgaWYgKG1fcG5nICYmIG1faW5mbykKLSAgICAgICAgICAgIHBuZ19kZXN0cm95
X3JlYWRfc3RydWN0KCZtX3BuZywgJm1faW5mbywgMCk7ICAvLyBXaWxsIHplcm8gdGhlIHBvaW50
ZXJzLgotICAgICAgICBkZWxldGUgW11tX2ludGVybGFjZUJ1ZmZlcjsKKyAgICAgICAgICAgIC8v
IFRoaXMgd2lsbCB6ZXJvIHRoZSBwb2ludGVycy4KKyAgICAgICAgICAgIHBuZ19kZXN0cm95X3Jl
YWRfc3RydWN0KCZtX3BuZywgJm1faW5mbywgMCk7CisgICAgICAgIGRlbGV0ZVtdIG1faW50ZXJs
YWNlQnVmZmVyOwogICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IDA7CiAgICAgICAgIG1fcmVh
ZE9mZnNldCA9IDA7CiAgICAgICAgIG1faGFzRmluaXNoZWREZWNvZGluZyA9IGZhbHNlOwpAQCAt
MTA2LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZGVjb2RpbmdTaXplT25s
eSA9IHNpemVPbmx5OwogCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhlIHNldGptcCBoZXJl
LiBPdGhlcndpc2UgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBXZSBuZWVkIHRv
IGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4uCiAg
ICAgICAgIGlmIChzZXRqbXAobV9wbmctPmptcGJ1ZikpIHsKICAgICAgICAgICAgIGNsb3NlKCk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzQsOSArMTU1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVhZE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9yZWFkT2Zmc2V0ID0gb2Zmc2V0
OyB9CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGIpIHsgbV9oYXNBbHBoYSA9IGI7IH0KIAot
ICAgIHZvaWQgY3JlYXRlSW50ZXJsYWNlQnVmZmVyKGludCBzaXplKSB7Ci0gICAgICAgIG1faW50
ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19ieXRlW3NpemVdOwotICAgIH0KKyAgICB2b2lkIGNyZWF0
ZUludGVybGFjZUJ1ZmZlcihpbnQgc2l6ZSkgeyBtX2ludGVybGFjZUJ1ZmZlciA9IG5ldyBwbmdf
Ynl0ZVtzaXplXTsgfQogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fcmVhZE9mZnNldDsKQEAg
LTE1NywyMSArMTc2LDE2IEBAIFBOR0ltYWdlRGVjb2Rlcjo6flBOR0ltYWdlRGVjb2RlcigpCiB7
CiB9CiAKLS8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0Lgogdm9pZCBQTkdJbWFnZURlY29k
ZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsK
ICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIENhY2hlIG91ciBu
ZXcgZGF0YS4KICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKIAotICAgIC8vIENyZWF0ZSB0aGUgUE5HIHJlYWRlci4KICAgICBpZiAoIW1fcmVhZGVyICYm
ICFtX2ZhaWxlZCkKICAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBQTkdJbWFnZVJlYWRlcih0aGlz
KSk7CiB9Ci0KLS8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVu
IGRlY29kZWQgeWV0LgogYm9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7
CiAgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWlsZWQoKSAm
JiBtX3JlYWRlcikKQEAgLTE5MSw0MSArMjA1LDEwIEBAIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGUgJiYgbV9yZWFkZXIpCiAgICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1lLgotICAg
ICAgICBkZWNvZGUoKTsKKyAgICAgICAgZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZyYW1l
OwogfQogCi0vLyBGZWVkIGRhdGEgdG8gdGhlIFBORyByZWFkZXIuCi12b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCi17Ci0gICAgaWYgKG1fZmFpbGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3JlYWRlci0+ZGVjb2RlKCptX2RhdGEsIHNpemVPbmx5KTsKLSAg
ICAKLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYm
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUpKQotICAgICAgICBtX3JlYWRlci5jbGVhcigpOwotfQotCi12b2lkIGRlY29kaW5nRmFp
bGVkKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwIGVycm9yTXNnKQotewotICAgIHN0
YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykp
LT5kZWNvZGluZ0ZhaWxlZCgpOwotICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwotfQotCi12
b2lkIGRlY29kaW5nV2FybmluZyhwbmdfc3RydWN0cCBwbmcsIHBuZ19jb25zdF9jaGFycCB3YXJu
aW5nTXNnKQotewotICAvLyBNb3ppbGxhIGRpZCB0aGlzLCBzbyB3ZSB3aWxsIHRvby4KLSAgLy8g
Q29udmVydCBhIHRSTlMgd2FybmluZyB0byBiZSBhbiBlcnJvciAoZG9jdW1lbnRlZCBpbiBidWd6
aWxsYS5tb3ppbGxhLm9yZyBidWcgIzI1MTM4MSkKLSAgaWYgKCFzdHJuY21wKHdhcm5pbmdNc2cs
ICJNaXNzaW5nIFBMVEUgYmVmb3JlIHRSTlMiLCAyNCkpCi0gICAgICBwbmdfZXJyb3IocG5nLCB3
YXJuaW5nTXNnKTsKLX0KLQotdm9pZCBoZWFkZXJBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nLCBw
bmdfaW5mb3AgaW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdf
Z2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxlKCk7Ci19Ci0KIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpCiB7CiAgICAgbV9mYWlsZWQgPSB0cnVl
OwpAQCAtMjU2LDE0ICsyMzksMTIgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWls
YWJsZSgpCiAgICAgfQogCiAgICAgaW50IGJpdERlcHRoLCBjb2xvclR5cGUsIGludGVybGFjZVR5
cGUsIGNvbXByZXNzaW9uVHlwZSwgZmlsdGVyVHlwZSwgY2hhbm5lbHM7Ci0gICAgcG5nX2dldF9J
SERSKHBuZywgaW5mbywgJndpZHRoLCAmaGVpZ2h0LCAmYml0RGVwdGgsICZjb2xvclR5cGUsCi0g
ICAgICAgICAgICAgICAgICZpbnRlcmxhY2VUeXBlLCAmY29tcHJlc3Npb25UeXBlLCAmZmlsdGVy
VHlwZSk7CisgICAgcG5nX2dldF9JSERSKHBuZywgaW5mbywgJndpZHRoLCAmaGVpZ2h0LCAmYml0
RGVwdGgsICZjb2xvclR5cGUsICZpbnRlcmxhY2VUeXBlLCAmY29tcHJlc3Npb25UeXBlLCAmZmls
dGVyVHlwZSk7CiAKICAgICAvLyBUaGUgb3B0aW9ucyB3ZSBzZXQgaGVyZSBtYXRjaCB3aGF0IE1v
emlsbGEgZG9lcy4KIAogICAgIC8vIEV4cGFuZCB0byBlbnN1cmUgd2UgdXNlIDI0LWJpdCBmb3Ig
UkdCIGFuZCAzMi1iaXQgZm9yIFJHQkEuCi0gICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1Jf
VFlQRV9QQUxFVFRFIHx8Ci0gICAgICAgIChjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JB
WSAmJiBiaXREZXB0aCA8IDgpKQorICAgIGlmIChjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVf
UEFMRVRURSB8fCAoY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgJiYgYml0RGVwdGgg
PCA4KSkKICAgICAgICAgcG5nX3NldF9leHBhbmQocG5nKTsKICAgICAKICAgICBwbmdfYnl0ZXAg
dHJucyA9IDA7CkBAIC0yNzYsOCArMjU3LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRl
ckF2YWlsYWJsZSgpCiAgICAgaWYgKGJpdERlcHRoID09IDE2KQogICAgICAgICBwbmdfc2V0X3N0
cmlwXzE2KHBuZyk7CiAKLSAgICBpZiAoY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkg
fHwKLSAgICAgICAgY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEpCisgICAg
aWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZIHx8IGNvbG9yVHlwZSA9PSBQTkdf
Q09MT1JfVFlQRV9HUkFZX0FMUEhBKQogICAgICAgICBwbmdfc2V0X2dyYXlfdG9fcmdiKHBuZyk7
CiAKICAgICAvLyBEZWFsIHdpdGggZ2FtbWEgYW5kIGtlZXAgaXQgdW5kZXIgb3VyIGNvbnRyb2wu
CkBAIC0yODgsMTUgKzI2OCwxNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICAgICAgICAgIHBuZ19zZXRfZ0FNQShwbmcsIGluZm8sIGdhbW1hKTsKICAgICAg
ICAgfQogICAgICAgICBwbmdfc2V0X2dhbW1hKHBuZywgY0RlZmF1bHRHYW1tYSwgZ2FtbWEpOwot
ICAgIH0KLSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIHBuZ19zZXRfZ2FtbWEocG5nLCBj
RGVmYXVsdEdhbW1hLCBjSW52ZXJzZUdhbW1hKTsKIAogICAgIC8vIFRlbGwgbGlicG5nIHRvIHNl
bmQgdXMgcm93cyBmb3IgaW50ZXJsYWNlZCBwbmdzLgogICAgIGlmIChpbnRlcmxhY2VUeXBlID09
IFBOR19JTlRFUkxBQ0VfQURBTTcpCiAgICAgICAgIHBuZ19zZXRfaW50ZXJsYWNlX2hhbmRsaW5n
KHBuZyk7CiAKLSAgICAvLyBVcGRhdGUgb3VyIGluZm8gbm93CisgICAgLy8gVXBkYXRlIG91ciBp
bmZvIG5vdy4KICAgICBwbmdfcmVhZF91cGRhdGVfaW5mbyhwbmcsIGluZm8pOwogICAgIGNoYW5u
ZWxzID0gcG5nX2dldF9jaGFubmVscyhwbmcsIGluZm8pOwogICAgIEFTU0VSVChjaGFubmVscyA9
PSAzIHx8IGNoYW5uZWxzID09IDQpOwpAQCAtMzEwLDEyICsyODksNiBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXZvaWQgcm93QXZhaWxhYmxl
KHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVwIHJvd0J1ZmZlciwKLSAgICAgICAgICAgICAgICAg
IHBuZ191aW50XzMyIHJvd0luZGV4LCBpbnQgaW50ZXJsYWNlUGFzcykKLXsKLSAgICBzdGF0aWNf
Y2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93
QXZhaWxhYmxlKHJvd0J1ZmZlciwgcm93SW5kZXgsIGludGVybGFjZVBhc3MpOwotfQotCiB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwg
dW5zaWduZWQgcm93SW5kZXgsIGludCBpbnRlcmxhY2VQYXNzKQogewogICAgIGlmIChtX2ZyYW1l
QnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQpAQCAtMzM5LDExICszMTIsMTEgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICAgICAgICAgbV9yZWFkZXItPmNyZWF0
ZUludGVybGFjZUJ1ZmZlcigobV9yZWFkZXItPmhhc0FscGhhKCkgPyA0IDogMykgKiBzaXplKCku
d2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgaWYgKHJvd0J1ZmZlciA9
PSAwKQorICAgIGlmICghcm93QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgIC8qIGxpYnBu
ZyBjb21tZW50cyAocGFzdGVkIGluIGhlcmUgdG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpCi0gICAg
KgorICAgLy8gbGlicG5nIGNvbW1lbnRzIChwYXN0ZWQgaW4gaGVyZSB0byBleHBsYWluIHdoYXQg
Zm9sbG93cykKKyAgIC8qCiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZXZlcnkg
cm93IGluIHRoZSBpbWFnZS4gIElmIHRoZQogICAgICogaW1hZ2UgaXMgaW50ZXJsYWNpbmcsIGFu
ZCB5b3UgdHVybmVkIG9uIHRoZSBpbnRlcmxhY2UgaGFuZGxlciwKICAgICAqIHRoaXMgZnVuY3Rp
b24gd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHJvdyBpbiBldmVyeSBwYXNzLgpAQCAtMzc4LDgg
KzM1MSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBp
ZiAoaW50ZXJsYWNlQnVmZmVyKSB7CiAgICAgICAgIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChy
b3dJbmRleCAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSk7CiAgICAgICAgIHBuZ19w
cm9ncmVzc2l2ZV9jb21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsKLSAgICB9Ci0gICAg
ZWxzZQorICAgIH0gZWxzZQogICAgICAgICByb3cgPSByb3dCdWZmZXI7CiAKICAgICAvLyBDb3B5
IHRoZSBkYXRhIGludG8gb3VyIGJ1ZmZlci4KQEAgLTM4OCw3ICszNjAsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAg
ICAgcmV0dXJuOwogICAgIGJvb2wgc2F3QWxwaGEgPSBidWZmZXIuaGFzQWxwaGEoKTsKLSAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyArK3gpIHsKICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVk
ID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICB1bnNp
Z25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgIGJ1ZmZlci5z
ZXRSR0JBKHgsIGRlc3RZLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CkBA
IC0zOTksMjEgKzM3MSwyMyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVu
c2lnCiAgICAgfQogfQogCi12b2lkIHBuZ0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2lu
Zm9wIGluZm8pCi17Ci0gICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9w
cm9ncmVzc2l2ZV9wdHIocG5nKSktPnBuZ0NvbXBsZXRlKCk7Ci19Ci0KIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpwbmdDb21wbGV0ZSgpCiB7CiAgICAgbV9yZWFkZXItPnNldENvbXBsZXRlKCk7CiAK
LSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgp
LnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworfQorCit2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCit7CisgICAgaWYgKG1fZmFpbGVkKQog
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBIYW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXpl
ZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdlIGVuZGVkIHVwIGJlaW5nIGVtcHR5LgotICAgIFJH
QkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGJ1ZmZlci5z
ZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBtX3JlYWRlci0+ZGVj
b2RlKCptX2RhdGEsIG9ubHlTaXplKTsKKyAgICAKKyAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQorICAgICAgICBtX3JlYWRlci5jbGVh
cigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gNTQ3MjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjAgKzM3LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBQTkdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVy
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBOR0ltYWdlRGVjb2RlcigpOwotICAgICAgICB+UE5H
SW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIHZpcnR1YWwgflBOR0ltYWdlRGVjb2RlcigpOwogCisg
ICAgICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJwbmciOyB9Ci0KLSAgICAgICAgLy8gVGFrZSB0aGUg
ZGF0YSBhbmQgc3RvcmUgaXQuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAgICAgIC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Ci0KICAgICAgICAgdmlydHVhbCBSR0JB
MzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogCi0gICAgICAgIHZv
aWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSk7Ci0KICAgICAgICAgLy8gQ2FsbGJhY2tz
IGZyb20gbGlicG5nCiAgICAgICAgIHZvaWQgZGVjb2RpbmdGYWlsZWQoKTsKICAgICAgICAgdm9p
ZCBoZWFkZXJBdmFpbGFibGUoKTsKQEAgLTU4LDYgKzUyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBwbmdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAg
Ly8gRGVjb2RlcyB0aGUgaW1hZ2UuICBJZiB8b25seVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29k
aW5nIGFmdGVyCisgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLgorICAgICAg
ICB2b2lkIGRlY29kZShib29sIG9ubHlTaXplKTsKKwogICAgICAgICBPd25QdHI8UE5HSW1hZ2VS
ZWFkZXI+IG1fcmVhZGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1NDcy
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsNiBAQCBSR0JBMzJCdWZmZXI6OlJHQkEz
MkJ1ZmZlcigpCiB7CiB9CiAKLS8vIFRoZSBpbWFnZSBtdXN0IG5vdCBoYXZlIGZvcm1hdCA4ODg4
IHByZSBtdWx0aXBsaWVkLi4uCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0RGVjb2RlZEltYWdlKGNv
bnN0IFFJbWFnZSYgaW1hZ2UpCi17Ci0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIG1fc2l6ZSA9
IGltYWdlLnNpemUoKTsKLSAgICBtX2hhc0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7
Ci19Ci0KIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiB7CiAgICAgbV9pbWFnZSA9IFFJbWFn
ZSgpOwpAQCAtMTE1LDYgKzEwNywxNCBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKEZy
YW1lU3RhdHVzCiAgICAgbV9zdGF0dXMgPSBzdGF0dXM7CiB9CiAKKy8vIFRoZSBpbWFnZSBtdXN0
IG5vdCBoYXZlIGZvcm1hdCA4ODg4IHByZSBtdWx0aXBsaWVkLi4uCit2b2lkIFJHQkEzMkJ1ZmZl
cjo6c2V0RGVjb2RlZEltYWdlKGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgbV9pbWFnZSA9
IGltYWdlOworICAgIG1fc2l6ZSA9IGltYWdlLnNpemUoKTsKKyAgICBtX2hhc0FscGhhID0gaW1h
Z2UuaGFzQWxwaGFDaGFubmVsKCk7Cit9CisKIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpv
cGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAm
b3RoZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48690</attachid>
            <date>2010-02-12 19:07:15 -0800</date>
            <delta_ts>2010-02-16 12:50:28 -0800</delta_ts>
            <desc>Style/code cleanup, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>117817</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM2IEBACisyMDEwLTAyLTEyICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb2RlIGNsZWFudXAgaW4gSW1hZ2VEZWNvZGVyczsgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODc1MQorCisg
ICAgICAgICogTWFrZSBjb2RlIG1vc3RseSBjb21wbHkgd2l0aCB0aGUgc3R5bGUgZ3VpZGUgKHN3
aXRjaCBpbmRlbnRpbmcsIHVzZSBvZgorICAgICAgICAgICIhIiB2cy4gIj09IDAiLCBkb24ndCB1
bm5lY2Vzc2FyaWx5IHdyYXAgbGluZXMsIGV0Yy4pCisgICAgICAgICogRWxpbWluYXRlIG1fYWxs
RGF0YVJlY2VpdmVkIGluIElDTy9CTVAgZGVjb2RlcnMgc2luY2UgaXQncyBpbiB0aGUKKyAgICAg
ICAgICBiYXNlIEltYWdlRGVjb2RlciBjbGFzcworICAgICAgICAqIFJlbW92ZSBzb21lIHVzZWxl
c3Mgb3Igd3JvbmcgY29tbWVudHMsIGFkZCBvdGhlcnMKKyAgICAgICAgKiBXcmFwIGNvbW1lbnRz
IGF0IDgwIGNvbHVtbnMgKG1vc3QgYWxyZWFkeSB3ZXJlKSBmb3IKKyAgICAgICAgICBjb25zaXN0
ZW5jeS9yZWFkYWJpbGl0eQorICAgICAgICAqIEF2b2lkIGNhc3RzIGJ5IHVzaW5nIGNvcnJlY3Qg
dmFyaWFibGUgdHlwZXMKKyAgICAgICAgKiBDb25zaXN0ZW50IG5hbWluZyBvZiBkZWNvZGUoKSBm
dW5jdGlvbi9hcmdzCisgICAgICAgICogU2hvcnRlciBjb2RlIGluIHNvbWUgcGxhY2VzCisgICAg
ICAgICogTWFrZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBvcmRlciBtYXRjaAorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXJRdDo6Zm9yY2VMb2FkRXZlcnl0aGluZyk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VE
ZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6Qk1QSW1hZ2VE
ZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCTVBJbWFnZURlY29kZXI6OmRlY29kZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZURlY29kZXI6OnByb2Nlc3NGaWxlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZURlY29kZXI6OnJlYWRVaW50MzIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJl
YWRlcjo6Qk1QSW1hZ2VSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6
OmRlY29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cmVhZEluZm9I
ZWFkZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzSW5m
b0hlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cmVhZEluZm9IZWFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlk
KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzQml0bWFza3MpOgor
ICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NDb2xvclRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnBhc3RFbmRPZkltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlUmVhZGVyOjpyZWFkQ3VycmVudFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdl
UmVhZGVyOjpnZXRDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6
OmdldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRJKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRSR0JBKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpzaXplTm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VS
ZWFkZXI6OmRvX2x6dyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cmVhZCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAgICAg
IChHSUZJbWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklDT0ltYWdlRGVjb2Rlcjo6SUNPSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklD
T0ltYWdlRGVjb2Rlcjo6fklDT0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJQ09J
bWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpm
cmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmNvbXBhcmVFbnRy
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6c2V0RGF0YUZvclBOR0Rl
Y29kZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlRGlyZWN0b3J5KToK
KyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cmVhZERpcmVjdG9yeUVudHJ5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnJlYWRVaW50MTYpOgorICAgICAg
ICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpyZWFkVWludDMyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6SlBFR0ltYWdl
UmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6c2tpcEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmVycm9yX2V4aXQpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbF9pbnB1dF9idWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6dGVybV9zb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlBF
R0ltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpqcGVn
Q29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kaW5nRmFpbGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmRlY29kaW5nV2FybmluZyk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJBdmFpbGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBu
Z0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQTkdJbWFnZVJl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
TkdJbWFnZVJlYWRlcjo6Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURl
Y29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURl
Y29kZXI6OmhlYWRlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29k
ZXI6OnJvd0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnBu
Z0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldERlY29kZWRJbWFnZSk6CisKIDIw
MTAtMDItMTEgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlRGVjb2RlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkocmV2aXNpb24gNTQ3MjcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw3IEBAIHNpemVfdCBJbWFnZURlY29kZXJRdDo6ZnJhbWVDb3VudCgpCiAg
ICAgICAgICAgICAvLyBGaXh1cCBmb3IgUXQgZGVjb2RlcnMuLi4gaW1hZ2VDb3VudCgpIGlzIHdy
b25nCiAgICAgICAgICAgICAvLyBhbmQganVtcFRvTmV4dEltYWdlIGRvZXMgbm90IHdvcmsgZWl0
aGVyLi4uIHNvCiAgICAgICAgICAgICAvLyB3ZSB3aWxsIGhhdmUgdG8gcGFyc2UgZXZlcnl0aGlu
Zy4uLgotICAgICAgICAgICAgaWYgKGltYWdlQ291bnQgPT0gMCkKKyAgICAgICAgICAgIGlmICgh
aW1hZ2VDb3VudCkKICAgICAgICAgICAgICAgICBmb3JjZUxvYWRFdmVyeXRoaW5nKCk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShp
bWFnZUNvdW50KTsKQEAgLTEzMiwxMyArMTMyLDEzIEBAIFJHQkEzMkJ1ZmZlciogSW1hZ2VEZWNv
ZGVyUXQ6OmZyYW1lQnVmZmUKICAgICAvLyBJbiBjYXNlIHRoZSBJbWFnZURlY29kZXJRdCBnb3Qg
cmVjcmVhdGVkIHdlIGRvbid0IGtub3cKICAgICAvLyB5ZXQgaG93IG1hbnkgaW1hZ2VzIHdlIGFy
ZSBnb2luZyB0byBoYXZlIGFuZCBuZWVkIHRvCiAgICAgLy8gZmluZCB0aGF0IG91dCBub3cuCi0g
ICAgaW50IGNvdW50ID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKLSAgICBpZiAoIW1fZmFp
bGVkICYmIGNvdW50ID09IDApIHsKKyAgICBzaXplX3QgY291bnQgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGUuc2l6ZSgpOworICAgIGlmICghbV9mYWlsZWQgJiYgIWNvdW50KSB7CiAgICAgICAgIGludGVy
bmFsRGVjb2RlU2l6ZSgpOwogICAgICAgICBjb3VudCA9IGZyYW1lQ291bnQoKTsKICAgICB9CiAK
LSAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCkpCisgICAgaWYgKGlu
ZGV4ID49IGNvdW50KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJh
bWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQg
SW1hZ2VEZWNvZGVyUXQ6OmZvcmNlTG9hZEV2ZXJ5dGhpbmcKICAgICBkbyB7CiAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoKytpbWFnZUNvdW50KTsKICAgICAgICAgaW50ZXJuYWxI
YW5kbGVDdXJyZW50SW1hZ2UoaW1hZ2VDb3VudCAtIDEpOwotICAgIH0gd2hpbGUoIW1fZmFpbGVk
KTsKKyAgICB9IHdoaWxlICghbV9mYWlsZWQpOwogCiAgICAgLy8gSWYgd2UgZmFpbGVkIGRlY29k
aW5nIHRoZSBmaXJzdCBpbWFnZSB3ZSBhY3R1YWxseQogICAgIC8vIGhhdmUgbm8gaW1hZ2VzIGFu
ZCBuZWVkIHRvIGtlZXAgbV9mYWlsZWQgc2V0IHRvCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NDcyNykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRC
dWZmZXIoY2hhCiAKIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhKQogewotICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBm
aWd1cmUgb3V0IHdoYXQga2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdpdGguCisgICAgLy8g
V2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdl
IHdlJ3JlIGRlYWxpbmcKKyAgICAvLyB3aXRoLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
YXhNYXJrZXJMZW5ndGggPSA0OwogICAgIGNoYXIgY29udGVudHNbbWF4TWFya2VyTGVuZ3RoXTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbWF4
TWFya2VyTGVuZ3RoLCBkYXRhLCAwKTsKQEAgLTY4LDE2ICs2OSwxMSBAQCBJbWFnZURlY29kZXIq
IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0CiAgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VE
ZWNvZGVyKCk7CiAKICAgICAvLyBUZXN0IGZvciBQTkcuCi0gICAgaWYgKHVDb250ZW50c1swXT09
MHg4OSAmJgotICAgICAgICB1Q29udGVudHNbMV09PTB4NTAgJiYKLSAgICAgICAgdUNvbnRlbnRz
WzJdPT0weDRFICYmCi0gICAgICAgIHVDb250ZW50c1szXT09MHg0NykKKyAgICBpZiAoIW1lbWNt
cChjb250ZW50cywgIlx4ODlceDUwXHg0RVx4NDciLCA0KSkKICAgICAgICAgcmV0dXJuIG5ldyBQ
TkdJbWFnZURlY29kZXIoKTsKIAogICAgIC8vIEpQRUcKLSAgICBpZiAodUNvbnRlbnRzWzBdPT0w
eEZGICYmCi0gICAgICAgIHVDb250ZW50c1sxXT09MHhEOCAmJgotICAgICAgICB1Q29udGVudHNb
Ml09PTB4RkYpCisgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKSkK
ICAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAvLyBCTVAKQEAg
LTg2LDggKzgyLDcgQEAgSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdAog
CiAgICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEg
Mi1ieXRlIDEuCiAgICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDIt
Ynl0ZSAyLgotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAwMCIsIDQp
IHx8Ci0gICAgICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwgNCkpCisg
ICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFceDAwIiwgNCkgfHwgIW1lbWNt
cChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAiLCA0KSkKICAgICAgICAgcmV0dXJuIG5ldyBJ
Q09JbWFnZURlY29kZXIoKTsKIAogICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0
aGUgaGVjayB0aGlzIGlzLgpAQCAtMTA4LDEwICsxMDMsMTAgQEAgdm9pZCBSR0JBMzJCdWZmZXI6
OmNsZWFyKCkKIHsKICAgICBtX2J5dGVzLmNsZWFyKCk7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVt
cHR5OwotICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFy
RnJhbWVCdWZmZXJDYWNoZSgpCi0gICAgLy8gY2FsbHMgdGhpcyB0byBmcmVlIHRoZSBiaXRtYXAg
ZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCi0gICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkg
YW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCi0gICAgLy8gb3RoZXIg
bWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCisgICAgLy8gTk9URTogRG8gbm90IHJl
c2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhp
cworICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxp
a2UgaW5pdEZyYW1lQnVmZmVyKCkgYW5kCisgICAgLy8gZnJhbWVDb21wbGV0ZSgpIG1heSBzdGls
bCBuZWVkIHRvIHJlYWQgb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUKKyAgICAvLyBs
YXRlci4KIH0KIAogdm9pZCBSR0JBMzJCdWZmZXI6Onplcm9GaWxsKCkKQEAgLTEzMiw4ICsxMjcs
OCBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3QgCiAKIGJvb2wgUkdC
QTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKIHsKLSAgICAv
LyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSBp
ZiB0aGUKLSAgICAvLyByZXF1ZXN0ZWQgc2l6ZSB3YXMgdG9vIGJpZy4uLgorICAgIC8vIE5PVEU6
IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZSBy
ZXF1ZXN0ZWQKKyAgICAvLyBzaXplIHdhcyB0b28gYmlnLi4uCiAgICAgbV9ieXRlcy5yZXNpemUo
bmV3V2lkdGggKiBuZXdIZWlnaHQpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CiAKQEAgLTE5NSwxMyArMTkwLDExIEBAIGlubGluZSB2b2lkIGZpbGxTY2FsZWRW
YWx1ZXMoVmVjdG9yPGludD4KIHsKICAgICBkb3VibGUgaW5mbGF0ZVJhdGUgPSAxLiAvIHNjYWxl
UmF0ZTsKICAgICBzY2FsZWRWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KHN0YXRpY19jYXN0PGludD4o
bGVuZ3RoICogc2NhbGVSYXRlICsgMC41KSk7Ci0gICAgZm9yIChpbnQgc2NhbGVkSW5kZXggPSAw
OzspIHsKKyAgICBmb3IgKGludCBzY2FsZWRJbmRleCA9IDA7IDsgKytzY2FsZWRJbmRleCkgewog
ICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlZEluZGV4ICogaW5mbGF0
ZVJhdGUgKyAwLjUpOwotICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAg
IHNjYWxlZFZhbHVlcy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgKytzY2FsZWRJbmRleDsK
LSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgc2NhbGVkVmFsdWVzLmFwcGVuZChpbmRleCk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDU0NzI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTggKzQ1LDIxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIFRoZSBSR0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2Vu
dHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBSR0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIg
aXMgd2hhdCBhbGwKLSAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAg
RnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQg
dGhpcyBidWZmZXIuCisgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0
aGUgZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMgorICAgIC8vIGZvcm1hdC4gIFRoaXMgYnVm
ZmVyIGlzIHdoYXQgYWxsIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uCisgICAg
Ly8gRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5k
ZWQgdGhpcyBidWZmZXIuCiAgICAgY2xhc3MgUkdCQTMyQnVmZmVyIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFtZVBhcnRpYWwsIEZyYW1l
Q29tcGxldGUgfTsKICAgICAgICAgZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKLSAgICAgICAg
ICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1
cmUgeW91IGF1ZGl0IGFsbAotICAgICAgICAgICAgLy8gdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5
IGNhc3QgcmF3IHZhbHVlcyB0by9mcm9tIHRoZXNlIGNvbnN0YW50cy4KLSAgICAgICAgICAgIERp
c3Bvc2VOb3RTcGVjaWZpZWQsICAgICAgIC8vIExlYXZlIGZyYW1lIGluIGZyYW1lYnVmZmVyCi0g
ICAgICAgICAgICBEaXNwb3NlS2VlcCwgICAgICAgICAgICAgICAvLyBMZWF2ZSBmcmFtZSBpbiBm
cmFtZWJ1ZmZlcgotICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAgLy8gQ2xl
YXIgZnJhbWUgdG8gdHJhbnNwYXJlbnQKLSAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2
aW91cywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCisg
ICAgICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwg
bWFrZSBzdXJlIHlvdSBhdWRpdAorICAgICAgICAgICAgLy8gYWxsIHVzZXJzLCBhcyBzb21lIHVz
ZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZQorICAgICAgICAgICAgLy8gY29u
c3RhbnRzLgorICAgICAgICAgICAgRGlzcG9zZU5vdFNwZWNpZmllZCwgICAgICAvLyBMZWF2ZSBm
cmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAgICAgICAgICAgRGlzcG9zZUtlZXAsICAgICAgICAgICAg
ICAvLyBMZWF2ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAgICAgICAgICAgRGlzcG9zZU92ZXJ3
cml0ZUJnY29sb3IsICAvLyBDbGVhciBmcmFtZSB0byB0cmFuc3BhcmVudAorICAgICAgICAgICAg
RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzLCAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFt
ZWJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50
cwogICAgICAgICB9OwogI2lmIFBMQVRGT1JNKFNLSUEpIHx8IFBMQVRGT1JNKFFUKQogICAgICAg
ICB0eXBlZGVmIHVpbnQzMl90IFBpeGVsRGF0YTsKQEAgLTE3OCwyNiArMTgxLDMzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9ieXRlczsKICAgICAg
ICAgSW50U2l6ZSBtX3NpemU7ICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlz
IHNob3VsZCBiZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMg
SW1hZ2VEZWNvZGVyOjptX3NpemUuCi0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgICAgICAvLyBX
aGV0aGVyIG9yIG5vdCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVyIGhhdmUgdHJhbnNw
YXJlbmN5LgorICAgICAgICBib29sIG1faGFzQWxwaGE7ICAgICAgLy8gV2hldGhlciBvciBub3Qg
YW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSB0cmFuc3BhcmVuY3kuCiAjZW5kaWYKLSAgICAgICAgSW50UmVjdCBtX3Jl
Y3Q7ICAgICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0
aGluIHRoZSBvdmVyYWxsIGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJ
RiBmcmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFs
IHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgotICAgICAgICBG
cmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBvciBub3QgdGhpcyBmcmFtZSBpcyBjb21w
bGV0ZWx5IGZpbmlzaGVkIGRlY29kaW5nLgorICAgICAgICBJbnRSZWN0IG1fcmVjdDsgICAgICAg
Ly8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvdmVyYWxsIGJ1ZmZlci4gIFRoaXMgd2ls
bCBhbHdheXMganVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVu
dGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlIG92ZXJh
bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltYWdlIHNpemUuCisgICAgICAg
IEZyYW1lU3RhdHVzIG1fc3RhdHVzOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGZyYW1lIGlzIGNv
bXBsZXRlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbmlzaGVkIGRlY29k
aW5nLgogICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAgLy8gVGhlIGFuaW1hdGlvbiBkZWxh
eS4KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBk
YXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFt
ZS4KICAgICB9OwogCi0gICAgLy8gVGhlIEltYWdlRGVjb2RlciBjbGFzcyByZXByZXNlbnRzIGEg
YmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0IGRlY29kZXJzCi0gICAgLy8gKGUu
Zy4sIEdJRiwgSlBHLCBQTkcsIElDTykgdG8gZGVyaXZlIGZyb20uICBBbGwgZGVjb2RlcnMgZGVj
b2RlIGludG8gUkdCQTMyIGZvcm1hdAotICAgIC8vIGFuZCB0aGUgYmFzZSBjbGFzcyBtYW5hZ2Vz
IHRoZSBSR0JBMzIgZnJhbWUgY2FjaGUuCisgICAgLy8gVGhlIEltYWdlRGVjb2RlciBjbGFzcyBy
ZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0CisgICAgLy8g
ZGVjb2RlcnMgKGUuZy4sIEdJRiwgSlBHLCBQTkcsIElDTykgdG8gZGVyaXZlIGZyb20uICBBbGwg
ZGVjb2RlcnMgZGVjb2RlCisgICAgLy8gaW50byBSR0JBMzIgZm9ybWF0IGFuZCB0aGUgYmFzZSBj
bGFzcyBtYW5hZ2VzIHRoZSBSR0JBMzIgZnJhbWUgY2FjaGUuCisgICAgLy8KKyAgICAvLyBFTkFC
TEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxvd3MgaW1hZ2UgZGVjb2RlcnMgdG8g
d3JpdGUKKyAgICAvLyBkaXJlY3RseSB0byBzY2FsZWQgb3V0cHV0IGJ1ZmZlcnMgYnkgZG93biBz
YW1wbGluZy4gQ2FsbAorICAgIC8vIHNldE1heE51bVBpeGVscygpIHRvIHNwZWNpZnkgdGhlIGJp
Z2dlc3Qgc2l6ZSB0aGF0IGRlY29kZWQgaW1hZ2VzIGNhbgorICAgIC8vIGhhdmUuIEltYWdlIGRl
Y29kZXJzIHdpbGwgZGVmbGF0ZSB0aG9zZSBpbWFnZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4KKyAg
ICAvLyBtX21heE51bVBpeGVscy4gKE5vdCBzdXBwb3J0ZWQgYnkgYWxsIGltYWdlIGRlY29kZXJz
IHlldCkKICAgICBjbGFzcyBJbWFnZURlY29kZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykg
YWxsb3dzIGltYWdlIGRlY29kZXJzIHRvIHdyaXRlIGRpcmVjdGx5IHRvCi0gICAgICAgIC8vIHNj
YWxlZCBvdXRwdXQgYnVmZmVycyBieSBkb3duIHNhbXBsaW5nLiBDYWxsIHNldE1heE51bVBpeGVs
cygpIHRvIHNwZWNpZnkgdGhlCi0gICAgICAgIC8vIGJpZ2dlc3Qgc2l6ZSB0aGF0IGRlY29kZWQg
aW1hZ2VzIGNhbiBoYXZlLiBJbWFnZSBkZWNvZGVycyB3aWxsIGRlZmxhdGUgdGhvc2UKLSAgICAg
ICAgLy8gaW1hZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIG1fbWF4TnVtUGl4ZWxzLiAoTm90IHN1
cHBvcnRlZCBieSBhbGwgaW1hZ2UgZGVjb2RlcnMgeWV0KQogICAgICAgICBJbWFnZURlY29kZXIo
KQogICAgICAgICAgICAgOiBtX3NjYWxlZChmYWxzZSkKICAgICAgICAgICAgICwgbV9mYWlsZWQo
ZmFsc2UpCkBAIC0yMTQsMjEgKzIyNCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IC8vIG5lZWRpbmcgdG8gd3JpdGUgYSBkZWRpY2F0ZWQgc2V0RGF0YSgpIGltcGxlbWVudGF0aW9u
LgogICAgICAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhKTsKIAotICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5
IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBlLgorICAgICAg
ICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBh
biB1bmRlY29kZWQgaW1hZ2UKKyAgICAgICAgLy8gb2YgdGhpcyB0eXBlLgogICAgICAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKIAotICAgICAgICAvLyBB
bGwgc3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRh
dGEgdGhleSBhcmUgZ2l2ZW4uCiAgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9CisKICAgICAgICAgdmlydHVhbCB2b2lk
IHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAg
ICAgewogICAgICAgICAgICAgbV9kYXRhID0gZGF0YTsKICAgICAgICAgICAgIG1faXNBbGxEYXRh
UmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhp
cyBkZWZhdWx0Ci0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlm
IHRoZSBzaXplIGhhcyBiZWVuIHNldCBhbmQgd2UgaGF2ZSBub3QKLSAgICAgICAgLy8gc2VlbiBh
IGZhaWx1cmUuIERlY29kZXJzIG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8gbGF6aWx5IGRl
Y29kZQotICAgICAgICAvLyBlbm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KKyAg
ICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVj
b2RlZCB5ZXQuIFRoaXMKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IHJl
dHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBoYXMgYmVlbiBzZXQgYW5kCisgICAgICAgIC8vIHdlIGhh
dmUgbm90IHNlZW4gYSBmYWlsdXJlLiBEZWNvZGVycyBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlz
IHRvCisgICAgICAgIC8vIGxhemlseSBkZWNvZGUgZW5vdWdoIG9mIHRoZSBpbWFnZSB0byBnZXQg
dGhlIHNpemUuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fZmFpbGVkICYmIG1fc2l6ZUF2YWlsYWJsZTsgCkBA
IC0yNTYsMTAgKzI2NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1
cm4gc2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBpbWFnZSBk
ZWNvZGVycyB0byBzZXQgdGhlaXIgZGVjb2RlZCBzaXplLCB0aGlzIGFsc28gY2hlY2sKLSAgICAg
ICAgLy8gdGhlIHNpemUgZm9yIHZhbGlkaXR5LiBJdCB3aWxsIHJldHVybiB0cnVlIGlmIHRoZSBz
aXplIHdhcyBzZXQsIG9yIGZhbHNlCi0gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLiBP
biBlcnJvciwgdGhlIG1fZmFpbGVkIGZsYWcgd2lsbCBiZSBzZXQgYW5kIHRoZQotICAgICAgICAv
LyBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgZGVjb2RpbmcuCisgICAgICAgIC8vIENh
bGxlZCBieSB0aGUgaW1hZ2UgZGVjb2RlcnMgdG8gc2V0IHRoZWlyIGRlY29kZWQgc2l6ZSwgdGhp
cyBhbHNvCisgICAgICAgIC8vIGNoZWNrcyB0aGUgc2l6ZSBmb3IgdmFsaWRpdHkuIEl0IHdpbGwg
cmV0dXJuIHRydWUgaWYgdGhlIHNpemUgd2FzCisgICAgICAgIC8vIHNldCwgb3IgZmFsc2UgaWYg
dGhlcmUgaXMgYW4gZXJyb3IuIE9uIGVycm9yLCB0aGUgbV9mYWlsZWQgZmxhZyB3aWxsCisgICAg
ICAgIC8vIGJlIHNldCBhbmQgdGhlIGNhbGxlciBzaG91bGQgaW1tZWRpYXRlbHkgc3RvcCBkZWNv
ZGluZy4KICAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgs
IGhlaWdodCkpIHsKQEAgLTI3MSwyOSArMjgyLDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlIHRvdGFs
IG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0IG11
bHRpcGxlIGZyYW1lcwotICAgICAgICAvLyB3aWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRo
ZSBhbnN3ZXIgaWYgdGhleSBuZWVkIHRvICh3aXRob3V0IG5lY2Vzc2FyaWx5Ci0gICAgICAgIC8v
IGRlY29kaW5nIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgorICAgICAgICAvLyBUaGUg
dG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgQ2xhc3NlcyB0aGF0IHN1cHBv
cnQKKyAgICAgICAgLy8gbXVsdGlwbGUgZnJhbWVzIHdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBm
b3IgdGhlIGFuc3dlciBpZiB0aGV5IG5lZWQKKyAgICAgICAgLy8gdG8gKHdpdGhvdXQgbmVjZXNz
YXJpbHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCiAgICAgICAgIHZp
cnR1YWwgc2l6ZV90IGZyYW1lQ291bnQoKSB7IHJldHVybiAxOyB9CiAKICAgICAgICAgLy8gVGhl
IG51bWJlciBvZiByZXBldGl0aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmltYXRpb24gbG9vcC4K
ICAgICAgICAgdmlydHVhbCBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gY0Fu
aW1hdGlvbk5vbmU7IH0KIAotICAgICAgICAvLyBDYWxsZWQgdG8gb2J0YWluIHRoZSBSR0JBMzJC
dWZmZXIgZnVsbCBvZiBkZWNvZGVkIGRhdGEgZm9yIHJlbmRlcmluZy4gIFRoZQotICAgICAgICAv
LyBkZWNvZGVyIHBsdWdpbiB3aWxsIGRlY29kZSBhcyBtdWNoIG9mIHRoZSBmcmFtZSBhcyBpdCBj
YW4gYmVmb3JlIGhhbmRpbmcKLSAgICAgICAgLy8gYmFjayB0aGUgYnVmZmVyLgorICAgICAgICAv
LyBDYWxsZWQgdG8gb2J0YWluIHRoZSBSR0JBMzJCdWZmZXIgZnVsbCBvZiBkZWNvZGVkIGRhdGEg
Zm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8gVGhlIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2Rl
IGFzIG11Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUKKyAgICAgICAgLy8gaGFuZGlu
ZyBiYWNrIHRoZSBidWZmZXIuCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhl
IHVuZGVybHlpbmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEgdHJhbnNwYXJlbmN5
LgorICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQg
ZXZlbiBzdXBwb3J0cyBhbHBoYQorICAgICAgICAvLyB0cmFuc3BhcmVuY3kuCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
ICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KICAgICAgICAgdm9p
ZCBzZXRGYWlsZWQoKSB7IG1fZmFpbGVkID0gdHJ1ZTsgfQogCiAgICAgICAgIC8vIFdpcGUgb3V0
IGZyYW1lcyBpbiB0aGUgZnJhbWUgYnVmZmVyIGNhY2hlIGJlZm9yZSB8Y2xlYXJCZWZvcmVGcmFt
ZXwsCi0gICAgICAgIC8vIGFzc3VtaW5nIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBicmVha2lu
ZyBkZWNvZGluZy4gIERpZmZlcmVudCBkZWNvZGVycwotICAgICAgICAvLyBwbGFjZSBkaWZmZXJl
bnQgcmVzdHJpY3Rpb25zIG9uIHdoYXQgZnJhbWVzIGFyZSBzYWZlIHRvIGRlc3Ryb3ksIHNvIHRo
aXMKLSAgICAgICAgLy8gaXMgbGVmdCB0byB0aGVtIHRvIGltcGxlbWVudC4KKyAgICAgICAgLy8g
YXNzdW1pbmcgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlm
ZmVyZW50CisgICAgICAgIC8vIGRlY29kZXJzIHBsYWNlIGRpZmZlcmVudCByZXN0cmljdGlvbnMg
b24gd2hhdCBmcmFtZXMgYXJlIHNhZmUgdG8KKyAgICAgICAgLy8gZGVzdHJveSwgc28gdGhpcyBp
cyBsZWZ0IHRvIHRoZW0gdG8gaW1wbGVtZW50LgogICAgICAgICAvLyBGb3IgY29udmVuaWVuY2Un
cyBzYWtlLCB3ZSBwcm92aWRlIGEgZGVmYXVsdCAoZW1wdHkpIGltcGxlbWVudGF0aW9uLAogICAg
ICAgICAvLyBzaW5jZSBpbiBwcmFjdGljZSBvbmx5IEdJRnMgd2lsbCBldmVyIHVzZSB0aGlzLgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJl
Zm9yZUZyYW1lKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTQ3MjcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRp
YyBjb25zdCBzaXplX3Qgc2l6ZU9mRmlsZUhlYWRlciA9IDE0OwogCiBCTVBJbWFnZURlY29kZXI6
OkJNUEltYWdlRGVjb2RlcigpCi0gICAgOiBJbWFnZURlY29kZXIoKQotICAgICwgbV9hbGxEYXRh
UmVjZWl2ZWQoZmFsc2UpCi0gICAgLCBtX2RlY29kZWRPZmZzZXQoMCkKKyAgICA6IG1fZGVjb2Rl
ZE9mZnNldCgwKQogewogfQogCkBAIC01Myw3ICs1MSw2IEBAIHZvaWQgQk1QSW1hZ2VEZWNvZGVy
OjpzZXREYXRhKFNoYXJlZEJ1ZmYKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW1hZ2VEZWNvZGVy
OjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgbV9hbGxEYXRhUmVjZWl2ZWQg
PSBhbGxEYXRhUmVjZWl2ZWQ7CiAgICAgaWYgKG1fcmVhZGVyKQogICAgICAgICBtX3JlYWRlci0+
c2V0RGF0YShkYXRhKTsKIH0KQEAgLTYxLDcgKzU4LDcgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6
OnNldERhdGEoU2hhcmVkQnVmZgogYm9vbCBCTVBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCiB7CiAgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWls
ZWQoKSkKLSAgICAgICAgZGVjb2RlV2l0aENoZWNrRm9yRGF0YUVuZGVkKHRydWUpOworICAgICAg
ICBkZWNvZGUodHJ1ZSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKTsKIH0KQEAgLTc2LDMxICs3MywyOSBAQCBSR0JBMzJCdWZmZXIqIEJNUEltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmCiAKICAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVy
Q2FjaGUuZmlyc3QoKTsKICAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUgJiYgIWZhaWxlZCgpKQotICAgICAgICBkZWNvZGVXaXRoQ2hlY2tGb3JE
YXRhRW5kZWQoZmFsc2UpOworICAgICAgICBkZWNvZGUoZmFsc2UpOwogICAgIHJldHVybiBidWZm
ZXI7CiB9CiAKLXZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGVXaXRoQ2hlY2tGb3JEYXRhRW5k
ZWQoYm9vbCBvbmx5U2l6ZSkKK3ZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5
U2l6ZSkKIHsKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElm
IHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUg
ZGF0YSwgZGVjb2RpbmcKICAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlmICghZGVjb2RlKG9ubHlT
aXplKSAmJiBtX2FsbERhdGFSZWNlaXZlZCkKKyAgICBpZiAoIWRlY29kZUhlbHBlcihvbmx5U2l6
ZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAgc2V0RmFpbGVkKCk7CiB9CiAKLWJv
b2wgQk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKK2Jvb2wgQk1QSW1hZ2VE
ZWNvZGVyOjpkZWNvZGVIZWxwZXIoYm9vbCBvbmx5U2l6ZSkKIHsKICAgICBzaXplX3QgaW1nRGF0
YU9mZnNldCA9IDA7Ci0gICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPCBzaXplT2ZGaWxlSGVhZGVy
KQotICAgICAgICAmJiAhcHJvY2Vzc0ZpbGVIZWFkZXIoJmltZ0RhdGFPZmZzZXQpKQorICAgIGlm
ICgobV9kZWNvZGVkT2Zmc2V0IDwgc2l6ZU9mRmlsZUhlYWRlcikgJiYgIXByb2Nlc3NGaWxlSGVh
ZGVyKCZpbWdEYXRhT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFt
X3JlYWRlcikgewotICAgICAgICBtX3JlYWRlci5zZXQobmV3IEJNUEltYWdlUmVhZGVyKHRoaXMs
IG1fZGVjb2RlZE9mZnNldCwgaW1nRGF0YU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSkpOworICAgICAgICBtX3JlYWRlci5zZXQobmV3IEJNUElt
YWdlUmVhZGVyKHRoaXMsIG1fZGVjb2RlZE9mZnNldCwgaW1nRGF0YU9mZnNldCwgZmFsc2UpKTsK
ICAgICAgICAgbV9yZWFkZXItPnNldERhdGEobV9kYXRhLmdldCgpKTsKICAgICB9CiAKQEAgLTEx
OCw4ICsxMTMsNyBAQCBib29sIEJNUEltYWdlRGVjb2Rlcjo6cHJvY2Vzc0ZpbGVIZWFkZXIoCiAg
ICAgQVNTRVJUKCFtX2RlY29kZWRPZmZzZXQpOwogICAgIGlmIChtX2RhdGEtPnNpemUoKSA8IHNp
emVPZkZpbGVIZWFkZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCB1aW50MTZf
dCBmaWxlVHlwZSA9Ci0gICAgICAgIChtX2RhdGEtPmRhdGEoKVswXSA8PCA4KSB8IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1fZGF0YS0+ZGF0YSgpWzFdKTsKKyAgICBjb25zdCB1aW50MTZfdCBmaWxl
VHlwZSA9IChtX2RhdGEtPmRhdGEoKVswXSA8PCA4KSB8IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1f
ZGF0YS0+ZGF0YSgpWzFdKTsKICAgICAqaW1nRGF0YU9mZnNldCA9IHJlYWRVaW50MzIoMTApOwog
ICAgIG1fZGVjb2RlZE9mZnNldCA9IHNpemVPZkZpbGVIZWFkZXI7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5o
CShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwyOSArNTAsMjMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIGlubGluZSB1aW50MzJfdCBy
ZWFkVWludDMyKGludCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBCTVBJbWFnZVJlYWRlcjo6cmVhZFVpbnQzMihtX2RhdGEuZ2V0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICsgb2Zmc2V0
KTsKKyAgICAgICAgICAgIHJldHVybiBCTVBJbWFnZVJlYWRlcjo6cmVhZFVpbnQzMihtX2RhdGEu
Z2V0KCksIG1fZGVjb2RlZE9mZnNldCArIG9mZnNldCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBEZWNvZGVzIHRoZSBpbWFnZS4gIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgc3RvcHMgZGVjb2Rp
bmcgYWZ0ZXIKICAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGltYWdlIHNpemUuICBJZiBkZWNv
ZGluZyBmYWlscyBidXQgdGhlcmUgaXMgbm8gbW9yZQogICAgICAgICAvLyBkYXRhIGNvbWluZywg
c2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgotICAgICAgICB2b2lkIGRlY29kZVdpdGhD
aGVja0ZvckRhdGFFbmRlZChib29sIG9ubHlTaXplKTsKKyAgICAgICAgdm9pZCBkZWNvZGUoYm9v
bCBvbmx5U2l6ZSk7CiAKICAgICAgICAgLy8gRGVjb2RlcyB0aGUgaW1hZ2UuICBJZiB8b25seVNp
emV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nIGFmdGVyCiAgICAgICAgIC8vIGNhbGN1bGF0aW5n
IHRoZSBpbWFnZSBzaXplLiAgUmV0dXJucyB3aGV0aGVyIGRlY29kaW5nIHN1Y2NlZWRlZC4KLSAg
ICAgICAgLy8gTk9URTogVXNlZCBpbnRlcm5hbGx5IGJ5IGRlY29kZVdpdGhDaGVja0ZvckRhdGFF
bmRlZCgpLiAgT3RoZXIgcGVvcGxlCi0gICAgICAgIC8vIHNob3VsZCBub3QgY2FsbCB0aGlzLgot
ICAgICAgICBib29sIGRlY29kZShib29sIG9ubHlTaXplKTsKKyAgICAgICAgYm9vbCBkZWNvZGVI
ZWxwZXIoYm9vbCBvbmx5U2l6ZSk7CiAKICAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBmaWxlIGhl
YWRlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAgU2V0cwogICAgICAgICAvLyB8Kmlt
Z0RhdGFPZmZzZXR8IGJhc2VkIG9uIHRoZSBoZWFkZXIgY29udGVudHMuICBSZXR1cm5zIHRydWUg
aWYgdGhlCiAgICAgICAgIC8vIGZpbGUgaGVhZGVyIGNvdWxkIGJlIGRlY29kZWQuCiAgICAgICAg
IGJvb2wgcHJvY2Vzc0ZpbGVIZWFkZXIoc2l6ZV90KiBpbWdEYXRhT2Zmc2V0KTsKIAotICAgICAg
ICAvLyBUcnVlIGlmIHdlJ3ZlIHNlZW4gYWxsIHRoZSBkYXRhLgotICAgICAgICBib29sIG1fYWxs
RGF0YVJlY2VpdmVkOwotCiAgICAgICAgIC8vIEFuIGluZGV4IGludG8gfG1fZGF0YXwgcmVwcmVz
ZW50aW5nIGhvdyBtdWNoIHdlJ3ZlIGFscmVhZHkgZGVjb2RlZC4KICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgb25seSB0cmFja3MgZGF0YSBfdGhpc18gY2xhc3MgZGVjb2Rlczsgb25jZSB0aGUK
ICAgICAgICAgLy8gQk1QSW1hZ2VSZWFkZXIgdGFrZXMgb3ZlciB0aGlzIHdpbGwgbm90IGJlIHVw
ZGF0ZWQgZnVydGhlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDU0NzI3KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMCArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUJN
UEltYWdlUmVhZGVyOjpCTVBJbWFnZVJlYWRlcihJbWFnZURlY29kZXIqIHBhcmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVjb2RlZEFuZEhlYWRlck9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW1nRGF0YU9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNBbmRNYXNrKQorQk1QSW1hZ2VS
ZWFkZXI6OkJNUEltYWdlUmVhZGVyKEltYWdlRGVjb2RlciogcGFyZW50LCBzaXplX3QgZGVjb2Rl
ZEFuZEhlYWRlck9mZnNldCwgc2l6ZV90IGltZ0RhdGFPZmZzZXQsIGJvb2wgdXNlc0FuZE1hc2sp
CiAgICAgOiBtX3BhcmVudChwYXJlbnQpCiAgICAgLCBtX2J1ZmZlcigwKQogICAgICwgbV9kZWNv
ZGVkT2Zmc2V0KGRlY29kZWRBbmRIZWFkZXJPZmZzZXQpCkBAIC02Myw4ICs2MCw3IEBAIGJvb2wg
Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChib29sIG9ubHkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gUmVhZCBhbmQgcHJvY2VzcyBpbmZvIGhlYWRlci4KLSAgICBpZiAoKG1fZGVj
b2RlZE9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKQotICAg
ICAgICAmJiAhcHJvY2Vzc0luZm9IZWFkZXIoKSkKKyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA8
IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKSAmJiAhcHJvY2Vzc0luZm9I
ZWFkZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcHJvY2Vzc0luZm9IZWFk
ZXIoKSBzZXQgdGhlIHNpemUsIHNvIGlmIHRoYXQncyBhbGwgd2UgbmVlZGVkLCB3ZSdyZSBkb25l
LgpAQCAtODIsOCArNzgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBv
bmx5CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFT
U0VSVChtX2J1ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcg
dXMgdG8gZGVjb2RlIQogICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghbV9idWZmZXItPnNldFNpemUobV9wYXJlbnQt
PnNpemUoKS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50
LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFy
ZW50LT5zaXplKCkud2lkdGgoKSwgbV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gc2V0RmFpbGVkKCk7ICAvLyBVbmFibGUgdG8gYWxsb2NhdGUuCiAgICAgICAg
IG1fYnVmZmVyLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwogICAgICAg
ICAvLyBzZXRTaXplKCkgY2FsbHMgZXJhc2VBUkdCKCksIHdoaWNoIHJlc2V0cyB0aGUgYWxwaGEg
ZmxhZywgc28gd2UgZm9yY2UKQEAgLTEwMCw5ICs5NSw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6
OmRlY29kZUJNUChib29sIG9ubHkKIAogICAgIC8vIERlY29kZSB0aGUgZGF0YS4KICAgICBpZiAo
KG1fYW5kTWFza1N0YXRlICE9IERlY29kaW5nKSAmJiAhcGFzdEVuZE9mSW1hZ2UoMCkpIHsKLSAg
ICAgICAgaWYgKChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEU0KQotICAgICAgICAg
ICAgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTgpCi0gICAgICAgICAgICB8
fCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFMjQpKSB7CisgICAgICAgIGlmICgo
bV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFNCkgfHwgKG1faW5mb0hlYWRlci5iaUNv
bXByZXNzaW9uID09IFJMRTgpIHx8IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEUy
NCkpIHsKICAgICAgICAgICAgIGlmICghcHJvY2Vzc1JMRURhdGEoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAoIXByb2Nlc3NOb25STEVEYXRhKGZh
bHNlLCAwKSkKQEAgLTEzMyw4ICsxMjYsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpyZWFkSW5m
b0hlYWRlclNpemUoCiB7CiAgICAgLy8gR2V0IHNpemUgb2YgaW5mbyBoZWFkZXIuCiAgICAgQVNT
RVJUKG1fZGVjb2RlZE9mZnNldCA9PSBtX2hlYWRlck9mZnNldCk7Ci0gICAgaWYgKChtX2RlY29k
ZWRPZmZzZXQgPiBtX2RhdGEtPnNpemUoKSkKLSAgICAgICAgfHwgKChtX2RhdGEtPnNpemUoKSAt
IG1fZGVjb2RlZE9mZnNldCkgPCA0KSkKKyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA+IG1fZGF0
YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IDQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9pbmZvSGVhZGVyLmJpU2l6ZSA9IHJlYWRVaW50
MzIoMCk7CiAgICAgLy8gRG9uJ3QgaW5jcmVtZW50IG1fZGVjb2RlZE9mZnNldCBoZXJlLCBpdCBq
dXN0IG1ha2VzIHRoZSBjb2RlIGluCkBAIC0xNDMsOSArMTM1LDcgQEAgYm9vbCBCTVBJbWFnZVJl
YWRlcjo6cmVhZEluZm9IZWFkZXJTaXplKAogICAgIC8vIERvbid0IGFsbG93IHRoZSBoZWFkZXIg
dG8gb3ZlcmZsb3cgKHdoaWNoIHdvdWxkIGJlIGhhcm1sZXNzIGhlcmUsIGJ1dAogICAgIC8vIHBy
b2JsZW1hdGljIG9yIGF0IGxlYXN0IGNvbmZ1c2luZyBpbiBvdGhlciBwbGFjZXMpLCBvciB0byBv
dmVycnVuIHRoZQogICAgIC8vIGltYWdlIGRhdGEuCi0gICAgaWYgKCgobV9oZWFkZXJPZmZzZXQg
KyBtX2luZm9IZWFkZXIuYmlTaXplKSA8IG1faGVhZGVyT2Zmc2V0KQotICAgICAgICB8fCAobV9p
bWdEYXRhT2Zmc2V0Ci0gICAgICAgICAgICAmJiAobV9pbWdEYXRhT2Zmc2V0IDwgKG1faGVhZGVy
T2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkpKSkKKyAgICBpZiAoKChtX2hlYWRlck9mZnNl
dCArIG1faW5mb0hlYWRlci5iaVNpemUpIDwgbV9oZWFkZXJPZmZzZXQpIHx8IChtX2ltZ0RhdGFP
ZmZzZXQgJiYgKG1faW1nRGF0YU9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRl
ci5iaVNpemUpKSkpCiAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKIAogICAgIC8vIFNlZSBp
ZiB0aGlzIGlzIGEgaGVhZGVyIHNpemUgd2UgdW5kZXJzdGFuZDoKQEAgLTE1Niw5ICsxNDYsNyBA
QCBib29sIEJNUEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlclNpemUoCiAgICAgZWxzZSBpZiAo
KG1faW5mb0hlYWRlci5iaVNpemUgPT0gNDApIHx8IGlzV2luZG93c1Y0UGx1cygpKQogICAgICAg
ICA7CiAgICAgLy8gT1MvMiAyLng6IGFueSBtdWx0aXBsZSBvZiA0IGJldHdlZW4gMTYgYW5kIDY0
LCBpbmNsdXNpdmUsIG9yIDQyIG9yIDQ2Ci0gICAgZWxzZSBpZiAoKG1faW5mb0hlYWRlci5iaVNp
emUgPj0gMTYpICYmIChtX2luZm9IZWFkZXIuYmlTaXplIDw9IDY0KQotICAgICAgICAgICAgICYm
ICgoKG1faW5mb0hlYWRlci5iaVNpemUgJiAzKSA9PSAwKSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6
ZSA9PSA0MikKLSAgICAgICAgICAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaVNpemUgPT0gNDYp
KSkKKyAgICBlbHNlIGlmICgobV9pbmZvSGVhZGVyLmJpU2l6ZSA+PSAxNikgJiYgKG1faW5mb0hl
YWRlci5iaVNpemUgPD0gNjQpICYmICghKG1faW5mb0hlYWRlci5iaVNpemUgJiAzKSB8fCAobV9p
bmZvSGVhZGVyLmJpU2l6ZSA9PSA0MikgfHwgKG1faW5mb0hlYWRlci5iaVNpemUgPT0gNDYpKSkK
ICAgICAgICAgbV9pc09TMjJ4ID0gdHJ1ZTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKQEAgLTE3MCw5ICsxNTgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNz
SW5mb0hlYWRlcigpCiB7CiAgICAgLy8gUmVhZCBpbmZvIGhlYWRlci4KICAgICBBU1NFUlQobV9k
ZWNvZGVkT2Zmc2V0ID09IG1faGVhZGVyT2Zmc2V0KTsKLSAgICBpZiAoKG1fZGVjb2RlZE9mZnNl
dCA+IG1fZGF0YS0+c2l6ZSgpKQotICAgICAgICB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNv
ZGVkT2Zmc2V0KSA8IG1faW5mb0hlYWRlci5iaVNpemUpCi0gICAgICAgIHx8ICFyZWFkSW5mb0hl
YWRlcigpKQorICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpIHx8ICgo
bV9kYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgbV9pbmZvSGVhZGVyLmJpU2l6ZSkg
fHwgIXJlYWRJbmZvSGVhZGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2RlY29k
ZWRPZmZzZXQgKz0gbV9pbmZvSGVhZGVyLmJpU2l6ZTsKIApAQCAtMTg4LDExICsxNzQsOSBAQCBi
b29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzSW5mb0hlYWRlcigpCiAgICAgLy8gY29sb3JzIiwg
c28gc2V0IGl0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgZm9yIHRoaXMgYml0IGRl
cHRoLgogICAgIC8vIEFsc28gZG8gdGhpcyBmb3IgYml0bWFwcyB0aGF0IHB1dCB0b28gbGFyZ2Ug
YSB2YWx1ZSBoZXJlLgogICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA8IDE2KSB7Ci0g
ICAgICBjb25zdCB1aW50MzJfdCBtYXhDb2xvcnMgPQotICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQzMl90PigxKSA8PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudDsKLSAgICAgIGlmICgobV9pbmZv
SGVhZGVyLmJpQ2xyVXNlZCA9PSAwKQotICAgICAgICAgIHx8IChtX2luZm9IZWFkZXIuYmlDbHJV
c2VkID4gbWF4Q29sb3JzKSkKLSAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9IG1heENv
bG9yczsKKyAgICAgIGNvbnN0IHVpbnQzMl90IG1heENvbG9ycyA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKSA8PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudDsKKyAgICAgIGlmICghbV9pbmZvSGVh
ZGVyLmJpQ2xyVXNlZCB8fCAobV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA+IG1heENvbG9ycykpCisg
ICAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9IG1heENvbG9yczsKICAgICB9CiAKICAg
ICAvLyBGb3IgYW55IGJpdG1hcHMgdGhhdCBzZXQgdGhlaXIgQml0Q291bnQgdG8gdGhlIHdyb25n
IHZhbHVlLCByZXNldCB0aGUKQEAgLTIwNiw3ICsxOTAsNyBAQCBib29sIEJNUEltYWdlUmVhZGVy
Ojpwcm9jZXNzSW5mb0hlYWRlcigpCiAgICAgLy8gVGVsbCBjYWxsZXIgd2hhdCBzdGlsbCBuZWVk
cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID49IDE2
KQogICAgICAgICBtX25lZWRUb1Byb2Nlc3NCaXRtYXNrcyA9IHRydWU7Ci0gICAgZWxzZSBpZiAo
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiAwKQorICAgIGVsc2UgaWYgKG1faW5mb0hlYWRlci5i
aUJpdENvdW50KQogICAgICAgICBtX25lZWRUb1Byb2Nlc3NDb2xvclRhYmxlID0gdHJ1ZTsKIAog
ICAgIHJldHVybiB0cnVlOwpAQCAtMjQ2LDggKzIzMCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6
OnJlYWRJbmZvSGVhZGVyKCkKICAgICAgICAgfSBlbHNlIGlmIChiaUNvbXByZXNzaW9uID4gNSkK
ICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsgIC8vIFNvbWUgdHlwZSB3ZSBkb24ndCB1
bmRlcnN0YW5kLgogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2luZm9IZWFkZXIuYmlDb21w
cmVzc2lvbiA9Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q29tcHJlc3Npb25UeXBlPihi
aUNvbXByZXNzaW9uKTsKKyAgICAgICAgICAgIG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID0g
c3RhdGljX2Nhc3Q8Q29tcHJlc3Npb25UeXBlPihiaUNvbXByZXNzaW9uKTsKICAgICB9CiAKICAg
ICAvLyBSZWFkIGNvbG9ycyB1c2VkLCBpZiBwcmVzZW50LgpAQCAtMjg4LDcgKzI3MSw3IEBAIGJv
b2wgQk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKIHsKICAgICAvLyBOb24tcG9z
aXRpdmUgd2lkdGhzL2hlaWdodHMgYXJlIGludmFsaWQuICAoV2UndmUgYWxyZWFkeSBmbGlwcGVk
IHRoZQogICAgIC8vIHNpZ24gb2YgdGhlIGhlaWdodCBmb3IgdG9wLWRvd24gYml0bWFwcy4pCi0g
ICAgaWYgKChtX2luZm9IZWFkZXIuYmlXaWR0aCA8PSAwKSB8fCAobV9pbmZvSGVhZGVyLmJpSGVp
Z2h0ID09IDApKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGggPD0gMCkgfHwgIW1faW5m
b0hlYWRlci5iaUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gT25seSBX
aW5kb3dzIFYzKyBoYXMgdG9wLWRvd24gYml0bWFwcy4KQEAgLTI5NiwxNiArMjc5LDEwIEBAIGJv
b2wgQk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gT25seSBiaXQgZGVwdGhzIG9mIDEsIDQsIDgsIG9yIDI0IGFyZSB1bml2
ZXJzYWxseSBzdXBwb3J0ZWQuCi0gICAgaWYgKChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAx
KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gNCkKLSAgICAgICAgJiYgKG1faW5mb0hl
YWRlci5iaUJpdENvdW50ICE9IDgpCi0gICAgICAgICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3Vu
dCAhPSAyNCkpIHsKKyAgICBpZiAoKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDEpICYmICht
X2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSA0KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQg
IT0gOCkgJiYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDI0KSkgewogICAgICAgICAvLyBX
aW5kb3dzIFYzKyBhZGRpdGlvbmFsbHkgc3VwcG9ydHMgYml0IGRlcHRocyBvZiAwIChmb3IgZW1i
ZWRkZWQKICAgICAgICAgLy8gSlBFRy9QTkcgaW1hZ2VzKSwgMTYsIGFuZCAzMi4KLSAgICAgICAg
aWYgKG1faXNPUzIxeCB8fCBtX2lzT1MyMngpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMCkKLSAgICAgICAgICAgICYm
IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxNikKLSAgICAgICAgICAgICYmIChtX2luZm9I
ZWFkZXIuYmlCaXRDb3VudCAhPSAzMikpCisgICAgICAgIGlmIChtX2lzT1MyMXggfHwgbV9pc09T
MjJ4IHx8IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291
bnQgIT0gMTYpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAzMikpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzE0LDcgKzI5MSw3IEBAIGJvb2wgQk1QSW1h
Z2VSZWFkZXI6OmlzSW5mb0hlYWRlclZhbGlkKCkKICAgICAvLyBzb21lIGNvbXByZXNzaW9uIHR5
cGVzLgogICAgIHN3aXRjaCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24pIHsKICAgICBjYXNl
IFJHQjoKLSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09IDApCisgICAgICAg
IGlmICghbV9pbmZvSGVhZGVyLmJpQml0Q291bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMjMsNDYgKzMwMCwzOCBAQCBib29sIEJNUEltYWdlUmVh
ZGVyOjppc0luZm9IZWFkZXJWYWxpZCgpCiAgICAgICAgIC8vIENvbXByZXNzaW9uID0gUkxFNCIg
KHdoaWNoIG1lYW5zICI0IGJpdCwgYnV0IHdpdGggYSAyLWNvbG9yIHRhYmxlIiksCiAgICAgICAg
IC8vIHNvIGFsc28gYWxsb3cgdGhlIHBhbGV0dGVkIFJMRSBjb21wcmVzc2lvbiB0eXBlcyB0byBo
YXZlIHRvbyBsb3cgYQogICAgICAgICAvLyBiaXQgY291bnQ7IHdlJ2xsIGNvcnJlY3QgdGhpcyBs
YXRlci4KLSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09IDAgfHwgbV9pbmZv
SGVhZGVyLmJpQml0Q291bnQgPiA4KQorICAgICAgICBpZiAoIW1faW5mb0hlYWRlci5iaUJpdENv
dW50IHx8IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA+IDgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUkxFNDoKICAgICAgICAgLy8gU2Vl
IGNvbW1lbnRzIGluIFJMRTguCi0gICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9
PSAwIHx8IG1faW5mb0hlYWRlci5iaUJpdENvdW50ID4gNCkKKyAgICAgICAgaWYgKCFtX2luZm9I
ZWFkZXIuYmlCaXRDb3VudCB8fCAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiA0KSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJJVEZJRUxE
UzoKICAgICAgICAgLy8gT25seSB2YWxpZCBmb3IgV2luZG93cyBWMysuCi0gICAgICAgIGlmICht
X2lzT1MyMXggfHwgbV9pc09TMjJ4KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDE2KSAmJiAobV9pbmZvSGVhZGVyLmJp
Qml0Q291bnQgIT0gMzIpKQorICAgICAgICBpZiAobV9pc09TMjF4IHx8IG1faXNPUzIyeCB8fCAo
KG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDE2KSAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291
bnQgIT0gMzIpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIEpQRUc6CiAgICAgY2FzZSBQTkc6CiAgICAgICAgIC8vIE9ubHkgdmFsaWQgZm9y
IFdpbmRvd3MgVjMrLgotICAgICAgICBpZiAobV9pc09TMjF4IHx8IG1faXNPUzIyeCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50
ICE9IDApCisgICAgICAgIGlmIChtX2lzT1MyMXggfHwgbV9pc09TMjJ4IHx8IG1faW5mb0hlYWRl
ci5iaUJpdENvdW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgSFVGRk1BTjFEOgogICAgICAgICAvLyBPbmx5IHZhbGlkIGZvciBPUy8yIDIu
eC4KLSAgICAgICAgaWYgKCFtX2lzT1MyMngpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxKQorICAgICAgICBpZiAoIW1f
aXNPUzIyeCB8fCAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSTEUyNDoKICAgICAgICAg
Ly8gT25seSB2YWxpZCBmb3IgT1MvMiAyLnguCi0gICAgICAgIGlmICghbV9pc09TMjJ4KQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291
bnQgIT0gMjQpCisgICAgICAgIGlmICghbV9pc09TMjJ4IHx8IChtX2luZm9IZWFkZXIuYmlCaXRD
b3VudCAhPSAyNCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwog
ICAgIApAQCAtMzc0LDggKzM0Myw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmlzSW5mb0hlYWRl
clZhbGlkKCkKICAgICB9CiAKICAgICAvLyBUb3AtZG93biBiaXRtYXBzIGNhbm5vdCBiZSBjb21w
cmVzc2VkOyB0aGV5IG11c3QgYmUgUkdCIG9yIEJJVEZJRUxEUy4KLSAgICBpZiAobV9pc1RvcERv
d24gJiYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uICE9IFJHQikKLSAgICAgICAgJiYgKG1f
aW5mb0hlYWRlci5iaUNvbXByZXNzaW9uICE9IEJJVEZJRUxEUykpCisgICAgaWYgKG1faXNUb3BE
b3duICYmIChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBSR0IpICYmIChtX2luZm9IZWFk
ZXIuYmlDb21wcmVzc2lvbiAhPSBCSVRGSUVMRFMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBSZWplY3QgdGhlIGZvbGxvd2luZyB2YWxpZCBiaXRtYXAgdHlwZXMgdGhhdCB3ZSBk
b24ndCBjdXJyZW50bHkgYm90aGVyCkBAIC0zODUsMTMgKzM1MywxMSBAQCBib29sIEJNUEltYWdl
UmVhZGVyOjppc0luZm9IZWFkZXJWYWxpZCgpCiAgICAgLy8gICAqIEJpdG1hcHMgbGFyZ2VyIHRo
YW4gMl4xNiBwaXhlbHMgaW4gZWl0aGVyIGRpbWVuc2lvbiAoV2luZG93cwogICAgIC8vICAgICBw
cm9iYWJseSBkb2Vzbid0IGRyYXcgdGhlc2Ugd2VsbCBhbnl3YXksIGFuZCB0aGUgZGVjb2RlZCBk
YXRhIHdvdWxkCiAgICAgLy8gICAgIHRha2UgYSBsb3Qgb2YgbWVtb3J5KS4KLSAgICBpZiAoKG1f
aW5mb0hlYWRlci5iaVdpZHRoID49ICgxIDw8IDE2KSkKLSAgICAgICAgfHwgKG1faW5mb0hlYWRl
ci5iaUhlaWdodCA+PSAoMSA8PCAxNikpKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGgg
Pj0gKDEgPDwgMTYpKSB8fCAobV9pbmZvSGVhZGVyLmJpSGVpZ2h0ID49ICgxIDw8IDE2KSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyAgICogV2luZG93cyBWMysgSlBFRy1pbi1CTVAg
YW5kIFBORy1pbi1CTVAgYml0bWFwcyAoc3VwcG9zZWRseSBub3QgZm91bmQKICAgICAvLyAgICAg
aW4gdGhlIHdpbGQsIG9ubHkgdXNlZCB0byBzZW5kIGRhdGEgdG8gcHJpbnRlcnM/KS4KLSAgICBp
ZiAoKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IEpQRUcpCi0gICAgICAgIHx8IChtX2lu
Zm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBQTkcpKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJp
Q29tcHJlc3Npb24gPT0gSlBFRykgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFBO
RykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyAgICogT1MvMiAyLnggSHVmZm1hbi1l
bmNvZGVkIG1vbm9jaHJvbWUgYml0bWFwcyAoc2VlCiAgICAgLy8gICAgICBodHRwOi8vd3d3LmZp
bGVmb3JtYXQuaW5mby9taXJyb3IvZWdmZi9jaDA5XzA1Lmh0bSAsIHJlOiAiRzMxRCIKQEAgLTQx
MywxMSArMzc5LDggQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0JpdG1hc2tzKCkKICAg
ICAgICAgLy8gMTYgYml0czogICAgTVNCIDwtICAgICAgICAgICAgICAgICAgICAgeFJSUlJSR0cg
R0dHQkJCQkIgLT4gTFNCCiAgICAgICAgIC8vIDI0LzMyIGJpdHM6IE1TQiA8LSBbQUFBQUFBQUFd
IFJSUlJSUlJSIEdHR0dHR0dHIEJCQkJCQkJCIC0+IExTQgogICAgICAgICBjb25zdCBpbnQgbnVt
Qml0cyA9IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9PSAxNikgPyA1IDogODsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPD0gMjsgKytpKSB7Ci0gICAgICAgICAgICBtX2JpdE1hc2tzW2ld
ID0KLSAgICAgICAgICAgICAgICAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCAobnVtQml0
cyAqICgzIC0gaSkpKSAtIDEpIF4KLSAgICAgICAgICAgICAgICAoKHN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKSA8PCAobnVtQml0cyAqICgyIC0gaSkpKSAtIDEpOwotICAgICAgICB9CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDw9IDI7ICsraSkKKyAgICAgICAgICAgIG1fYml0TWFza3NbaV0g
PSAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCAobnVtQml0cyAqICgzIC0gaSkpKSAtIDEp
IF4gKChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSkgPDwgKG51bUJpdHMgKiAoMiAtIGkpKSkgLSAx
KTsKIAogICAgICAgICAvLyBGb3IgV2luZG93cyBWNCsgMzItYml0IFJHQiwgZG9uJ3Qgb3Zlcndy
aXRlIHRoZSBhbHBoYSBtYXNrIGZyb20gdGhlCiAgICAgICAgIC8vIGhlYWRlciAoc2VlIG5vdGUg
aW4gcmVhZEluZm9IZWFkZXIoKSkuCkBAIC00MzEsMTAgKzM5NCw3IEBAIGJvb2wgQk1QSW1hZ2VS
ZWFkZXI6OnByb2Nlc3NCaXRtYXNrcygpCiAKICAgICAgICAgLy8gRmFpbCBpZiB3ZSBkb24ndCBo
YXZlIGVub3VnaCBmaWxlIHNwYWNlIGZvciB0aGUgYml0bWFza3MuCiAgICAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgU0laRU9GX0JJVE1BU0tTID0gMTI7Ci0gICAgICAgIGlmICgoKG1faGVhZGVy
T2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSArIFNJWkVPRl9CSVRNQVNLUykgPAotICAgICAg
ICAgICAgICAgIChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKQotICAgICAg
ICAgICAgfHwgKG1faW1nRGF0YU9mZnNldCAmJiAobV9pbWdEYXRhT2Zmc2V0IDwKLSAgICAgICAg
ICAgICAgICAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsgU0laRU9GX0JJ
VE1BU0tTKSkpKQorICAgICAgICBpZiAoKChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5i
aVNpemUgKyBTSVpFT0ZfQklUTUFTS1MpIDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVy
LmJpU2l6ZSkpIHx8IChtX2ltZ0RhdGFPZmZzZXQgJiYgKG1faW1nRGF0YU9mZnNldCA8IChtX2hl
YWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUgKyBTSVpFT0ZfQklUTUFTS1MpKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAKICAgICAgICAgLy8gUmVhZCBiaXRtYXNr
cy4KQEAgLTQ2MSw4ICs0MjEsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzQml0bWFz
a3MoKQogICAgICAgICAvLyBzcGVjaWZ5IGEgYm9ndXMgYWxwaGEgY2hhbm5lbCBpbiBiaXRzIHRo
YXQgZG9uJ3QgZXhpc3QgaW4gdGhlIHBpeGVsCiAgICAgICAgIC8vIGRhdGEgKGZvciBleGFtcGxl
LCBiaXRzIDI1LTMxIGluIGEgMjQtYml0IFJHQiBmb3JtYXQpLgogICAgICAgICBpZiAobV9pbmZv
SGVhZGVyLmJpQml0Q291bnQgPCAzMikKLSAgICAgICAgICAgIG1fYml0TWFza3NbaV0gJj0KLSAg
ICAgICAgICAgICAgICAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCBtX2luZm9IZWFkZXIu
YmlCaXRDb3VudCkgLSAxKTsKKyAgICAgICAgICAgIG1fYml0TWFza3NbaV0gJj0gKChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oMSkgPDwgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQpIC0gMSk7CiAKICAg
ICAgICAgLy8gRm9yIGVtcHR5IG1hc2tzIChjb21tb24gb24gdGhlIGFscGhhIGNoYW5uZWwsIGVz
cGVjaWFsbHkgYWZ0ZXIgdGhlCiAgICAgICAgIC8vIHRyaW1taW5nIGFib3ZlKSwgcXVpY2tseSBj
bGVhciB0aGUgc2hpZnRzIGFuZCBjb250aW51ZSwgdG8gYXZvaWQgYW4KQEAgLTUwNywxNSArNDY2
LDExIEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NDb2xvclRhYmxlKCkKICAgICBtX3Rh
YmxlU2l6ZUluQnl0ZXMgPSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkICogKG1faXNPUzIxeCA/IDMg
OiA0KTsKIAogICAgIC8vIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZmlsZSBzcGFjZSBm
b3IgdGhlIGNvbG9yIHRhYmxlLgotICAgIGlmICgoKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVh
ZGVyLmJpU2l6ZSArIG1fdGFibGVTaXplSW5CeXRlcykgPAotICAgICAgICAgICAgKG1faGVhZGVy
T2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkpCi0gICAgICAgIHx8IChtX2ltZ0RhdGFPZmZz
ZXQgJiYgKG1faW1nRGF0YU9mZnNldCA8Ci0gICAgICAgICAgICAobV9oZWFkZXJPZmZzZXQgKyBt
X2luZm9IZWFkZXIuYmlTaXplICsgbV90YWJsZVNpemVJbkJ5dGVzKSkpKQorICAgIGlmICgoKG1f
aGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSArIG1fdGFibGVTaXplSW5CeXRlcykg
PCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSkgfHwgKG1faW1nRGF0YU9m
ZnNldCAmJiAobV9pbWdEYXRhT2Zmc2V0IDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVy
LmJpU2l6ZSArIG1fdGFibGVTaXplSW5CeXRlcykpKSkKICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOwogCiAgICAgLy8gUmVhZCBjb2xvciB0YWJsZS4KLSAgICBpZiAoKG1fZGVjb2RlZE9mZnNl
dCA+IG1fZGF0YS0+c2l6ZSgpKQotICAgICAgICB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNv
ZGVkT2Zmc2V0KSA8IG1fdGFibGVTaXplSW5CeXRlcykpCisgICAgaWYgKChtX2RlY29kZWRPZmZz
ZXQgPiBtX2RhdGEtPnNpemUoKSkgfHwgKChtX2RhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNl
dCkgPCBtX3RhYmxlU2l6ZUluQnl0ZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9j
b2xvclRhYmxlLnJlc2l6ZShtX2luZm9IZWFkZXIuYmlDbHJVc2VkKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faW5mb0hlYWRlci5iaUNsclVzZWQ7ICsraSkgewpAQCAtNTczLDcgKzUy
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRhKCkKICAgICAgICAgLy8g
dGhlIGltYWdlLgogICAgICAgICBjb25zdCB1aW50OF90IGNvdW50ID0gbV9kYXRhLT5kYXRhKClb
bV9kZWNvZGVkT2Zmc2V0XTsKICAgICAgICAgY29uc3QgdWludDhfdCBjb2RlID0gbV9kYXRhLT5k
YXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgMV07Ci0gICAgICAgIGlmICgoKGNvdW50ICE9IDApIHx8
IChjb2RlICE9IDEpKSAmJiBwYXN0RW5kT2ZJbWFnZSgwKSkKKyAgICAgICAgaWYgKChjb3VudCB8
fCAoY29kZSAhPSAxKSkgJiYgcGFzdEVuZE9mSW1hZ2UoMCkpCiAgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7CiAKICAgICAgICAgLy8gRGVjb2RlLgpAQCAtNTkwLDEwICs1NDUsNyBAQCBi
b29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YSgpCiAKICAgICAgICAgICAgIGNhc2Ug
MTogIC8vIE1hZ2ljIHRva2VuOiBFT0YKICAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSByZW1h
aW5pbmcgcGl4ZWxzIGluIHRoZSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAoKG1fY29vcmQu
eCgpIDwgbV9wYXJlbnQtPnNpemUoKS53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICB8fCAo
bV9pc1RvcERvd24KLSAgICAgICAgICAgICAgICAgICAgICAgID8gKG1fY29vcmQueSgpIDwgKG1f
cGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDog
KG1fY29vcmQueSgpID4gMCkpKQorICAgICAgICAgICAgICAgIGlmICgobV9jb29yZC54KCkgPCBt
X3BhcmVudC0+c2l6ZSgpLndpZHRoKCkpIHx8IChtX2lzVG9wRG93biA/IChtX2Nvb3JkLnkoKSA8
IChtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSkpIDogKG1fY29vcmQueSgpID4gMCkpKQog
ICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTYwNywxMCArNTU5LDkgQEAgYm9vbCBCTVBJbWFn
ZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEoKQogICAgICAgICAgICAgICAgIC8vIHBhc3QgdGhlIGVu
ZCBvZiB0aGUgaW1hZ2UuCiAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBkeCA9IG1fZGF0
YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDJdOwogICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QgZHkgPSBtX2RhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAzXTsKLSAgICAgICAg
ICAgICAgICBpZiAoKGR4ICE9IDApIHx8IChkeSAhPSAwKSkKKyAgICAgICAgICAgICAgICBpZiAo
ZHggfHwgZHkpCiAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVl
KTsKLSAgICAgICAgICAgICAgICBpZiAoKChtX2Nvb3JkLngoKSArIGR4KSA+IG1fcGFyZW50LT5z
aXplKCkud2lkdGgoKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgcGFzdEVuZE9mSW1hZ2UoZHkp
KQorICAgICAgICAgICAgICAgIGlmICgoKG1fY29vcmQueCgpICsgZHgpID4gbV9wYXJlbnQtPnNp
emUoKS53aWR0aCgpKSB8fCBwYXN0RW5kT2ZJbWFnZShkeSkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZXRGYWlsZWQoKTsKIAogICAgICAgICAgICAgICAgIC8vIFNraXAgaW50ZXJ2ZW5p
bmcgcGl4ZWxzLgpAQCAtNjM3LDggKzU4OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nl
c3NSTEVEYXRhKCkKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29sb3IgZGF0YSBpcyBy
ZXBlYXRlZCBmb3IgfGNvdW50fCB0b3RhbCBwaXhlbHMuCiAgICAgICAgICAgICAvLyBTdHJhbmdl
bHksIHNvbWUgQk1QcyBzZWVtIHRvIHNwZWNpZnkgZXhjZXNzaXZlbHkgbGFyZ2UgY291bnRzCiAg
ICAgICAgICAgICAvLyBoZXJlOyBpZ25vcmUgcGl4ZWxzIHBhc3QgdGhlIGVuZCBvZiB0aGUgcm93
LgotICAgICAgICAgICAgY29uc3QgaW50IGVuZFggPQotICAgICAgICAgICAgICAgIHN0ZDo6bWlu
KG1fY29vcmQueCgpICsgY291bnQsIG1fcGFyZW50LT5zaXplKCkud2lkdGgoKSk7CisgICAgICAg
ICAgICBjb25zdCBpbnQgZW5kWCA9IHN0ZDo6bWluKG1fY29vcmQueCgpICsgY291bnQsIG1fcGFy
ZW50LT5zaXplKCkud2lkdGgoKSk7CiAKICAgICAgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlD
b21wcmVzc2lvbiA9PSBSTEUyNCkgewogICAgICAgICAgICAgICAgIC8vIEJhaWwgaWYgdGhlcmUg
aXNuJ3QgZW5vdWdoIGRhdGEuCkBAIC02NDYsOCArNTk2LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRl
cjo6cHJvY2Vzc1JMRURhdGEoKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgICAgICAgICAvLyBPbmUgQkdSIHRyaXBsZSB0aGF0IHdlIGNvcHkgfGNvdW50fCB0
aW1lcy4KLSAgICAgICAgICAgICAgICBmaWxsUkdCQShlbmRYLCBtX2RhdGEtPmRhdGEoKVttX2Rl
Y29kZWRPZmZzZXQgKyAzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPmRhdGEo
KVttX2RlY29kZWRPZmZzZXQgKyAyXSwgY29kZSwgMHhmZik7CisgICAgICAgICAgICAgICAgZmls
bFJHQkEoZW5kWCwgbV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgM10sIG1fZGF0YS0+
ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDJdLCBjb2RlLCAweGZmKTsKICAgICAgICAgICAgICAg
ICBtX2RlY29kZWRPZmZzZXQgKz0gNDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gUkxFOCBoYXMgb25lIGNvbG9yIGluZGV4IHRoYXQgZ2V0cyByZXBlYXRlZDsgUkxF
NCBoYXMgdHdvCkBAIC02NTgsOCArNjA3LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c1JMRURhdGEoKQogICAgICAgICAgICAgICAgICAgICBjb2xvckluZGV4ZXNbMF0gPSAoY29sb3JJ
bmRleGVzWzBdID4+IDQpICYgMHhmOwogICAgICAgICAgICAgICAgICAgICBjb2xvckluZGV4ZXNb
MV0gJj0gMHhmOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGNvbG9y
SW5kZXhlc1swXSA+PSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkKQotICAgICAgICAgICAgICAgICAg
ICB8fCAoY29sb3JJbmRleGVzWzFdID49IG1faW5mb0hlYWRlci5iaUNsclVzZWQpKQorICAgICAg
ICAgICAgICAgIGlmICgoY29sb3JJbmRleGVzWzBdID49IG1faW5mb0hlYWRlci5iaUNsclVzZWQp
IHx8IChjb2xvckluZGV4ZXNbMV0gPj0gbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB3aGljaCA9IDA7IG1fY29vcmQueCgpIDwgZW5kWDsgKSB7CiAgICAgICAgICAgICAgICAgICAg
IHNldEkoY29sb3JJbmRleGVzW3doaWNoXSk7CkBAIC02ODksOSArNjM3LDcgQEAgYm9vbCBCTVBJ
bWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYgogICAgIC8vIHJlcXVpcmVzLgogICAgIGNv
bnN0IHNpemVfdCBwaXhlbHNQZXJCeXRlID0gOCAvIG1faW5mb0hlYWRlci5iaUJpdENvdW50Owog
ICAgIGNvbnN0IHNpemVfdCBieXRlc1BlclBpeGVsID0gbV9pbmZvSGVhZGVyLmJpQml0Q291bnQg
LyA4OwotICAgIGNvbnN0IHNpemVfdCB1bnBhZGRlZE51bUJ5dGVzID0gKG1faW5mb0hlYWRlci5i
aUJpdENvdW50IDwgMTYpCi0gICAgICAgID8gKChudW1QaXhlbHMgKyBwaXhlbHNQZXJCeXRlIC0g
MSkgLyBwaXhlbHNQZXJCeXRlKQotICAgICAgICA6IChudW1QaXhlbHMgKiBieXRlc1BlclBpeGVs
KTsKKyAgICBjb25zdCBzaXplX3QgdW5wYWRkZWROdW1CeXRlcyA9IChtX2luZm9IZWFkZXIuYmlC
aXRDb3VudCA8IDE2KSA/ICgobnVtUGl4ZWxzICsgcGl4ZWxzUGVyQnl0ZSAtIDEpIC8gcGl4ZWxz
UGVyQnl0ZSkgOiAobnVtUGl4ZWxzICogYnl0ZXNQZXJQaXhlbCk7CiAgICAgLy8gUkxFIHJ1bnMg
YXJlIHplcm8tcGFkZGVkIGF0IHRoZSBlbmQgdG8gYSBtdWx0aXBsZSBvZiAxNiBiaXRzLiAgTm9u
LVJMRQogICAgIC8vIGRhdGEgaXMgaW4gcm93cyBhbmQgaXMgemVyby1wYWRkZWQgdG8gYSBtdWx0
aXBsZSBvZiAzMiBiaXRzLgogICAgIGNvbnN0IHNpemVfdCBhbGlnbkJpdHMgPSBpblJMRSA/IDEg
OiAzOwpAQCAtNzExLDEwICs2NTcsOCBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9u
UkxFRGF0YShiCiAgICAgICAgICAgICBjb25zdCB1aW50OF90IG1hc2sgPSAoMSA8PCBtX2luZm9I
ZWFkZXIuYmlCaXRDb3VudCkgLSAxOwogICAgICAgICAgICAgZm9yIChzaXplX3QgYnl0ZSA9IDA7
IGJ5dGUgPCB1bnBhZGRlZE51bUJ5dGVzOyArK2J5dGUpIHsKICAgICAgICAgICAgICAgICB1aW50
OF90IHBpeGVsRGF0YSA9IG1fZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIGJ5dGVdOwot
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IHBpeGVsID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgIChwaXhlbCA8IHBpeGVsc1BlckJ5dGUpICYmIChtX2Nvb3JkLngoKSA8IGVuZFgpOyArK3Bp
eGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIChwaXhlbERhdGEgPj4gKDggLSBtX2luZm9IZWFkZXIuYmlC
aXRDb3VudCkpICYgbWFzazsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBwaXhlbCA9IDA7
IChwaXhlbCA8IHBpeGVsc1BlckJ5dGUpICYmIChtX2Nvb3JkLngoKSA8IGVuZFgpOyArK3BpeGVs
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gKHBpeGVs
RGF0YSA+PiAoOCAtIG1faW5mb0hlYWRlci5iaUJpdENvdW50KSkgJiBtYXNrOwogICAgICAgICAg
ICAgICAgICAgICBpZiAobV9hbmRNYXNrU3RhdGUgPT0gRGVjb2RpbmcpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGFjY3VyYXRlbHkgcmVwcmVzZW50IGFu
IEFORCArIFhPUgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uIGFzIGFuIFJH
QkEgaW1hZ2UsIHNvIHdoZXJlIHRoZSBBTkQgdmFsdWVzCkBAIC03NDksNyArNjkzLDcgQEAgYm9v
bCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYgogICAgICAgICAgICAgICAgIC8v
IGltYWdlcyB3aGVyZSBhbGwgYWxwaGEgdmFsdWVzIGFyZSAyNTU7IG9wYXF1ZSBpbWFnZXMgYXJl
CiAgICAgICAgICAgICAgICAgLy8gZmFzdGVyIHRvIGRyYXcuCiAgICAgICAgICAgICAgICAgaW50
IGFscGhhID0gZ2V0QWxwaGEocGl4ZWwpOwotICAgICAgICAgICAgICAgIGlmICghbV9zZWVuTm9u
WmVyb0FscGhhUGl4ZWwgJiYgKGFscGhhID09IDApKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X3NlZW5Ob25aZXJvQWxwaGFQaXhlbCAmJiAhYWxwaGEpIHsKICAgICAgICAgICAgICAgICAgICAg
bV9zZWVuWmVyb0FscGhhUGl4ZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBhbHBoYSA9
IDI1NTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA1
NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgdWludDMyX3QgcmVzdWx0OwogICAgICAgICAgICAgbWVtY3B5KCZyZXN1
bHQsICZkYXRhLT5kYXRhKClbb2Zmc2V0XSwgNCk7CiAgICAgICAgICNpZiBDUFUoQklHX0VORElB
TikKLSAgICAgICAgICAgIHJlc3VsdCA9ICgocmVzdWx0ICYgMHhmZikgPDwgMjQpIHwgKChyZXN1
bHQgJiAweGZmMDApIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAoKHJlc3VsdCAmIDB4ZmYwMDAw
KSA+PiA4KSB8ICgocmVzdWx0ICYgMHhmZjAwMDAwMCkgPj4gMjQpOworICAgICAgICAgICAgcmVz
dWx0ID0gKChyZXN1bHQgJiAweGZmKSA8PCAyNCkgfCAoKHJlc3VsdCAmIDB4ZmYwMCkgPDwgOCkg
fCAoKHJlc3VsdCAmIDB4ZmYwMDAwKSA+PiA4KSB8ICgocmVzdWx0ICYgMHhmZjAwMDAwMCkgPj4g
MjQpOwogICAgICAgICAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0KQEAgLTY3LDEwICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gfHN0
YXJ0T2Zmc2V0fCBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBCTVAgd2l0aGluIHRoZSBmaWxl
LgogICAgICAgICAvLyB8YnVmZmVyfCBwb2ludHMgYXQgYW4gZW1wdHkgUkdCQTMyQnVmZmVyIHRo
YXQgd2UnbGwgaW5pdGlhbGl6ZSBhbmQKICAgICAgICAgLy8gZmlsbCB3aXRoIGRlY29kZWQgZGF0
YS4KLSAgICAgICAgQk1QSW1hZ2VSZWFkZXIoSW1hZ2VEZWNvZGVyKiBwYXJlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBkZWNvZGVkQW5kSGVhZGVyT2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW1nRGF0YU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB1c2VzQW5kTWFzayk7CisgICAgICAgIEJNUEltYWdlUmVhZGVyKEltYWdlRGVjb2Rl
ciogcGFyZW50LCBzaXplX3QgZGVjb2RlZEFuZEhlYWRlck9mZnNldCwgc2l6ZV90IGltZ0RhdGFP
ZmZzZXQsIGJvb2wgdXNlc0FuZE1hc2spOwogCiAgICAgICAgIHZvaWQgc2V0QnVmZmVyKFJHQkEz
MkJ1ZmZlciogYnVmZmVyKSB7IG1fYnVmZmVyID0gYnVmZmVyOyB9CiAgICAgICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQpAQCAtMTc5LDkgKzE3
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gaW1hZ2UiLCBzbyBkb3dud2Fy
ZHMgZm9yIG1faXNUb3BEb3duIGltYWdlcyBhbmQgdXB3YXJkcyBvdGhlcndpc2UuCiAgICAgICAg
IGlubGluZSBib29sIHBhc3RFbmRPZkltYWdlKGludCBudW1Sb3dzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9pc1RvcERvd24KLSAgICAgICAgICAgICAgICA/ICgobV9jb29yZC55
KCkgKyBudW1Sb3dzKSA+PSBtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgIDogKChtX2Nvb3JkLnkoKSAtIG51bVJvd3MpIDwgMCk7CisgICAgICAgICAgICByZXR1cm4g
bV9pc1RvcERvd24gPyAoKG1fY29vcmQueSgpICsgbnVtUm93cykgPj0gbV9wYXJlbnQtPnNpemUo
KS5oZWlnaHQoKSkgOiAoKG1fY29vcmQueSgpIC0gbnVtUm93cykgPCAwKTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHBpeGVsIGRhdGEgZm9yIHRoZSBjdXJyZW50IFggY29v
cmRpbmF0ZSBpbiBhIHVpbnQzMl90LgpAQCAtMjAzLDggKzE5Nyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbDsKICAgICAgICAgICAgICAgICBt
ZW1jcHkoJnBpeGVsLCAmbV9kYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgb2Zmc2V0XSwg
Myk7CiAgICAgICAgICNpZiBDUFUoQklHX0VORElBTikKLSAgICAgICAgICAgICAgICBwaXhlbCA9
ICgocGl4ZWwgJiAweGZmMDApIDw8IDgpIHwgKChwaXhlbCAmIDB4ZmYwMDAwKSA+PiA4KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICgocGl4ZWwgJiAweGZmMDAwMDAwKSA+PiAyNCk7CisgICAgICAg
ICAgICAgICAgcGl4ZWwgPSAoKHBpeGVsICYgMHhmZjAwKSA8PCA4KSB8ICgocGl4ZWwgJiAweGZm
MDAwMCkgPj4gOCkgfCAoKHBpeGVsICYgMHhmZjAwMDAwMCkgPj4gMjQpOwogICAgICAgICAjZW5k
aWYKICAgICAgICAgICAgICAgICByZXR1cm4gcGl4ZWw7CiAgICAgICAgICAgICB9CkBAIC0yMjIs
MTcgKzIxNSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGluIHRoZSBnaXZl
biBwaXhlbCBkYXRhLgogICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0Q29tcG9uZW50KHVpbnQz
Ml90IHBpeGVsLCBpbnQgY29tcG9uZW50KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKChwaXhlbCAmIG1fYml0TWFza3NbY29tcG9uZW50XSkgPj4KLSAgICAgICAgICAgICAg
ICBtX2JpdFNoaWZ0c1JpZ2h0W2NvbXBvbmVudF0pIDw8IG1fYml0U2hpZnRzTGVmdFtjb21wb25l
bnRdOworICAgICAgICAgICAgcmV0dXJuICgocGl4ZWwgJiBtX2JpdE1hc2tzW2NvbXBvbmVudF0p
ID4+IG1fYml0U2hpZnRzUmlnaHRbY29tcG9uZW50XSkgPDwgbV9iaXRTaGlmdHNMZWZ0W2NvbXBv
bmVudF07CiAgICAgICAgIH0KIAogICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0QWxwaGEodWlu
dDMyX3QgcGl4ZWwpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEZvciBpbWFnZXMg
d2l0aG91dCBhbHBoYSwgcmV0dXJuIGFscGhhIG9mIDB4ZmYuCi0gICAgICAgICAgICBpZiAobV9i
aXRNYXNrc1szXSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAweGZmOwotCi0gICAgICAg
ICAgICByZXR1cm4gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2JpdE1hc2tzWzNdID8gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKSA6IDB4ZmY7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHBpeGVsIHRvIHRoZSBjb2xvciBnaXZlbiBi
eSB8Y29sb3JJbmRleHwuICBUaGlzIGFsc28KQEAgLTI0MCw5ICsyMjksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIC8vIHJpZ2h0IGJ5IG9uZS4KICAgICAgICAgaW5saW5lIHZvaWQg
c2V0SShzaXplX3QgY29sb3JJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQSht
X2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiUmVkLAotICAgICAgICAgICAgICAgICAgICBtX2Nv
bG9yVGFibGVbY29sb3JJbmRleF0ucmdiR3JlZW4sCi0gICAgICAgICAgICAgICAgICAgIG1fY29s
b3JUYWJsZVtjb2xvckluZGV4XS5yZ2JCbHVlLCAweGZmKTsKKyAgICAgICAgICAgIHNldFJHQkEo
bV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYlJlZCwgbV9jb2xvclRhYmxlW2NvbG9ySW5kZXhd
LnJnYkdyZWVuLCBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiQmx1ZSwgMHhmZik7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBMaWtlIHNldEkoKSwgYnV0IHdpdGggdGhlIGluZGl2aWR1YWwg
Y29tcG9uZW50IHZhbHVlcyBzcGVjaWZpZWQuCkBAIC0yNTEsOCArMjM4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1fYnVmZmVyLT5zZXRSR0JBKG1fY29vcmQueCgpLCBtX2Nvb3JkLnkoKSwgcmVk
LCBncmVlbiwgYmx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhKTsKKyAg
ICAgICAgICAgIG1fYnVmZmVyLT5zZXRSR0JBKG1fY29vcmQueCgpLCBtX2Nvb3JkLnkoKSwgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICAgICAgbV9jb29yZC5tb3ZlKDEsIDApOwog
ICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTQ3MjcpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdJRklt
YWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKCkKLSAgICA6IG1fZnJhbWVDb3VudFZhbGlkKHRy
dWUpCisgICAgOiBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KHRydWUpCiAg
ICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9vcE9uY2UpCiAgICAgLCBtX3JlYWRP
ZmZzZXQoMCkKIHsKQEAgLTQwLDU2ICs0MCw0NSBAQCBHSUZJbWFnZURlY29kZXI6On5HSUZJbWFn
ZURlY29kZXIoKQogewogfQogCi0vLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCiB7CiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBDYWNoZSBvdXIgbmV3IGRhdGEuCiAgICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFs
bERhdGFSZWNlaXZlZCk7CiAKLSAgICAvLyBPdXIgZnJhbWUgY291bnQgaXMgbm93IHVua25vd24u
Ci0gICAgbV9mcmFtZUNvdW50VmFsaWQgPSBmYWxzZTsKKyAgICAvLyBXZSBuZWVkIHRvIHJlc2Nh
biB0aGUgZnJhbWUgY291bnQsIGFzIHRoZSBuZXcgZGF0YSBtYXkgaGF2ZSBjaGFuZ2VkIGl0Lgor
ICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSBmYWxzZTsKIAotICAg
IC8vIENyZWF0ZSB0aGUgR0lGIHJlYWRlci4KICAgICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxl
ZCkKICAgICAgICAgbV9yZWFkZXIuc2V0KG5ldyBHSUZJbWFnZVJlYWRlcih0aGlzKSk7CiB9CiAK
LS8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQg
eWV0LgogYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7CiAgICAgaWYg
KCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFmYWlsZWQoKSAmJiBtX3JlYWRl
cikKLSAgICAgICAgIGRlY29kZShHSUZTaXplUXVlcnksIDApOworICAgICAgICAgZGVjb2RlKDAs
IEdJRlNpemVRdWVyeSk7CiAKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKTsKIH0KIAotLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4g
IFdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlcgotLy8gKHdpdGhvdXQgbmVj
ZXNzYXJpbHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCiBzaXplX3Qg
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKIHsKLSAgICAvLyBJZiB0aGUgZGVjb2RlciBo
YWQgYW4gZWFybGllciBlcnJvciwgd2Ugd2lsbCBqdXN0IHJldHVybiB3aGF0IHdlIGhhZCBkZWNv
ZGVkCi0gICAgLy8gc28gZmFyLgotICAgIGlmICghbV9mcmFtZUNvdW50VmFsaWQpIHsKLSAgICAg
ICAgLy8gRklYTUU6IFNjYW5uaW5nIGFsbCB0aGUgZGF0YSBoYXMgTyhuXjIpIGJlaGF2aW9yIGlm
IHRoZSBkYXRhIHdlcmUgdG8gY29tZSBpbiByZWFsbHkKLSAgICAgICAgLy8gc2xvd2x5LiAgTWln
aHQgYmUgaW50ZXJlc3RpbmcgdG8gdHJ5IHRvIGNsb25lIG91ciBleGlzdGluZyByZWFkIHNlc3Np
b24gdG8gcHJlc2VydmUKLSAgICAgICAgLy8gc3RhdGUsIGJ1dCBmb3Igbm93IHdlIGp1c3QgY3Jh
d2wgYWxsIHRoZSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm8gd29yc2UgdGhhbiB3aGF0Ci0g
ICAgICAgIC8vIEltYWdlSU8gZG9lcyBvbiBNYWMgcmlnaHQgbm93IChpdCBhbHNvIGNyYXdscyBh
bGwgdGhlIGRhdGEgYWdhaW4pLgorICAgIGlmICghbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9y
RnJhbWVDb3VudCkgeworICAgICAgICAvLyBGSVhNRTogU2Nhbm5pbmcgYWxsIHRoZSBkYXRhIGhh
cyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEgd2VyZSB0bworICAgICAgICAvLyBjb21lIGlu
IHJlYWxseSBzbG93bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8gY2xvbmUgb3Vy
CisgICAgICAgIC8vIGV4aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZSBzdGF0ZSwgYnV0
IGZvciBub3cgd2UganVzdCBjcmF3bAorICAgICAgICAvLyBhbGwgdGhlIGRhdGEuICBOb3RlIHRo
YXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQgSW1hZ2VJTyBkb2VzIG9uCisgICAgICAgIC8v
IE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCiAgICAg
ICAgIEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBt
YXkgZmFpbCwgYnV0IHdlIHdhbnQgdG8ga2VlcCBhbnkgcGFydGlhbCBkYXRhIGl0IG1heQotICAg
ICAgICAvLyBoYXZlIGRlY29kZWQsIHNvIGRvbid0IG1hcmsgaXQgaXMgaW52YWxpZC4gSWYgdGhl
cmUgaXMgYW4gb3ZlcmZsb3cKLSAgICAgICAgLy8gb3Igc29tZSBzZXJpb3VzIGVycm9yLCBtX2Zh
aWxlZCB3aWxsIGhhdmUgZ290dGVuIHNldCBmb3IgdXMuCiAgICAgICAgIHJlYWRlci5yZWFkKChj
b25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZy
YW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSk7Ci0gICAgICAgIG1fZnJh
bWVDb3VudFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9y
RnJhbWVDb3VudCA9IHRydWU7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUocmVh
ZGVyLmltYWdlc19jb3VudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fZnJhbWVCdWZmZXJDYWNo
ZS5zaXplKCk7CiB9CiAKLS8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBm
b3IgYW4gYW5pbWF0aW9uIGxvb3AuCiBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAogewogICAgIC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBhdCBhbnkgcG9pbnQg
aW4gdGhlIGltYWdlIGRhdGEgc3RyZWFtLiAgTW9zdCBHSUZzCkBAIC0xMjAsNyArMTA5LDcgQEAg
UkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogCiAgICAgUkdCQTMyQnVm
ZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKGZyYW1lLnN0
YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAg
ICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSwgaW5kZXggKyAxKTsgLy8gRGVjb2RlIHRoaXMgZnJhbWUu
CisgICAgICAgIGRlY29kZShpbmRleCArIDEsIEdJRkZ1bGxRdWVyeSk7IC8vIERlY29kZSB0aGlz
IGZyYW1lLgogICAgIHJldHVybiAmZnJhbWU7CiB9CiAKQEAgLTE3NCwyMyArMTYzLDExIEBAIHZv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICB9CiB9CiAKLS8vIEZl
ZWQgZGF0YSB0byB0aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQotewotICAgIGlmIChtX2ZhaWxl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPnJlYWQoKGNv
bnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBtX2RhdGEt
PnNpemUoKSAtIG1fcmVhZE9mZnNldCwgcXVlcnksIGhhbHRBdEZyYW1lKTsKLSAgICAKLSAgICBp
ZiAobV9mYWlsZWQpCi0gICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7Ci19Ci0KLS8vIENhbGxiYWNr
cyBmcm9tIHRoZSBHSUYgcmVhZGVyLgogYm9vbCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFp
bGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIXNldFNp
emUod2lkdGgsIGhlaWdodCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHByZXBhcmVT
Y2FsZURhdGFJZk5lY2Vzc2FyeSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjAwLDk0ICsx
NzcsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zCiAgICAgbV9y
ZWFkT2Zmc2V0ID0gbV9kYXRhLT5zaXplKCkgLSBieXRlc0xlZnQ7CiB9CiAKLWJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKLXsKLSAgICAv
LyBJbml0aWFsaXplIHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCi0gICAgY29uc3QgR0lG
RnJhbWVSZWFkZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKLSAgICBJ
bnRSZWN0IGZyYW1lUmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29m
ZnNldCwgZnJhbWVSZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKLQotICAgIC8v
IE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1y
aWdodCBvZiB0aGUgYnVmZmVyLgotICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IHNpemUoKS53
aWR0aCgpKQotICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFt
ZVJlYWRlci0+eF9vZmZzZXQpOwotICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCku
aGVpZ2h0KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0g
ZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKLQotICAgIFJHQkEzMkJ1ZmZlciogY29uc3QgYnVmZmVy
ID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpbnQgbGVmdCA9IHVwcGVy
Qm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRT
Y2FsZWRYKGZyYW1lUmVjdC5yaWdodCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBwZXJCb3Vu
ZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2Fs
ZWRZKGZyYW1lUmVjdC5ib3R0b20oKSwgdG9wKTsKLSAgICBidWZmZXItPnNldFJlY3QoSW50UmVj
dChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7Ci0KLSAgICBpZiAoZnJh
bWVJbmRleCA9PSAwKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3
ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KLSAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkp
IHsKLSAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0
ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCi0gICAgICAg
IC8vIGRpc3Bvc2FsIG1ldGhvZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRnJhbWVzIHRoYXQg
dXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQot
ICAgICAgICAvLyBuby1vcHMgaW4gdGVybXMgb2YgY2hhbmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRl
IG9mIGEgZnJhbWUgY29tcGFyZWQgdG8KLSAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9m
IHRoZSBwcmV2aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhlCi0gICAgICAg
IC8vIGZpcnN0IGZyYW1lIHNwZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRl
ZCBsaWtlCi0gICAgICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNl
dCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQotICAgICAgICBjb25zdCBSR0JBMzJCdWZm
ZXIqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAg
ICAgIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0KLSAgICAg
ICAgICAgIHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7Ci0gICAgICAgIHdoaWxlICgoZnJh
bWVJbmRleCA+IDApCi0gICAgICAgICAgICAgICAmJiAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZm
ZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpIHsKLSAgICAgICAgICAgIHByZXZCdWZmZXIg
PSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICBwcmV2TWV0
aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQocHJldkJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRl
KTsKLQotICAgICAgICBpZiAoKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90
U3BlY2lmaWVkKSB8fAotICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZl
cjo6RGlzcG9zZUtlZXApKSB7Ci0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFt
ZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgICAgICBidWZm
ZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFy
ZW50LCB3aXRob3V0Ci0gICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFn
ZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZS
ZWN0ID0gcHJldkJ1ZmZlci0+cmVjdCgpOwotICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYnVm
ZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKLSAgICAgICAgICAgIGlmICgoZnJhbWVJbmRleCA9PSAw
KQotICAgICAgICAgICAgICAgIHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQo
KSwgYnVmZmVyU2l6ZSkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0
IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQotICAgICAgICAgICAgICAg
IC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAg
ICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNp
emUuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3Vz
IGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAgICAgYnVmZmVy
LT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICAgIGZvciAoaW50IHkg
PSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5ib3R0b20oKTsgKyt5KSB7Ci0gICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3QucmlnaHQoKTsg
Kyt4KQotICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAw
LCAwKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRo
KCkgPiAwKSAmJiAocHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKLSAgICAgICAgICAgICAgICAgIGJ1
ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCi0g
ICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwotCi0gICAg
Ly8gUmVzZXQgdGhlIGFscGhhIHBpeGVsIHRyYWNrZXIgZm9yIHRoaXMgZnJhbWUuCi0gICAgbV9j
dXJyZW50QnVmZmVyU2F3QWxwaGEgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93QnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IHJvd0VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
b3dOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cmVwZWF0Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3
cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVk
Um93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWdu
ZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50
LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpCiB7CiAgICAgY29uc3QgR0lGRnJhbWVSZWFk
ZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKICAgICAvLyBUaGUgcGl4
ZWwgZGF0YSBhbmQgY29vcmRpbmF0ZXMgc3VwcGxpZWQgdG8gdXMgYXJlIHJlbGF0aXZlIHRvIHRo
ZSBmcmFtZSdzCkBAIC0zNjUsNyArMjU1LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1l
Q29tcGxldGUodW5zaQogICAgICAgICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJhbnNw
YXJlbnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFsc2UpLgogICAgICAgICBpZiAoYnVmZmVy
LnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQogICAg
ICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAoZnJh
bWVJbmRleCA+IDApIHsKKyAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCkgewogICAgICAgICAg
ICAgLy8gVHJpY2t5IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBp
ZiBldmVyeXdoZXJlCiAgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2
ZSBhbHBoYS4gIFRvIGtub3cgd2hldGhlciB0aGlzIGlzCiAgICAgICAgICAgICAvLyB0cnVlLCB3
ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRvZXNuJ3QgaGF2
ZQpAQCAtMzc1LDggKzI2NSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KHVuc2kKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhp
cyBmcmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVC
dWZmZXIoKS4KICAgICAgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgIHdoaWxlICgoZnJh
bWVJbmRleCA+IDApCi0gICAgICAgICAgICAgICAgICAgJiYgKHByZXZCdWZmZXItPmRpc3Bvc2Fs
TWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKQorICAg
ICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKQogICAgICAgICAg
ICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAK
ICAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NlTm90U3BlY2lmaWVkIG9y
IERpc3Bvc2VLZWVwIGZyYW1lLCB0aGVuCkBAIC0zODcsOCArMjc2LDcgQEAgdm9pZCBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVt
YWluaW5nIGNhc2UgaXMgYSBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCiAgICAg
ICAgICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBjb250YWluZWQgaW4g
dGhlIGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Uga25vdyB0aGUgY3Vy
cmVudCBmcmFtZSBoYXMgbm8gYWxwaGEuCi0gICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRp
c3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikK
LSAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucmVj
dCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3QoKSkpCisgICAgICAgICAgICBpZiAoKHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRl
Qmdjb2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250
YWlucyhwcmV2QnVmZmVyLT5yZWN0KCkpKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNB
bHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MDEsNCArMjg5LDkzIEBAIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpnaWZDb21wbGV0ZSgpCiAgICAgbV9yZWFkZXIuY2xlYXIoKTsKIH0K
IAordm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lG
UXVlcnkgcXVlcnkpCit7CisgICAgaWYgKG1fZmFpbGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRh
LT5kYXRhKCkgKyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBx
dWVyeSwgaGFsdEF0RnJhbWUpOworCisgICAgaWYgKG1fZmFpbGVkKQorICAgICAgICBtX3JlYWRl
ci5jbGVhcigpOworfQorCitib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
c2lnbmVkIGZyYW1lSW5kZXgpCit7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBp
biBvdXIgYnVmZmVyLgorICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1f
cmVhZGVyLT5mcmFtZV9yZWFkZXI7CisgICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVSZWFkZXIt
Pnhfb2Zmc2V0LCBmcmFtZVJlYWRlci0+eV9vZmZzZXQsIGZyYW1lUmVhZGVyLT53aWR0aCwgZnJh
bWVSZWFkZXItPmhlaWdodCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVjdCBkb2Vz
bid0IGV4dGVuZCBvdXRzaWRlIHRoZSBidWZmZXIuCisgICAgaWYgKGZyYW1lUmVjdC5yaWdodCgp
ID4gc2l6ZSgpLndpZHRoKCkpCisgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lk
dGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCk7CisgICAgaWYgKGZyYW1lUmVjdC5ib3R0b20o
KSA+IHNpemUoKS5oZWlnaHQoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCku
aGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQpOworCisgICAgUkdCQTMyQnVmZmVyKiBj
b25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGludCBs
ZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0g
bG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LnJpZ2h0KCksIGxlZnQpOworICAgIGludCB0b3Ag
PSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKKyAgICBpbnQgYm90dG9tID0gbG93
ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LmJvdHRvbSgpLCB0b3ApOworICAgIGJ1ZmZlci0+c2V0
UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKKyAg
ICAKKyAgICBpZiAoIWZyYW1lSW5kZXgpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3Qg
ZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgorICAgICAg
ICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgp
LmhlaWdodCgpKSkgeworICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIHN0
YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1l
J3MKKyAgICAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgorICAgICAgICAvLworICAgICAgICAvLyBG
cmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyBtZXRob2QgYXJlIGVm
ZmVjdGl2ZWx5CisgICAgICAgIC8vIG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3Rh
cnRpbmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJlZCB0bworICAgICAgICAvLyB0aGUgc3RhcnRp
bmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0
aGUKKyAgICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxs
IGdldCB0cmVhdGVkIGxpa2UKKyAgICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVs
b3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCisgICAgICAgIGNvbnN0
IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUlu
ZGV4XTsKKyAgICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIHByZXZNZXRo
b2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOworICAgICAgICB3aGlsZSAoZnJhbWVJ
bmRleCAmJiAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2
aW91cykpIHsKKyAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0t
ZnJhbWVJbmRleF07CisgICAgICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9z
YWxNZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+c3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKworICAgICAgICBpZiAoKHByZXZN
ZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhv
ZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSkgeworICAgICAgICAgICAgLy8gUHJlc2Vy
dmUgdGhlIGxhc3QgZnJhbWUgYXMgdGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lLgor
ICAgICAgICAgICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBm
cmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAorICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBp
eGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCisgICAgICAgICAgICBjb25z
dCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnJlY3QoKTsKKyAgICAgICAgICAgIGNv
bnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CisgICAgICAgICAgICBpZiAo
IWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2Fs
ZWRTaXplKCkpKSkgeworICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFt
ZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKKyAgICAgICAgICAgICAgICAvLyBp
bWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCisgICAgICAgICAgICAg
ICAgaWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhl
aWdodCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZm
ZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCisgICAgICAgICAgICAgIGJ1ZmZlci0+Y29w
eUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOworICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcHJl
dlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkgeworICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0LnJpZ2h0KCk7ICsreCkK
KyAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJHQkEoeCwgeSwgMCwgMCwgMCwgMCk7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKChwcmV2UmVjdC53aWR0aCgpID4g
MCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkpCisgICAgICAgICAgICAgICAgICBidWZmZXIt
PnNldEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgorICAgIGJ1
ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKworICAgIC8vIFJl
c2V0IHRoZSBhbHBoYSBwaXhlbCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgorICAgIG1fY3VycmVu
dEJ1ZmZlclNhd0FscGhhID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw0OCArMzcsMzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAg
ICAgICAgR0lGSW1hZ2VEZWNvZGVyKCk7Ci0gICAgICAgIH5HSUZJbWFnZURlY29kZXIoKTsKKyAg
ICAgICAgdmlydHVhbCB+R0lGSW1hZ2VEZWNvZGVyKCk7CiAKLSAgICAgICAgdmlydHVhbCBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiZ2lmIjsgfQorICAgICAgICBl
bnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRR
dWVyeSB9OwogCi0gICAgICAgIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgorICAgICAg
ICAvLyBJbWFnZURlY29kZXIKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdCB7IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgICAgICAv
LyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHll
dC4KICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwotCi0gICAgICAgIC8v
IFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBXaWxsIHNjYW4gdGhl
IGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIKLSAgICAgICAgLy8gKHdpdGhvdXQgbmVjZXNzYXJp
bHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCiAgICAgICAgIHZpcnR1
YWwgc2l6ZV90IGZyYW1lQ291bnQoKTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0
aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFs
IGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1
ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0KICAgICAgICAgdmlydHVh
bCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAK
LSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpIHsgcmV0dXJuIDA7IH0KLQotICAgICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5
LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwotCi0gICAgICAgIHZvaWQgZGVj
b2RlKEdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSk7Ci0KICAgICAgICAgLy8gQ2FsbGJh
Y2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiAgICAgICAgIGJvb2wgc2l6ZU5vd0F2YWlsYWJsZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdm9pZCBkZWNvZGluZ0hh
bHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpOwotICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVu
c2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hh
ciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwor
ICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVk
IGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1i
ZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwog
ICAgICAgICB2b2lkIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQg
ZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKTsKICAgICAgICAgdm9pZCBnaWZDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgLy8gQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHRoZSBn
aXZlbiBpbmRleCwgYmFzZWQgb24gdGhlCi0gICAgICAgIC8vIHByZXZpb3VzIGZyYW1lJ3MgZGlz
cG9zYWwgbWV0aG9kLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gT24gZmFpbHVyZSwKLSAgICAg
ICAgLy8gdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KKyAgICAgICAgLy8gSWYg
dGhlIHF1ZXJ5IGlzIEdJRkZ1bGxRdWVyeSwgZGVjb2RlcyB0aGUgaW1hZ2UgdXAgdG8gKGJ1dCBu
b3QKKyAgICAgICAgLy8gaW5jbHVkaW5nKSB8aGFsdEF0RnJhbWV8LiAgT3RoZXJ3aXNlLCBkZWNv
ZGVzIGFzIG11Y2ggYXMgaXMgbmVlZGVkIHRvCisgICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnks
IGlnbm9yaW5nIGJpdG1hcCBkYXRhLgorICAgICAgICB2b2lkIGRlY29kZSh1bnNpZ25lZCBoYWx0
QXRGcmFtZSwgR0lGUXVlcnkpOworCisgICAgICAgIC8vIENhbGxlZCB0byBpbml0aWFsaXplIHRo
ZSBmcmFtZSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJhc2VkIG9uCisgICAgICAgIC8v
IHRoZSBwcmV2aW91cyBmcmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4gUmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3MuIE9uCisgICAgICAgIC8vIGZhaWx1cmUsIHRoaXMgd2lsbCBtYXJrIHRoZSBpbWFnZSBh
cyBmYWlsZWQuCiAgICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5k
ZXgpOwogCi0gICAgICAgIGJvb2wgbV9mcmFtZUNvdW50VmFsaWQ7CisgICAgICAgIGJvb2wgbV9h
bHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudDsKICAgICAgICAgYm9vbCBtX2N1cnJl
bnRCdWZmZXJTYXdBbHBoYTsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7
CiAgICAgICAgIE93blB0cjxHSUZJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIu
Y3BwCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ24KICAgICAgIC8qIENoZWNr
IGZvciBleHBsaWNpdCBlbmQtb2Ytc3RyZWFtIGNvZGUgKi8KICAgICAgIGlmIChjb2RlID09IChj
bGVhcl9jb2RlICsgMSkpIHsKICAgICAgICAgLyogZW5kLW9mLXN0cmVhbSBzaG91bGQgb25seSBh
cHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEgKi8KLSAgICAgICAgcmV0dXJuIHJvd3NfcmVtYWlu
aW5nID09IDA7CisgICAgICAgIHJldHVybiAhcm93c19yZW1haW5pbmc7CiAgICAgICB9CiAKICAg
ICAgIGlmIChvbGRjb2RlID09IC0xKSB7CkBAIC00OTQsMTEgKzQ5NCwxMSBAQCBib29sIEdJRklt
YWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgLyogQWxsIEdJRiBmaWxlcyBiZWdp
biB3aXRoICJHSUY4N2EiIG9yICJHSUY4OWEiICovCiAgICAgY2FzZSBnaWZfdHlwZToKICAgICB7
Ci0gICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4OWEiLCA2KSkgeworICAgICAgaWYg
KCFzdHJuY21wKChjaGFyKilxLCAiR0lGODlhIiwgNikpCiAgICAgICAgIHZlcnNpb24gPSA4OTsK
LSAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkgeworICAg
ICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkKICAgICAgICAgdmVy
c2lvbiA9IDg3OwotICAgICAgfSBlbHNlIHsKKyAgICAgIGVsc2UgewogICAgICAgICBzdGF0ZSA9
IGdpZl9lcnJvcjsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC03MTIsOSArNzEyLDEwIEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgICAgLy8gYW5k
IGRvZXNuJ3QgZG8gYW55dGhpbmcsIGFzIG91ciBzdHJlYW1pbmcvYnVmZmVyaW5nIHRha2VzIGNh
cmUgb2YgaXQgYWxsLi4uCiAgICAgICAgIC8vIFNlZTogaHR0cDovL3NlbW1peC5wbC9jb2xvci9l
eGdyYWYvZWVnMjQuaHRtCiAgICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9i
bG9jayk7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgc3RhdGUgPSBnaWZfZXJyb3I7IC8vIDAsMy03
IGFyZSB5ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2FwZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGV4dGVuc2lvbiBjb2RlcworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMCwz
LTcgYXJlIHlldCB0byBiZSBkZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcworICAgICAg
ICBzdGF0ZSA9IGdpZl9lcnJvcjsKKyAgICAgIH0KIAogICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
ODkzLDggKzg5NCw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQK
IAogICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KICAgICAg
ICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgY2xpZW50cHRyLT5m
cmFtZUNvbXBsZXRlKGltYWdlc19kZWNvZGVkIC0gMSwgZnJhbWVfcmVhZGVyLT5kZWxheV90aW1l
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNw
b3NhbF9tZXRob2QpOworICAgICAgICAgIGNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNf
ZGVjb2RlZCAtIDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNw
b3NhbF9tZXRob2QpOworICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvKiBDbGVh
ciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2UgKi8KICAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewpA
QCAtOTE5LDcgKzkyMCw2IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWdu
ZWQKIAogICAgIC8vIEhhbmRsZSBnZW5lcmFsIGVycm9ycwogICAgIGNhc2UgZ2lmX2Vycm9yOgot
ICAgICAgLy8gbnNHSUZEZWNvZGVyMjo6RW5kR0lGKGdzLT5jbGllbnRwdHIsIGdzLT5sb29wX2Nv
dW50KTsKICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdl
dCBoZXJlLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5NCwxMCArMTk0LDYgQEAgc3RydWN0IEdJRkltYWdlUmVhZGVyIHsKICAgICB9CiAKICAgICB+
R0lGSW1hZ2VSZWFkZXIoKSB7Ci0gICAgICAgIGNsb3NlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
bG9zZSgpIHsKICAgICAgICAgZGVsZXRlIFtdZ2xvYmFsX2NvbG9ybWFwOwogICAgICAgICBnbG9i
YWxfY29sb3JtYXAgPSAwOwogICAgICAgICBkZWxldGUgZnJhbWVfcmVhZGVyOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1
LDExIEBAIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRGlyZWN0b3J5ID0gNjsKIHN0YXRpYyBj
b25zdCBzaXplX3Qgc2l6ZU9mRGlyRW50cnkgPSAxNjsKIAogSUNPSW1hZ2VEZWNvZGVyOjpJQ09J
bWFnZURlY29kZXIoKQotICAgIDogSW1hZ2VEZWNvZGVyKCkKLSAgICAsIG1fYWxsRGF0YVJlY2Vp
dmVkKGZhbHNlKQotICAgICwgbV9kZWNvZGVkT2Zmc2V0KDApCisgICAgOiBtX2RlY29kZWRPZmZz
ZXQoMCkKK3sKK30KKworSUNPSW1hZ2VEZWNvZGVyOjp+SUNPSW1hZ2VEZWNvZGVyKCkKIHsKIH0K
IApAQCAtNTcsMTAgKzU5LDggQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVk
QnVmZgogICAgICAgICByZXR1cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKLSAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZl
ZDsKIAotICAgIGZvciAoQk1QUmVhZGVyczo6aXRlcmF0b3IgaShtX2JtcFJlYWRlcnMuYmVnaW4o
KSk7Ci0gICAgICAgICBpICE9IG1fYm1wUmVhZGVycy5lbmQoKTsgKytpKSB7CisgICAgZm9yIChC
TVBSZWFkZXJzOjppdGVyYXRvciBpKG1fYm1wUmVhZGVycy5iZWdpbigpKTsgaSAhPSBtX2JtcFJl
YWRlcnMuZW5kKCk7ICsraSkgewogICAgICAgICBpZiAoKmkpCiAgICAgICAgICAgICAoKmkpLT5z
ZXREYXRhKGRhdGEpOwogICAgIH0KQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBJQ09JbWFnZURlY29k
ZXI6OnNldERhdGEoU2hhcmVkQnVmZgogYm9vbCBJQ09JbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpCiB7CiAgICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKQotICAg
ICAgICBkZWNvZGVXaXRoQ2hlY2tGb3JEYXRhRW5kZWQoMCwgdHJ1ZSk7CisgICAgICAgIGRlY29k
ZSgwLCB0cnVlKTsKIAogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
OwogfQpAQCAtODMsOCArODMsNyBAQCBJbnRTaXplIElDT0ltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNv
bnN0CiAKIEludFNpemUgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1fZGlyRW50cmll
cy5zaXplKCkpKSA/Ci0gICAgICAgIG1fZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgp
OworICAgIHJldHVybiAoaW5kZXggJiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8g
bV9kaXJFbnRyaWVzW2luZGV4XS5tX3NpemUgOiBzaXplKCk7CiB9CiAKIGJvb2wgSUNPSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCkBAIC0xMDEs
NyArMTAwLDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgdwogCiBz
aXplX3QgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKIHsKLSAgICBkZWNvZGVXaXRoQ2hl
Y2tGb3JEYXRhRW5kZWQoMCwgdHJ1ZSk7CisgICAgZGVjb2RlKDAsIHRydWUpOwogICAgIGlmICht
X2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUu
cmVzaXplKG1fZGlyRW50cmllcy5zaXplKCkpOwogICAgIC8vIENBVVRJT046IFdlIG11c3Qgbm90
IHJlc2l6ZSBtX2ZyYW1lQnVmZmVyQ2FjaGUgYWdhaW4gYWZ0ZXIgdGhpcywgYXMKQEAgLTExNyw3
ICsxMTYsNyBAQCBSR0JBMzJCdWZmZXIqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBhbmQgaWYg
dGhpcyBpcyBhIEJNUCwgZGVjb2RlLgotICAgIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChp
bmRleCwgZmFsc2UpOworICAgIGRlY29kZShpbmRleCwgZmFsc2UpOwogCiAgICAgLy8gUE5HcyBk
ZWNvZGUgaW50byB0aGVpciBvd24gZnJhbWVidWZmZXJzLCBzbyBvbmx5IHVzZSBvdXIgaW50ZXJu
YWwgY2FjaGUKICAgICAvLyBmb3Igbm9uLVBOR3MgKEJNUCBvciB1bmtub3duKS4KQEAgLTEzOSwx
NyArMTM4LDEyIEBAIFJHQkEzMkJ1ZmZlciogSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKIH0K
IAogLy8gc3RhdGljCi1ib29sIElDT0ltYWdlRGVjb2Rlcjo6Y29tcGFyZUVudHJpZXMoY29uc3Qg
SWNvbkRpcmVjdG9yeUVudHJ5JiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgYikKK2Jvb2wgSUNPSW1hZ2VEZWNvZGVyOjpj
b21wYXJlRW50cmllcyhjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGEsIGNvbnN0IEljb25EaXJl
Y3RvcnlFbnRyeSYgYikKIHsKLSAgICAvLyBMYXJnZXIgaWNvbnMgYXJlIGJldHRlci4KKyAgICAv
LyBMYXJnZXIgaWNvbnMgYXJlIGJldHRlci4gIEFmdGVyIHRoYXQsIGhpZ2hlciBiaXQtZGVwdGgg
aWNvbnMgYXJlIGJldHRlci4KICAgICBjb25zdCBpbnQgYUVudHJ5QXJlYSA9IGEubV9zaXplLndp
ZHRoKCkgKiBhLm1fc2l6ZS5oZWlnaHQoKTsKICAgICBjb25zdCBpbnQgYkVudHJ5QXJlYSA9IGIu
bV9zaXplLndpZHRoKCkgKiBiLm1fc2l6ZS5oZWlnaHQoKTsKLSAgICBpZiAoYUVudHJ5QXJlYSAh
PSBiRW50cnlBcmVhKQotICAgICAgICByZXR1cm4gKGFFbnRyeUFyZWEgPiBiRW50cnlBcmVhKTsK
LQotICAgIC8vIEhpZ2hlciBiaXQtZGVwdGggaWNvbnMgYXJlIGJldHRlci4KLSAgICByZXR1cm4g
KGEubV9iaXRDb3VudCA+IGIubV9iaXRDb3VudCk7CisgICAgcmV0dXJuIChhRW50cnlBcmVhID09
IGJFbnRyeUFyZWEpID8gKGEubV9iaXRDb3VudCA+IGIubV9iaXRDb3VudCkgOiAoYUVudHJ5QXJl
YSA+IGJFbnRyeUFyZWEpOwogfQogCiB2b2lkIElDT0ltYWdlRGVjb2Rlcjo6c2V0RGF0YUZvclBO
R0RlY29kZXJBdEluZGV4KHNpemVfdCBpbmRleCkKQEAgLTE2MSwyMSArMTU1LDE4IEBAIHZvaWQg
SUNPSW1hZ2VEZWNvZGVyOjpzZXREYXRhRm9yUE5HRGVjb2QKICAgICAvLyBDb3B5IG91dCBQTkcg
ZGF0YSB0byBhIHNlcGFyYXRlIHZlY3RvciBhbmQgc2VuZCB0byB0aGUgUE5HIGRlY29kZXIuCiAg
ICAgLy8gRklYTUU6IFNhdmUgdGhpcyBjb3B5IGJ5IG1ha2luZyB0aGUgUE5HIGRlY29kZXIgYWJs
ZSB0byB0YWtlIGFuCiAgICAgLy8gb3B0aW9uYWwgb2Zmc2V0LgotICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IHBuZ0RhdGEoCi0gICAgICAgIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCZtX2RhdGEtPmRh
dGEoKVtkaXJFbnRyeS5tX2ltYWdlT2Zmc2V0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kYXRhLT5zaXplKCkgLSBkaXJFbnRyeS5tX2ltYWdlT2Zmc2V0KSk7Ci0gICAgbV9wbmdE
ZWNvZGVyc1tpbmRleF0tPnNldERhdGEocG5nRGF0YS5nZXQoKSwgbV9hbGxEYXRhUmVjZWl2ZWQp
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHBuZ0RhdGEoU2hhcmVkQnVmZmVyOjpjcmVhdGUo
Jm1fZGF0YS0+ZGF0YSgpW2RpckVudHJ5Lm1faW1hZ2VPZmZzZXRdLCBtX2RhdGEtPnNpemUoKSAt
IGRpckVudHJ5Lm1faW1hZ2VPZmZzZXQpKTsKKyAgICBtX3BuZ0RlY29kZXJzW2luZGV4XS0+c2V0
RGF0YShwbmdEYXRhLmdldCgpLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKIH0KIAotdm9pZCBJQ09J
bWFnZURlY29kZXI6OmRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChzaXplX3QgaW5kZXgsIGJv
b2wgb25seVNpemUpCit2b2lkIElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKHNpemVfdCBpbmRleCwg
Ym9vbCBvbmx5U2l6ZSkKIHsKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVk
IGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKICAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlmICgoIWRl
Y29kZURpcmVjdG9yeSgpIHx8ICghb25seVNpemUgJiYgIWRlY29kZUF0SW5kZXgoaW5kZXgpKSkK
LSAgICAgICAgJiYgbV9hbGxEYXRhUmVjZWl2ZWQpCisgICAgaWYgKCghZGVjb2RlRGlyZWN0b3J5
KCkgfHwgKCFvbmx5U2l6ZSAmJiAhZGVjb2RlQXRJbmRleChpbmRleCkpKSAmJiBpc0FsbERhdGFS
ZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKIH0KIApAQCAtMTg2LDkgKzE3Nyw3IEBA
IGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVEaXJlY3RvcnkoKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBSZWFkIGFuZCBwcm9jZXNzIGRpcmVjdG9yeSBlbnRyaWVzLgotICAg
IHJldHVybiAobV9kZWNvZGVkT2Zmc2V0ID49Ci0gICAgICAgICAgICAoc2l6ZU9mRGlyZWN0b3J5
ICsgKG1fZGlyRW50cmllcy5zaXplKCkgKiBzaXplT2ZEaXJFbnRyeSkpKQotICAgICAgICB8fCBw
cm9jZXNzRGlyZWN0b3J5RW50cmllcygpOworICAgIHJldHVybiAobV9kZWNvZGVkT2Zmc2V0ID49
IChzaXplT2ZEaXJlY3RvcnkgKyAobV9kaXJFbnRyaWVzLnNpemUoKSAqIHNpemVPZkRpckVudHJ5
KSkpIHx8IHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKCk7CiB9CiAKIGJvb2wgSUNPSW1hZ2VEZWNv
ZGVyOjpkZWNvZGVBdEluZGV4KHNpemVfdCBpbmRleCkKQEAgLTIwMiw4ICsxOTEsNyBAQCBib29s
IElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleChzaXplCiAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIGhhdmUgYWxyZWFkeSBzaXplZCBtX2ZyYW1lQnVmZmVyQ2FjaGUgYmVmb3JlIHRoaXMs
IGFuZAogICAgICAgICAgICAgLy8gd2UgbXVzdCBub3QgcmVzaXplIGl0IGFnYWluIGxhdGVyIChz
ZWUgY2F1dGlvbiBpbiBmcmFtZUNvdW50KCkpLgogICAgICAgICAgICAgQVNTRVJUKG1fZnJhbWVC
dWZmZXJDYWNoZS5zaXplKCkgPT0gbV9kaXJFbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBt
X2JtcFJlYWRlcnNbaW5kZXhdLnNldCgKLSAgICAgICAgICAgICAgICBuZXcgQk1QSW1hZ2VSZWFk
ZXIodGhpcywgZGlyRW50cnkubV9pbWFnZU9mZnNldCwgMCwgdHJ1ZSkpOworICAgICAgICAgICAg
bV9ibXBSZWFkZXJzW2luZGV4XS5zZXQobmV3IEJNUEltYWdlUmVhZGVyKHRoaXMsIGRpckVudHJ5
Lm1faW1hZ2VPZmZzZXQsIDAsIHRydWUpKTsKICAgICAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRl
eF0tPnNldERhdGEobV9kYXRhLmdldCgpKTsKICAgICAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRl
eF0tPnNldEJ1ZmZlcigmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaW1hZ2VUeXBlID09IFBORykgewpAQCAtMjU5LDE4ICsyNDcsMTQgQEAgYm9vbCBJQ09J
bWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogewogICAgIC8vIFJlYWQgZGlyZWN0b3J5
IGVudHJpZXMuCiAgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBzaXplT2ZEaXJlY3Rvcnkp
OwotICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gbV9kYXRhLT5zaXplKCkpCi0gICAgICAgIHx8
ICgobV9kYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwKLSAgICAgICAgICAgIChtX2Rp
ckVudHJpZXMuc2l6ZSgpICogc2l6ZU9mRGlyRW50cnkpKSkKKyAgICBpZiAoKG1fZGVjb2RlZE9m
ZnNldCA+IG1fZGF0YS0+c2l6ZSgpKSB8fCAoKG1fZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zm
c2V0KSA8IChtX2RpckVudHJpZXMuc2l6ZSgpICogc2l6ZU9mRGlyRW50cnkpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGZvciAoSWNvbkRpcmVjdG9yeUVudHJpZXM6Oml0ZXJhdG9yIGko
bV9kaXJFbnRyaWVzLmJlZ2luKCkpOwotICAgICAgICAgaSAhPSBtX2RpckVudHJpZXMuZW5kKCk7
ICsraSkKKyAgICBmb3IgKEljb25EaXJlY3RvcnlFbnRyaWVzOjppdGVyYXRvciBpKG1fZGlyRW50
cmllcy5iZWdpbigpKTsgaSAhPSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkKICAgICAgICAgKmkg
PSByZWFkRGlyZWN0b3J5RW50cnkoKTsgIC8vIFVwZGF0ZXMgbV9kZWNvZGVkT2Zmc2V0LgogCiAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugb2Zmc2V0cyBhcmUgcGFzdCB0aGUg
ZW5kIG9mIHRoZSBkaXJlY3RvcnkKICAgICAvLyBlbnRyaWVzLgotICAgIGZvciAoSWNvbkRpcmVj
dG9yeUVudHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOwotICAgICAgICAg
aSAhPSBtX2RpckVudHJpZXMuZW5kKCk7ICsraSkgeworICAgIGZvciAoSWNvbkRpcmVjdG9yeUVu
dHJpZXM6Oml0ZXJhdG9yIGkobV9kaXJFbnRyaWVzLmJlZ2luKCkpOyBpICE9IG1fZGlyRW50cmll
cy5lbmQoKTsgKytpKSB7CiAgICAgICAgIGlmIChpLT5tX2ltYWdlT2Zmc2V0IDwgbV9kZWNvZGVk
T2Zmc2V0KSB7CiAgICAgICAgICAgICBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTMwOSw4ICsyOTMsNyBAQCBJQ09JbWFnZURlY29kZXI6Okljb25EaXJlY3RvcnlF
bnRyeSBJQ09JCiAgICAgLy8gdGhpcyBpc24ndCBxdWl0ZSB3aGF0IHRoZSBiaXRtYXAgaW5mbyBo
ZWFkZXIgc2F5cyBsYXRlciwgYXMgd2Ugb25seSB1c2UKICAgICAvLyB0aGlzIHZhbHVlIHRvIGRl
dGVybWluZSB3aGljaCBpY29uIGVudHJ5IGlzIGJlc3QuCiAgICAgaWYgKCFlbnRyeS5tX2JpdENv
dW50KSB7Ci0gICAgICAgIGludCBjb2xvckNvdW50ID0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KG1fZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDJdKTsKKyAgICAgICAg
aW50IGNvbG9yQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50OF90PihtX2RhdGEtPmRhdGEoKVttX2Rl
Y29kZWRPZmZzZXQgKyAyXSk7CiAgICAgICAgIGlmICghY29sb3JDb3VudCkKICAgICAgICAgICAg
IGNvbG9yQ291bnQgPSAyNTY7ICAvLyBWYWd1ZSBpbiB0aGUgc3BlYywgbmVlZGVkIGJ5IHJlYWwt
d29ybGQgaWNvbnMuCiAgICAgICAgIGZvciAoLS1jb2xvckNvdW50OyBjb2xvckNvdW50OyBjb2xv
ckNvdW50ID4+PSAxKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDU0NzI3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIElD
T0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAgICAg
ICAgSUNPSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIHZpcnR1YWwgfklDT0ltYWdlRGVjb2Rlcigp
OwogCiAgICAgICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
bmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJpY28iOyB9CkBAIC02NywxOSArNjgsMTYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB8YXwg
aXMgYSBwcmVmZXJhYmxlIGljb24gZW50cnkgdG8gfGJ8LgogICAgICAgICAvLyBMYXJnZXIgc2l6
ZXMsIG9yIGdyZWF0ZXIgYml0ZGVwdGhzIGF0IHRoZSBzYW1lIHNpemUsIGFyZSBwcmVmZXJhYmxl
LgotICAgICAgICBzdGF0aWMgYm9vbCBjb21wYXJlRW50cmllcyhjb25zdCBJY29uRGlyZWN0b3J5
RW50cnkmIGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEljb25E
aXJlY3RvcnlFbnRyeSYgYik7CisgICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmVFbnRyaWVzKGNv
bnN0IEljb25EaXJlY3RvcnlFbnRyeSYgYSwgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBiKTsK
IAogICAgICAgICBpbmxpbmUgdWludDE2X3QgcmVhZFVpbnQxNihpbnQgb2Zmc2V0KSBjb25zdAog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MTYo
bV9kYXRhLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGVjb2RlZE9mZnNldCArIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gQk1QSW1h
Z2VSZWFkZXI6OnJlYWRVaW50MTYobV9kYXRhLmdldCgpLCBtX2RlY29kZWRPZmZzZXQgKyBvZmZz
ZXQpOwogICAgICAgICB9CiAKICAgICAgICAgaW5saW5lIHVpbnQzMl90IHJlYWRVaW50MzIoaW50
IG9mZnNldCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJNUEltYWdlUmVh
ZGVyOjpyZWFkVWludDMyKG1fZGF0YS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQgKyBvZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuIEJNUEltYWdlUmVhZGVyOjpyZWFkVWludDMyKG1fZGF0YS5nZXQoKSwgbV9kZWNv
ZGVkT2Zmc2V0ICsgb2Zmc2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZSBkZXNp
cmVkIFBOR0ltYWdlRGVjb2RlciBleGlzdHMsIGdpdmVzIGl0IHRoZSBhcHByb3ByaWF0ZSBkYXRh
LgpAQCAtOTMsNyArOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGRlY29k
aW5nLCBpdCBtZXJlbHkgZW5zdXJlcyB0aGUgZGVjb2RlciBpcyBjcmVhdGVkIGFuZCByZWFkeSB0
bwogICAgICAgICAvLyBkZWNvZGUuICBUaGUgY2FsbGVyIHdpbGwgdGhlbiBjYWxsIGEgZnVuY3Rp
b24gb24gdGhlIFBOR0ltYWdlRGVjb2RlcgogICAgICAgICAvLyB0aGF0IGFjdHVhbGx5IHRyaWdn
ZXJzIGRlY29kaW5nLgotICAgICAgICB2b2lkIGRlY29kZVdpdGhDaGVja0ZvckRhdGFFbmRlZChz
aXplX3QgaW5kZXgsIGJvb2wgb25seVNpemUpOworICAgICAgICB2b2lkIGRlY29kZShzaXplX3Qg
aW5kZXgsIGJvb2wgb25seVNpemUpOwogCiAgICAgICAgIC8vIERlY29kZXMgdGhlIGRpcmVjdG9y
eSBhbmQgZGlyZWN0b3J5IGVudHJpZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgICAgICAg
Ly8gZGF0YSwgYW5kIGluaXRpYWxpemVzIG1lbWJlcnMuICBSZXR1cm5zIHRydWUgaWYgYWxsIGRl
Y29kaW5nCkBAIC0xMjAsOSArMTE4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAv
LyBpZiB0aGUgdHlwZSBjb3VsZCBiZSBkZXRlcm1pbmVkLgogICAgICAgICBJbWFnZVR5cGUgaW1h
Z2VUeXBlQXRJbmRleChzaXplX3QpOwogCi0gICAgICAgIC8vIFRydWUgaWYgd2UndmUgc2VlbiBh
bGwgdGhlIGRhdGEuCi0gICAgICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0KICAgICAgICAg
Ly8gQW4gaW5kZXggaW50byB8bV9kYXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxy
ZWFkeSBkZWNvZGVkLgogICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHRyYWNrcyBkYXRh
IF90aGlzXyBjbGFzcyBkZWNvZGVzOyBvbmNlIHRoZQogICAgICAgICAvLyBCTVBJbWFnZVJlYWRl
ciB0YWtlcyBvdmVyIHRoaXMgd2lsbCBub3QgYmUgdXBkYXRlZCBmdXJ0aGVyLgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTQ3MjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDE4ICs1OSwxNyBAQCBleHRlcm4gIkMiIHsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IGRlY29kZXJfZXJyb3JfbWdyIHsKLSAgICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgcHViOyAgLyog
InB1YmxpYyIgZmllbGRzIGZvciBJSkcgbGlicmFyeSovCi0gICAgam1wX2J1ZiBzZXRqbXBfYnVm
ZmVyOyAgICAgIC8qIEZvciBoYW5kbGluZyBjYXRhc3Ryb3BpYyBlcnJvcnMgKi8KKyAgICBzdHJ1
Y3QganBlZ19lcnJvcl9tZ3IgcHViOyAvLyAicHVibGljIiBmaWVsZHMgZm9yIElKRyBsaWJyYXJ5
CisgICAgam1wX2J1ZiBzZXRqbXBfYnVmZmVyOyAgICAgLy8gRm9yIGhhbmRsaW5nIGNhdGFzdHJv
cGljIGVycm9ycwogfTsKIAogZW51bSBqc3RhdGUgewotICAgIEpQRUdfSEVBREVSLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogUmVhZGluZyBKRklGIGhlYWRlcnMgKi8KKyAgICBKUEVHX0hF
QURFUiwgICAgICAgICAgICAgICAgIC8vIFJlYWRpbmcgSkZJRiBoZWFkZXJzCiAgICAgSlBFR19T
VEFSVF9ERUNPTVBSRVNTLAotICAgIEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lWRSwgICAgICAg
ICAgLyogT3V0cHV0IHByb2dyZXNzaXZlIHBpeGVscyAqLwotICAgIEpQRUdfREVDT01QUkVTU19T
RVFVRU5USUFMLCAgICAgICAgICAgLyogT3V0cHV0IHNlcXVlbnRpYWwgcGl4ZWxzICovCisgICAg
SlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZFLCAvLyBPdXRwdXQgcHJvZ3Jlc3NpdmUgcGl4ZWxz
CisgICAgSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUwsICAvLyBPdXRwdXQgc2VxdWVudGlhbCBw
aXhlbHMKICAgICBKUEVHX0RPTkUsCi0gICAgSlBFR19TSU5LX05PTl9KUEVHX1RSQUlMRVIsICAg
ICAgICAgIC8qIFNvbWUgaW1hZ2UgZmlsZXMgaGF2ZSBhICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIG5vbi1KUEVHIHRyYWlsZXIgKi8KKyAgICBKUEVHX1NJ
TktfTk9OX0pQRUdfVFJBSUxFUiwgIC8vIFNvbWUgaW1hZ2UgZmlsZXMgaGF2ZSBhIG5vbi1KUEVH
IHRyYWlsZXIKICAgICBKUEVHX0VSUk9SICAgIAogfTsKIApAQCAtODAsMTQgKzc5LDEyIEBAIHZv
aWQgc2tpcF9pbnB1dF9kYXRhKGpfZGVjb21wcmVzc19wdHIgamQKIHZvaWQgdGVybV9zb3VyY2Uo
al9kZWNvbXByZXNzX3B0ciBqZCk7CiB2b2lkIGVycm9yX2V4aXQoal9jb21tb25fcHRyIGNpbmZv
KTsKIAotLyoKLSAqICBJbXBsZW1lbnRhdGlvbiBvZiBhIEpQRUcgc3JjIG9iamVjdCB0aGF0IHVu
ZGVyc3RhbmRzIG91ciBzdGF0ZSBtYWNoaW5lCi0gKi8KKy8vIEltcGxlbWVudGF0aW9uIG9mIGEg
SlBFRyBzcmMgb2JqZWN0IHRoYXQgdW5kZXJzdGFuZHMgb3VyIHN0YXRlIG1hY2hpbmUKIHN0cnVj
dCBkZWNvZGVyX3NvdXJjZV9tZ3IgewotICAvKiBwdWJsaWMgZmllbGRzOyBtdXN0IGJlIGZpcnN0
IGluIHRoaXMgc3RydWN0ISAqLwotICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyIHB1YjsKKyAgICAv
LyBwdWJsaWMgZmllbGRzOyBtdXN0IGJlIGZpcnN0IGluIHRoaXMgc3RydWN0IQorICAgIHN0cnVj
dCBqcGVnX3NvdXJjZV9tZ3IgcHViOwogCi0gIEpQRUdJbWFnZVJlYWRlciAqZGVjb2RlcjsKKyAg
ICBKUEVHSW1hZ2VSZWFkZXIgKmRlY29kZXI7CiB9OwogCiBjbGFzcyBKUEVHSW1hZ2VSZWFkZXIK
QEAgLTEwMiwxMSArOTksMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbWVtc2V0KCZtX2lu
Zm8sIDAsIHNpemVvZihqcGVnX2RlY29tcHJlc3Nfc3RydWN0KSk7CiAgCi0gICAgICAgIC8qIFdl
IHNldCB1cCB0aGUgbm9ybWFsIEpQRUcgZXJyb3Igcm91dGluZXMsIHRoZW4gb3ZlcnJpZGUgZXJy
b3JfZXhpdC4gKi8KKyAgICAgICAgLy8gV2Ugc2V0IHVwIHRoZSBub3JtYWwgSlBFRyBlcnJvciBy
b3V0aW5lcywgdGhlbiBvdmVycmlkZSBlcnJvcl9leGl0LgogICAgICAgICBtX2luZm8uZXJyID0g
anBlZ19zdGRfZXJyb3IoJm1fZXJyLnB1Yik7CiAgICAgICAgIG1fZXJyLnB1Yi5lcnJvcl9leGl0
ID0gZXJyb3JfZXhpdDsKIAotICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBKUEVH
IGRlY29tcHJlc3Npb24gb2JqZWN0ICovCisgICAgICAgIC8vIEFsbG9jYXRlIGFuZCBpbml0aWFs
aXplIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QuCiAgICAgICAgIGpwZWdfY3JlYXRlX2RlY29t
cHJlc3MoJm1faW5mbyk7CiAgIAogICAgICAgICBkZWNvZGVyX3NvdXJjZV9tZ3IqIHNyYyA9IDA7
CkBAIC0xMjAsNyArMTE3LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1faW5mby5zcmMgPSAoanBl
Z19zb3VyY2VfbWdyKilzcmM7CiAKLSAgICAgICAgLyogU2V0IHVwIGNhbGxiYWNrIGZ1bmN0aW9u
cy4gKi8KKyAgICAgICAgLy8gU2V0IHVwIGNhbGxiYWNrIGZ1bmN0aW9ucy4KICAgICAgICAgc3Jj
LT5wdWIuaW5pdF9zb3VyY2UgPSBpbml0X3NvdXJjZTsKICAgICAgICAgc3JjLT5wdWIuZmlsbF9p
bnB1dF9idWZmZXIgPSBmaWxsX2lucHV0X2J1ZmZlcjsKICAgICAgICAgc3JjLT5wdWIuc2tpcF9p
bnB1dF9kYXRhID0gc2tpcF9pbnB1dF9kYXRhOwpAQCAtMTQ4LDIyICsxNDUsMjAgQEAgcHVibGlj
OgogICAgICAgICBsb25nIGJ5dGVzVG9Ta2lwID0gc3RkOjptaW4obnVtX2J5dGVzLCAobG9uZylz
cmMtPnB1Yi5ieXRlc19pbl9idWZmZXIpOwogICAgICAgICBzcmMtPnB1Yi5ieXRlc19pbl9idWZm
ZXIgLT0gKHNpemVfdClieXRlc1RvU2tpcDsKICAgICAgICAgc3JjLT5wdWIubmV4dF9pbnB1dF9i
eXRlICs9IGJ5dGVzVG9Ta2lwOwotICAgIAotICAgICAgICBpZiAobnVtX2J5dGVzID4gYnl0ZXNU
b1NraXApCi0gICAgICAgICAgICBtX2J5dGVzVG9Ta2lwID0gKHNpemVfdCkobnVtX2J5dGVzIC0g
Ynl0ZXNUb1NraXApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2J5dGVzVG9Ta2lwID0g
MDsKKworICAgICAgICBtX2J5dGVzVG9Ta2lwID0gc3RkOjptYXgobnVtX2J5dGVzIC0gYnl0ZXNU
b1NraXAsIHN0YXRpY19jYXN0PGxvbmc+KDApKTsKICAgICB9CiAKLSAgICBib29sIGRlY29kZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgc2l6ZU9ubHkpIHsKLSAgICAgICAgbV9kZWNv
ZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7Ci0gICAgICAgIAorICAgIGJvb2wgZGVjb2RlKGNvbnN0
IFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBvbmx5U2l6ZSkKKyAgICB7CisgICAgICAgIG1fZGVj
b2RpbmdTaXplT25seSA9IG9ubHlTaXplOworCiAgICAgICAgIHVuc2lnbmVkIG5ld0J5dGVDb3Vu
dCA9IGRhdGEuc2l6ZSgpIC0gbV9idWZmZXJMZW5ndGg7CiAgICAgICAgIHVuc2lnbmVkIHJlYWRP
ZmZzZXQgPSBtX2J1ZmZlckxlbmd0aCAtIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsKIAog
ICAgICAgICBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgKz0gbmV3Qnl0ZUNvdW50OwogICAg
ICAgICBtX2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAoSk9DVEVUKikoZGF0YS5kYXRhKCkp
ICsgcmVhZE9mZnNldDsKLSAgICAgICAgCisKICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSBi
eXRlcyB0byBza2lwLCB0cnkgdG8gc2tpcCB0aG9zZSBub3cuCiAgICAgICAgIGlmIChtX2J5dGVz
VG9Ta2lwKQogICAgICAgICAgICAgc2tpcEJ5dGVzKG1fYnl0ZXNUb1NraXApOwpAQCAtMTc4LDE3
MiArMTczLDE1MCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKLSAgICAgICAgICAgIGNhc2UgSlBFR19IRUFERVI6Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgLyogUmVhZCBmaWxlIHBhcmFtZXRlcnMgd2l0aCBqcGVnX3JlYWRfaGVhZGVy
KCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX2hlYWRlcigmbV9pbmZvLCB0cnVl
KSA9PSBKUEVHX1NVU1BFTkRFRCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8q
IEkvTyBzdXNwZW5zaW9uICovCi0KLSAgICAgICAgICAgICAgICAvKiBsZXQgbGlianBlZyB0YWtl
IGNhcmUgb2YgZ3JheS0+UkdCIGFuZCBZQ2JDci0+UkdCIGNvbnZlcnNpb25zICovCi0gICAgICAg
ICAgICAgICAgc3dpdGNoIChtX2luZm8uanBlZ19jb2xvcl9zcGFjZSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEpDU19HUkFZU0NBTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkNT
X1JHQjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQ1NfWUNiQ3I6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2luZm8ub3V0X2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEpDU19DTVlLOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIEpDU19ZQ0NLOgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8ganBlZ2xpYiBjYW5ub3QgY29udmVydCB0aGVzZSB0byByZ2IsIGJ1dCBpdCBjYW4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgeWNjayB0byBjbXlrCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZm8ub3V0X2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX0VSUk9SOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBKUEVHX0hFQURFUjoKKyAgICAgICAgICAgIC8vIFJlYWQgZmlsZSBwYXJhbWV0ZXJzIHdpdGgg
anBlZ19yZWFkX2hlYWRlcigpLgorICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9oZWFkZXIoJm1f
aW5mbywgdHJ1ZSkgPT0gSlBFR19TVVNQRU5ERUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorCisgICAgICAgICAgICAvLyBMZXQgbGlianBlZyB0YWtl
IGNhcmUgb2YgZ3JheS0+UkdCIGFuZCBZQ2JDci0+UkdCIGNvbnZlcnNpb25zLgorICAgICAgICAg
ICAgc3dpdGNoIChtX2luZm8uanBlZ19jb2xvcl9zcGFjZSkgeworICAgICAgICAgICAgY2FzZSBK
Q1NfR1JBWVNDQUxFOgorICAgICAgICAgICAgY2FzZSBKQ1NfUkdCOgorICAgICAgICAgICAgY2Fz
ZSBKQ1NfWUNiQ3I6CisgICAgICAgICAgICAgICAgbV9pbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpD
U19SR0I7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpDU19DTVlL
OgorICAgICAgICAgICAgY2FzZSBKQ1NfWUNDSzoKKyAgICAgICAgICAgICAgICAvLyBqcGVnbGli
IGNhbm5vdCBjb252ZXJ0IHRoZXNlIHRvIHJnYiwgYnV0IGl0IGNhbiBjb252ZXJ0IHljY2sKKyAg
ICAgICAgICAgICAgICAvLyB0byBjbXlrLgorICAgICAgICAgICAgICAgIG1faW5mby5vdXRfY29s
b3Jfc3BhY2UgPSBKQ1NfQ01ZSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRVJST1I7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
LyoKLSAgICAgICAgICAgICAgICAgKiBEb24ndCBhbGxvY2F0ZSBhIGdpYW50IGFuZCBzdXBlcmZs
dW91cyBtZW1vcnkgYnVmZmVyCi0gICAgICAgICAgICAgICAgICogd2hlbiB0aGUgaW1hZ2UgaXMg
YSBzZXF1ZW50aWFsIEpQRUcuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAg
bV9pbmZvLmJ1ZmZlcmVkX2ltYWdlID0ganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMoJm1faW5mbyk7
Ci0KLSAgICAgICAgICAgICAgICAvKiBVc2VkIHRvIHNldCB1cCBpbWFnZSBzaXplIHNvIGFycmF5
cyBjYW4gYmUgYWxsb2NhdGVkICovCi0gICAgICAgICAgICAgICAganBlZ19jYWxjX291dHB1dF9k
aW1lbnNpb25zKCZtX2luZm8pOwotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAg
ICAgKiBNYWtlIGEgb25lLXJvdy1oaWdoIHNhbXBsZSBhcnJheSB0aGF0IHdpbGwgZ28gYXdheQot
ICAgICAgICAgICAgICAgICAqIHdoZW4gZG9uZSB3aXRoIGltYWdlLiBBbHdheXMgbWFrZSBpdCBi
aWcgZW5vdWdoIHRvCi0gICAgICAgICAgICAgICAgICogaG9sZCBhbiBSR0Igcm93LiAgU2luY2Ug
dGhpcyB1c2VzIHRoZSBJSkcgbWVtb3J5Ci0gICAgICAgICAgICAgICAgICogbWFuYWdlciwgaXQg
bXVzdCBiZSBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBjYWxsIHRvCi0gICAgICAgICAgICAgICAgICog
anBlZ19zdGFydF9jb21wcmVzcygpLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ICAgIGludCByb3dfc3RyaWRlID0gbV9pbmZvLm91dHB1dF93aWR0aCAqIDQ7IC8vIFJHQkEgYnVm
ZmVyCi0KLQotICAgICAgICAgICAgICAgIG1fc2FtcGxlcyA9ICgqbV9pbmZvLm1lbS0+YWxsb2Nf
c2FycmF5KSgoal9jb21tb25fcHRyKSAmbV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEpQT09MX0lNQUdFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJvd19zdHJpZGUsIDEpOwotCi0gICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGNh
biBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAg
ICAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwg
bV9pbmZvLmltYWdlX2hlaWdodCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQ
RUdfRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBEb24ndCBhbGxvY2F0ZSBhIGdpYW50IGFuZCBzdXBlcmZs
dW91cyBtZW1vcnkgYnVmZmVyIHdoZW4gdGhlCisgICAgICAgICAgICAvLyBpbWFnZSBpcyBhIHNl
cXVlbnRpYWwgSlBFRy4KKyAgICAgICAgICAgIG1faW5mby5idWZmZXJlZF9pbWFnZSA9IGpwZWdf
aGFzX211bHRpcGxlX3NjYW5zKCZtX2luZm8pOworCisgICAgICAgICAgICAvLyBVc2VkIHRvIHNl
dCB1cCBpbWFnZSBzaXplIHNvIGFycmF5cyBjYW4gYmUgYWxsb2NhdGVkLgorICAgICAgICAgICAg
anBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKCZtX2luZm8pOworCisgICAgICAgICAgICAvLyBN
YWtlIGEgb25lLXJvdy1oaWdoIHNhbXBsZSBhcnJheSB0aGF0IHdpbGwgZ28gYXdheSB3aGVuIGRv
bmUgd2l0aAorICAgICAgICAgICAgLy8gaW1hZ2UuIEFsd2F5cyBtYWtlIGl0IGJpZyBlbm91Z2gg
dG8gaG9sZCBhbiBSR0Igcm93LiAgU2luY2UgdGhpcworICAgICAgICAgICAgLy8gdXNlcyB0aGUg
SUpHIG1lbW9yeSBtYW5hZ2VyLCBpdCBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgdGhlIGNhbGwK
KyAgICAgICAgICAgIC8vIHRvIGpwZWdfc3RhcnRfY29tcHJlc3MoKS4KKyAgICAgICAgICAgIG1f
c2FtcGxlcyA9ICgqbV9pbmZvLm1lbS0+YWxsb2Nfc2FycmF5KSgoal9jb21tb25fcHRyKSAmbV9p
bmZvLCBKUE9PTF9JTUFHRSwgbV9pbmZvLm91dHB1dF93aWR0aCAqIDQsIDEpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKG1fZGVjb2RpbmdTaXplT25seSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBXZSBjYW4gc3RvcCBoZXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBSZWR1Y2Ugb3VyIGJ1
ZmZlciBsZW5ndGggYW5kIGF2YWlsYWJsZSBkYXRhLgotICAgICAgICAgICAgICAgICAgICBtX2J1
ZmZlckxlbmd0aCAtPSBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlciA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKLSAgICAgICAgICAgIGNh
c2UgSlBFR19TVEFSVF9ERUNPTVBSRVNTOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8qIFNldCBwYXJhbWV0ZXJzIGZvciBkZWNvbXByZXNzaW9uICovCi0gICAgICAgICAgICAgICAg
LyogRklYTUUgLS0gU2hvdWxkIHJlc2V0IGRjdF9tZXRob2QgYW5kIGRpdGhlciBtb2RlCi0gICAg
ICAgICAgICAgICAgICogZm9yIGZpbmFsIHBhc3Mgb2YgcHJvZ3Jlc3NpdmUgSlBFRwotICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG1faW5mby5kY3RfbWV0aG9kID0gIEpEQ1Rf
SVNMT1c7Ci0gICAgICAgICAgICAgICAgbV9pbmZvLmRpdGhlcl9tb2RlID0gSkRJVEhFUl9GUzsK
LSAgICAgICAgICAgICAgICBtX2luZm8uZG9fZmFuY3lfdXBzYW1wbGluZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgbV9pbmZvLmVuYWJsZV8ycGFzc19xdWFudCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIG1faW5mby5kb19ibG9ja19zbW9vdGhpbmcgPSB0cnVlOwotCi0gICAgICAgICAgICAg
ICAgLyogU3RhcnQgZGVjb21wcmVzc29yICovCi0gICAgICAgICAgICAgICAgaWYgKCFqcGVnX3N0
YXJ0X2RlY29tcHJlc3MoJm1faW5mbykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OyAvKiBJL08gc3VzcGVuc2lvbiAqLworICAgICAgICAgICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhl
IHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICBpZiAo
IW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWln
aHQpKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRVJST1I7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLyog
SWYgdGhpcyBpcyBhIHByb2dyZXNzaXZlIEpQRUcgLi4uICovCi0gICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IChtX2luZm8uYnVmZmVyZWRfaW1hZ2UpID8gSlBFR19ERUNPTVBSRVNTX1BST0dSRVNT
SVZFIDogSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUw7CisgICAgICAgICAgICBpZiAobV9kZWNv
ZGluZ1NpemVPbmx5KSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHN0b3AgaGVyZS4gIFJl
ZHVjZSBvdXIgYnVmZmVyIGxlbmd0aCBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgLy8g
ZGF0YS4KKyAgICAgICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCAtPSBtX2luZm8uc3JjLT5ieXRl
c19pbl9idWZmZXI7CisgICAgICAgICAgICAgICAgbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVy
ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAK
LSAgICAgICAgICAgIGNhc2UgSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUw6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gSlBFR19ERUNPTVBSRVNTX1NFUVVF
TlRJQUwpIHsKLSAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+b3V0
cHV0U2NhbmxpbmVzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyog
SS9PIHN1c3BlbnNpb24gKi8KLSAgICAgIAotICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSd2
ZSBjb21wbGV0ZWQgaW1hZ2Ugb3V0cHV0IC4uLiAqLwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSBtX2luZm8ub3V0cHV0X2hlaWdodCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX0RPTkU7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAvLyBGQUxMIFRIUk9VR0gKKworICAgICAgICBjYXNlIEpQRUdfU1RBUlRfREVDT01Q
UkVTUzoKKyAgICAgICAgICAgIC8vIFNldCBwYXJhbWV0ZXJzIGZvciBkZWNvbXByZXNzaW9uLgor
ICAgICAgICAgICAgLy8gRklYTUUgLS0gU2hvdWxkIHJlc2V0IGRjdF9tZXRob2QgYW5kIGRpdGhl
ciBtb2RlIGZvciBmaW5hbCBwYXNzCisgICAgICAgICAgICAvLyBvZiBwcm9ncmVzc2l2ZSBKUEVH
LgorICAgICAgICAgICAgbV9pbmZvLmRjdF9tZXRob2QgPSAgSkRDVF9JU0xPVzsKKyAgICAgICAg
ICAgIG1faW5mby5kaXRoZXJfbW9kZSA9IEpESVRIRVJfRlM7CisgICAgICAgICAgICBtX2luZm8u
ZG9fZmFuY3lfdXBzYW1wbGluZyA9IHRydWU7CisgICAgICAgICAgICBtX2luZm8uZW5hYmxlXzJw
YXNzX3F1YW50ID0gZmFsc2U7CisgICAgICAgICAgICBtX2luZm8uZG9fYmxvY2tfc21vb3RoaW5n
ID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gU3RhcnQgZGVjb21wcmVzc29yLgorICAgICAgICAg
ICAgaWYgKCFqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJm1faW5mbykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIEkvTyBzdXNwZW5zaW9uLgorCisgICAgICAgICAgICAvLyBJZiB0aGlz
IGlzIGEgcHJvZ3Jlc3NpdmUgSlBFRyAuLi4KKyAgICAgICAgICAgIG1fc3RhdGUgPSAobV9pbmZv
LmJ1ZmZlcmVkX2ltYWdlKSA/IEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lWRSA6IEpQRUdfREVD
T01QUkVTU19TRVFVRU5USUFMOworICAgICAgICAvLyBGQUxMIFRIUk9VR0gKKworICAgICAgICBj
YXNlIEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMOgorICAgICAgICAgICAgaWYgKG1fc3RhdGUg
PT0gSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUwpIHsKKyAgCisgICAgICAgICAgICAgICAgaWYg
KCFtX2RlY29kZXItPm91dHB1dFNjYW5saW5lcygpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24uCisgIAorICAgICAgICAgICAgICAgIC8vIElmIHdl
J3ZlIGNvbXBsZXRlZCBpbWFnZSBvdXRwdXQuLi4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9p
bmZvLm91dHB1dF9zY2FubGluZSA9PSBtX2luZm8ub3V0cHV0X2hlaWdodCk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEpQRUdfRE9ORTsKICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gRkFM
TCBUSFJPVUdICiAKLSAgICAgICAgICAgIGNhc2UgSlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZF
OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlID09IEpQRUdfREVD
T01QUkVTU19QUk9HUkVTU0lWRSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzOwot
ICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMg
PSBqcGVnX2NvbnN1bWVfaW5wdXQoJm1faW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hp
bGUgKChzdGF0dXMgIT0gSlBFR19TVVNQRU5ERUQpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdGF0dXMgIT0gSlBFR19SRUFDSEVEX0VPSSkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2luZm8ub3V0cHV0
X3NjYW5saW5lID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NhbiA9
IG1faW5mby5pbnB1dF9zY2FuX251bWJlcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qIGlmIHdlIGhhdmVuJ3QgZGlzcGxheWVkIGFueXRoaW5nIHlldCAob3V0cHV0X3NjYW5fbnVt
YmVyPT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3ZSBoYXZlIGVub3VnaCBk
YXRhIGZvciBhIGNvbXBsZXRlIHNjYW4sIGZvcmNlIG91dHB1dAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mIHRoZSBsYXN0IGZ1bGwgc2NhbiAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgobV9pbmZvLm91dHB1dF9zY2FuX251bWJlciA9PSAwKSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2NhbiA+IDEpICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0dXMgIT0gSlBFR19SRUFDSEVEX0VPSSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjYW4tLTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghanBlZ19zdGFydF9vdXRwdXQoJm1faW5mbywgc2NhbikpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZv
Lm91dHB1dF9zY2FubGluZSA9PSAweGZmZmZmZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZm8ub3V0cHV0X3NjYW5saW5lID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX2RlY29kZXItPm91dHB1dFNjYW5saW5lcygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gMCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogZGlkbid0IG1hbmFnZSB0byByZWFkIGFueSBsaW5lcyAtIGZs
YWcgc28gd2UgZG9uJ3QgY2FsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVn
X3N0YXJ0X291dHB1dCgpIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBzY2FuICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAweGZm
ZmZmZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyogSS9PIHN1
c3BlbnNpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWln
aHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWpwZWdfZmluaXNoX291dHB1
dCgmbV9pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
IC8qIEkvTyBzdXNwZW5zaW9uICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
anBlZ19pbnB1dF9jb21wbGV0ZSgmbV9pbmZvKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobV9pbmZvLmlucHV0X3NjYW5fbnVtYmVyID09IG1faW5mby5vdXRwdXRfc2Nhbl9u
dW1iZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBKUEVHX0RFQ09NUFJFU1NfUFJPR1JFU1NJVkU6CisgICAgICAgICAgICBpZiAobV9zdGF0
ZSA9PSBKUEVHX0RFQ09NUFJFU1NfUFJPR1JFU1NJVkUpIHsKKyAgICAgICAgICAgICAgICBpbnQg
c3RhdHVzOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0ganBlZ19jb25zdW1lX2lucHV0KCZtX2luZm8pOworICAgICAgICAgICAgICAgIH0gd2hpbGUg
KChzdGF0dXMgIT0gSlBFR19TVVNQRU5ERUQpICYmIChzdGF0dXMgIT0gSlBFR19SRUFDSEVEX0VP
SSkpOworCisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1faW5mby5vdXRwdXRfc2NhbmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBzY2FuID0gbV9pbmZvLmlucHV0X3NjYW5fbnVtYmVyOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlbid0IGRpc3BsYXllZCBhbnl0aGluZyB5ZXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIChvdXRwdXRfc2Nhbl9udW1iZXIgPT0gMCkgYW5kIHdlIGhhdmUgZW5v
dWdoIGRhdGEgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGNvbXBsZXRlIHNjYW4s
IGZvcmNlIG91dHB1dCBvZiB0aGUgbGFzdCBmdWxsIHNjYW4uCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1faW5mby5vdXRwdXRfc2Nhbl9udW1iZXIgJiYgKHNjYW4gPiAxKSAmJiAoc3Rh
dHVzICE9IEpQRUdfUkVBQ0hFRF9FT0kpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
c2NhbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5mby5vdXRwdXRfc2Nhbmxp
bmUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFqcGVnX3N0YXJ0X291dHB1dCgmbV9pbmZvLCBzY2FuKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSS9PIHN1c3BlbnNpb24uCiAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19ET05FOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gMHhmZmZmZmYpCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZm8ub3V0cHV0X3NjYW5saW5lID0gMDsKIAotICAgICAgICAgICAgY2FzZSBKUEVH
X0RPTkU6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogRmluaXNoIGRlY29tcHJl
c3Npb24gKi8KLSAgICAgICAgICAgICAgICBpZiAoIWpwZWdfZmluaXNoX2RlY29tcHJlc3MoJm1f
aW5mbykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lv
biAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+b3V0cHV0U2NhbmxpbmVz
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9pbmZvLm91dHB1dF9zY2FubGlu
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgbWFuYWdlIHRvIHJlYWQg
YW55IGxpbmVzIC0gZmxhZyBzbyB3ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRv
bid0IGNhbGwganBlZ19zdGFydF9vdXRwdXQoKSBtdWx0aXBsZSB0aW1lcyBmb3IKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBzY2FuLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAweGZmZmZmZjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KKyAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBF
R19UUkFJTEVSOworICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9zY2FubGlu
ZSA9PSBtX2luZm8ub3V0cHV0X2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFqcGVnX2ZpbmlzaF9vdXRwdXQoJm1faW5mbykpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIEkvTyBzdXNwZW5zaW9uLgogCi0gICAgICAgICAgICAgICAgLyog
d2UncmUgZG9uZSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGpwZWdfaW5wdXRfY29tcGxldGUoJm1faW5mbykgJiYgKG1faW5mby5pbnB1dF9z
Y2FuX251bWJlciA9PSBtX2luZm8ub3V0cHV0X3NjYW5fbnVtYmVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91
dHB1dF9zY2FubGluZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19ET05FOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEpQRUdfU0lOS19OT05fSlBFR19UUkFJ
TEVSOgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGQUxMIFRIUk9VR0gKIAot
ICAgICAgICAgICAgY2FzZSBKUEVHX0VSUk9SOgotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEpQRUdfRE9ORToKKyAgICAgICAgICAgIC8vIEZpbmlzaCBkZWNvbXByZXNzaW9u
LgorICAgICAgICAgICAgaWYgKCFqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCZtX2luZm8pKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJL08gc3VzcGVuc2lvbi4KKworICAgICAgICAg
ICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBjYXNlIEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOgor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBKUEVHX0VSUk9SOgorICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NywxMCAr
MzQwLDEwIEBAIHByaXZhdGU6CiAgICAgSlNBTVBBUlJBWSBtX3NhbXBsZXM7CiB9OwogCi0vKiBP
dmVycmlkZSB0aGUgc3RhbmRhcmQgZXJyb3IgbWV0aG9kIGluIHRoZSBJSkcgSlBFRyBkZWNvZGVy
IGNvZGUuICovCisvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgZXJyb3IgbWV0aG9kIGluIHRoZSBJ
SkcgSlBFRyBkZWNvZGVyIGNvZGUuCiB2b2lkIGVycm9yX2V4aXQoal9jb21tb25fcHRyIGNpbmZv
KQogewotICAgIC8qIFJldHVybiBjb250cm9sIHRvIHRoZSBzZXRqbXAgcG9pbnQuICovCisgICAg
Ly8gUmV0dXJuIGNvbnRyb2wgdG8gdGhlIHNldGptcCBwb2ludC4KICAgICBkZWNvZGVyX2Vycm9y
X21nciAqZXJyID0gKGRlY29kZXJfZXJyb3JfbWdyICopIGNpbmZvLT5lcnI7CiAgICAgbG9uZ2pt
cChlcnItPnNldGptcF9idWZmZXIsIC0xKTsKIH0KQEAgLTM4OCwxMiArMzYxLDEyIEBAIHZvaWQg
c2tpcF9pbnB1dF9kYXRhKGpfZGVjb21wcmVzc19wdHIgamQKIGJvb2xlYW4gZmlsbF9pbnB1dF9i
dWZmZXIoal9kZWNvbXByZXNzX3B0ciBqZCkKIHsKICAgICAvLyBPdXIgZGVjb2RlIHN0ZXAgYWx3
YXlzIHNldHMgdGhpbmdzIHVwIHByb3Blcmx5LCBzbyBpZiB0aGlzIG1ldGhvZCBpcyBldmVyCi0g
ICAgLy8gY2FsbGVkLCB0aGVuIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gIEEg
cmV0dXJuIHZhbHVlIG9mIEZBTFNFIGluZGljYXRlcwotICAgIC8vIHRoYXQgd2UgaGF2ZSBubyBk
YXRhIHRvIHN1cHBseSB5ZXQuCisgICAgLy8gY2FsbGVkLCB0aGVuIHdlIGhhdmUgaGl0IHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlci4gIEEgcmV0dXJuIHZhbHVlIG9mIGZhbHNlCisgICAgLy8gaW5kaWNh
dGVzIHRoYXQgd2UgaGF2ZSBubyBkYXRhIHRvIHN1cHBseSB5ZXQuCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIHRlcm1fc291cmNlIChqX2RlY29tcHJlc3NfcHRyIGpkKQordm9pZCB0ZXJt
X3NvdXJjZShqX2RlY29tcHJlc3NfcHRyIGpkKQogewogICAgIGRlY29kZXJfc291cmNlX21nciAq
c3JjID0gKGRlY29kZXJfc291cmNlX21nciAqKWpkLT5zcmM7CiAgICAgc3JjLT5kZWNvZGVyLT5k
ZWNvZGVyKCktPmpwZWdDb21wbGV0ZSgpOwpAQCAtNDA3LDIxICszODAsMTcgQEAgSlBFR0ltYWdl
RGVjb2Rlcjo6fkpQRUdJbWFnZURlY29kZXIoKQogewogfQogCi0vLyBUYWtlIHRoZSBkYXRhIGFu
ZCBzdG9yZSBpdC4KIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAgIGlmIChtX2ZhaWxlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgLy8gQ2FjaGUgb3VyIG5ldyBkYXRhLgogICAgIEltYWdlRGVjb2Rl
cjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBK
UEVHIHJlYWRlci4KICAgICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxlZCkKICAgICAgICAgbV9y
ZWFkZXIuc2V0KG5ldyBKUEVHSW1hZ2VSZWFkZXIodGhpcykpOwogfQogCi0vLyBXaGV0aGVyIG9y
IG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KIGJvb2wgSlBF
R0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKIHsKICAgICBpZiAoIUltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgIWZhaWxlZCgpICYmIG1fcmVhZGVyKQpAQCAtNDM0LDYg
KzQwMyw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCAKIHsKICAg
ICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC00NDgsMjMgKzQxOCwxMCBAQCBSR0JBMzJCdWZmZXIqIEpQRUdJbWFn
ZURlY29kZXI6OmZyYW1lQnVmCiAKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZy
YW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCi0gICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1lLgot
ICAgICAgICBkZWNvZGUoKTsKKyAgICAgICAgZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZy
YW1lOwogfQogCi0vLyBGZWVkIGRhdGEgdG8gdGhlIEpQRUcgcmVhZGVyLgotdm9pZCBKUEVHSW1h
Z2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkKLXsKLSAgICBpZiAobV9mYWlsZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRh
LT5idWZmZXIoKSwgc2l6ZU9ubHkpOwotCi0gICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1
ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKLSAgICAgICAgbV9yZWFkZXIuY2xlYXIoKTsK
LX0KLQogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogewogICAgIGlm
IChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQpAQCAtNTMxLDkgKzQ4OCwyMCBAQCB2b2lk
IEpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSgpCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEhhbmQgYmFjayBhbiBh
cHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZlbiBpZiB0aGUgaW1hZ2UgZW5kZWQgdXAgYmVp
bmcgZW1wdHkuCi0gICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF07Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwor
ICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZlbiBpZiB0
aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcKKyAgICAvLyBlbXB0eS4KKyAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF0uc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7Cit9CisKK3Zv
aWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCit7CisgICAgaWYgKG1f
ZmFpbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVj
b2RlKG1fZGF0YS0+YnVmZmVyKCksIG9ubHlTaXplKTsKKworICAgIGlmIChtX2ZhaWxlZCB8fCAo
IW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCisgICAgICAgIG1fcmVhZGVy
LmNsZWFyKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTQ3MjcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyOCArMzgsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEpQRUdJbWFnZURlY29kZXIoKTsKLSAgICAgICAgfkpQRUdJbWFnZURl
Y29kZXIoKTsKKyAgICAgICAgdmlydHVhbCB+SlBFR0ltYWdlRGVjb2RlcigpOwogCisgICAgICAg
IC8vIEltYWdlRGVjb2RlcgogICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuICJqcGciOyB9Ci0KLSAgICAgICAgLy8gVGFrZSB0aGUgZGF0YSBh
bmQgc3RvcmUgaXQuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90
IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Ci0KICAgICAgICAgdmlydHVhbCBib29sIHNldFNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0KICAgICAgICAgdmlydHVhbCBS
R0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwotICAgICAgICAK
ICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCi0gICAgICAgIHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSk7Ci0KICAg
ICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoKTsKICAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUo
KTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIERlY29kZXMgdGhlIGltYWdlLiAgSWYgfG9u
bHlTaXplfCBpcyB0cnVlLCBzdG9wcyBkZWNvZGluZyBhZnRlcgorICAgICAgICAvLyBjYWxjdWxh
dGluZyB0aGUgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBvbmx5U2l6ZSk7
CisKICAgICAgICAgT3duUHRyPEpQRUdJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CiAgICAgfTsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NDcyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDIxICs1Miw0MCBAQCBjb25zdCBkb3VibGUgY0ludmVyc2VHYW1tYSA9IDAuNDU0NTU7CiBj
b25zdCB1bnNpZ25lZCBsb25nIGNNYXhQTkdTaXplID0gMTAwMDAwMFVMOwogCiAvLyBDYWxsZWQg
aWYgdGhlIGRlY29kaW5nIG9mIHRoZSBpbWFnZSBmYWlscy4KLXN0YXRpYyB2b2lkIFBOR0FQSSBk
ZWNvZGluZ0ZhaWxlZChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29uc3RfY2hhcnAgZXJyb3Jf
bXNnKTsKK3N0YXRpYyB2b2lkIFBOR0FQSSBkZWNvZGluZ0ZhaWxlZChwbmdfc3RydWN0cCBwbmcs
IHBuZ19jb25zdF9jaGFycCkKK3sKKyAgICBsb25nam1wKHBuZy0+am1wYnVmLCAxKTsKK30KIAot
Ly8gQ2FsbGJhY2tzIGdpdmVuIHRvIHRoZSByZWFkIHN0cnVjdC4gIFRoZSBmaXJzdCBpcyBmb3Ig
d2FybmluZ3MgKHdlIHdhbnQgdG8gdHJlYXQgYSBwYXJ0aWN1bGFyIHdhcm5pbmcKLS8vIGFzIGFu
IGVycm9yLCB3aGljaCBpcyB3aHkgd2UgaGF2ZSB0byByZWdpc3RlciB0aGlzIGNhbGxiYWNrLgot
c3RhdGljIHZvaWQgUE5HQVBJIGRlY29kaW5nV2FybmluZyhwbmdfc3RydWN0cCBwbmdfcHRyLCBw
bmdfY29uc3RfY2hhcnAgd2FybmluZ19tc2cpOworLy8gQ2FsbGJhY2tzIGdpdmVuIHRvIHRoZSBy
ZWFkIHN0cnVjdC4gIFRoZSBmaXJzdCBpcyBmb3Igd2FybmluZ3MgKHdlIHdhbnQgdG8KKy8vIHRy
ZWF0IGEgcGFydGljdWxhciB3YXJuaW5nIGFzIGFuIGVycm9yLCB3aGljaCBpcyB3aHkgd2UgaGF2
ZSB0byByZWdpc3RlciB0aGlzCisvLyBjYWxsYmFjaykuCitzdGF0aWMgdm9pZCBQTkdBUEkgZGVj
b2RpbmdXYXJuaW5nKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwIHdhcm5pbmdNc2cp
Cit7CisgICAgLy8gTW96aWxsYSBkaWQgdGhpcywgc28gd2Ugd2lsbCB0b28uCisgICAgLy8gQ29u
dmVydCBhIHRSTlMgd2FybmluZyB0byBiZSBhbiBlcnJvciAoc2VlCisgICAgLy8gaHR0cDovL2J1
Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTEzODEgKQorICAgIGlmICghc3Ry
bmNtcCh3YXJuaW5nTXNnLCAiTWlzc2luZyBQTFRFIGJlZm9yZSB0Uk5TIiwgMjQpKQorICAgICAg
ICBwbmdfZXJyb3IocG5nLCB3YXJuaW5nTXNnKTsKK30KIAogLy8gQ2FsbGVkIHdoZW4gd2UgaGF2
ZSBvYnRhaW5lZCB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgdGhlIHNpemUpLgot
c3RhdGljIHZvaWQgUE5HQVBJIGhlYWRlckF2YWlsYWJsZShwbmdfc3RydWN0cCBwbmdfcHRyLCBw
bmdfaW5mb3AgaW5mb19wdHIpOworc3RhdGljIHZvaWQgUE5HQVBJIGhlYWRlckF2YWlsYWJsZShw
bmdfc3RydWN0cCBwbmcsIHBuZ19pbmZvcCkKK3sKKyAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURl
Y29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxlKCk7
Cit9CiAKIC8vIENhbGxlZCB3aGVuIGEgcm93IGlzIHJlYWR5Lgotc3RhdGljIHZvaWQgUE5HQVBJ
IHJvd0F2YWlsYWJsZShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgbmV3X3JvdywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgcm93X251bSwgaW50IHBh
c3MpOworc3RhdGljIHZvaWQgUE5HQVBJIHJvd0F2YWlsYWJsZShwbmdfc3RydWN0cCBwbmcsIHBu
Z19ieXRlcCByb3dCdWZmZXIsIHBuZ191aW50XzMyIHJvd0luZGV4LCBpbnQgaW50ZXJsYWNlUGFz
cykKK3sKKyAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNz
aXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKHJvd0J1ZmZlciwgcm93SW5kZXgsIGludGVybGFj
ZVBhc3MpOworfQogCiAvLyBDYWxsZWQgd2hlbiB3ZSBoYXZlIGNvbXBsZXRlbHkgZmluaXNoZWQg
ZGVjb2RpbmcgdGhlIGltYWdlLgotc3RhdGljIHZvaWQgUE5HQVBJIHBuZ0NvbXBsZXRlKHBuZ19z
dHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0cik7CitzdGF0aWMgdm9pZCBQTkdBUEkg
cG5nQ29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3ApCit7CisgICAgc3RhdGljX2Nh
c3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSktPnBuZ0Nv
bXBsZXRlKCk7Cit9CiAKIGNsYXNzIFBOR0ltYWdlUmVhZGVyCiB7CkBAIC03NSw3ICs5NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgOiBtX3JlYWRPZmZzZXQoMCkKICAgICAgICAgLCBtX2RlY29kaW5n
U2l6ZU9ubHkoZmFsc2UpCiAgICAgICAgICwgbV9pbnRlcmxhY2VCdWZmZXIoMCkKLSAgICAgICAg
LCBtX2hhc0FscGhhKDApCisgICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICAgICAgLCBt
X2hhc0ZpbmlzaGVkRGVjb2RpbmcoZmFsc2UpCiAgICAgICAgICwgbV9jdXJyZW50QnVmZmVyU2l6
ZSgwKQogICAgIHsKQEAgLTg5LDEwICsxMDgsMTIgQEAgcHVibGljOgogICAgICAgICBjbG9zZSgp
OwogICAgIH0KIAotICAgIHZvaWQgY2xvc2UoKSB7CisgICAgdm9pZCBjbG9zZSgpCisgICAgewog
ICAgICAgICBpZiAobV9wbmcgJiYgbV9pbmZvKQotICAgICAgICAgICAgcG5nX2Rlc3Ryb3lfcmVh
ZF9zdHJ1Y3QoJm1fcG5nLCAmbV9pbmZvLCAwKTsgIC8vIFdpbGwgemVybyB0aGUgcG9pbnRlcnMu
Ci0gICAgICAgIGRlbGV0ZSBbXW1faW50ZXJsYWNlQnVmZmVyOworICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIHplcm8gdGhlIHBvaW50ZXJzLgorICAgICAgICAgICAgcG5nX2Rlc3Ryb3lfcmVhZF9z
dHJ1Y3QoJm1fcG5nLCAmbV9pbmZvLCAwKTsKKyAgICAgICAgZGVsZXRlW10gbV9pbnRlcmxhY2VC
dWZmZXI7CiAgICAgICAgIG1faW50ZXJsYWNlQnVmZmVyID0gMDsKICAgICAgICAgbV9yZWFkT2Zm
c2V0ID0gMDsKICAgICAgICAgbV9oYXNGaW5pc2hlZERlY29kaW5nID0gZmFsc2U7CkBAIC0xMDYs
NyArMTI3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0g
c2l6ZU9ubHk7CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgc2V0am1wIGhlcmUuIE90
aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuCisgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8g
dGhlIHNldGptcCBoZXJlLiBPdGhlcndpc2UgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbi4KICAgICAg
ICAgaWYgKHNldGptcChtX3BuZy0+am1wYnVmKSkgewogICAgICAgICAgICAgY2xvc2UoKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTEzNCw5ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRSZWFkT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX3JlYWRPZmZzZXQgPSBvZmZzZXQ7IH0K
ICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYikgeyBtX2hhc0FscGhhID0gYjsgfQogCi0gICAg
dm9pZCBjcmVhdGVJbnRlcmxhY2VCdWZmZXIoaW50IHNpemUpIHsKLSAgICAgICAgbV9pbnRlcmxh
Y2VCdWZmZXIgPSBuZXcgcG5nX2J5dGVbc2l6ZV07Ci0gICAgfQorICAgIHZvaWQgY3JlYXRlSW50
ZXJsYWNlQnVmZmVyKGludCBzaXplKSB7IG1faW50ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19ieXRl
W3NpemVdOyB9CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OwpAQCAtMTU3
LDIxICsxNzYsMTYgQEAgUE5HSW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKIHsKIH0K
IAotLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAg
IGlmIChtX2ZhaWxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQ2FjaGUgb3VyIG5ldyBk
YXRhLgogICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwog
Ci0gICAgLy8gQ3JlYXRlIHRoZSBQTkcgcmVhZGVyLgogICAgIGlmICghbV9yZWFkZXIgJiYgIW1f
ZmFpbGVkKQogICAgICAgICBtX3JlYWRlci5zZXQobmV3IFBOR0ltYWdlUmVhZGVyKHRoaXMpKTsK
IH0KLQotLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVj
b2RlZCB5ZXQuCiBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKIHsKICAg
ICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgIWZhaWxlZCgpICYmIG1f
cmVhZGVyKQpAQCAtMTkxLDQxICsyMDUsMTAgQEAgUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZgogICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF07CiAgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZSAmJiBtX3JlYWRlcikKICAgICAgICAgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgICAg
IGRlY29kZSgpOworICAgICAgICBkZWNvZGUoZmFsc2UpOwogICAgIHJldHVybiAmZnJhbWU7CiB9
CiAKLS8vIEZlZWQgZGF0YSB0byB0aGUgUE5HIHJlYWRlci4KLXZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpkZWNvZGUoYm9vbCBzaXplT25seSkKLXsKLSAgICBpZiAobV9mYWlsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgc2l6ZU9ubHkpOwotICAgIAot
ICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSkpCi0gICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7Ci19Ci0KLXZvaWQgZGVjb2RpbmdGYWlsZWQo
cG5nX3N0cnVjdHAgcG5nLCBwbmdfY29uc3RfY2hhcnAgZXJyb3JNc2cpCi17Ci0gICAgc3RhdGlj
X2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSktPmRl
Y29kaW5nRmFpbGVkKCk7Ci0gICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7Ci19Ci0KLXZvaWQg
ZGVjb2RpbmdXYXJuaW5nKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwIHdhcm5pbmdN
c2cpCi17Ci0gIC8vIE1vemlsbGEgZGlkIHRoaXMsIHNvIHdlIHdpbGwgdG9vLgotICAvLyBDb252
ZXJ0IGEgdFJOUyB3YXJuaW5nIHRvIGJlIGFuIGVycm9yIChkb2N1bWVudGVkIGluIGJ1Z3ppbGxh
Lm1vemlsbGEub3JnIGJ1ZyAjMjUxMzgxKQotICBpZiAoIXN0cm5jbXAod2FybmluZ01zZywgIk1p
c3NpbmcgUExURSBiZWZvcmUgdFJOUyIsIDI0KSkKLSAgICAgIHBuZ19lcnJvcihwbmcsIHdhcm5p
bmdNc2cpOwotfQotCi12b2lkIGhlYWRlckF2YWlsYWJsZShwbmdfc3RydWN0cCBwbmcsIHBuZ19p
bmZvcCBpbmZvKQotewotICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRf
cHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5oZWFkZXJBdmFpbGFibGUoKTsKLX0KLQogdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKCkKIHsKICAgICBtX2ZhaWxlZCA9IHRydWU7CkBA
IC0yNTYsMTQgKzIzOSwxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxl
KCkKICAgICB9CiAKICAgICBpbnQgYml0RGVwdGgsIGNvbG9yVHlwZSwgaW50ZXJsYWNlVHlwZSwg
Y29tcHJlc3Npb25UeXBlLCBmaWx0ZXJUeXBlLCBjaGFubmVsczsKLSAgICBwbmdfZ2V0X0lIRFIo
cG5nLCBpbmZvLCAmd2lkdGgsICZoZWlnaHQsICZiaXREZXB0aCwgJmNvbG9yVHlwZSwKLSAgICAg
ICAgICAgICAgICAgJmludGVybGFjZVR5cGUsICZjb21wcmVzc2lvblR5cGUsICZmaWx0ZXJUeXBl
KTsKKyAgICBwbmdfZ2V0X0lIRFIocG5nLCBpbmZvLCAmd2lkdGgsICZoZWlnaHQsICZiaXREZXB0
aCwgJmNvbG9yVHlwZSwgJmludGVybGFjZVR5cGUsICZjb21wcmVzc2lvblR5cGUsICZmaWx0ZXJU
eXBlKTsKIAogICAgIC8vIFRoZSBvcHRpb25zIHdlIHNldCBoZXJlIG1hdGNoIHdoYXQgTW96aWxs
YSBkb2VzLgogCiAgICAgLy8gRXhwYW5kIHRvIGVuc3VyZSB3ZSB1c2UgMjQtYml0IGZvciBSR0Ig
YW5kIDMyLWJpdCBmb3IgUkdCQS4KLSAgICBpZiAoY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBF
X1BBTEVUVEUgfHwKLSAgICAgICAgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZICYm
IGJpdERlcHRoIDwgOCkpCisgICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxF
VFRFIHx8IChjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSAmJiBiaXREZXB0aCA8IDgp
KQogICAgICAgICBwbmdfc2V0X2V4cGFuZChwbmcpOwogICAgIAogICAgIHBuZ19ieXRlcCB0cm5z
ID0gMDsKQEAgLTI3Niw4ICsyNTcsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZh
aWxhYmxlKCkKICAgICBpZiAoYml0RGVwdGggPT0gMTYpCiAgICAgICAgIHBuZ19zZXRfc3RyaXBf
MTYocG5nKTsKIAotICAgIGlmIChjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fAot
ICAgICAgICBjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQSkKKyAgICBpZiAo
Y29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgfHwgY29sb3JUeXBlID09IFBOR19DT0xP
Ul9UWVBFX0dSQVlfQUxQSEEpCiAgICAgICAgIHBuZ19zZXRfZ3JheV90b19yZ2IocG5nKTsKIAog
ICAgIC8vIERlYWwgd2l0aCBnYW1tYSBhbmQga2VlcCBpdCB1bmRlciBvdXIgY29udHJvbC4KQEAg
LTI4OCwxNSArMjY4LDE0IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUo
KQogICAgICAgICAgICAgcG5nX3NldF9nQU1BKHBuZywgaW5mbywgZ2FtbWEpOwogICAgICAgICB9
CiAgICAgICAgIHBuZ19zZXRfZ2FtbWEocG5nLCBjRGVmYXVsdEdhbW1hLCBnYW1tYSk7Ci0gICAg
fQotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgcG5nX3NldF9nYW1tYShwbmcsIGNEZWZh
dWx0R2FtbWEsIGNJbnZlcnNlR2FtbWEpOwogCiAgICAgLy8gVGVsbCBsaWJwbmcgdG8gc2VuZCB1
cyByb3dzIGZvciBpbnRlcmxhY2VkIHBuZ3MuCiAgICAgaWYgKGludGVybGFjZVR5cGUgPT0gUE5H
X0lOVEVSTEFDRV9BREFNNykKICAgICAgICAgcG5nX3NldF9pbnRlcmxhY2VfaGFuZGxpbmcocG5n
KTsKIAotICAgIC8vIFVwZGF0ZSBvdXIgaW5mbyBub3cKKyAgICAvLyBVcGRhdGUgb3VyIGluZm8g
bm93LgogICAgIHBuZ19yZWFkX3VwZGF0ZV9pbmZvKHBuZywgaW5mbyk7CiAgICAgY2hhbm5lbHMg
PSBwbmdfZ2V0X2NoYW5uZWxzKHBuZywgaW5mbyk7CiAgICAgQVNTRVJUKGNoYW5uZWxzID09IDMg
fHwgY2hhbm5lbHMgPT0gNCk7CkBAIC0zMTAsMTIgKzI4OSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIH0KIH0KIAotdm9pZCByb3dBdmFpbGFibGUocG5n
X3N0cnVjdHAgcG5nLCBwbmdfYnl0ZXAgcm93QnVmZmVyLAotICAgICAgICAgICAgICAgICAgcG5n
X3VpbnRfMzIgcm93SW5kZXgsIGludCBpbnRlcmxhY2VQYXNzKQotewotICAgIHN0YXRpY19jYXN0
PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5yb3dBdmFp
bGFibGUocm93QnVmZmVyLCByb3dJbmRleCwgaW50ZXJsYWNlUGFzcyk7Ci19Ci0KIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNp
Z25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3MpCiB7CiAgICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC0zMzksMzYgKzMxMiwzNiBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgICAgICAgICBtX3JlYWRlci0+Y3JlYXRlSW50
ZXJsYWNlQnVmZmVyKChtX3JlYWRlci0+aGFzQWxwaGEoKSA/IDQgOiAzKSAqIHNpemUoKS53aWR0
aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBpZiAocm93QnVmZmVyID09IDAp
CisgICAgaWYgKCFyb3dCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgLyogbGlicG5nIGNv
bW1lbnRzIChwYXN0ZWQgaW4gaGVyZSB0byBleHBsYWluIHdoYXQgZm9sbG93cykKLSAgICAqCi0g
ICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZXZlcnkgcm93IGluIHRoZSBpbWFnZS4g
IElmIHRoZQotICAgICogaW1hZ2UgaXMgaW50ZXJsYWNpbmcsIGFuZCB5b3UgdHVybmVkIG9uIHRo
ZSBpbnRlcmxhY2UgaGFuZGxlciwKLSAgICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQg
Zm9yIGV2ZXJ5IHJvdyBpbiBldmVyeSBwYXNzLgotICAgICogU29tZSBvZiB0aGVzZSByb3dzIHdp
bGwgbm90IGJlIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgcGFzcy4KLSAgICAqIFdoZW4gdGhl
IHJvdyBpcyBub3QgY2hhbmdlZCwgdGhlIG5ld19yb3cgdmFyaWFibGUgd2lsbCBiZSBOVUxMLgot
ICAgICogVGhlIHJvd3MgYW5kIHBhc3NlcyBhcmUgY2FsbGVkIGluIG9yZGVyLCBzbyB5b3UgZG9u
J3QgcmVhbGx5Ci0gICAgKiBuZWVkIHRoZSByb3dfbnVtIGFuZCBwYXNzLCBidXQgSSdtIHN1cHBs
eWluZyB0aGVtIGJlY2F1c2UgaXQKLSAgICAqIG1heSBtYWtlIHlvdXIgbGlmZSBlYXNpZXIuCi0g
ICAgKgotICAgICogRm9yIHRoZSBub24tTlVMTCByb3dzIG9mIGludGVybGFjZWQgaW1hZ2VzLCB5
b3UgbXVzdCBjYWxsCi0gICAgKiBwbmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3coKSBwYXNzaW5n
IGluIHRoZSByb3cgYW5kIHRoZQotICAgICogb2xkIHJvdy4gIFlvdSBjYW4gY2FsbCB0aGlzIGZ1
bmN0aW9uIGZvciBOVUxMIHJvd3MgKGl0IHdpbGwKLSAgICAqIGp1c3QgcmV0dXJuKSBhbmQgZm9y
IG5vbi1pbnRlcmxhY2VkIGltYWdlcyAoaXQganVzdCBkb2VzIHRoZQotICAgICogbWVtY3B5IGZv
ciB5b3UpIGlmIGl0IHdpbGwgbWFrZSB0aGUgY29kZSBlYXNpZXIuICBUaHVzLCB5b3UKLSAgICAq
IGNhbiBqdXN0IGRvIHRoaXMgZm9yIGFsbCBjYXNlczoKLSAgICAqCi0gICAgKiAgICBwbmdfcHJv
Z3Jlc3NpdmVfY29tYmluZV9yb3cocG5nX3B0ciwgb2xkX3JvdywgbmV3X3Jvdyk7Ci0gICAgKgot
ICAgICogd2hlcmUgb2xkX3JvdyBpcyB3aGF0IHdhcyBkaXNwbGF5ZWQgZm9yIHByZXZpb3VzIHJv
d3MuICBOb3RlCi0gICAgKiB0aGF0IHRoZSBmaXJzdCBwYXNzIChwYXNzID09IDAgcmVhbGx5KSB3
aWxsIGNvbXBsZXRlbHkgY292ZXIKLSAgICAqIHRoZSBvbGQgcm93LCBzbyB0aGUgcm93cyBkbyBu
b3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZC4gIEFmdGVyCi0gICAgKiB0aGUgZmlyc3QgcGFzcyAo
YW5kIG9ubHkgZm9yIGludGVybGFjZWQgaW1hZ2VzKSwgeW91IHdpbGwgaGF2ZQotICAgICogdG8g
cGFzcyB0aGUgY3VycmVudCByb3csIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBjb21iaW5lIHRoZQot
ICAgICogb2xkIHJvdyBhbmQgdGhlIG5ldyByb3cuCi0gICAgKi8KKyAgICAvLyBsaWJwbmcgY29t
bWVudHMgKHBhc3RlZCBpbiBoZXJlIHRvIGV4cGxhaW4gd2hhdCBmb2xsb3dzKQorICAgIC8qCisg
ICAgICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHJvdyBpbiB0aGUgaW1hZ2Uu
ICBJZiB0aGUKKyAgICAgKiBpbWFnZSBpcyBpbnRlcmxhY2luZywgYW5kIHlvdSB0dXJuZWQgb24g
dGhlIGludGVybGFjZSBoYW5kbGVyLAorICAgICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxs
ZWQgZm9yIGV2ZXJ5IHJvdyBpbiBldmVyeSBwYXNzLgorICAgICAqIFNvbWUgb2YgdGhlc2Ugcm93
cyB3aWxsIG5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHBhc3MuCisgICAgICogV2hl
biB0aGUgcm93IGlzIG5vdCBjaGFuZ2VkLCB0aGUgbmV3X3JvdyB2YXJpYWJsZSB3aWxsIGJlIE5V
TEwuCisgICAgICogVGhlIHJvd3MgYW5kIHBhc3NlcyBhcmUgY2FsbGVkIGluIG9yZGVyLCBzbyB5
b3UgZG9uJ3QgcmVhbGx5CisgICAgICogbmVlZCB0aGUgcm93X251bSBhbmQgcGFzcywgYnV0IEkn
bSBzdXBwbHlpbmcgdGhlbSBiZWNhdXNlIGl0CisgICAgICogbWF5IG1ha2UgeW91ciBsaWZlIGVh
c2llci4KKyAgICAgKgorICAgICAqIEZvciB0aGUgbm9uLU5VTEwgcm93cyBvZiBpbnRlcmxhY2Vk
IGltYWdlcywgeW91IG11c3QgY2FsbAorICAgICAqIHBuZ19wcm9ncmVzc2l2ZV9jb21iaW5lX3Jv
dygpIHBhc3NpbmcgaW4gdGhlIHJvdyBhbmQgdGhlCisgICAgICogb2xkIHJvdy4gIFlvdSBjYW4g
Y2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBOVUxMIHJvd3MgKGl0IHdpbGwKKyAgICAgKiBqdXN0IHJl
dHVybikgYW5kIGZvciBub24taW50ZXJsYWNlZCBpbWFnZXMgKGl0IGp1c3QgZG9lcyB0aGUKKyAg
ICAgKiBtZW1jcHkgZm9yIHlvdSkgaWYgaXQgd2lsbCBtYWtlIHRoZSBjb2RlIGVhc2llci4gIFRo
dXMsIHlvdQorICAgICAqIGNhbiBqdXN0IGRvIHRoaXMgZm9yIGFsbCBjYXNlczoKKyAgICAgKgor
ICAgICAqICAgIHBuZ19wcm9ncmVzc2l2ZV9jb21iaW5lX3JvdyhwbmdfcHRyLCBvbGRfcm93LCBu
ZXdfcm93KTsKKyAgICAgKgorICAgICAqIHdoZXJlIG9sZF9yb3cgaXMgd2hhdCB3YXMgZGlzcGxh
eWVkIGZvciBwcmV2aW91cyByb3dzLiAgTm90ZQorICAgICAqIHRoYXQgdGhlIGZpcnN0IHBhc3Mg
KHBhc3MgPT0gMCByZWFsbHkpIHdpbGwgY29tcGxldGVseSBjb3ZlcgorICAgICAqIHRoZSBvbGQg
cm93LCBzbyB0aGUgcm93cyBkbyBub3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZC4gIEFmdGVyCisg
ICAgICogdGhlIGZpcnN0IHBhc3MgKGFuZCBvbmx5IGZvciBpbnRlcmxhY2VkIGltYWdlcyksIHlv
dSB3aWxsIGhhdmUKKyAgICAgKiB0byBwYXNzIHRoZSBjdXJyZW50IHJvdywgYW5kIHRoZSBmdW5j
dGlvbiB3aWxsIGNvbWJpbmUgdGhlCisgICAgICogb2xkIHJvdyBhbmQgdGhlIG5ldyByb3cuCisg
ICAgICovCiAKICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7CiAgICAg
Ym9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwpAQCAtMzc4LDggKzM1MSw3IEBA
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBpZiAoaW50ZXJs
YWNlQnVmZmVyKSB7CiAgICAgICAgIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChyb3dJbmRleCAq
IGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSk7CiAgICAgICAgIHBuZ19wcm9ncmVzc2l2
ZV9jb21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsKLSAgICB9Ci0gICAgZWxzZQorICAg
IH0gZWxzZQogICAgICAgICByb3cgPSByb3dCdWZmZXI7CiAKICAgICAvLyBDb3B5IHRoZSBkYXRh
IGludG8gb3VyIGJ1ZmZlci4KQEAgLTM4OCw3ICszNjAsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgcmV0dXJu
OwogICAgIGJvb2wgc2F3QWxwaGEgPSBidWZmZXIuaGFzQWxwaGEoKTsKLSAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyAr
K3gpIHsKICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVkID8gbV9zY2Fs
ZWRDb2x1bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICB1bnNpZ25lZCBhbHBo
YSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgs
IGRlc3RZLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CkBAIC0zOTksMjEg
KzM3MSwyMyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAg
fQogfQogCi12b2lkIHBuZ0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luZm9wIGluZm8p
Ci17Ci0gICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2
ZV9wdHIocG5nKSktPnBuZ0NvbXBsZXRlKCk7Ci19Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpw
bmdDb21wbGV0ZSgpCiB7CiAgICAgbV9yZWFkZXItPnNldENvbXBsZXRlKCk7CiAKLSAgICBpZiAo
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworfQorCit2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCit7CisgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBIYW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBidWZmZXIs
IGV2ZW4gaWYgdGhlIGltYWdlIGVuZGVkIHVwIGJlaW5nIGVtcHR5LgotICAgIFJHQkEzMkJ1ZmZl
ciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGJ1ZmZlci5zZXRTdGF0dXMo
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBtX3JlYWRlci0+ZGVjb2RlKCptX2Rh
dGEsIG9ubHlTaXplKTsKKyAgICAKKyAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVy
Q2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQorICAgICAgICBtX3JlYWRlci5jbGVhcigpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNTQ3Mjcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjAgKzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBQTkdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFBOR0ltYWdlRGVjb2RlcigpOwotICAgICAgICB+UE5HSW1hZ2VEZWNv
ZGVyKCk7CisgICAgICAgIHZpcnR1YWwgflBOR0ltYWdlRGVjb2RlcigpOwogCisgICAgICAgIC8v
IEltYWdlRGVjb2RlcgogICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuICJwbmciOyB9Ci0KLSAgICAgICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQg
c3RvcmUgaXQuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRo
ZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Ci0KICAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIq
IGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogCi0gICAgICAgIHZvaWQgZGVjb2Rl
KGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSk7Ci0KICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gbGli
cG5nCiAgICAgICAgIHZvaWQgZGVjb2RpbmdGYWlsZWQoKTsKICAgICAgICAgdm9pZCBoZWFkZXJB
dmFpbGFibGUoKTsKQEAgLTU4LDYgKzUyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBwbmdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gRGVjb2Rl
cyB0aGUgaW1hZ2UuICBJZiB8b25seVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nIGFmdGVy
CisgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLgorICAgICAgICB2b2lkIGRl
Y29kZShib29sIG9ubHlTaXplKTsKKwogICAgICAgICBPd25QdHI8UE5HSW1hZ2VSZWFkZXI+IG1f
cmVhZGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cXQvUkdCQTMyQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1NDcyNykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxNCArNDIsNiBAQCBSR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcigp
CiB7CiB9CiAKLS8vIFRoZSBpbWFnZSBtdXN0IG5vdCBoYXZlIGZvcm1hdCA4ODg4IHByZSBtdWx0
aXBsaWVkLi4uCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0RGVjb2RlZEltYWdlKGNvbnN0IFFJbWFn
ZSYgaW1hZ2UpCi17Ci0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIG1fc2l6ZSA9IGltYWdlLnNp
emUoKTsKLSAgICBtX2hhc0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7Ci19Ci0KIHZv
aWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiB7CiAgICAgbV9pbWFnZSA9IFFJbWFnZSgpOwpAQCAt
MTE1LDYgKzEwNywxNCBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKEZyYW1lU3RhdHVz
CiAgICAgbV9zdGF0dXMgPSBzdGF0dXM7CiB9CiAKKy8vIFRoZSBpbWFnZSBtdXN0IG5vdCBoYXZl
IGZvcm1hdCA4ODg4IHByZSBtdWx0aXBsaWVkLi4uCit2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0RGVj
b2RlZEltYWdlKGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgbV9pbWFnZSA9IGltYWdlOwor
ICAgIG1fc2l6ZSA9IGltYWdlLnNpemUoKTsKKyAgICBtX2hhc0FscGhhID0gaW1hZ2UuaGFzQWxw
aGFDaGFubmVsKCk7Cit9CisKIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0o
Y29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48960</attachid>
            <date>2010-02-17 19:21:50 -0800</date>
            <delta_ts>2010-02-17 23:47:46 -0800</delta_ts>
            <desc>Saner PNG-in-ICO decoding</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11104</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDkxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDItMTcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJld29yayBQTkctaW4tSUNPIGRlY29kaW5nIHRvIGNvcHkgdGhlIGRlY29kZWQgZnJhbWVidWZm
ZXIgaW50byB0aGUgSUNPCisgICAgICAgIGRlY29kZXIsIG1ha2luZyB0aGUgbG9naWMgbGVzcyBj
cmF6eSBhbmQgbW9yZSBsaWtlIHRoZSBvdGhlciBkZWNvZGVycy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUxCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdC
QTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVBdElu
ZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVy
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPSk6CisKIDIwMTAtMDIt
MTcgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSb2xsaW5nIG91
dCByNTQ5MDkuIEJyZWFrcyBTTCBhbmQgV2luLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNTQ4MjMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDYgKzk5LDE5IEBAIFJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKIHsK
IH0gCiAKK1JHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMy
QnVmZmVyJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKKyAgICBzZXRSZWN0KG90aGVy
LnJlY3QoKSk7CisgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKKyAgICBzZXREdXJhdGlv
bihvdGhlci5kdXJhdGlvbigpKTsKKyAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3Nh
bE1ldGhvZCgpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgUkdCQTMyQnVmZmVyOjpj
bGVhcigpCiB7CiAgICAgbV9ieXRlcy5jbGVhcigpOwpAQCAtMTUzLDE5ICsxNjYsNiBAQCB2b2lk
IFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzCiAgICAgbV9zdGF0dXMgPSBzdGF0
dXM7CiB9CiAKLVJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdC
QTMyQnVmZmVyJiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJl
dHVybiAqdGhpczsKLQotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRSZWN0KG90
aGVyLnJlY3QoKSk7Ci0gICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKLSAgICBzZXREdXJh
dGlvbihvdGhlci5kdXJhdGlvbigpKTsKLSAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNw
b3NhbE1ldGhvZCgpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIGludCBSR0JBMzJCdWZmZXI6
OndpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9u
IDU0ODIzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksMTUgKzY5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBSR0JBMzJCdWZmZXIoKTsKIAotICAgICAgICAvLyBGb3IgYmFja2VuZHMgd2hp
Y2ggcmVmY291bnQgdGhlaXIgZGF0YSwgdGhpcyBjb25zdHJ1Y3RvciBkb2Vzbid0IG5lZWQKLSAg
ICAgICAgLy8gdG8gY3JlYXRlIGEgbmV3IGNvcHkgb2YgdGhlIGltYWdlIGRhdGEsIG9ubHkgaW5j
cmVhc2UgdGhlIHJlZiBjb3VudC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBleGlzdHMg
YmVjYXVzZSBJbWFnZURlY29kZXIga2VlcHMgYSBWZWN0b3I8UkdCQTMyQnVmZmVyPiwgYW5kCi0g
ICAgICAgIC8vIFZlY3RvciByZXF1aXJlcyB0aGlzIGNvbnN0cnVjdG9yLgotICAgICAgICBSR0JB
MzJCdWZmZXIoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgb3BlcmF0b3I9KG90aGVyKTsKLSAgICAgICAgfQorICAgICAgICBSR0JBMzJCdWZmZXIoY29u
c3QgUkdCQTMyQnVmZmVyJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIpOyB9CisKKyAgICAgICAg
Ly8gRm9yIGJhY2tlbmRzIHdoaWNoIHJlZmNvdW50IHRoZWlyIGRhdGEsIHRoaXMgb3BlcmF0b3Ig
ZG9lc24ndCBuZWVkIHRvCisgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBpbWFn
ZSBkYXRhLCBvbmx5IGluY3JlYXNlIHRoZSByZWYgY291bnQuCisgICAgICAgIFJHQkEzMkJ1ZmZl
ciYgb3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpOwogCiAgICAgICAgIC8vIERl
bGV0ZXMgdGhlIHBpeGVsIGRhdGEgZW50aXJlbHk7IHVzZWQgYnkgSW1hZ2VEZWNvZGVyIHRvIHNh
dmUgbWVtb3J5CiAgICAgICAgIC8vIHdoZW4gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gZGlzcGxheSBh
IGZyYW1lIGFuZCBvbmx5IG5lZWQgaXRzIG1ldGFkYXRhLgpAQCAtMTM5LDggKzEzNSw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUkdCQTMy
QnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcik7Ci0KICAgICAgICAg
aW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25zdDsKIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA1NDgyMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwy
NiArMTE1LDEwIEBAIFJHQkEzMkJ1ZmZlciogSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAg
ICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8v
IERldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgYW5kIGlmIHRoaXMgaXMgYSBCTVAsIGRlY29kZS4K
LSAgICBkZWNvZGUoaW5kZXgsIGZhbHNlKTsKLQotICAgIC8vIFBOR3MgZGVjb2RlIGludG8gdGhl
aXIgb3duIGZyYW1lYnVmZmVycywgc28gb25seSB1c2Ugb3VyIGludGVybmFsIGNhY2hlCi0gICAg
Ly8gZm9yIG5vbi1QTkdzIChCTVAgb3IgdW5rbm93bikuCi0gICAgaWYgKCFtX3BuZ0RlY29kZXJz
W2luZGV4XSkKLSAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwotCi0g
ICAgLy8gRmFpbCBpZiB0aGUgc2l6ZSB0aGUgUE5HSW1hZ2VEZWNvZGVyIGNhbGN1bGF0ZWQgZG9l
cyBub3QgbWF0Y2ggdGhlIHNpemUKLSAgICAvLyBpbiB0aGUgZGlyZWN0b3J5LgotICAgIGlmICht
X3BuZ0RlY29kZXJzW2luZGV4XS0+aXNTaXplQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgY29uc3Qg
SW50U2l6ZSBwbmdTaXplKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5zaXplKCkpOwotICAgICAgICBj
b25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGRpckVudHJ5ID0gbV9kaXJFbnRyaWVzW2luZGV4XTsK
LSAgICAgICAgaWYgKHBuZ1NpemUgIT0gZGlyRW50cnkubV9zaXplKSB7Ci0gICAgICAgICAgICBz
ZXRGYWlsZWQoKTsKLSAgICAgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5zZXRGYWlsZWQo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX3BuZ0RlY29kZXJzW2luZGV4XS0+
ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gJm1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF07CisgICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgIT0gUkdCQTMy
QnVmZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICBkZWNvZGUoaW5kZXgsIGZhbHNlKTsKKyAg
ICByZXR1cm4gYnVmZmVyOwogfQogCiAvLyBzdGF0aWMKQEAgLTE4NCwzNSArMTY4LDQwIEBAIGJv
b2wgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVBdEluZGV4KHNpemUKIHsKICAgICBBU1NFUlQoaW5k
ZXggPCBtX2RpckVudHJpZXMuc2l6ZSgpKTsKICAgICBjb25zdCBJY29uRGlyZWN0b3J5RW50cnkm
IGRpckVudHJ5ID0gbV9kaXJFbnRyaWVzW2luZGV4XTsKLSAgICBpZiAoIW1fYm1wUmVhZGVyc1tp
bmRleF0gJiYgIW1fcG5nRGVjb2RlcnNbaW5kZXhdKSB7Ci0gICAgICAgIC8vIEltYWdlIHR5cGUg
dW5rbm93bi4KLSAgICAgICAgY29uc3QgSW1hZ2VUeXBlIGltYWdlVHlwZSA9IGltYWdlVHlwZUF0
SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAoaW1hZ2VUeXBlID09IEJNUCkgeworICAgIGNvbnN0
IEltYWdlVHlwZSBpbWFnZVR5cGUgPSBpbWFnZVR5cGVBdEluZGV4KGluZGV4KTsKKyAgICBpZiAo
aW1hZ2VUeXBlID09IFVua25vd24pCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGVub3Vn
aCBkYXRhIHRvIGRldGVybWluZSBpbWFnZSB0eXBlIHlldC4KKworICAgIGlmIChpbWFnZVR5cGUg
PT0gQk1QKSB7CisgICAgICAgIGlmICghbV9ibXBSZWFkZXJzW2luZGV4XSkgewogICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBoYXZlIGFscmVhZHkgc2l6ZWQgbV9mcmFtZUJ1ZmZlckNhY2hlIGJl
Zm9yZSB0aGlzLCBhbmQKICAgICAgICAgICAgIC8vIHdlIG11c3Qgbm90IHJlc2l6ZSBpdCBhZ2Fp
biBsYXRlciAoc2VlIGNhdXRpb24gaW4gZnJhbWVDb3VudCgpKS4KICAgICAgICAgICAgIEFTU0VS
VChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID09IG1fZGlyRW50cmllcy5zaXplKCkpOwogICAg
ICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XS5zZXQobmV3IEJNUEltYWdlUmVhZGVyKHRoaXMs
IGRpckVudHJ5Lm1faW1hZ2VPZmZzZXQsIDAsIHRydWUpKTsKICAgICAgICAgICAgIG1fYm1wUmVh
ZGVyc1tpbmRleF0tPnNldERhdGEobV9kYXRhLmdldCgpKTsKICAgICAgICAgICAgIG1fYm1wUmVh
ZGVyc1tpbmRleF0tPnNldEJ1ZmZlcigmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoaW1hZ2VUeXBlID09IFBORykgewotICAgICAgICAgICAgbV9wbmdEZWNv
ZGVyc1tpbmRleF0uc2V0KG5ldyBQTkdJbWFnZURlY29kZXIoKSk7Ci0gICAgICAgICAgICBzZXRE
YXRhRm9yUE5HRGVjb2RlckF0SW5kZXgoaW5kZXgpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gTm90IGVub3VnaCBkYXRhIHRvIGRldGVybWluZSBpbWFnZSB0eXBlIHlldC4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2Jt
cFJlYWRlcnNbaW5kZXhdKSB7CiAgICAgICAgIG1fZnJhbWVTaXplID0gZGlyRW50cnkubV9zaXpl
OwogICAgICAgICBib29sIHJlc3VsdCA9IG1fYm1wUmVhZGVyc1tpbmRleF0tPmRlY29kZUJNUChm
YWxzZSk7CiAgICAgICAgIG1fZnJhbWVTaXplID0gSW50U2l6ZSgpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIC8vIEZvciBQTkdzLCB3ZSdyZSBub3cgZG9uZTsgZnVydGhl
ciBkZWNvZGluZyB3aWxsIGhhcHBlbiB3aGVuIGNhbGxpbmcKLSAgICAvLyBmcmFtZUJ1ZmZlckF0
SW5kZXgoKSBvbiB0aGUgUE5HIGRlY29kZXIuCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFt
X3BuZ0RlY29kZXJzW2luZGV4XSkgeworICAgICAgICBtX3BuZ0RlY29kZXJzW2luZGV4XS5zZXQo
bmV3IFBOR0ltYWdlRGVjb2RlcigpKTsKKyAgICAgICAgc2V0RGF0YUZvclBOR0RlY29kZXJBdElu
ZGV4KGluZGV4KTsKKyAgICB9CisgICAgLy8gRmFpbCBpZiB0aGUgc2l6ZSB0aGUgUE5HSW1hZ2VE
ZWNvZGVyIGNhbGN1bGF0ZWQgZG9lcyBub3QgbWF0Y2ggdGhlIHNpemUKKyAgICAvLyBpbiB0aGUg
ZGlyZWN0b3J5LgorICAgIGlmIChtX3BuZ0RlY29kZXJzW2luZGV4XS0+aXNTaXplQXZhaWxhYmxl
KCkgJiYgKG1fcG5nRGVjb2RlcnNbaW5kZXhdLT5zaXplKCkgIT0gZGlyRW50cnkubV9zaXplKSkg
eworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdID0gKm1fcG5nRGVjb2RlcnNbaW5kZXhdLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgaWYgKCFtX3BuZ0RlY29kZXJzW2luZGV4XS0+ZmFpbGVk
KCkpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzZXRGYWlsZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5KCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA1NDgyMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMSArODYs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIERlY29kZXMgdGhlIGVudHJ5IGF0
IHxpbmRleHwuICBJZiB8b25seVNpemV8IGlzIHRydWUsIHN0b3BzIGRlY29kaW5nCiAgICAgICAg
IC8vIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBpbWFnZSBzaXplLiAgSWYgZGVjb2RpbmcgZmFpbHMg
YnV0IHRoZXJlIGlzIG5vCiAgICAgICAgIC8vIG1vcmUgZGF0YSBjb21pbmcsIHNldHMgdGhlICJk
ZWNvZGUgZmFpbHVyZSIgZmxhZy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gTk9URTogSWYgdGhl
IGRlc2lyZWQgZW50cnkgaXMgYSBQTkcsIHRoaXMgZG9lc24ndCBhY3R1YWxseSB0cmlnZ2VyCi0g
ICAgICAgIC8vIGRlY29kaW5nLCBpdCBtZXJlbHkgZW5zdXJlcyB0aGUgZGVjb2RlciBpcyBjcmVh
dGVkIGFuZCByZWFkeSB0bwotICAgICAgICAvLyBkZWNvZGUuICBUaGUgY2FsbGVyIHdpbGwgdGhl
biBjYWxsIGEgZnVuY3Rpb24gb24gdGhlIFBOR0ltYWdlRGVjb2RlcgotICAgICAgICAvLyB0aGF0
IGFjdHVhbGx5IHRyaWdnZXJzIGRlY29kaW5nLgogICAgICAgICB2b2lkIGRlY29kZShzaXplX3Qg
aW5kZXgsIGJvb2wgb25seVNpemUpOwogCiAgICAgICAgIC8vIERlY29kZXMgdGhlIGRpcmVjdG9y
eSBhbmQgZGlyZWN0b3J5IGVudHJpZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVy
UXQuY3BwCShyZXZpc2lvbiA1NDgyMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxOSBA
QCBSR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcigpCiB7CiB9CiAKK1JHQkEzMkJ1ZmZlciYgUkdC
QTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGNvcHlCaXRt
YXBEYXRhKG90aGVyKTsKKyAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CisgICAgc2V0U3RhdHVz
KG90aGVyLnN0YXR1cygpKTsKKyAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKKyAg
ICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiB7CiAgICAgbV9pbWFnZSA9
IFFJbWFnZSgpOwpAQCAtMTE1LDE5ICsxMjgsNiBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0RGVj
b2RlZEltYWdlKGNvbnN0CiAgICAgbV9oYXNBbHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgp
OwogfQogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEz
MkJ1ZmZlciYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0KLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0gICAgc2V0UmVjdChvdGhl
ci5yZWN0KCkpOwotICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7Ci0gICAgc2V0RHVyYXRp
b24ob3RoZXIuZHVyYXRpb24oKSk7Ci0gICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9z
YWxNZXRob2QoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiBpbnQgUkdCQTMyQnVmZmVyOjp3
aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29k
ZXJTa2lhLmNwcAkocmV2aXNpb24gNTQ4MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDIyIEBAIFJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKIHsKIH0KIAorUkdCQTMyQnVm
ZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQor
eworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
bV9iaXRtYXAgPSBvdGhlci5tX2JpdG1hcDsKKyAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2Vk
IHNpbmNlIHdlIHdpbGwgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQorICAgIC8vIGJpdG1h
cCB0aHJvdWdob3V0IHRoaXMgb2JqZWN0J3MgbGlmZXRpbWUuCisgICAgbV9iaXRtYXAubG9ja1Bp
eGVscygpOworICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICBzZXRTdGF0dXMob3RoZXIu
c3RhdHVzKCkpOworICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgIHNldERp
c3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOworICAgIHJldHVybiAqdGhpczsK
K30KKwogdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKIHsKICAgICBtX2JpdG1hcC5yZXNldCgp
OwpAQCAtOTgsMjIgKzExNCw2IEBAIHZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVT
dGF0dXMKICAgICAgICAgbV9iaXRtYXAuc2V0RGF0YUNvbXBsZXRlKCk7ICAvLyBUZWxsIHRoZSBi
aXRtYXAgaXQncyBkb25lLgogfQogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0
b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVy
KQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBtX2JpdG1hcCA9IG90aGVyLm1fYml0bWFw
OwotICAgIC8vIEtlZXAgdGhlIHBpeGVscyBsb2NrZWQgc2luY2Ugd2Ugd2lsbCBiZSB3cml0aW5n
IGRpcmVjdGx5IGludG8gdGhlCi0gICAgLy8gYml0bWFwIHRocm91Z2hvdXQgdGhpcyBvYmplY3Qn
cyBsaWZldGltZS4KLSAgICBtX2JpdG1hcC5sb2NrUGl4ZWxzKCk7Ci0gICAgc2V0UmVjdChvdGhl
ci5yZWN0KCkpOwotICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7Ci0gICAgc2V0RHVyYXRp
b24ob3RoZXIuZHVyYXRpb24oKSk7Ci0gICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9z
YWxNZXRob2QoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiBpbnQgUkdCQTMyQnVmZmVyOjp3
aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYml0bWFwLndpZHRoKCk7Cg==
</data>
<flag name="review"
          id="31710"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>