<?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>88785</bug_id>
          
          <creation_ts>2012-06-11 09:11:37 -0700</creation_ts>
          <short_desc>[Qt] Change NativeImagePtr from QPixmap* to QImage*</short_desc>
          <delta_ts>2012-07-16 06:51:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Horvath">zoltan</reporter>
          <assigned_to name="Zoltan Horvath">zoltan</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>pnormand</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>646021</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-06-11 09:11:37 -0700</bug_when>
    <thetext>Since we use raster engine there is no difference between QImage and QPixmap classes.
I think it would clarify the things if we could use only the QImage class and get rid of QPixmap classes (it&apos;s possible almost everywhere). 

Additionally QImage objects are thread safe, so it can be useful for us later for cross-thread optimizations.
I have a work in progress patch on this topic, if you agree with my points, I can continue this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646714</commentid>
    <comment_count>1</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-12 01:03:10 -0700</bug_when>
    <thetext>Additionally moving to QImage only should make it safe to use either native or raster engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647880</commentid>
    <comment_count>2</comment_count>
      <attachid>147283</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-06-13 03:58:09 -0700</bug_when>
    <thetext>Created attachment 147283
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647881</commentid>
    <comment_count>3</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-06-13 04:00:55 -0700</bug_when>
    <thetext>We should also talk about where to use NativeImagePtr and where to use the class name, because it&apos;s not clear. What is your opinion about use the NativeImagePtr typedef everywhere under WebCore/platform/graphics, and use the real class name outside of that directory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647883</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-13 04:01:33 -0700</bug_when>
    <thetext>Attachment 147283 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/Api/qwebframe.cpp:1767:  Declaration has space between type name and * in QImage *pix  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/GraphicsContext.h:504:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/qt/StillImageQt.h:59:  The parameter name &quot;image&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/qt/StillImageQt.h:60:  The parameter name &quot;image&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/qt/ImageBufferDataQt.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bridge/qt/qt_pixmapruntime.cpp:150:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/platform/graphics/qt/TransparencyLayer.h:41:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 7 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647889</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-06-13 04:14:41 -0700</bug_when>
    <thetext>I fixed the stile issues. I&apos;m not going to reupload the patch until it gets review, since it will have problems with: Source/WebKit/qt/Api/qwebframe.cpp:1767:  Declaration has space between type name and * in QImage *pix  [whitespace/declaration] [3]
I will file a bug aganst check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648051</commentid>
    <comment_count>6</comment_count>
      <attachid>147283</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-06-13 08:25:59 -0700</bug_when>
    <thetext>Comment on attachment 147283
proposed patch

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

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:490
&gt;          nativeImage = QImage::fromData(reinterpret_cast&lt;const uchar*&gt;(image-&gt;data()-&gt;data()), image-&gt;data()-&gt;size()).convertToFormat(QImage::Format_ARGB32);

Why not Format_ARGB32_Premultiplied.
Also, do use ARGB formats also for images without alpha?
And, it would be good to define default image formats in single place for easy redefine if other formats required for small devices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648059</commentid>
    <comment_count>7</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-06-13 08:31:56 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Since we use raster engine there is no difference between QImage and QPixmap classes.
&gt; I think it would clarify the things if we could use only the QImage class and get rid of QPixmap classes (it&apos;s possible almost everywhere). 
&gt; 
&gt; Additionally QImage objects are thread safe, so it can be useful for us later for cross-thread optimizations.
&gt; I have a work in progress patch on this topic, if you agree with my points, I can continue this work.

Sorry for late comment. Didn&apos;t see this bug. Thanks Laszlo for forwarding.
I don&apos;t think we want to get rid of QPixmap. It was still faster with QPixmaps on some engines (if there was enough graphics memory) on webkit1. 
Also, even with webkit2 QPixmaps might help, with direct opengl surface rendering will be implemented.
We have also changed QPixmaps to QImages on our branch, but implemented it switchable. I&apos;ll attach patch for reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648062</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-13 08:35:21 -0700</bug_when>
    <thetext>&gt; I don&apos;t think we want to get rid of QPixmap. It was still faster with QPixmaps on some engines (if there was enough graphics memory) on webkit1. 
With Qt5? Which engines (if you can share that info)?

&gt; Also, even with webkit2 QPixmaps might help, with direct opengl surface rendering will be implemented.
We&apos;re not going to use QPixmaps for that, but rather a special-case class that does just that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648065</commentid>
    <comment_count>9</comment_count>
      <attachid>147325</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-06-13 08:36:07 -0700</bug_when>
    <thetext>Created attachment 147325
Commit form internal branch for qpixmap2qimage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648074</commentid>
    <comment_count>10</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-06-13 08:49:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; I don&apos;t think we want to get rid of QPixmap. It was still faster with QPixmaps on some engines (if there was enough graphics memory) on webkit1. 
&gt; With Qt5? Which engines (if you can share that info)?

In Qt4 on opengl engine QPixmap had image uploaded to texture for faster rendering and also backed with framebuffer (if GL engine supports) for rendering on pixmap. That was in src/opengl/qpixmapdata* . Was it removed?

&gt; &gt; Also, even with webkit2 QPixmaps might help, with direct opengl surface rendering will be implemented.
&gt; We&apos;re not going to use QPixmaps for that, but rather a special-case class that does just that.

No, I don&apos;t mean painting on QPixmap.
It is possible to create QPainter form QGLFramebufferObject and in this case qpixmap backed by texture would paint faster, than qimage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648083</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-13 08:56:38 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; &gt; I don&apos;t think we want to get rid of QPixmap. It was still faster with QPixmaps on some engines (if there was enough graphics memory) on webkit1. 
&gt; &gt; With Qt5? Which engines (if you can share that info)?
&gt; 
&gt; In Qt4 on opengl engine QPixmap had image uploaded to texture for faster rendering and also backed with framebuffer (if GL engine supports) for rendering on pixmap. That was in src/opengl/qpixmapdata* . Was it removed?

AFAICS in Qt 5 the GL paint-engine is accelerating QPainter::drawPixmap through an internal texture cache, not through a custom pixmap data implementation.

&gt; &gt; &gt; Also, even with webkit2 QPixmaps might help, with direct opengl surface rendering will be implemented.
&gt; &gt; We&apos;re not going to use QPixmaps for that, but rather a special-case class that does just that.
&gt; 
&gt; No, I don&apos;t mean painting on QPixmap.
&gt; It is possible to create QPainter form QGLFramebufferObject and in this case qpixmap backed by texture would paint faster, than qimage.

The question is: Where in WebKit would we end up _actually_ using any &quot;features&quot; of QPixmap beyond the raster backing?

Certainly not in WebKit2 (where GraphicsSurface is our new QPixmap :), so only WebKit1 remains.

And that&apos;s where we have to make a decision I think, what type of rendering to we want to support, encourage or recommend for WebKit1 on Qt 5. A hard way would be to say software-only with raster engine and software backed texture mapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648115</commentid>
    <comment_count>12</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-06-13 09:15:54 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #8)
&gt; AFAICS in Qt 5 the GL paint-engine is accelerating QPainter::drawPixmap through an internal texture cache, not through a custom pixmap data implementation.

So, QPixmap painting is still accelerated, as I understand?

&gt; &gt; &gt; &gt; Also, even with webkit2 QPixmaps might help, with direct opengl surface rendering will be implemented.
&gt; &gt; &gt; We&apos;re not going to use QPixmaps for that, but rather a special-case class that does just that.
&gt; &gt; 
&gt; &gt; No, I don&apos;t mean painting on QPixmap.
&gt; &gt; It is possible to create QPainter form QGLFramebufferObject and in this case qpixmap backed by texture would paint faster, than qimage.
&gt; 
&gt; The question is: Where in WebKit would we end up _actually_ using any &quot;features&quot; of QPixmap beyond the raster backing?

From my experiments with openvg this is still faster then pure raster if there is enough graphics RAM for qpixmap back buffers.

&gt; Certainly not in WebKit2 (where GraphicsSurface is our new QPixmap :), so only WebKit1 remains.

Do we have plans to implement GL drawing on GraphicsSurface?
As I understand, we&apos;ll have to create QPainter (webkit context) from GraphicsSurface?
In this case, IMHO, texture backed pixmaps would paint faster.

&gt; And that&apos;s where we have to make a decision I think, what type of rendering to we want to support, encourage or recommend for WebKit1 on Qt 5. A hard way would be to say software-only with raster engine and software backed texture mapper.

IMHO, for hybrid applications simple webkit1 webview is better.
I think webkit1 webview/pageview similar to QQuickWebView/QQuickWebPage, but with webcore in the same process, will be very usable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648118</commentid>
    <comment_count>13</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-13 09:20:33 -0700</bug_when>
    <thetext>&gt; Do we have plans to implement GL drawing on GraphicsSurface?
Yes, we already do that for WebGL.

&gt; As I understand, we&apos;ll have to create QPainter (webkit context) from GraphicsSurface?
Probably the QPainter abstraction is not going to help there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648157</commentid>
    <comment_count>14</comment_count>
      <attachid>147343</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-06-13 09:51:26 -0700</bug_when>
    <thetext>Created attachment 147343
proposed patch

I addressed Viatcheslav comments!
The style should be okay now because I fixed the check-webkit-style rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666982</commentid>
    <comment_count>15</comment_count>
      <attachid>147343</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-11 13:00:47 -0700</bug_when>
    <thetext>Comment on attachment 147343
proposed patch

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

There are a couple of rebases needed... Otherwise I&apos;m pretty positive about reviewing this. If anyone has &quot;big&quot; objections please add them soon :)

&gt; Source/WebCore/platform/graphics/ImageSource.h:94
&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888

Shouldn&apos;t this be Format_RGB32?

&gt; Source/WebCore/platform/graphics/ImageSource.h:95
&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888
&gt; +#define TRANSPARENT_IMAGE_FORMAT QImage::Format_ARGB32_Premultiplied

I&apos;d rather this be an enum instead of #defines.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:493
&gt; -    else {
&gt; -        QPixmap* nativePixmap = image-&gt;nativeImageForCurrentFrame();
&gt; -        nativeImage = nativePixmap-&gt;toImage().convertToFormat(QImage::Format_ARGB32);
&gt; -    }
&gt; +    else
&gt; +        nativeImage = image-&gt;nativeImageForCurrentFrame()-&gt;convertToFormat(QImage::Format_ARGB32);
&gt; +

Probably needs a rebase.

&gt; Source/WebCore/platform/graphics/qt/TransparencyLayer.h:39
&gt; +

Unnecessary line.

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:407
&gt;  int64_t LayerTreeHostQt::adoptImageBackingStore(Image* image)
&gt;  {
&gt;      if (!image)
&gt;          return InvalidWebLayerID;
&gt; -    QPixmap* pixmap = image-&gt;nativeImageForCurrentFrame();
&gt; +    QImage* nativeImage = image-&gt;nativeImageForCurrentFrame();
&gt;  
&gt; -    if (!pixmap)
&gt; +    if (!nativeImage)
&gt;          return InvalidWebLayerID;
&gt;  
&gt; -    int64_t key = pixmap-&gt;cacheKey();
&gt; +    int64_t key = nativeImage-&gt;cacheKey();
&gt;      HashMap&lt;int64_t, int&gt;::iterator it = m_directlyCompositedImageRefCounts.find(key);
&gt;  
&gt;      if (it != m_directlyCompositedImageRefCounts.end()) {

Probably needs a rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666991</commentid>
    <comment_count>16</comment_count>
      <attachid>147343</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-07-11 13:09:45 -0700</bug_when>
    <thetext>Comment on attachment 147343
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:94
&gt;&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888
&gt; 
&gt; Shouldn&apos;t this be Format_RGB32?

Actually, why?
It requires 33% more RAM, but performance improvement was not big when I measured it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666992</commentid>
    <comment_count>17</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-11 13:11:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 147343 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147343&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:94
&gt; &gt;&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888
&gt; &gt; 
&gt; &gt; Shouldn&apos;t this be Format_RGB32?
&gt; 
&gt; Actually, why?
&gt; It requires 33% more RAM, but performance improvement was not big when I measured it.

I thought there were special optimizations for RGB32, I don&apos;t recall using 888 much. But maybe it doesn&apos;t matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667008</commentid>
    <comment_count>18</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-11 13:23:05 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 147343 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147343&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:94
&gt; &gt;&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888
&gt; &gt; 
&gt; &gt; Shouldn&apos;t this be Format_RGB32?
&gt; 
&gt; Actually, why?
&gt; It requires 33% more RAM, but performance improvement was not big when I measured it.

There is a lot of code currently assuming a pixel-size of 4 bytes. If those places are fixed I would be all for allowing 24bit encoding (I have been thinking about doing this myself), but it would probably need a feature-flag since it might be slower on some platforms without native hardware support. 

I would suggest for this patch, to just use RGB32. If you want to enable 24bit, please do so in another patch that solves all the pixel-size problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667352</commentid>
    <comment_count>19</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-07-11 20:02:44 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 147343 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147343&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:94
&gt; &gt; &gt;&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888
&gt; &gt; &gt; 
&gt; &gt; &gt; Shouldn&apos;t this be Format_RGB32?
&gt; &gt; 
&gt; &gt; Actually, why?
&gt; &gt; It requires 33% more RAM, but performance improvement was not big when I measured it.
&gt; 
&gt; There is a lot of code currently assuming a pixel-size of 4 bytes. If those places are fixed I would be all for allowing 24bit encoding (I have been thinking about doing this myself), but it would probably need a feature-flag since it might be slower on some platforms without native hardware support. 
&gt; 
&gt; I would suggest for this patch, to just use RGB32. If you want to enable 24bit, please do so in another patch that solves all the pixel-size problems.

Actually, on internal branch we used 16 bit color for opaque images. The only extra place we changed was image decoders to produce 16 bit output. Worked fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667382</commentid>
    <comment_count>20</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-11 21:19:54 -0700</bug_when>
    <thetext>
&gt; &gt; I would suggest for this patch, to just use RGB32. If you want to enable 24bit, please do so in another patch that solves all the pixel-size problems.
&gt; 
&gt; Actually, on internal branch we used 16 bit color for opaque images. The only extra place we changed was image decoders to produce 16 bit output. Worked fine.

We can do that at a different patch. For now let&apos;s focus on switching from QPixmap to QImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667441</commentid>
    <comment_count>21</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-11 23:54:06 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; We can do that at a different patch. For now let&apos;s focus on switching from QPixmap to QImage.

I&apos;m going to update the patch today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668899</commentid>
    <comment_count>22</comment_count>
      <attachid>152222</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-13 05:15:57 -0700</bug_when>
    <thetext>Created attachment 152222
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668900</commentid>
    <comment_count>23</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-13 05:18:13 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Shouldn&apos;t this be Format_RGB32?

Done.
 
&gt; &gt; Source/WebCore/platform/graphics/ImageSource.h:95
&gt; &gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB888
&gt; &gt; +#define TRANSPARENT_IMAGE_FORMAT QImage::Format_ARGB32_Premultiplied
&gt; 
&gt; I&apos;d rather this be an enum instead of #defines.

QImage&apos;s constructor takes a QImage::Format, so how can I transform them to an enum then?

&gt; &gt; Source/WebCore/platform/graphics/qt/TransparencyLayer.h:39
&gt; &gt; +
&gt; 
&gt; Unnecessary line.

Removed
 
&gt; Probably needs a rebase.

Rebased and tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668929</commentid>
    <comment_count>24</comment_count>
      <attachid>152222</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-13 05:59:19 -0700</bug_when>
    <thetext>Comment on attachment 152222
proposed patch

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

Haven&apos;t taken the time yet too look at the changes in detail, but I agree about the direction. One small nitpick I noticed below.

&gt; Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp:277
&gt;      QImage img(reinterpret_cast&lt;uchar*&gt;(m_bytes), m_size.width(), m_size.height(), sizeof(PixelData) * m_size.width(), format);
&gt;  
&gt; -    return new QPixmap(QPixmap::fromImage(img));
&gt; +    return new QImage(img);

Hmmm, if it&apos;s guaranteed that the caller keeps the ImageFrame around, then wouldn&apos;t it be simpler to just do return new QImage(reinterpret_cast&lt;uchar*&gt;(m_bytes), ...) ?

If that&apos;s not guaranteed, then we probably need a call to copy() to make sure that the data is properly detached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669058</commentid>
    <comment_count>25</comment_count>
      <attachid>152222</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-13 08:23:12 -0700</bug_when>
    <thetext>Comment on attachment 152222
proposed patch

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

TRANSPARENT_

&gt; Source/WebCore/platform/graphics/ImageSource.h:95
&gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB32
&gt; +#define TRANSPARENT_IMAGE_FORMAT QImage::Format_ARGB32_Premultiplied

I still don&apos;t like having these defines here.
How about adding a NativeImageQt file, and in it put something like
static QImage::Format NativeImageQt::defaultFormatFor[AlphaEnabled|Opaque]Images()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669120</commentid>
    <comment_count>26</comment_count>
      <attachid>152276</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-13 09:21:09 -0700</bug_when>
    <thetext>Created attachment 152276
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669121</commentid>
    <comment_count>27</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-13 09:22:48 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Hmmm, if it&apos;s guaranteed that the caller keeps the ImageFrame around, then wouldn&apos;t it be simpler to just do return new QImage(reinterpret_cast&lt;uchar*&gt;(m_bytes), ...) ?
&gt; 
&gt; If that&apos;s not guaranteed, then we probably need a call to copy() to make sure that the data is properly detached.

It is guaranteed. I modified the return.(In reply to comment #25)
&gt; (From update of attachment 152222 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152222&amp;action=review
&gt; 
&gt; TRANSPARENT_
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageSource.h:95
&gt; &gt; +#define OPAQUE_IMAGE_FORMAT      QImage::Format_RGB32
&gt; &gt; +#define TRANSPARENT_IMAGE_FORMAT QImage::Format_ARGB32_Premultiplied
&gt; 
&gt; I still don&apos;t like having these defines here.
&gt; How about adding a NativeImageQt file, and in it put something like
&gt; static QImage::Format NativeImageQt::defaultFormatFor[AlphaEnabled|Opaque]Images()

Done. There are a few places where we can also use the newly added functions, but I would do that in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669124</commentid>
    <comment_count>28</comment_count>
      <attachid>152276</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-13 09:23:27 -0700</bug_when>
    <thetext>Comment on attachment 152276
proposed patch

This looks good to me, but let&apos;s wait to see if Simon wants to have a look as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670192</commentid>
    <comment_count>29</comment_count>
      <attachid>152276</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-16 01:42:24 -0700</bug_when>
    <thetext>Comment on attachment 152276
proposed patch

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

r=me

Land with care and watch the bots ;)

&gt; Source/WebKit/qt/Api/qwebframe.cpp:1977
&gt; -    return d-&gt;pixmap;
&gt; +    return QPixmap::fromImage(d-&gt;image);

Is this a good move? QPixmap::fromImage will do a conversion every time, making the pixmap() accessor a lot slower on repeated calls. Wouldn&apos;t it be simpler to leave the pixmap as member? (under the assumption that we&apos;re not changing the API)

Alternatively the conversion from QImage to QPixmap can be made _very_ cheap if the QImage has the same format, so another option would be for example to make the &apos;QImage image&apos; member here hold a QImage respecting QPixmap::defaultDepth().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670298</commentid>
    <comment_count>30</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-16 06:51:34 -0700</bug_when>
    <thetext>Committed r122720: &lt;http://trac.webkit.org/changeset/122720&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147283</attachid>
            <date>2012-06-13 03:58:09 -0700</date>
            <delta_ts>2012-06-13 09:51:26 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>qpixmap2qimage.patch</filename>
            <type>text/plain</type>
            <size>52733</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZWJkNzZhLi4zMzg0NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYg
QEAKKzIwMTItMDYtMTMgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgW1F0XSBDaGFuZ2UgTmF0aXZlSW1hZ2VQdHIgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2Uq
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdl
IHVzZSByYXN0ZXIgZW5naW5lIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBRUGl4bWFw
IGFuZCBRSW1hZ2UsIHNvIHdlIGFyZSBnb2luZworICAgICAgICB0byBRSW1hZ2UgZXZlcnl3aGVy
ZSB3aGVyZSBpdCBpcyBwb3NzaWJsZS4gVGhpcyByZWZhY3RvcmluZyBjb250YWlucyB0aGUgY2hh
bmdlIG9mIHRoZQorICAgICAgICBOYXRpdmVJbWFnZVB0ciB0eXBlZGVmIGZyb20gUVBpeG1hcCog
dG8gUUltYWdlKiBhbmQgY292ZXJzIHRoZSByZWxhdGVkIG1vZGlmaWNhdGlvbnMuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQXNzaWdu
VG9FbGVtZW50TWV0aG9kOjppbnZva2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXht
YXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJ
bWFnZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcDoK
KyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3Bh
cmVuY3lMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJE
YXRhUXQuaDoKKyAgICAgICAgKEltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChncmFwaGljcyk6CisgICAgICAgIChsb2Fk
UmVzb3VyY2VJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpT
dGlsbEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6On5TdGlsbEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3Rp
bGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3RpbGxJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJ
bWFnZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKToKKyAgICAgICAgKFN0
aWxsSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxh
eWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllcjo6VHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
Q2xpcGJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OmNyZWF0ZURy
YWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6ZGVjbGFyZUFuZFdyaXRl
RHJhZ0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDdXN0b21DdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Ry
YWdJbWFnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorCiAyMDEyLTA2LTEyICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgZnVu
Y3Rpb25zOiBzZXROYW1lKCkgYW5kIGZvcm1Db250cm9sTmFtZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2Rl
IDEwMDc1NQppbmRleCBjMDBmYjQ5Li40YzExN2Y4Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcGl4bWFwcnVudGltZS5jcHAKQEAgLTE0Niw4ICsxNDYsOCBAQCBwdWJsaWM6CiAgICAgICAg
IGlmICghb2JqZWN0QXJnLT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8pKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICAgICAgLy8gd2Ugbm93IGtu
b3cgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgPGltZz4gZWxlbWVudCBhcyB0aGUgYXJndW1lbnQsIHdl
IGNhbiBhdHRhY2ggdGhlIHBpeG1hcCB0byBpdC4KLSAgICAgICAgUGFzc1JlZlB0cjxTdGlsbElt
YWdlPiBzdGlsbEltYWdlID0gV2ViQ29yZTo6U3RpbGxJbWFnZTo6Y3JlYXRlKGluc3RhbmNlLT50
b1BpeG1hcCgpKTsKKyAgICAgICAgLy8gd2Ugbm93IGtub3cgdGhhdCB3ZSBoYXZlIGEgdmFsaWQg
PGltZz4gZWxlbWVudCBhcyB0aGUgYXJndW1lbnQsIHdlIGNhbiBhdHRhY2ggdGhlIGltYWdlIHRv
IGl0LgorICAgICAgICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxsSW1hZ2UgPSBXZWJDb3Jl
OjpTdGlsbEltYWdlOjpjcmVhdGUoaW5zdGFuY2UtPnRvSW1hZ2UoKSk7CiAgICAgICAgIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQq
PihzdGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQqPihvYmplY3RBcmcpLT5pbXBsKCkpOwog
ICAgICAgICBpbWFnZUVsZW1lbnQtPnNldENhY2hlZEltYWdlKG5ldyBDYWNoZWRJbWFnZShzdGls
bEltYWdlLmdldCgpKSk7CiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGluc3RhbmNlLT5yb290T2JqZWN0KCktPmdsb2Jh
bE9iamVjdCgpKTsKQEAgLTM4MywxMyArMzgzLDEzIEBAIFFWYXJpYW50IFF0UGl4bWFwSW5zdGFu
Y2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QsIFFNZXRhVHlwZTo6VHlwZSBo
CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJldHVybkVtcHR5VmFyaWFu
dDsKIAotICAgICAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKCFwaXhtYXApCisgICAgICAgIFFJbWFnZSogbmF0aXZl
SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaWYg
KCFuYXRpdmVJbWFnZSkKICAgICAgICAgICAgIGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50OwogCiAg
ICAgICAgIHJldHVybiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRh
VHlwZUlkPFFQaXhtYXA+KCkpKQotICAgICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZh
bHVlPFFQaXhtYXA+KCpwaXhtYXApCi0gICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9t
VmFsdWU8UUltYWdlPihwaXhtYXAtPnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICA/IFFW
YXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4oUVBpeG1hcDo6ZnJvbUltYWdlKCpuYXRpdmVJbWFn
ZSkpCisgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPigqbmF0
aXZlSW1hZ2UpOwogICAgIH0KIAogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZRdFBpeG1hcFJ1
bnRpbWVPYmplY3Q6OnNfaW5mbykpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKb2xk
IG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBkZDk3MGQyLi5lNzhhOWQzCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdJbWFnZS5oCkBAIC0zNiw3ICszNiw3IEBACiBPQkpDX0NMQVNTIE5TSW1h
Z2U7CiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1h
cDsKK2NsYXNzIFFJbWFnZTsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFBMQVRGT1JNKFdJTikK
IHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKQEAgLTYyLDcgKzYyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICB0eXBlZGVmIFJldGFpblB0
cjxOU0ltYWdlPiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB0eXBlZGVm
IFFQaXhtYXAqIERyYWdJbWFnZVJlZjsKKyAgICB0eXBlZGVmIFFJbWFnZSogRHJhZ0ltYWdlUmVm
OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEJJVE1BUCBEcmFnSW1hZ2VSZWY7
CiAjZWxpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpp
bmRleCBhZjI1MmE3Li5lYjIxZTIxCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01MDEsNyArNTAxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdm9pZCBwdXNoVHJhbnNw
YXJlbmN5TGF5ZXJJbnRlcm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUVBp
eG1hcCYgYWxwaGFNYXNrKTsKKyAgICAgICAgdm9pZCBwdXNoVHJhbnNwYXJlbmN5TGF5ZXJJbnRl
cm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUUltYWdlJiBhbHBoYU1hc2sp
OwogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCm9sZCBtb2RlIDEwMDY0
NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggM2ZmNDgyMy4uZGQ3MzM5NwotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQotICAgIHN0YXRpYyB2b2lkIHNldFBsYXRmb3JtUmVzb3VyY2Uo
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgUVBpeG1hcCYpOworICAgIHN0YXRpYyB2b2lkIHNldFBs
YXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgUUltYWdlJik7CiAjZW5kaWYK
IAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZWQ2MjViYy4uOTEzYTNlNwotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQzLDcgKzQz
LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEqIENGRGF0YVJlZjsKICNlbGlmIFBM
QVRGT1JNKFFUKQogI2luY2x1ZGUgPHFnbG9iYWwuaD4KIFFUX0JFR0lOX05BTUVTUEFDRQotY2xh
c3MgUVBpeG1hcDsKK2NsYXNzIFFJbWFnZTsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFVTRShD
QUlSTykKICNpbmNsdWRlICJOYXRpdmVJbWFnZUNhaXJvLmgiCkBAIC05MCw3ICs5MCw3IEBAIGNs
YXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJj
ZVB0cjsKIHR5cGVkZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShRVCkK
LXR5cGVkZWYgUVBpeG1hcCogTmF0aXZlSW1hZ2VQdHI7Cit0eXBlZGVmIFFJbWFnZSogTmF0aXZl
SW1hZ2VQdHI7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAK
b2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzNmIwODA2Li5mYTNmODRjCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKQEAgLTUwLDEwICs1MCw4IEBAIFBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZl
cikKIEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIElu
dFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQpCiAgICAgOiBtX2ltYWdlKDAp
CiB7Ci0gICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwotICAgIFFJbWFnZSBpbWFn
ZShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBp
bWFnZUZvcm1hdCk7Ci0gICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFnZShpbWFnZSk7Ci0gICAg
bV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisgICAgUUltYWdlKiBpbWFn
ZSA9IG5ldyBRSW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOworICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGltYWdlKTsKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmY1
MjYyMS4uMWM5MzEyNAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNDg4LDEwICs0ODgsOSBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgIC8vIElz
IGltYWdlIGFscmVhZHkgbG9hZGVkPyBJZiBub3QsIGxvYWQgaXQuCiAgICAgaWYgKGltYWdlLT5k
YXRhKCkpCiAgICAgICAgIG5hdGl2ZUltYWdlID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVjaGFyKj4oaW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRhdGEo
KS0+c2l6ZSgpKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIG5hdGl2ZUltYWdlID0gbmF0aXZlUGl4bWFwLT50
b0ltYWdlKCkuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7Ci0gICAgfQor
ICAgIGVsc2UKKyAgICAgICAgbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKS0+Y29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisKICAg
ICBBbHBoYU9wIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKICAgICBpZiAocHJlbXVs
dGlwbHlBbHBoYSkKICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDY0
MmExYTUuLjExZDBhZWMKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtMTAzMSw3ICsxMDMxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQogICAgIG1fZGF0YS0+c2hhZG93
LT5jbGVhcigpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cHVzaFRyYW5zcGFyZW5jeUxh
eWVySW50ZXJuYWwoY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFs
cGhhTWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwdXNoVHJhbnNwYXJlbmN5TGF5ZXJJbnRl
cm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUUltYWdlJiBhbHBoYU1hc2sp
CiB7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKIApAQCAtMTA2Myw3ICsxMDYzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQogICAgICAgICBoID0gaW50KHFCb3VuZChxcmVhbCgwKSwgZGV2aWNlQ2xp
cC5oZWlnaHQoKSwgKHFyZWFsKWgpICsgMik7CiAgICAgfQogCi0gICAgUVBpeG1hcCBlbXB0eUFs
cGhhTWFzazsKKyAgICBRSW1hZ2UgZW1wdHlBbHBoYU1hc2s7CiAgICAgbV9kYXRhLT5sYXllcnMu
cHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIocCwgUVJlY3QoeCwgeSwgdywgaCksIG9wYWNpdHks
IGVtcHR5QWxwaGFNYXNrKSk7CiAgICAgKyttX2RhdGEtPmxheWVyQ291bnQ7CiB9CkBAIC0xMDc3
LDcgKzEwNzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcigpCiAgICAgaWYgKCFsYXllci0+YWxwaGFNYXNrLmlzTnVsbCgpKSB7CiAgICAgICAg
IGxheWVyLT5wYWludGVyLnJlc2V0VHJhbnNmb3JtKCk7CiAgICAgICAgIGxheWVyLT5wYWludGVy
LnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9u
SW4pOwotICAgICAgICBsYXllci0+cGFpbnRlci5kcmF3UGl4bWFwKFFQb2ludCgpLCBsYXllci0+
YWxwaGFNYXNrKTsKKyAgICAgICAgbGF5ZXItPnBhaW50ZXIuZHJhd0ltYWdlKFFQb2ludCgpLCBs
YXllci0+YWxwaGFNYXNrKTsKICAgICB9IGVsc2UKICAgICAgICAgLS1tX2RhdGEtPmxheWVyQ291
bnQ7IC8vIHNlZSB0aGUgY29tbWVudCBmb3IgbGF5ZXJDb3VudAogICAgIGxheWVyLT5wYWludGVy
LmVuZCgpOwpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHAtPnNhdmUoKTsKICAgICBwLT5yZXNldFRy
YW5zZm9ybSgpOwogICAgIHAtPnNldE9wYWNpdHkobGF5ZXItPm9wYWNpdHkpOwotICAgIHAtPmRy
YXdQaXhtYXAobGF5ZXItPm9mZnNldCwgbGF5ZXItPnBpeG1hcCk7CisgICAgcC0+ZHJhd0ltYWdl
KGxheWVyLT5vZmZzZXQsIGxheWVyLT5pbWFnZSk7CiAgICAgcC0+cmVzdG9yZSgpOwogCiAgICAg
ZGVsZXRlIGxheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlQnVmZmVyRGF0YVF0LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1
NQppbmRleCA5Y2Y3ODJiLi5hNjk0NmU3Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0YVF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaApAQCAtMjYsNyArMjYsNyBAQAogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAKICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGl4bWFw
PgorI2luY2x1ZGUgPFFJbWFnZT4KIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CkBAIC0zOSw5ICszOSw3IEBAIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7
CiBwdWJsaWM6CiAgICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsKIAotICAgIFFJ
bWFnZSB0b1FJbWFnZSgpIGNvbnN0OwotCi0gICAgUVBpeG1hcCBtX3BpeG1hcDsKKyAgICBRSW1h
Z2UgbV9uYXRpdmVJbWFnZTsKICAgICBPd25QdHI8UVBhaW50ZXI+IG1fcGFpbnRlcjsKICAgICBS
ZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1v
ZGUgMTAwNzU1CmluZGV4IGI5YjllYmYuLmQ0ZTIwZTEKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKQEAgLTQyLDIzICs0MiwyMiBA
QAogI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRlIDxRSW1hZ2VXcml0ZXI+CiAjaW5jbHVkZSA8
UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBpeG1hcD4KICNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fcGl4bWFwKHNpemUpCisgICAgOiBtX25hdGl2ZUltYWdl
KHNpemUsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKQogewotICAgIGlmICht
X3BpeG1hcC5pc051bGwoKSkKKyAgICBpZiAobV9uYXRpdmVJbWFnZS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9waXhtYXAuZmlsbChRQ29sb3IoUXQ6OnRyYW5zcGFyZW50KSk7
CisgICAgbV9uYXRpdmVJbWFnZS5maWxsKFFDb2xvcihRdDo6dHJhbnNwYXJlbnQpKTsKIAogICAg
IFFQYWludGVyKiBwYWludGVyID0gbmV3IFFQYWludGVyOwogICAgIG1fcGFpbnRlciA9IGFkb3B0
UHRyKHBhaW50ZXIpOwogCi0gICAgaWYgKCFwYWludGVyLT5iZWdpbigmbV9waXhtYXApKQorICAg
IGlmICghcGFpbnRlci0+YmVnaW4oJm1fbmF0aXZlSW1hZ2UpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBTaW5jZSBJbWFnZUJ1ZmZlciBpcyB1c2VkIG1haW5seSBmb3IgQ2FudmFzLCBleHBs
aWNpdGx5IGluaXRpYWxpemUKQEAgLTc2LDIyICs3NSw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1h
Z2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcGFpbnRlci0+c2V0QnJ1c2go
YnJ1c2gpOwogICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX1NvdXJjZU92ZXIpOwogICAgIAotICAgIG1faW1hZ2UgPSBTdGlsbEltYWdlOjpj
cmVhdGVGb3JSZW5kZXJpbmcoJm1fcGl4bWFwKTsKLX0KLQotUUltYWdlIEltYWdlQnVmZmVyRGF0
YTo6dG9RSW1hZ2UoKSBjb25zdAotewotICAgIFFQYWludEVuZ2luZSogcGFpbnRFbmdpbmUgPSBt
X3BpeG1hcC5wYWludEVuZ2luZSgpOwotICAgIGlmICghcGFpbnRFbmdpbmUgfHwgcGFpbnRFbmdp
bmUtPnR5cGUoKSAhPSBRUGFpbnRFbmdpbmU6OlJhc3RlcikKLSAgICAgICAgcmV0dXJuIG1fcGl4
bWFwLnRvSW1hZ2UoKTsKLQotICAgIC8vIFFSYXN0ZXJQaXhtYXBEYXRhOjp0b0ltYWdlKCkgd2ls
bCBkZWVwLWNvcHkgdGhlIGJhY2tpbmcgUUltYWdlIGlmIHRoZXJlJ3MgYW4gYWN0aXZlIFFQYWlu
dGVyIG9uIGl0LgotICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBkb24ndCB3YW50
IHRoYXQgaGVyZSwgc28gd2UgdGVtcG9yYXJpbHkgcmVkaXJlY3QgdGhlIHBhaW50IGVuZ2luZS4K
LSAgICBRUGFpbnREZXZpY2UqIGN1cnJlbnRQYWludERldmljZSA9IHBhaW50RW5naW5lLT5wYWlu
dERldmljZSgpOwotICAgIHBhaW50RW5naW5lLT5zZXRQYWludERldmljZSgwKTsKLSAgICBRSW1h
Z2UgaW1hZ2UgPSBtX3BpeG1hcC50b0ltYWdlKCk7Ci0gICAgcGFpbnRFbmdpbmUtPnNldFBhaW50
RGV2aWNlKGN1cnJlbnRQYWludERldmljZSk7Ci0gICAgcmV0dXJuIGltYWdlOworICAgIG1faW1h
Z2UgPSBTdGlsbEltYWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fbmF0aXZlSW1hZ2UpOwogfQog
CiBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgLyog
cmVzb2x1dGlvblNjYWxlICovLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1v
ZGUsIGJvb2wmIHN1Y2Nlc3MpCkBAIC0xMjAsOSArMTA0LDkgQEAgR3JhcGhpY3NDb250ZXh0KiBJ
bWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogewogICAg
IGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIFN0
aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOworICAgICAgICByZXR1cm4gU3RpbGxJ
bWFnZTo6Y3JlYXRlKG1fZGF0YS5tX25hdGl2ZUltYWdlKTsKIAotICAgIHJldHVybiBTdGlsbElt
YWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fZGF0YS5tX3BpeG1hcCk7CisgICAgcmV0dXJuIFN0
aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwogfQog
CiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsCkBAIC0xNDksMTIgKzEzMywxMiBAQCB2b2lkIEltYWdlQnVm
ZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHNyYwogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpIGNvbnN0CiB7Ci0gICAgUVBpeG1hcCog
bmF0aXZlSW1hZ2UgPSBtX2RhdGEubV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmbG9hdFJlY3QpOwotICAg
IFFQaXhtYXAgYWxwaGFNYXNrID0gKm5hdGl2ZUltYWdlOworICAgIFFJbWFnZSBhbHBoYU1hc2sg
PSAqbmF0aXZlSW1hZ2U7CiAKICAgICBjb250ZXh0LT5wdXNoVHJhbnNwYXJlbmN5TGF5ZXJJbnRl
cm5hbChyZWN0LCAxLjAsIGFscGhhTWFzayk7CiB9CkBAIC0xNjUsNyArMTQ5LDcgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+
JiBsb29rVXBUYWJsZSkKICAgICBpZiAoaXNQYWludGluZykKICAgICAgICAgbV9kYXRhLm1fcGFp
bnRlci0+ZW5kKCk7CiAKLSAgICBRSW1hZ2UgaW1hZ2UgPSBtX2RhdGEudG9RSW1hZ2UoKS5jb252
ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICBRSW1hZ2UgaW1hZ2UgPSBt
X2RhdGEubV9uYXRpdmVJbWFnZS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMy
KTsKICAgICBBU1NFUlQoIWltYWdlLmlzTnVsbCgpKTsKIAogICAgIHVjaGFyKiBiaXRzID0gaW1h
Z2UuYml0cygpOwpAQCAtMTgyLDEwICsxNjYsMTAgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIG1fZGF0YS5tX3BpeG1hcCA9IFFQaXhtYXA6OmZyb21JbWFn
ZShpbWFnZSk7CisgICAgbV9kYXRhLm1fbmF0aXZlSW1hZ2UgPSBpbWFnZTsKIAogICAgIGlmIChp
c1BhaW50aW5nKQotICAgICAgICBtX2RhdGEubV9wYWludGVyLT5iZWdpbigmbV9kYXRhLm1fcGl4
bWFwKTsKKyAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+YmVnaW4oJm1fZGF0YS5tX25hdGl2ZUlt
YWdlKTsKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+CkBAIC0yMjQsNyArMjA4
LDcgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmUKICAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBv
cmlnaW55OwogCiAgICAgLy8gTk9URTogRm9yIHVubXVsdGlwbGllZCBkYXRhLCB3ZSB1bmRvIHRo
ZSBwcmVtdWx0aXBsaWNhdGlvbiBiZWxvdy4KLSAgICBRSW1hZ2UgaW1hZ2UgPSBpbWFnZURhdGEu
dG9RSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRp
cGxpZWQpOworICAgIFFJbWFnZSBpbWFnZSA9IGltYWdlRGF0YS5tX25hdGl2ZUltYWdlLmNvbnZl
cnRUb0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CiAKICAgICBB
U1NFUlQoIWltYWdlLmlzTnVsbCgpKTsKIApAQCAtMzU4LDcgKzM0Miw3IEBAIHZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEJ5dGVBcnJheShNdWx0aXBseSBtdWx0aXBsaWVkLCBVaW50OENsYW1wZWRBcnJh
eSogc291cmNlLCBjCiAKICAgICBib29sIGlzUGFpbnRpbmcgPSBtX2RhdGEubV9wYWludGVyLT5p
c0FjdGl2ZSgpOwogICAgIGlmICghaXNQYWludGluZykKLSAgICAgICAgbV9kYXRhLm1fcGFpbnRl
ci0+YmVnaW4oJm1fZGF0YS5tX3BpeG1hcCk7CisgICAgICAgIG1fZGF0YS5tX3BhaW50ZXItPmJl
Z2luKCZtX2RhdGEubV9uYXRpdmVJbWFnZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fZGF0YS5t
X3BhaW50ZXItPnNhdmUoKTsKIApAQCAtMzc3LDcgKzM2MSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OnB1dEJ5dGVBcnJheShNdWx0aXBseSBtdWx0aXBsaWVkLCBVaW50OENsYW1wZWRBcnJheSogc291
cmNlLCBjCiAgICAgICAgIG1fZGF0YS5tX3BhaW50ZXItPnJlc3RvcmUoKTsKIH0KIAotc3RhdGlj
IGJvb2wgZW5jb2RlSW1hZ2UoY29uc3QgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBTdHJpbmcmIGZv
cm1hdCwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBRQnl0ZUFycmF5JiBkYXRhKQorc3RhdGljIGJv
b2wgZW5jb2RlSW1hZ2UoY29uc3QgUUltYWdlJiBpbWFnZSwgY29uc3QgU3RyaW5nJiBmb3JtYXQs
IGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgUUJ5dGVBcnJheSYgZGF0YSkKIHsKICAgICBpbnQgY29t
cHJlc3Npb25RdWFsaXR5ID0gMTAwOwogICAgIGlmIChxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAu
MCAmJiAqcXVhbGl0eSA8PSAxLjApCkBAIC0zODUsNyArMzY5LDcgQEAgc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoY29uc3QgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBTdHJpbmcmIGZvcm1hdCwgY29u
c3QgZG91YmwKIAogICAgIFFCdWZmZXIgYnVmZmVyKCZkYXRhKTsKICAgICBidWZmZXIub3BlbihR
QnVmZmVyOjpXcml0ZU9ubHkpOwotICAgIGJvb2wgc3VjY2VzcyA9IHBpeG1hcC5zYXZlKCZidWZm
ZXIsIGZvcm1hdC51dGY4KCkuZGF0YSgpLCBjb21wcmVzc2lvblF1YWxpdHkpOworICAgIGJvb2wg
c3VjY2VzcyA9IGltYWdlLnNhdmUoJmJ1ZmZlciwgZm9ybWF0LnV0ZjgoKS5kYXRhKCksIGNvbXBy
ZXNzaW9uUXVhbGl0eSk7CiAgICAgYnVmZmVyLmNsb3NlKCk7CiAKICAgICByZXR1cm4gc3VjY2Vz
czsKQEAgLTM5NywxMCArMzgxLDEwIEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgQ29vCiAKICAgICAv
LyBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9ydCBtaW1ldHlwZXMuIEl0IGRvZXMgc3VwcG9y
dCBRdCBpbWFnZSBmb3JtYXRzIChwbmcsCiAgICAgLy8gZ2lmLCBqcGVnLi4uLCB4cG0pIHNvIHNr
aXAgdGhlIGltYWdlLyB0byBnZXQgdGhlIFF0IGltYWdlIGZvcm1hdCB1c2VkIHRvIGVuY29kZQot
ICAgIC8vIHRoZSBtX3BpeG1hcCBpbWFnZS4KKyAgICAvLyB0aGUgbV9uYXRpdmVJbWFnZSBpbWFn
ZS4KIAogICAgIFFCeXRlQXJyYXkgZGF0YTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5t
X3BpeG1hcCwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKSwgcXVhbGl0eSwgZGF0
YSkpCisgICAgaWYgKCFlbmNvZGVJbWFnZShtX2RhdGEubV9uYXRpdmVJbWFnZSwgbWltZVR5cGUu
c3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKSwgcXVhbGl0eSwgZGF0YSkpCiAgICAgICAgIHJldHVy
biAiZGF0YTosIjsKIAogICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwi
ICsgZGF0YS50b0Jhc2U2NCgpLmRhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3
IG1vZGUgMTAwNzU1CmluZGV4IGUwMzYzNmYuLmFlNDBmYjYKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcApAQCAtMjc0LDcgKzI3
NCw3IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25z
dAogCiAgICAgUUltYWdlIGltZyhyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9ieXRlcyksIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHNpemVvZihQaXhlbERhdGEpICogbV9zaXpl
LndpZHRoKCksIGZvcm1hdCk7CiAKLSAgICByZXR1cm4gbmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJv
bUltYWdlKGltZykpOworICAgIHJldHVybiBuZXcgUUltYWdlKGltZyk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKb2xkIG1vZGUg
MTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2OTIyN2JjLi40YzI0YzM0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCkBAIC01MSw3ICs1MSw3IEBA
CiAKICNpbmNsdWRlIDxtYXRoLmg+CiAKLXR5cGVkZWYgUUhhc2g8UUJ5dGVBcnJheSwgUVBpeG1h
cD4gV2ViR3JhcGhpY0hhc2g7Cit0eXBlZGVmIFFIYXNoPFFCeXRlQXJyYXksIFFJbWFnZT4gV2Vi
R3JhcGhpY0hhc2g7CiBRX0dMT0JBTF9TVEFUSUMoV2ViR3JhcGhpY0hhc2gsIF9ncmFwaGljcykK
IAogc3RhdGljIHZvaWQgZWFybHlDbGVhckdyYXBoaWNzKCkKQEAgLTY1LDI4ICs2NSwyOCBAQCBz
dGF0aWMgV2ViR3JhcGhpY0hhc2gqIGdyYXBoaWNzKCkKIAogICAgIGlmIChoYXNoLT5pc0VtcHR5
KCkpIHsKIAotICAgICAgICAvLyBwcmV2ZW50IH5RUGl4bWFwIHJ1bm5pbmcgYWZ0ZXIgflFBcHBs
aWNhdGlvbiAobGVha3MgbmF0aXZlIHBpeG1hcHMpCisgICAgICAgIC8vIHByZXZlbnQgflFJbWFn
ZSBydW5uaW5nIGFmdGVyIH5RQXBwbGljYXRpb24gKGxlYWtzIG5hdGl2ZSBpbWFnZXMpCiAgICAg
ICAgIHFBZGRQb3N0Um91dGluZShlYXJseUNsZWFyR3JhcGhpY3MpOwogCiAgICAgICAgIC8vIFFX
ZWJTZXR0aW5nczo6TWlzc2luZ0ltYWdlR3JhcGhpYwotICAgICAgICBoYXNoLT5pbnNlcnQoIm1p
c3NpbmdJbWFnZSIsIFFQaXhtYXAoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvbWlz
c2luZ0ltYWdlLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgibWlzc2luZ0ltYWdlIiwg
UUltYWdlKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3VyY2VzL21pc3NpbmdJbWFnZS5wbmci
KSkpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6Ok1pc3NpbmdQbHVnaW5HcmFwaGljCi0gICAg
ICAgIGhhc2gtPmluc2VydCgibnVsbFBsdWdpbiIsIFFQaXhtYXAoUUxhdGluMVN0cmluZygiOndl
YmtpdC9yZXNvdXJjZXMvbnVsbFBsdWdpbi5wbmciKSkpOworICAgICAgICBoYXNoLT5pbnNlcnQo
Im51bGxQbHVnaW4iLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvbnVs
bFBsdWdpbi5wbmciKSkpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6OkRlZmF1bHRGcmFtZUlj
b25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgidXJsSWNvbiIsIFFQaXhtYXAoUUxhdGlu
MVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvdXJsSWNvbi5wbmciKSkpOworICAgICAgICBoYXNo
LT5pbnNlcnQoInVybEljb24iLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJj
ZXMvdXJsSWNvbi5wbmciKSkpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6OlRleHRBcmVhU2l6
ZUdyaXBDb3JuZXJHcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgidGV4dEFyZWFSZXNpemVD
b3JuZXIiLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3VyY2VzL3RleHRBcmVh
UmVzaXplQ29ybmVyLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgidGV4dEFyZWFSZXNp
emVDb3JuZXIiLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvdGV4dEFy
ZWFSZXNpemVDb3JuZXIucG5nIikpKTsKICAgICAgICAgLy8gUVdlYlNldHRpbmdzOjpEZWxldGVC
dXR0b25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgiZGVsZXRlQnV0dG9uIiwgUVBpeG1h
cChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9kZWxldGVCdXR0b24ucG5nIikpKTsK
KyAgICAgICAgaGFzaC0+aW5zZXJ0KCJkZWxldGVCdXR0b24iLCBRSW1hZ2UoUUxhdGluMVN0cmlu
ZygiOndlYmtpdC9yZXNvdXJjZXMvZGVsZXRlQnV0dG9uLnBuZyIpKSk7CiAgICAgICAgIC8vIFFX
ZWJTZXR0aW5nczo6SW5wdXRTcGVlY2hCdXR0b25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2Vy
dCgiaW5wdXRTcGVlY2giLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3VyY2Vz
L2lucHV0U3BlZWNoLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgiaW5wdXRTcGVlY2gi
LCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvaW5wdXRTcGVlY2gucG5n
IikpKTsKICAgICB9CiAKICAgICByZXR1cm4gaGFzaDsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBs
b2FkcyByZXNvdXJjZXMgaW50byBXZWJLaXQKLXN0YXRpYyBRUGl4bWFwIGxvYWRSZXNvdXJjZVBp
eG1hcChjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIFFJbWFnZSBsb2FkUmVzb3VyY2VJbWFnZShj
b25zdCBjaGFyICpuYW1lKQogewogICAgIHJldHVybiBncmFwaGljcygpLT52YWx1ZShuYW1lKTsK
IH0KQEAgLTExMywyMyArMTEzLDIzIEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFy
TWV0YWRhdGEpCiAKIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZShjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobG9h
ZFJlc291cmNlUGl4bWFwKG5hbWUpKTsKKyAgICByZXR1cm4gU3RpbGxJbWFnZTo6Y3JlYXRlKGxv
YWRSZXNvdXJjZUltYWdlKG5hbWUpKTsKIH0KIAotdm9pZCBJbWFnZTo6c2V0UGxhdGZvcm1SZXNv
dXJjZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBRUGl4bWFwJiBwaXhtYXApCit2b2lkIEltYWdl
OjpzZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFJbWFnZSYgaW1h
Z2UpCiB7CiAgICAgV2ViR3JhcGhpY0hhc2gqIGggPSBncmFwaGljcygpOwotICAgIGlmIChwaXht
YXAuaXNOdWxsKCkpCisgICAgaWYgKGltYWdlLmlzTnVsbCgpKQogICAgICAgICBoLT5yZW1vdmUo
bmFtZSk7CiAgICAgZWxzZQotICAgICAgICBoLT5pbnNlcnQobmFtZSwgcGl4bWFwKTsKKyAgICAg
ICAgaC0+aW5zZXJ0KG5hbWUsIGltYWdlKTsKIH0KIAogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgUVBpeG1hcCogZnJhbWVQaXht
YXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghZnJhbWVQaXhtYXAp
IC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAgIFFJ
bWFnZSogZnJhbWVJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZUltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdl
IHlldC4KICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKQEAgLTE0NCwxMyArMTQ0LDEzIEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAg
ICBpZiAoIWRyLndpZHRoKCkgfHwgIWRyLmhlaWdodCgpIHx8ICF0ci53aWR0aCgpIHx8ICF0ci5o
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBpeG1hcCBwaXhtYXAgPSAqZnJhbWVQ
aXhtYXA7Ci0gICAgaWYgKHRyLngoKSB8fCB0ci55KCkgfHwgdHIud2lkdGgoKSAhPSBwaXhtYXAu
d2lkdGgoKSB8fCB0ci5oZWlnaHQoKSAhPSBwaXhtYXAuaGVpZ2h0KCkpCi0gICAgICAgIHBpeG1h
cCA9IHBpeG1hcC5jb3B5KHRyKTsKKyAgICBRSW1hZ2UgaW1hZ2UgPSAqZnJhbWVJbWFnZTsKKyAg
ICBpZiAodHIueCgpIHx8IHRyLnkoKSB8fCB0ci53aWR0aCgpICE9IGltYWdlLndpZHRoKCkgfHwg
dHIuaGVpZ2h0KCkgIT0gaW1hZ2UuaGVpZ2h0KCkpCisgICAgICAgIGltYWdlID0gaW1hZ2UuY29w
eSh0cik7CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+
Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAKLSAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
IXBpeG1hcC5oYXNBbHBoYSgpICYmIG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgPyBDb21wb3Np
dGVDb3B5IDogb3ApOworICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UuaGFz
QWxwaGFDaGFubmVsKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNv
cHkgOiBvcCk7CiAKICAgICBRUGFpbnRlciogcCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pOwpAQCAtMTYxLDE3ICsx
NjEsMTcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogCiAgICAgICAgIGJvb2wgdGlsZVdpbGxC
ZVBhaW50ZWRPbmx5T25jZSA9IHRpbGVSZWN0SW5UYXJnZXRDb29yZHMuY29udGFpbnMoZHIpOwog
ICAgICAgICBpZiAoIXRpbGVXaWxsQmVQYWludGVkT25seU9uY2UpIHsKLSAgICAgICAgICAgIFFT
aXplRiBzY2FsZWRTaXplKGZsb2F0KHBpeG1hcC53aWR0aCgpKSAqIHRyYW5zZm9ybS5tMTEoKSwg
ZmxvYXQocGl4bWFwLmhlaWdodCgpKSAqIHRyYW5zZm9ybS5tMjIoKSk7Ci0gICAgICAgICAgICBR
UGl4bWFwIHNjYWxlZFBpeG1hcChzY2FsZWRTaXplLnRvU2l6ZSgpKTsKLSAgICAgICAgICAgIGlm
IChwaXhtYXAuaGFzQWxwaGEoKSkKLSAgICAgICAgICAgICAgICBzY2FsZWRQaXhtYXAuZmlsbChR
dDo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgUVNpemVGIHNjYWxlZFNpemUoZmxvYXQoaW1h
Z2Uud2lkdGgoKSkgKiB0cmFuc2Zvcm0ubTExKCksIGZsb2F0KGltYWdlLmhlaWdodCgpKSAqIHRy
YW5zZm9ybS5tMjIoKSk7CisgICAgICAgICAgICBRSW1hZ2Ugc2NhbGVkSW1hZ2Uoc2NhbGVkU2l6
ZS50b1NpemUoKSwgaW1hZ2UuZm9ybWF0KCkpOworICAgICAgICAgICAgaWYgKGltYWdlLmhhc0Fs
cGhhQ2hhbm5lbCgpKQorICAgICAgICAgICAgICAgIHNjYWxlZEltYWdlLmZpbGwoUXQ6OnRyYW5z
cGFyZW50KTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVy
KCZzY2FsZWRQaXhtYXApOworICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnNjYWxl
ZEltYWdlKTsKICAgICAgICAgICAgICAgICBwYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFp
bnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CiAgICAgICAgICAgICAgICAgcGFpbnRlci5z
ZXRSZW5kZXJIaW50cyhwLT5yZW5kZXJIaW50cygpKTsKLSAgICAgICAgICAgICAgICBwYWludGVy
LmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwgc2NhbGVkUGl4bWFwLndpZHRoKCksIHNjYWxlZFBpeG1h
cC5oZWlnaHQoKSksIHBpeG1hcCk7CisgICAgICAgICAgICAgICAgcGFpbnRlci5kcmF3SW1hZ2Uo
UVJlY3QoMCwgMCwgc2NhbGVkSW1hZ2Uud2lkdGgoKSwgc2NhbGVkSW1hZ2UuaGVpZ2h0KCkpLCBp
bWFnZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhtYXAgPSBzY2FsZWRQaXhtYXA7
CisgICAgICAgICAgICBpbWFnZSA9IHNjYWxlZEltYWdlOwogICAgICAgICAgICAgdHJhbnNmb3Jt
ID0gUVRyYW5zZm9ybTo6ZnJvbVRyYW5zbGF0ZSh0cmFuc2Zvcm0uZHgoKSwgdHJhbnNmb3JtLmR5
KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QKICAgICB0cmFuc2Zvcm0gKj0gUVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwaGFzZS54
KCksIHBoYXNlLnkoKSk7CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSh0ci54KCksIHRyLnkoKSk7
CiAKLSAgICBRQnJ1c2ggYihwaXhtYXApOworICAgIFFCcnVzaCBiKGltYWdlKTsKICAgICBiLnNl
dFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgIHAtPmZpbGxSZWN0KGRyLCBiKTsKIApAQCAtMTkw
LDcgKzE5MCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kaWREcmF3KHRoaXMpOwogfQogCi1CaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUVBpeG1h
cCogcGl4bWFwLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKK0JpdG1hcEltYWdlOjpCaXRtYXBJ
bWFnZShRSW1hZ2UqIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdl
KG9ic2VydmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCkBA
IC0yMDgsMTQgKzIwOCwxNCBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUVBpeG1hcCogcGl4
bWFwLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVl
KQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogewotICAgIGludCB3aWR0aCA9IHBpeG1h
cC0+d2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gcGl4bWFwLT5oZWlnaHQoKTsKKyAgICBpbnQg
d2lkdGggPSBpbWFnZS0+d2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gaW1hZ2UtPmhlaWdodCgp
OwogICAgIG1fZGVjb2RlZFNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CiAgICAgbV9zaXplID0g
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIAogICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9m
cmFtZXNbMF0ubV9mcmFtZSA9IHBpeG1hcDsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0g
cGl4bWFwLT5oYXNBbHBoYSgpOworICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBpbWFnZTsKKyAg
ICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gaW1hZ2UtPmhhc0FscGhhQ2hhbm5lbCgpOwogICAg
IG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKICAgICBjaGVja0ZvclNvbGlkQ29s
b3IoKTsKIH0KQEAgLTIzNiw3ICsyMzYsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgaWYgKG5vcm1hbGl6
ZWRTcmMuaXNFbXB0eSgpIHx8IG5vcm1hbGl6ZWREc3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBRUGl4bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgUUltYWdlKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKICAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MCwxOSArMjUxLDE5IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwKICNlbmRpZgogCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRv
ciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIGN0eHQtPnNldENvbXBvc2l0ZU9w
ZXJhdGlvbighaW1hZ2UtPmhhc0FscGhhKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/
IENvbXBvc2l0ZUNvcHkgOiBvcCk7CisgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFp
bWFnZS0+aGFzQWxwaGFDaGFubmVsKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENv
bXBvc2l0ZUNvcHkgOiBvcCk7CiAKICAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKICAgICAg
ICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOwogICAgICAgICBHcmFw
aGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4
dCwgbm9ybWFsaXplZERzdCk7CiAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CiAgICAgICAg
ICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVk
RHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOworICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
ZHJhd0ltYWdlKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CiAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAobm9ybWFsaXplZERzdCwgKmlt
YWdlLCBub3JtYWxpemVkU3JjKTsKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0lt
YWdlKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CiAKICAgICBjdHh0LT5z
ZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7CiAKQEAgLTI3OCwxMiArMjc5
LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgaWYgKGZy
YW1lQ291bnQoKSA+IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQaXhtYXAqIGZyYW1lUGl4
bWFwID0gZnJhbWVBdEluZGV4KDApOwotICAgIGlmICghZnJhbWVQaXhtYXAgfHwgZnJhbWVQaXht
YXAtPndpZHRoKCkgIT0gMSB8fCBmcmFtZVBpeG1hcC0+aGVpZ2h0KCkgIT0gMSkKKyAgICBRSW1h
Z2UqIGZyYW1lSW1hZ2UgPSBmcmFtZUF0SW5kZXgoMCk7CisgICAgaWYgKCFmcmFtZUltYWdlIHx8
IGZyYW1lSW1hZ2UtPndpZHRoKCkgIT0gMSB8fCBmcmFtZUltYWdlLT5oZWlnaHQoKSAhPSAxKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7Ci0gICAgbV9zb2xp
ZENvbG9yID0gUUNvbG9yOjpmcm9tUmdiYShmcmFtZVBpeG1hcC0+dG9JbWFnZSgpLnBpeGVsKDAs
IDApKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBRQ29sb3I6OmZyb21SZ2JhKGZyYW1lSW1hZ2UtPnBp
eGVsKDAsIDApKTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpCkBAIC0yOTUsMTIgKzI5NiwxMiBAQCBR
X0dVSV9FWFBPUlQgUVBpeG1hcCBxdF9waXhtYXBGcm9tV2luSEJJVE1BUChIQklUTUFQLCBpbnQg
aGJpdG1hcEZvcm1hdCA9IDApOwogUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gQml0bWFwSW1hZ2U6
OmNyZWF0ZShIQklUTUFQIGhCaXRtYXApCiB7CiAjaWYgSEFWRShRVDUpCi0gICAgUVBpeG1hcCog
cVBpeG1hcCA9IG5ldyBRUGl4bWFwKHF0X3BpeG1hcEZyb21XaW5IQklUTUFQKGhCaXRtYXApKTsK
KyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gbmV3IFFJbWFnZShxdF9waXhtYXBGcm9tV2luSEJJ
VE1BUChoQml0bWFwKS50b0ltYWdlKCkpOwogI2Vsc2UKLSAgICBRUGl4bWFwKiBxUGl4bWFwID0g
bmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJvbVdpbkhCSVRNQVAoaEJpdG1hcCkpOworICAgIFFJbWFn
ZSogbmF0aXZlSW1hZ2UgPSBuZXcgUUltYWdlKFFQaXhtYXA6OmZyb21XaW5IQklUTUFQKGhCaXRt
YXApLnRvSW1hZ2UoKSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KHFQaXhtYXApOworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5hdGl2ZUltYWdlKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9QYXR0ZXJuUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
UGF0dGVyblF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGFmN2Ix
MjguLjY1NGMxOWEKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0
dGVyblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0
ZXJuUXQuY3BwCkBAIC0zMywxMiArMzMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBRQnJ1
c2ggUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IGNvbnN0CiB7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFwaXhtYXApCisgICAgUUltYWdlKiBpbWFnZSA9
IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1h
Z2UpCiAgICAgICAgIHJldHVybiBRQnJ1c2goKTsKIAogICAgIC8vIFF0IG1lcmdlcyBwYXR0ZXIg
c3BhY2UgYW5kIHVzZXIgc3BhY2UgaXRzZWxmCi0gICAgUUJydXNoIGJydXNoKCpwaXhtYXApOwor
ICAgIFFCcnVzaCBicnVzaCgqaW1hZ2UpOwogICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3BhdHRl
cm5TcGFjZVRyYW5zZm9ybWF0aW9uKTsKIAogICAgIHJldHVybiBicnVzaDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCm9sZCBt
b2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggODA2NjZiYS4uMDQxMjUyMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKQEAg
LTM2LDQxICszNiw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0aWxsSW1hZ2U6OlN0
aWxsSW1hZ2UoY29uc3QgUVBpeG1hcCYgcGl4bWFwKQotICAgIDogbV9waXhtYXAobmV3IFFQaXht
YXAocGl4bWFwKSkKLSAgICAsIG1fb3duc1BpeG1hcCh0cnVlKQorU3RpbGxJbWFnZTo6U3RpbGxJ
bWFnZShjb25zdCBRSW1hZ2UmIGltYWdlKQorICAgIDogbV9pbWFnZShuZXcgUUltYWdlKGltYWdl
KSkKKyAgICAsIG1fb3duc0ltYWdlKHRydWUpCiB7fQogCi1TdGlsbEltYWdlOjpTdGlsbEltYWdl
KGNvbnN0IFFQaXhtYXAqIHBpeG1hcCkKLSAgICA6IG1fcGl4bWFwKHBpeG1hcCkKLSAgICAsIG1f
b3duc1BpeG1hcChmYWxzZSkKK1N0aWxsSW1hZ2U6OlN0aWxsSW1hZ2UoY29uc3QgUUltYWdlKiBp
bWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX293bnNJbWFnZShmYWxzZSkKIHt9
CiAKIFN0aWxsSW1hZ2U6On5TdGlsbEltYWdlKCkKIHsKLSAgICBpZiAobV9vd25zUGl4bWFwKQot
ICAgICAgICBkZWxldGUgbV9waXhtYXA7CisgICAgaWYgKG1fb3duc0ltYWdlKQorICAgICAgICBk
ZWxldGUgbV9pbWFnZTsKIH0KIAogYm9vbCBTdGlsbEltYWdlOjpjdXJyZW50RnJhbWVIYXNBbHBo
YSgpCiB7Ci0gICAgcmV0dXJuIG1fcGl4bWFwLT5oYXNBbHBoYSgpOworICAgIHJldHVybiBtX2lt
YWdlLT5oYXNBbHBoYUNoYW5uZWwoKTsKIH0KIAogSW50U2l6ZSBTdGlsbEltYWdlOjpzaXplKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC0+d2lkdGgoKSwgbV9waXhtYXAt
PmhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50U2l6ZShtX2ltYWdlLT53aWR0aCgpLCBtX2ltYWdl
LT5oZWlnaHQoKSk7CiB9CiAKIE5hdGl2ZUltYWdlUHRyIFN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkKIHsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxOYXRpdmVJbWFnZVB0
cj4obV9waXhtYXApOworICAgIHJldHVybiBjb25zdF9jYXN0PE5hdGl2ZUltYWdlUHRyPihtX2lt
YWdlKTsKIH0KIAogdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRS
ZWN0JiBzcmMsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIGlmICht
X3BpeG1hcC0+aXNOdWxsKCkpCisgICAgaWYgKG1faW1hZ2UtPmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFNyYyA9IHNyYy5ub3JtYWxpemVkKCk7
CkBAIC04NCwxMiArODQsMTIgQEAgdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVk
RHN0KTsKICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKICAgICAgICAgICAgIFFQYWludGVy
KiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICptX3BpeG1h
cCwgbm9ybWFsaXplZFNyYyk7CisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3SW1hZ2Uo
bm9ybWFsaXplZERzdCwgKm1faW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hh
ZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGN0eHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICptX3BpeG1hcCwg
bm9ybWFsaXplZFNyYyk7CisgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdJbWFnZShu
b3JtYWxpemVkRHN0LCAqbV9pbWFnZSwgbm9ybWFsaXplZFNyYyk7CiAgICAgY3R4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCm9sZCBtb2RlIDEwMDY0
NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzY4MjY2YS4uMmU2ZjQ3MAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaApAQCAtMzQsMTQgKzM0LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFN0aWxsSW1hZ2UgOiBwdWJsaWMg
SW1hZ2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RpbGxJbWFn
ZT4gY3JlYXRlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RpbGxJbWFnZT4gY3JlYXRlKGNvbnN0IFFJbWFnZSYgaW1hZ2UpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RpbGxJbWFnZShwaXhtYXApKTsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RpbGxJbWFnZShpbWFnZSkpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gY3JlYXRlRm9yUmVuZGVy
aW5nKGNvbnN0IFFQaXhtYXAqIHBpeG1hcCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Rp
bGxJbWFnZT4gY3JlYXRlRm9yUmVuZGVyaW5nKGNvbnN0IFFJbWFnZSogaW1hZ2UpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RpbGxJbWFnZShwaXhtYXApKTsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RpbGxJbWFnZShpbWFnZSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CkBA
IC01NiwxMiArNTYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0aWxsSW1hZ2UoY29uc3QgUVBp
eG1hcCYgcGl4bWFwKTsKLSAgICAgICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFwKiBwaXhtYXAp
OworICAgICAgICBTdGlsbEltYWdlKGNvbnN0IFFJbWFnZSYgaW1hZ2UpOworICAgICAgICBTdGls
bEltYWdlKGNvbnN0IFFJbWFnZSogaW1hZ2UpOwogICAgICAgICB+U3RpbGxJbWFnZSgpOwotICAg
ICAgICAKLSAgICAgICAgY29uc3QgUVBpeG1hcCogbV9waXhtYXA7Ci0gICAgICAgIGJvb2wgbV9v
d25zUGl4bWFwOworCisgICAgICAgIGNvbnN0IFFJbWFnZSogbV9pbWFnZTsKKyAgICAgICAgYm9v
bCBtX293bnNJbWFnZTsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaApvbGQgbW9kZSAxMDA2NDQK
bmV3IG1vZGUgMTAwNzU1CmluZGV4IGYxM2RlYjAuLjU0YjEyZTcKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5oCkBAIC0zOCwy
MiArMzgsMjIgQEAKIAogI2luY2x1ZGUgPFFQYWludEVuZ2luZT4KICNpbmNsdWRlIDxRUGFpbnRl
cj4KLSNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFJbWFnZT4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdHJ1Y3QgVHJhbnNwYXJlbmN5TGF5ZXIgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVyKGNvbnN0IFFQYWludGVy
KiBwLCBjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUVBpeG1hcCYgYWxwaGFNYXNr
KQotICAgICAgICA6IHBpeG1hcChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpCisgICAgVHJh
bnNwYXJlbmN5TGF5ZXIoY29uc3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVh
bCBvcGFjaXR5LCBRSW1hZ2UmIGFscGhhTWFzaykKKyAgICAgICAgOiBpbWFnZShyZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKQog
ICAgICAgICAsIG9wYWNpdHkob3BhY2l0eSkKICAgICAgICAgLCBhbHBoYU1hc2soYWxwaGFNYXNr
KQogICAgICAgICAsIHNhdmVDb3VudGVyKDEpIC8vIHNlZSB0aGUgY29tbWVudCBmb3Igc2F2ZUNv
dW50ZXIKICAgICB7CiAgICAgICAgIG9mZnNldCA9IHJlY3QudG9wTGVmdCgpOwotICAgICAgICBw
aXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBwYWludGVyLmJlZ2luKCZwaXht
YXApOworICAgICAgICBpbWFnZS5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIHBhaW50
ZXIuYmVnaW4oJmltYWdlKTsKICAgICAgICAgcGFpbnRlci5zZXRSZW5kZXJIaW50cyhwLT5yZW5k
ZXJIaW50cygpKTsKICAgICAgICAgcGFpbnRlci50cmFuc2xhdGUoLW9mZnNldCk7CiAgICAgICAg
IHBhaW50ZXIuc2V0UGVuKHAtPnBlbigpKTsKQEAgLTY3LDEyICs2NywxMiBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIFFQaXhtYXAgcGl4bWFwOworICAgIFFJbWFnZSBpbWFnZTsKICAg
ICBRUG9pbnQgb2Zmc2V0OwogICAgIFFQYWludGVyIHBhaW50ZXI7CiAgICAgcXJlYWwgb3BhY2l0
eTsKICAgICAvLyBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIKLSAgICBRUGl4bWFwIGFscGhhTWFzazsK
KyAgICBRSW1hZ2UgYWxwaGFNYXNrOwogICAgIC8vIHNhdmVDb3VudGVyIGlzIG9ubHkgdXNlZCBp
biBjb21iaW5hdGlvbiB3aXRoIGFscGhhTWFzawogICAgIC8vIG90aGVyd2lzZSwgaXRzIHZhbHVl
IGlzIHVuc3BlY2lmaWVkCiAgICAgaW50IHNhdmVDb3VudGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGIxNjRhMWYuLjIyYzZlYjkK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKQEAgLTU0MSwxMCArNTQxLDEwIEBAIHZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvCiAgICAgUUltYWdlIHF0SW1hZ2U7CiAjaWYgSEFWRShRVDUpCiAgICAgLy8gV2l0aCBR
UEEsIHdlIGNhbiBhdm9pZCBhIGRlZXAgY29weS4KLSAgICBxdEltYWdlID0gKmZyYW1lSW1hZ2Ut
PmhhbmRsZSgpLT5idWZmZXIoKTsKKyAgICBxdEltYWdlID0gKmZyYW1lSW1hZ2U7CiAjZWxzZQot
ICAgIC8vIFRoaXMgbWlnaHQgYmUgYSBkZWVwIGNvcHksIGRlcGVuZGluZyBvbiBvdGhlciByZWZl
cmVuY2VzIHRvIHRoZSBwaXhtYXAuCi0gICAgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2Uo
KTsKKyAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgZGVlcCBjb3B5LCBkZXBlbmRpbmcgb24gb3RoZXIg
cmVmZXJlbmNlcyB0byB0aGUgaW1hZ2UuCisgICAgcXRJbWFnZSA9IFFJbWFnZSgqZnJhbWVJbWFn
ZSk7CiAjZW5kaWYKICAgICBpbWFnZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihxdEltYWdlLmNvbnN0Qml0cygpKTsKICAgICBieXRlc1BlckxpbmUgPSBxdEltYWdlLmJ5dGVz
UGVyTGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJv
YXJkUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNmQyYWI3Mi4uYTM2NzYwOQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCkBAIC0yNDMsNyArMjQzLDcgQEAg
RHJhZ0ltYWdlUmVmIENsaXBib2FyZFF0OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdM
b2MpIGNvbnN0CiAgICAgaWYgKCFtX2RyYWdJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ZHJhZ0xvYyA9IG1fZHJhZ0xvYzsKLSAgICByZXR1cm4gbV9kcmFnSW1hZ2UtPmltYWdlKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIG5ldyBRSW1hZ2UoKm1fZHJh
Z0ltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKIH0KIAogCkBA
IC0yNzMsOSArMjczLDkgQEAgdm9pZCBDbGlwYm9hcmRRdDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY28KICAgICBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKICAgICBpZiAoIWNhY2hl
ZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJl
cigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBR
UGl4bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5y
ZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAocGl4bWFw
KQotICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SW1hZ2VEYXRhKCpwaXhtYXApOworICAgIFFJ
bWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5k
ZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoaW1hZ2UpCisg
ICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRJbWFnZURhdGEoKmltYWdlKTsKIAogICAgIFFMaXN0
PFFVcmw+IHVybHM7CiAgICAgdXJscy5hcHBlbmQodXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0N1cnNvclF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGU3
ODU0ZGQuLjE2OGEyZjUKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ3Vyc29yUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcApAQCAtMzcs
NiArMzcsOCBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2luY2x1ZGUgPFFJ
bWFnZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3RkbGliLmg+CiAKQEAgLTc1LDEwICs3NywxMSBAQCBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9
KGNvbnN0IEN1cnNvciYgb3RoZXIpCiAjaWZuZGVmIFFUX05PX0NVUlNPUgogc3RhdGljIFFDdXJz
b3IqIGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RT
cG90KQogewotICAgIGlmICghaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCisg
ICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIEludFBv
aW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KTsK
LSAgICByZXR1cm4gbmV3IFFDdXJzb3IoKihpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSk7CisgICAg
cmV0dXJuIG5ldyBRQ3Vyc29yKFFQaXhtYXA6OmZyb21JbWFnZSgqbmF0aXZlSW1hZ2UpLCBlZmZl
Y3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCkpOwogfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcApvbGQgbW9kZSAxMDA2NDQK
bmV3IG1vZGUgMTAwNzU1CmluZGV4IDBlN2NlMDQuLmE2NjI1OGMKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0RyYWdJbWFnZVF0LmNwcApAQCAtNjYsNyArNjYsNyBAQCBEcmFnSW1hZ2VSZWYgY3Jl
YXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgUmVzcGVjdEltYWdlT3JpZW50YXRp
b25FbnVtKQogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBuZXcgUVBpeG1hcCgqaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBuZXcgUUltYWdl
KCppbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CiB9CiAKIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5l
dyBtb2RlIDEwMDc1NQppbmRleCBkNmY0ZTFkLi5jNmUzZDAxCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUGFzdGVib2FyZFF0LmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQog
ICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKG5vZGUtPnJl
bmRlcmVyKCkpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKKyAg
ICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIFFHdWlBcHBsaWNhdGlv
bjo6Y2xpcGJvYXJkKCktPnNldFBpeG1hcCgqcGl4bWFwLCBRQ2xpcGJvYXJkOjpDbGlwYm9hcmQp
OworICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldEltYWdlKCpuYXRpdmVJbWFn
ZSwgUUNsaXBib2FyZDo6Q2xpcGJvYXJkKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDQzOWU4ZWQu
LjMzZDU3MmQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0xNzY0LDkgKzE3NjQsOSBAQCBR
V2ViSGl0VGVzdFJlc3VsdFByaXZhdGU6OlFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZShjb25zdCBX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0CiAgICAgYm91bmRpbmdSZWN0ID0gaW5uZXJOb25TaGFyZWRO
b2RlID8gaW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpIDogSW50UmVjdCgpOwogICAgIFdlYkNvcmU6OkltYWdlICppbWcgPSBoaXRUZXN0Lmlt
YWdlKCk7CiAgICAgaWYgKGltZykgewotICAgICAgICBRUGl4bWFwICpwaXggPSBpbWctPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFJbWFnZSAqcGl4ID0gaW1nLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICBpZiAocGl4KQotICAgICAgICAgICAg
cGl4bWFwID0gKnBpeDsKKyAgICAgICAgICAgIGltYWdlID0gKnBpeDsKICAgICB9CiAgICAgV2Vi
Q29yZTo6RnJhbWUgKndmcmFtZSA9IGhpdFRlc3QudGFyZ2V0RnJhbWUoKTsKICAgICBpZiAod2Zy
YW1lKQpAQCAtMTk2NSw3ICsxOTY1LDcgQEAgUVBpeG1hcCBRV2ViSGl0VGVzdFJlc3VsdDo6cGl4
bWFwKCkgY29uc3QKIHsKICAgICBpZiAoIWQpCiAgICAgICAgIHJldHVybiBRUGl4bWFwKCk7Ci0g
ICAgcmV0dXJuIGQtPnBpeG1hcDsKKyAgICByZXR1cm4gUVBpeG1hcDo6ZnJvbUltYWdlKGQtPmlt
YWdlKTsKIH0KIAogLyohCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWVfcC5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApvbGQgbW9kZSAxMDA2
NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGYwZGUzYmEuLmY0MTlkMDEKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWVfcC5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIFFXZWJFbGVtZW50IGxp
bmtFbGVtZW50OwogICAgIFFTdHJpbmcgYWx0ZXJuYXRlVGV4dDsKICAgICBRVXJsIGltYWdlVXJs
OwotICAgIFFQaXhtYXAgcGl4bWFwOworICAgIFFJbWFnZSBpbWFnZTsKICAgICBib29sIGlzQ29u
dGVudEVkaXRhYmxlOwogICAgIGJvb2wgaXNDb250ZW50U2VsZWN0ZWQ7CiAgICAgYm9vbCBpc1Nj
cm9sbEJhcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApvbGQgbW9kZSAxMDA2NDQK
bmV3IG1vZGUgMTAwNzU1CmluZGV4IGZjNWJkZDUuLjAwM2VhMWQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJo
aXN0b3J5LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIFFEYXRlVGltZSBRV2ViSGlzdG9yeUl0ZW06
Omxhc3RWaXNpdGVkKCkgY29uc3QKIFFJY29uIFFXZWJIaXN0b3J5SXRlbTo6aWNvbigpIGNvbnN0
CiB7CiAgICAgaWYgKGQtPml0ZW0pCi0gICAgICAgIHJldHVybiAqV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChkLT5pdGVtLT51cmwoKSwgV2ViQ29yZTo6
SW50U2l6ZSgxNiwgMTYpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAg
cmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgqKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNo
cm9ub3VzSWNvbkZvclBhZ2VVUkwoZC0+aXRlbS0+dXJsKCksIFdlYkNvcmU6OkludFNpemUoMTYs
IDE2KSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpKTsKIAogICAgIHJldHVybiBRSWNv
bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKb2xkIG1vZGUgMTAwNjQ0
Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1NDI1YTkyLi5mNWUwZWJjCi0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNldHRpbmdzLmNwcApAQCAtNzE4LDEzICs3MTgsMTMgQEAgUUljb24gUVdlYlNldHRpbmdzOjpp
Y29uRm9yVXJsKGNvbnN0IFFVcmwmIHVybCkKICAgICBXZWJDb3JlOjpJbWFnZSogaW1hZ2UgPSBX
ZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJMKFdlYkNvcmU6
OktVUkwodXJsKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKICAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4g
UVBpeG1hcCgpOworICAgICAgICByZXR1cm4gUUljb24oKTsKIAotICAgIFFQaXhtYXAqIGljb24g
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBRSW1hZ2UqIGljb24g
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWljb24pCi0g
ICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisgICAgICAgIHJldHVybiBRSWNvbigpOwogCi0gICAg
cmV0dXJuKiBpY29uOworICAgIHJldHVybiBRUGl4bWFwOjpmcm9tSW1hZ2UoKmljb24pOwogfQog
CiAvKgpAQCAtNzY3LDcgKzc2Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiByZXNvdXJjZU5hbWVG
b3JXZWJHcmFwaGljKFFXZWJTZXR0aW5nczo6V2ViR3JhcGhpYyB0eXBlKQogdm9pZCBRV2ViU2V0
dGluZ3M6OnNldFdlYkdyYXBoaWMoV2ViR3JhcGhpYyB0eXBlLCBjb25zdCBRUGl4bWFwJiBncmFw
aGljKQogewogICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsKLSAgICBXZWJDb3Jl
OjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKHR5
cGUpLCBncmFwaGljKTsKKyAgICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZShy
ZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKHR5cGUpLCBncmFwaGljLnRvSW1hZ2UoKSk7CiB9CiAK
IC8qIQpAQCAtNzgyLDEwICs3ODIsMTAgQEAgUVBpeG1hcCBRV2ViU2V0dGluZ3M6OndlYkdyYXBo
aWMoV2ViR3JhcGhpYyB0eXBlKQogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1nID0gV2Vi
Q29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKHJlc291cmNlTmFtZUZvcldlYkdyYXBo
aWModHlwZSkpOwogICAgIGlmICghaW1nKQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAg
IFFQaXhtYXAqIHBpeG1hcCA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAg
ICBpZiAoIXBpeG1hcCkKKyAgICBRSW1hZ2UqIGltYWdlID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBRUGl4bWFwKCk7
Ci0gICAgcmV0dXJuICpwaXhtYXA7CisgICAgcmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgqaW1h
Z2UpOwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMmY4YWM2Zi4uM2M5MDg5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMi0wNi0xMyAgWm9sdGFuIEhvcnZhdGggIDx6
b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0ciBm
cm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU2luY2Ugd2UgdXNlIHJhc3RlciBlbmdpbmUgdGhlcmUgaXMgbm8gZGlm
ZmVyZW5jZSBiZXR3ZWVuIFFQaXhtYXAgYW5kIFFJbWFnZSwgc28gd2UgYXJlIGdvaW5nCisgICAg
ICAgIHRvIFFJbWFnZSBldmVyeXdoZXJlIHdoZXJlIGl0IGlzIHBvc3NpYmxlLiBUaGlzIHJlZmFj
dG9yaW5nIGNvbnRhaW5zIHRoZSBjaGFuZ2Ugb2YgdGhlCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
IHR5cGVkZWYgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2UqIGFuZCBjb3ZlcnMgdGhlIHJlbGF0ZWQg
bW9kaWZpY2F0aW9ucy4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAo
UVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOjpRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGUpOgorICAg
ICAgICAoUVdlYkhpdFRlc3RSZXN1bHQ6OnBpeG1hcCk6CisgICAgICAgICogQXBpL3F3ZWJmcmFt
ZV9wLmg6CisgICAgICAgIChRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGUpOgorICAgICAgICAqIEFw
aS9xd2ViaGlzdG9yeS5jcHA6CisgICAgICAgIChRV2ViSGlzdG9yeUl0ZW06Omljb24pOgorICAg
ICAgICAqIEFwaS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzOjppY29u
Rm9yVXJsKToKKyAgICAgICAgKFFXZWJTZXR0aW5nczo6c2V0V2ViR3JhcGhpYyk6CisgICAgICAg
IChRV2ViU2V0dGluZ3M6OndlYkdyYXBoaWMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50UXQ6OnN0YXJ0RHJh
Zyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplV2ViQ29yZVF0KToKKwogMjAxMi0wNi0xMSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV2luXSBBZGQgbWlz
c2luZyBpbmNsdWRlcyB0byBmaXggdGhlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEw
MDc1NQppbmRleCBjYjYzMjgzLi44YjY0OGMxCi0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKQEAgLTk3LDkgKzk3LDkgQEAgdm9pZCBEcmFnQ2xpZW50
UXQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFAKICAgICBpZiAodmlldykgewogICAgICAgICBRRHJhZyogZHJhZyA9IG5ldyBRRHJh
Zyh2aWV3KTsKICAgICAgICAgaWYgKGRyYWdJbWFnZSkKLSAgICAgICAgICAgIGRyYWctPnNldFBp
eG1hcCgqZHJhZ0ltYWdlKTsKKyAgICAgICAgICAgIGRyYWctPnNldFBpeG1hcChRUGl4bWFwOjpm
cm9tSW1hZ2UoKmRyYWdJbWFnZSkpOwogICAgICAgICBlbHNlIGlmIChjbGlwYm9hcmREYXRhICYm
IGNsaXBib2FyZERhdGEtPmhhc0ltYWdlKCkpCi0gICAgICAgICAgICBkcmFnLT5zZXRQaXhtYXAo
cXZhcmlhbnRfY2FzdDxRUGl4bWFwPihjbGlwYm9hcmREYXRhLT5pbWFnZURhdGEoKSkpOworICAg
ICAgICAgICAgZHJhZy0+c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShxdmFyaWFudF9jYXN0
PFFJbWFnZT4oY2xpcGJvYXJkRGF0YS0+aW1hZ2VEYXRhKCkpKSk7CiAgICAgICAgIERyYWdPcGVy
YXRpb24gZHJhZ09wZXJhdGlvbk1hc2sgPSBjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpOwog
ICAgICAgICBkcmFnLT5zZXRNaW1lRGF0YShjbGlwYm9hcmREYXRhKTsKICAgICAgICAgUXQ6OkRy
b3BBY3Rpb24gYWN0dWFsRHJvcEFjdGlvbiA9IGRyYWctPmV4ZWMoZHJhZ09wZXJhdGlvbnNUb0Ry
b3BBY3Rpb25zKGRyYWdPcGVyYXRpb25NYXNrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUg
MTAwNzU1CmluZGV4IDQ1MjA5MWMuLjczOTZiZjMKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCkBAIC04MSw5ICs4MSw5IEBAIHZvaWQgaW5pdGlh
bGl6ZVdlYkNvcmVRdCgpCiAjZW5kaWYKIAogICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNoQ2Fu
Y2VsQnV0dG9uR3JhcGhpYwotICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hD
YW5jZWxCdXR0b24iLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFwKFFTdHls
ZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24pKTsKKyAgICBJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsQnV0dG9uIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBp
eG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKS50b0ltYWdlKCkpOwogICAgIC8vIFFX
ZWJTZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZEdyYXBoaWMKLSAgICBJbWFnZTo6
c2V0UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZCIsIFFBcHBsaWNh
dGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1dHRv
bikpOworICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25Q
cmVzc2VkIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQ
X0RpYWxvZ0Nsb3NlQnV0dG9uKS50b0ltYWdlKCkpOwogCiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDRiNTEyOWMuLmFkNDNiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAxMi0wNi0xMyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0ciBmcm9tIFFQaXhtYXAqIHRvIFFJ
bWFnZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4
Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2lu
Y2Ugd2UgdXNlIHJhc3RlciBlbmdpbmUgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIFFQ
aXhtYXAgYW5kIFFJbWFnZSwgc28gd2UgYXJlIGdvaW5nCisgICAgICAgIHRvIFFJbWFnZSBldmVy
eXdoZXJlIHdoZXJlIGl0IGlzIHBvc3NpYmxlLiBUaGlzIHJlZmFjdG9yaW5nIGNvbnRhaW5zIHRo
ZSBjaGFuZ2Ugb2YgdGhlCisgICAgICAgIE5hdGl2ZUltYWdlUHRyIHR5cGVkZWYgZnJvbSBRUGl4
bWFwKiB0byBRSW1hZ2UqIGFuZCBjb3ZlcnMgdGhlIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucy4KKwor
ICAgICAgICAqIFNoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50OjppY29uSW1hZ2VGb3JQYWdlVVJMKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmNvbnZlcnRRSW1hZ2VUb1NoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L0xheWVyVHJlZUhvc3RRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6
YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSk6CisKIDIwMTItMDYtMTEgIFJ5dWFuIENob2kgIDxyeXVh
bi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtDTUFLRV1bV0syXSBNYWtlIFdlYlByb2Nl
c3MgdGFyZ2V0IG5hbWUgbW9yZSBjbGVhci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
U2hhcmVhYmxlQml0bWFwUXQuY3BwCmluZGV4IGE3YWI4ZDQuLmI2Y2ViM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcApAQCAtNTIsOCArNTIs
OCBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cmVsZWFzZVNoYXJlZE1lbW9yeURhdGEodm9pZCog
dHlwZWxlc3NCaXRtYXApCiAKIFBhc3NSZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlSW1hZ2UoKQogewotICAgIFFQaXhtYXAqIHBpeG1hcCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6
OmZyb21JbWFnZShjcmVhdGVRSW1hZ2UoKSkpOwotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKHBpeG1hcCk7CisgICAgUUltYWdlKiBpbWFnZSA9IG5ldyBRSW1hZ2UoY3JlYXRlUUltYWdl
KCkpOworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlKTsKIH0KIAogUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25E
YXRhYmFzZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29u
RGF0YWJhc2VDbGllbnQuY3BwCmluZGV4IDUxMzJjNzkuLjEwNjcyYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNw
cApAQCAtOTMsMTEgKzkzLDExIEBAIFFJbWFnZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6aWNv
bkltYWdlRm9yUGFnZVVSTChjb25zdCBXVEY6OlN0cmluZyYgcGFnZVVSTCwKICAgICBpZiAoIWlt
YWdlKQogICAgICAgICByZXR1cm4gUUltYWdlKCk7CiAKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFn
ZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFJbWFnZSogbmF0
aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAo
IW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm4gUUltYWdlKCk7CiAKLSAgICByZXR1cm4gbmF0
aXZlSW1hZ2UtPnRvSW1hZ2UoKTsKKyAgICByZXR1cm4gKm5hdGl2ZUltYWdlOwogfQogCiB2b2lk
IFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmIHBhZ2VVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAKaW5kZXggYmJkYjYzNS4u
ZDllNmQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcApAQCAtMzgsMTUgKzM4LDE1
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0UVBpeG1hcFRvU2hhcmVhYmxl
Qml0bWFwKFFQaXhtYXAqIHBpeG1hcCkKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gY29udmVydFFJbWFnZVRvU2hhcmVhYmxlQml0bWFwKFFJbWFnZSogaW1hZ2UpCiB7Ci0gICAg
aWYgKCFwaXhtYXApCisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShJbnRTaXplKHBpeG1hcC0+c2l6ZSgpKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGltYWdlLT5zaXplKCkpLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAKLSAgICBncmFw
aGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGl4bWFwKDAsIDAsICpwaXhtYXAp
OworICAgIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdJbWFnZSgwLCAw
LCAqaW1hZ2UpOwogICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOwogfQogCkBAIC01Nyw3ICs1
Nyw3IEBAIHZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1h
Z2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpCiAgICAgc3RhdGljX2Nhc3Q8Q2xpcGJvYXJk
UXQqPihjbGlwYm9hcmQpLT5pbnZhbGlkYXRlV3JpdGFibGVEYXRhKCk7CiAgICAgRHJhZ0RhdGEg
ZHJhZ0RhdGEoY2xpcGJvYXJkRGF0YSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBk
cmFnT3BlcmF0aW9uTWFzayk7CiAKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAg
PSBjb252ZXJ0UVBpeG1hcFRvU2hhcmVhYmxlQml0bWFwKGRyYWdJbWFnZSk7CisgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydFFJbWFnZVRvU2hhcmVhYmxlQml0bWFw
KGRyYWdJbWFnZSk7CiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwogICAgIGlm
IChiaXRtYXAgJiYgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xh
eWVyVHJlZUhvc3RRdC5jcHAKaW5kZXggYzI5NjQ4MS4uZTNmMTE5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5j
cHAKQEAgLTM5NiwxMiArMzk2LDEyIEBAIGludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKIHsKICAgICBpZiAoIWltYWdlKQogICAgICAg
ICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCi0gICAgaWYgKCFwaXhtYXAp
CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklE
OwogCi0gICAgaW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7CisgICAgaW50NjRfdCBr
ZXkgPSBuYXRpdmVJbWFnZS0+Y2FjaGVLZXkoKTsKICAgICBIYXNoTWFwPGludDY0X3QsIGludD46
Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtl
eSk7CiAKICAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5l
bmQoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>147325</attachid>
            <date>2012-06-13 08:36:07 -0700</date>
            <delta_ts>2012-07-13 05:15:57 -0700</delta_ts>
            <desc>Commit form internal branch for qpixmap2qimage. </desc>
            <filename>qpixmap2qimage_007.diff</filename>
            <type>application/octet-stream</type>
            <size>40949</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IDkwNDk5NGM5MzdmNjIwZDgxNDYxM2NkZjc5NDdiMTg2NGQwZjkzNmYKQXV0aG9yOiB0
eXV0eXVuaSA8bWljaGFlbC50eXV0eXVuaWtAbm9raWEuY29tPgpEYXRlOiAgIFRodSBNYXkgMzEg
MTY6MzA6MjYgMjAxMiAtMDQwMAoKICAgIFFQaXhtYXAgdG8gUUltYWdlCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpp
bmRleCAwNTE2OWE3Li4zZmYxMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjMzLDcgKzIzMyw3IEBA
IGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfSU1BR0VfREVDT0RFUj0wKSB7CiAgICAgaGF2
ZVF0KDUpIHsKICAgICAgICAgIyBRdDUgYWxsb3dzIHVzIHRvIHVzZSBjb25maWcgdGVzdHMgdG8g
Y2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBsaWJyYXJpZXMKICAgICAgICAgIWNvbnRh
aW5zKGNvbmZpZ190ZXN0X2xpYmpwZWcsIHllcyk6IGVycm9yKCJKUEVHIGxpYnJhcnkgbm90IGZv
dW5kISIpCi0gICAgICAgICFjb250YWlucyhjb25maWdfdGVzdF9saWJwbmcsIHllcyk6IGVycm9y
KCJQTkcgbGlicmFyeSBub3QgZm91bmQhIikKKyAgICAgICAgIyFjb250YWlucyhjb25maWdfdGVz
dF9saWJwbmcsIHllcyk6IGVycm9yKCJQTkcgbGlicmFyeSBub3QgZm91bmQhIikKICAgICB9CiAK
ICAgICBMSUJTICs9IC1sanBlZyAtbHBuZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuY3BwCmluZGV4IGVkOWNlYTcuLmM0YmFhNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKQEAgLTE0Nyw3ICsxNDcsMTEg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAg
Ly8gd2Ugbm93IGtub3cgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgPGltZz4gZWxlbWVudCBhcyB0aGUg
YXJndW1lbnQsIHdlIGNhbiBhdHRhY2ggdGhlIHBpeG1hcCB0byBpdC4KKyNpZiBVU0UoUVRfUUlN
QUdFKQorICAgICAgICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxsSW1hZ2UgPSBXZWJDb3Jl
OjpTdGlsbEltYWdlOjpjcmVhdGUoaW5zdGFuY2UtPnRvSW1hZ2UoKSk7CisjZWxzZQogICAgICAg
ICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxsSW1hZ2UgPSBXZWJDb3JlOjpTdGlsbEltYWdl
OjpjcmVhdGUoaW5zdGFuY2UtPnRvUGl4bWFwKCkpOworI2VuZGlmCiAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihz
dGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQqPihvYmplY3RBcmcpLT5pbXBsKCkpOwogICAg
ICAgICBpbWFnZUVsZW1lbnQtPnNldENhY2hlZEltYWdlKG5ldyBDYWNoZWRJbWFnZShzdGlsbElt
YWdlLmdldCgpKSk7CiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSBzdGF0aWNf
Y2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGluc3RhbmNlLT5yb290T2JqZWN0KCktPmdsb2JhbE9i
amVjdCgpKTsKQEAgLTM4MSwxMyArMzg1LDE5IEBAIFFWYXJpYW50IFF0UGl4bWFwSW5zdGFuY2U6
OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QsIFFNZXRhVHlwZTo6VHlwZSBoCiAg
ICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJldHVybkVtcHR5VmFyaWFudDsK
IAotICAgICAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlmICghcGl4bWFwKQogICAgICAgICAgICAg
Z290byByZXR1cm5FbXB0eVZhcmlhbnQ7CiAKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgICAgICBy
ZXR1cm4gKGhpbnQgPT0gc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihxTWV0YVR5cGVJZDxR
UGl4bWFwPigpKSkKKyAgICAgICAgICAgICAgICAgID8gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4
bWFwPihRUGl4bWFwOjpmcm9tSW1hZ2UoKnBpeG1hcCkpCisgICAgICAgICAgICAgICAgICA6IFFW
YXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPigqcGl4bWFwKTsKKyNlbHNlCiAgICAgICAgIHJldHVy
biAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXht
YXA+KCkpKQogICAgICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+
KCpwaXhtYXApCiAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdl
PihwaXhtYXAtPnRvSW1hZ2UoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICBpZiAob2JqZWN0LT5p
bmhlcml0cygmUXRQaXhtYXBSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdJbWFnZS5oCmluZGV4IGRkOTcwZDIuLjVhODY3NTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdJbWFnZS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogT0JKQ19DTEFTUyBOU0ltYWdlOwogI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAi
SW1hZ2VTb3VyY2UuaCIKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUVBpeG1hcDsKIFFUX0VO
RF9OQU1FU1BBQ0UKQEAgLTYyLDcgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB0eXBlZGVmIFJldGFpblB0cjxOU0ltYWdlPiBEcmFnSW1hZ2VSZWY7
CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB0eXBlZGVmIFFQaXhtYXAqIERyYWdJbWFnZVJlZjsK
KyAgICB0eXBlZGVmIE5hdGl2ZUltYWdlKiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShX
SU4pCiAgICAgdHlwZWRlZiBIQklUTUFQIERyYWdJbWFnZVJlZjsKICNlbGlmIFBMQVRGT1JNKFdY
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CmluZGV4IDQ0ODI0MWIuLmFmNTk0MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02Niw2ICs2Niw3IEBAIEJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKIHsKIH0KIAorCiBCaXRtYXBJ
bWFnZTo6fkJpdG1hcEltYWdlKCkKIHsKICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAppbmRleCBh
ZmI5ODE2Li41NTA1ZWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG5hdGl2ZUltYWdlLCBvYnNlcnZlcikp
OwogICAgIH0KKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUoSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIgPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBCaXRtYXBJbWFnZShvYnNlcnZlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxYzgxODkxLi4yZmMyZmViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaApAQCAtNTAwLDcgKzUwMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oUVQpCi0gICAgICAgIHZvaWQgcHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJu
YWwoY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzayk7
CisgICAgICAgIHZvaWQgcHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3Qg
JnJlY3QsIHFyZWFsIG9wYWNpdHksIE5hdGl2ZUltYWdlJiBhbHBoYU1hc2spOwogICAgICAgICB2
b2lkIHRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmluZGV4IGI3OGZjN2QuLjNkNWVmYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtNTQsNiArNTQsMTIg
QEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogCiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRSW1hZ2U+CisjaWYgVVNFKFFUX1FJTUFH
RSkKKyNkZWZpbmUgREVGQVVMVF9PUEFRVUVfSU1BR0VfRk9STUFUICAgICAgICAgUUltYWdlOjpG
b3JtYXRfUkdCODg4CisjZGVmaW5lIERFRkFVTFRfVFJBTlNQQVJFTlRfSU1BR0VfRk9STUFUICAg
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkCisjZGVmaW5lIERFRkFVTFRfSU1B
R0VfRk9STUFUICAgICAgICAgICAgICAgIERFRkFVTFRfVFJBTlNQQVJFTlRfSU1BR0VfRk9STUFU
CisjZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtMTU3LDcgKzE2Myw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgc3RhdGljIHZvaWQgc2V0
UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBRUGl4bWFwJik7CisgICAg
c3RhdGljIHZvaWQgc2V0UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBX
ZWJDb3JlOjpOYXRpdmVJbWFnZSYpOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCkBAIC0xODksNiArMTk1LDkgQEAgcHJp
dmF0ZToKICAgICBJbWFnZU9ic2VydmVyKiBtX2ltYWdlT2JzZXJ2ZXI7CiB9OwogCi19CisjaWYg
UExBVEZPUk0oUVQpCitOYXRpdmVJbWFnZSBsb2FkSW1hZ2UoY29uc3QgY2hhciogZm5hbWUpOwor
I2VuZGlmCiAKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKaW5kZXggNmQwMWM4Ni4uZTg4M2QwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00Myw2ICs0Myw3IEBAIHR5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CiAjZWxpZiBQTEFURk9STShR
VCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFJbWFn
ZTsKIGNsYXNzIFFQaXhtYXA7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBVU0UoQ0FJUk8pCkBA
IC03Myw3ICs3NCwxMyBAQCB0eXBlZGVmIFRpbGVkSW1hZ2VPcGVuVkcqIE5hdGl2ZUltYWdlUHRy
OwogI2VsaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBJbWFnZURlY29kZXJRdDsKIHR5cGVkZWYgSW1h
Z2VEZWNvZGVyUXQqIE5hdGl2ZUltYWdlU291cmNlUHRyOwotdHlwZWRlZiBRUGl4bWFwKiBOYXRp
dmVJbWFnZVB0cjsKKyNpZiBVU0UoUVRfUUlNQUdFKQordHlwZWRlZiBRSW1hZ2UgTmF0aXZlSW1h
Z2U7CisjZWxzZQordHlwZWRlZiBRUGl4bWFwIE5hdGl2ZUltYWdlOworI2VuZGlmCit0eXBlZGVm
IE5hdGl2ZUltYWdlKiBOYXRpdmVJbWFnZVB0cjsKK3R5cGVkZWYgY29uc3QgTmF0aXZlSW1hZ2Uq
IE5hdGl2ZUltYWdlQ29uc3RQdHI7CiAjZWxzZQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRl
ZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyUXQuY3BwCmluZGV4IDM2YjA4MDYuLjY3YzNmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFt
ZXJRdC5jcHAKQEAgLTUyLDggKzUyLDE0IEBAIEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQKIHsKICAg
ICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7CiAgICAgUUltYWdlIGltYWdlKEdTVF9C
VUZGRVJfREFUQShidWZmZXIpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGltYWdlRm9y
bWF0KTsKKworI2lmIFVTRShRVF9RSU1BR0UpCisgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpj
cmVhdGUobmV3IFFJbWFnZShpbWFnZSkpOworI2Vsc2UKKyAgICBRUGl4bWFwKiBzdXJmYWNlID0g
bmV3IFFQaXhtYXA7CiAgICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFnZShpbWFnZSk7CiAgICAg
bV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisjZW5kaWYKIH0KIAogSW1h
Z2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggYjhl
OTVmMi4uOWQ5YWNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtNTg0LDcgKzU4NCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAg
IHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgZHJhd1JlcGVhdFBhdHRlcm4oUVBhaW50ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IGJvb2wgcmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZKQor
c3RhdGljIGlubGluZSB2b2lkIGRyYXdSZXBlYXRQYXR0ZXJuKFFQYWludGVyKiBwLCBOYXRpdmVJ
bWFnZVB0ciBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBib29sIHJlcGVhdFgs
IGNvbnN0IGJvb2wgcmVwZWF0WSkKIHsKICAgICAvLyBQYXR0ZXJucyBtdXN0IGJlIHBhaW50ZWQg
c28gdGhhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGZpcnN0IGltYWdlIGlzIGFuY2hvcmVkIGF0CiAg
ICAgLy8gdGhlIG9yaWdpbiBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZQpAQCAtNjQyLDcgKzY0Miwx
MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlcGVhdFBhdHRlcm4oUVBhaW50ZXIqIHAsIFFQ
aXhtYXAqIGltYWdlLCBjb25zdCBGbG9hdFJlYwogICAgICAgICAgICAgICAgIFFQb2ludCAgZGVz
dFN0YXJ0KGludGVyc2VjdFJlY3QueCgpLCBpbnRlcnNlY3RSZWN0LnkoKSk7CiAgICAgICAgICAg
ICAgICAgUVJlY3QgICBzb3VyY2VSZWN0KGludGVyc2VjdFJlY3QueCgpIC0gaW1hZ2VSZWN0Lngo
KSwgaW50ZXJzZWN0UmVjdC55KCkgLSBpbWFnZVJlY3QueSgpLCBpbnRlcnNlY3RSZWN0LndpZHRo
KCksIGludGVyc2VjdFJlY3QuaGVpZ2h0KCkpOwogCisjaWYgVVNFKFFUX1FJTUFHRSkKKyAgICAg
ICAgICAgICAgICBwLT5kcmF3SW1hZ2UoZGVzdFN0YXJ0LCAqaW1hZ2UsIHNvdXJjZVJlY3QpOwor
I2Vsc2UKICAgICAgICAgICAgICAgICBwLT5kcmF3UGl4bWFwKGRlc3RTdGFydCwgKmltYWdlLCBz
b3VyY2VSZWN0KTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIHggKz0gdzsKICAgICAgICAgICAg
IH0gd2hpbGUgKHJlcGVhdFggJiYgeCA8IHIueCgpICsgci53aWR0aCgpKTsKICAgICAgICAgICAg
IHggPSBzdGFydFg7CkBAIC02NjEsNyArNjY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBz
aGFkb3dCbHVyKCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBR
UGl4bWFwKiBpbWFnZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IG1f
c3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBoYXNTaGFkb3co
KSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOwog
ICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgewogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRv
d1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTEwNDUsNyAr
MTA0OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKICAg
ICBtX2RhdGEtPnNoYWRvdy0+Y2xlYXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnB1
c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBvcGFj
aXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cHVzaFRyYW5z
cGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIE5h
dGl2ZUltYWdlJiBhbHBoYU1hc2spCiB7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsK
IApAQCAtMTA3Nyw3ICsxMDgxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZv
cm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogICAgICAgICBoID0gaW50KHFCb3Vu
ZChxcmVhbCgwKSwgZGV2aWNlQ2xpcC5oZWlnaHQoKSwgKHFyZWFsKWgpICsgMik7CiAgICAgfQog
Ci0gICAgUVBpeG1hcCBlbXB0eUFscGhhTWFzazsKKyAgICBOYXRpdmVJbWFnZSBlbXB0eUFscGhh
TWFzazsKICAgICBtX2RhdGEtPmxheWVycy5wdXNoKG5ldyBUcmFuc3BhcmVuY3lMYXllcihwLCBR
UmVjdCh4LCB5LCB3LCBoKSwgb3BhY2l0eSwgZW1wdHlBbHBoYU1hc2spKTsKICAgICArK21fZGF0
YS0+bGF5ZXJDb3VudDsKIH0KQEAgLTEwOTEsNyArMTA5NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiAgICAgaWYgKCFsYXllci0+YWxw
aGFNYXNrLmlzTnVsbCgpKSB7CiAgICAgICAgIGxheWVyLT5wYWludGVyLnJlc2V0VHJhbnNmb3Jt
KCk7CiAgICAgICAgIGxheWVyLT5wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworI2lmIFVTRShRVF9RSU1BR0UpCisgICAg
ICAgIGxheWVyLT5wYWludGVyLmRyYXdJbWFnZShRUG9pbnQoKSwgbGF5ZXItPmFscGhhTWFzayk7
CisjZWxzZQogICAgICAgICBsYXllci0+cGFpbnRlci5kcmF3UGl4bWFwKFFQb2ludCgpLCBsYXll
ci0+YWxwaGFNYXNrKTsKKyNlbmRpZgogICAgIH0gZWxzZQogICAgICAgICAtLW1fZGF0YS0+bGF5
ZXJDb3VudDsgLy8gc2VlIHRoZSBjb21tZW50IGZvciBsYXllckNvdW50CiAgICAgbGF5ZXItPnBh
aW50ZXIuZW5kKCk7CkBAIC0xMTAwLDcgKzExMDgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHAtPnNhdmUoKTsKICAgICBwLT5y
ZXNldFRyYW5zZm9ybSgpOwogICAgIHAtPnNldE9wYWNpdHkobGF5ZXItPm9wYWNpdHkpOworI2lm
IFVTRShRVF9RSU1BR0UpCisgICAgcC0+ZHJhd0ltYWdlKGxheWVyLT5vZmZzZXQsIGxheWVyLT5w
aXhtYXApOworI2Vsc2UKICAgICBwLT5kcmF3UGl4bWFwKGxheWVyLT5vZmZzZXQsIGxheWVyLT5w
aXhtYXApOworI2VuZGlmCiAgICAgcC0+cmVzdG9yZSgpOwogCiAgICAgZGVsZXRlIGxheWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZm
ZXJEYXRhUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyRGF0YVF0LmgKaW5kZXggOWNmNzgyYi4uY2E0NzQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGFRdC5oCkBAIC00
MSw3ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIFFJbWFnZSB0b1FJbWFnZSgpIGNvbnN0OwogCi0g
ICAgUVBpeG1hcCBtX3BpeG1hcDsKKyAgICBOYXRpdmVJbWFnZSBtX3BpeG1hcDsKICAgICBPd25Q
dHI8UVBhaW50ZXI+IG1fcGFpbnRlcjsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZm
ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAppbmRleCBiOWI5ZWJmLi4xM2E3NDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApAQCAtNDgsNyArNDgs
MTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZl
ckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgIDogbV9w
aXhtYXAoc2l6ZSwgREVGQVVMVF9JTUFHRV9GT1JNQVQpCisjZWxzZQogICAgIDogbV9waXhtYXAo
c2l6ZSkKKyNlbmRpZgogewogICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtODEsNiArODUsOSBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShj
b25zdCBJbnRTaXplJiBzaXplKQogCiBRSW1hZ2UgSW1hZ2VCdWZmZXJEYXRhOjp0b1FJbWFnZSgp
IGNvbnN0CiB7CisjaWYgVVNFKFFUX1FJTUFHRSkKKyAgICByZXR1cm4gbV9waXhtYXA7CisjZWxz
ZQogICAgIFFQYWludEVuZ2luZSogcGFpbnRFbmdpbmUgPSBtX3BpeG1hcC5wYWludEVuZ2luZSgp
OwogICAgIGlmICghcGFpbnRFbmdpbmUgfHwgcGFpbnRFbmdpbmUtPnR5cGUoKSAhPSBRUGFpbnRF
bmdpbmU6OlJhc3RlcikKICAgICAgICAgcmV0dXJuIG1fcGl4bWFwLnRvSW1hZ2UoKTsKQEAgLTky
LDYgKzk5LDcgQEAgUUltYWdlIEltYWdlQnVmZmVyRGF0YTo6dG9RSW1hZ2UoKSBjb25zdAogICAg
IFFJbWFnZSBpbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsKICAgICBwYWludEVuZ2luZS0+c2V0
UGFpbnREZXZpY2UoY3VycmVudFBhaW50RGV2aWNlKTsKICAgICByZXR1cm4gaW1hZ2U7CisjZW5k
aWYKIH0KIAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIGZs
b2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLywgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgRGVm
ZXJyYWxNb2RlLCBib29sJiBzdWNjZXNzKQpAQCAtMTQ5LDEyICsxNTcsMTMgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmMKIAogdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0KSBjb25zdAogewotICAgIFFQaXht
YXAqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBtX2RhdGEubV9pbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKwogICAgIGlmICghbmF0aXZlSW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZmxv
YXRSZWN0KTsKLSAgICBRUGl4bWFwIGFscGhhTWFzayA9ICpuYXRpdmVJbWFnZTsKKyAgICBOYXRp
dmVJbWFnZSBhbHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7CiAKICAgICBjb250ZXh0LT5wdXNoVHJh
bnNwYXJlbmN5TGF5ZXJJbnRlcm5hbChyZWN0LCAxLjAsIGFscGhhTWFzayk7CiB9CkBAIC0xODIs
NyArMTkxLDExIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShjb25zdCBWZWN0b3I8aW50PiYgbG9va1VwVGFibGUpCiAgICAgICAgIH0KICAgICB9CiAKKyNp
ZiBVU0UoUVRfUUlNQUdFKQorICAgIG1fZGF0YS5tX3BpeG1hcCA9IGltYWdlOworI2Vsc2UKICAg
ICBtX2RhdGEubV9waXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UoaW1hZ2UpOworI2VuZGlmCiAK
ICAgICBpZiAoaXNQYWludGluZykKICAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+YmVnaW4oJm1f
ZGF0YS5tX3BpeG1hcCk7CkBAIC0zNzcsNyArMzkwLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2Us
IGMKICAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+cmVzdG9yZSgpOwogfQogCi1zdGF0aWMgYm9v
bCBlbmNvZGVJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXAsIGNvbnN0IFN0cmluZyYgZm9ybWF0
LCBjb25zdCBkb3VibGUqIHF1YWxpdHksIFFCeXRlQXJyYXkmIGRhdGEpCitzdGF0aWMgYm9vbCBl
bmNvZGVJbWFnZShjb25zdCBXZWJDb3JlOjpOYXRpdmVJbWFnZSYgcGl4bWFwLCBjb25zdCBTdHJp
bmcmIGZvcm1hdCwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBRQnl0ZUFycmF5JiBkYXRhKQogewog
ICAgIGludCBjb21wcmVzc2lvblF1YWxpdHkgPSAxMDA7CiAgICAgaWYgKHF1YWxpdHkgJiYgKnF1
YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMTgyYjM2Ni4uNDY4Mjk1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAg
LTUxLDcgKzUxLDcgQEAKIAogI2luY2x1ZGUgPG1hdGguaD4KIAotdHlwZWRlZiBRSGFzaDxRQnl0
ZUFycmF5LCBRUGl4bWFwPiBXZWJHcmFwaGljSGFzaDsKK3R5cGVkZWYgUUhhc2g8UVN0cmluZywg
V2ViQ29yZTo6TmF0aXZlSW1hZ2U+IFdlYkdyYXBoaWNIYXNoOwogUV9HTE9CQUxfU1RBVElDKFdl
YkdyYXBoaWNIYXNoLCBfZ3JhcGhpY3MpCiAKIHN0YXRpYyB2b2lkIGVhcmx5Q2xlYXJHcmFwaGlj
cygpCkBAIC02OSwyOSArNjksMzMgQEAgc3RhdGljIFdlYkdyYXBoaWNIYXNoKiBncmFwaGljcygp
CiAgICAgICAgIHFBZGRQb3N0Um91dGluZShlYXJseUNsZWFyR3JhcGhpY3MpOwogCiAgICAgICAg
IC8vIFFXZWJTZXR0aW5nczo6TWlzc2luZ0ltYWdlR3JhcGhpYwotICAgICAgICBoYXNoLT5pbnNl
cnQoIm1pc3NpbmdJbWFnZSIsIFFQaXhtYXAoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJj
ZXMvbWlzc2luZ0ltYWdlLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgibWlzc2luZ0lt
YWdlIiwgV2ViQ29yZTo6bG9hZEltYWdlKCI6d2Via2l0L3Jlc291cmNlcy9taXNzaW5nSW1hZ2Uu
cG5nIikpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6Ok1pc3NpbmdQbHVnaW5HcmFwaGljCi0g
ICAgICAgIGhhc2gtPmluc2VydCgibnVsbFBsdWdpbiIsIFFQaXhtYXAoUUxhdGluMVN0cmluZygi
OndlYmtpdC9yZXNvdXJjZXMvbnVsbFBsdWdpbi5wbmciKSkpOworICAgICAgICBoYXNoLT5pbnNl
cnQoIm51bGxQbHVnaW4iLCBXZWJDb3JlOjpsb2FkSW1hZ2UoIjp3ZWJraXQvcmVzb3VyY2VzL251
bGxQbHVnaW4ucG5nIikpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6OkRlZmF1bHRGcmFtZUlj
b25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgidXJsSWNvbiIsIFFQaXhtYXAoUUxhdGlu
MVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvdXJsSWNvbi5wbmciKSkpOworICAgICAgICBoYXNo
LT5pbnNlcnQoInVybEljb24iLCBXZWJDb3JlOjpsb2FkSW1hZ2UoIjp3ZWJraXQvcmVzb3VyY2Vz
L3VybEljb24ucG5nIikpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6OlRleHRBcmVhU2l6ZUdy
aXBDb3JuZXJHcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgidGV4dEFyZWFSZXNpemVDb3Ju
ZXIiLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3VyY2VzL3RleHRBcmVhUmVz
aXplQ29ybmVyLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgidGV4dEFyZWFSZXNpemVD
b3JuZXIiLCBXZWJDb3JlOjpsb2FkSW1hZ2UoIjp3ZWJraXQvcmVzb3VyY2VzL3RleHRBcmVhUmVz
aXplQ29ybmVyLnBuZyIpKTsKICAgICAgICAgLy8gUVdlYlNldHRpbmdzOjpEZWxldGVCdXR0b25H
cmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgiZGVsZXRlQnV0dG9uIiwgUVBpeG1hcChRTGF0
aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9kZWxldGVCdXR0b24ucG5nIikpKTsKKyAgICAg
ICAgaGFzaC0+aW5zZXJ0KCJkZWxldGVCdXR0b24iLCBXZWJDb3JlOjpsb2FkSW1hZ2UoIjp3ZWJr
aXQvcmVzb3VyY2VzL2RlbGV0ZUJ1dHRvbi5wbmciKSk7CiAgICAgICAgIC8vIFFXZWJTZXR0aW5n
czo6SW5wdXRTcGVlY2hCdXR0b25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgiaW5wdXRT
cGVlY2giLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3VyY2VzL2lucHV0U3Bl
ZWNoLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgiaW5wdXRTcGVlY2giLCBXZWJDb3Jl
Ojpsb2FkSW1hZ2UoIjp3ZWJraXQvcmVzb3VyY2VzL2lucHV0U3BlZWNoLnBuZyIpKTsKICAgICB9
CiAKICAgICByZXR1cm4gaGFzaDsKIH0KIAorbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gVGhpcyBm
dW5jdGlvbiBsb2FkcyByZXNvdXJjZXMgaW50byBXZWJLaXQKLXN0YXRpYyBRUGl4bWFwIGxvYWRS
ZXNvdXJjZVBpeG1hcChjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIE5hdGl2ZUltYWdlIGxvYWRS
ZXNvdXJjZVBpeG1hcChjb25zdCBjaGFyICpuYW1lKQogewogICAgIHJldHVybiBncmFwaGljcygp
LT52YWx1ZShuYW1lKTsKIH0KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworTmF0aXZlSW1hZ2UgbG9h
ZEltYWdlKGNvbnN0IGNoYXIqIGZuYW1lKQoreworICAgIHJldHVybiBOYXRpdmVJbWFnZShRTGF0
aW4xU3RyaW5nKGZuYW1lKSk7Cit9CiAKIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFy
TWV0YWRhdGEpCiB7CkBAIC0xMTYsNyArMTIwLDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgcmV0dXJuIFN0aWxs
SW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkpOwogfQogCi12b2lkIEltYWdl
OjpzZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFQaXhtYXAmIHBp
eG1hcCkKK3ZvaWQgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwg
Y29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2UmIHBpeG1hcCkKIHsKICAgICBXZWJHcmFwaGljSGFz
aCogaCA9IGdyYXBoaWNzKCk7CiAgICAgaWYgKHBpeG1hcC5pc051bGwoKSkKQEAgLTEyOCw3ICsx
MzIsNyBAQCB2b2lkIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZSogZnJhbWVQaXhtYXAg
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8v
IElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICBy
ZXR1cm47CiAKQEAgLTEzOCwxMyArMTQyLDE3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAg
ICBpZiAoIWRyLndpZHRoKCkgfHwgIWRyLmhlaWdodCgpIHx8ICF0ci53aWR0aCgpIHx8ICF0ci5o
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBpeG1hcCBwaXhtYXAgPSAqZnJhbWVQ
aXhtYXA7CisgICAgTmF0aXZlSW1hZ2UgcGl4bWFwID0gKmZyYW1lUGl4bWFwOwogICAgIGlmICh0
ci54KCkgfHwgdHIueSgpIHx8IHRyLndpZHRoKCkgIT0gcGl4bWFwLndpZHRoKCkgfHwgdHIuaGVp
Z2h0KCkgIT0gcGl4bWFwLmhlaWdodCgpKQogICAgICAgICBwaXhtYXAgPSBwaXhtYXAuY29weSh0
cik7CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29t
cG9zaXRlT3BlcmF0aW9uKCk7CiAKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgIGN0eHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbighcGl4bWFwLmhhc0FscGhhQ2hhbm5lbCgpICYmIG9wID09IENvbXBv
c2l0ZVNvdXJjZU92ZXIgPyBDb21wb3NpdGVDb3B5IDogb3ApOworI2Vsc2UKICAgICBjdHh0LT5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oIXBpeG1hcC5oYXNBbHBoYSgpICYmIG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgPyBDb21wb3NpdGVDb3B5IDogb3ApOworI2VuZGlmCiAKICAgICBRUGFpbnRl
ciogcCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3Jt
KHBhdHRlcm5UcmFuc2Zvcm0pOwpAQCAtMTU2LDE0ICsxNjQsMjkgQEAgdm9pZCBJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdAogICAgICAgICBib29sIHRpbGVXaWxsQmVQYWludGVkT25seU9uY2UgPSB0aWxlUmVj
dEluVGFyZ2V0Q29vcmRzLmNvbnRhaW5zKGRyKTsKICAgICAgICAgaWYgKCF0aWxlV2lsbEJlUGFp
bnRlZE9ubHlPbmNlKSB7CiAgICAgICAgICAgICBRU2l6ZUYgc2NhbGVkU2l6ZShmbG9hdChwaXht
YXAud2lkdGgoKSkgKiB0cmFuc2Zvcm0ubTExKCksIGZsb2F0KHBpeG1hcC5oZWlnaHQoKSkgKiB0
cmFuc2Zvcm0ubTIyKCkpOworI2lmIFVTRShRVF9RSU1BR0UpCisgICAgICAgICAgICBRSW1hZ2Ug
c2NhbGVkUGl4bWFwOworCisgICAgICAgICAgICBpZiAocGl4bWFwLmhhc0FscGhhQ2hhbm5lbCgp
KSB7CisgICAgICAgICAgICAgICAgc2NhbGVkUGl4bWFwID0gUUltYWdlKHNjYWxlZFNpemUudG9T
aXplKCksIERFRkFVTFRfVFJBTlNQQVJFTlRfSU1BR0VfRk9STUFUKTsKKyAgICAgICAgICAgICAg
ICBzY2FsZWRQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgc2NhbGVkUGl4bWFwID0gUUltYWdlKHNjYWxlZFNpemUudG9TaXpl
KCksIERFRkFVTFRfT1BBUVVFX0lNQUdFX0ZPUk1BVCk7CisjZWxzZQogICAgICAgICAgICAgUVBp
eG1hcCBzY2FsZWRQaXhtYXAoc2NhbGVkU2l6ZS50b1NpemUoKSk7CisKICAgICAgICAgICAgIGlm
IChwaXhtYXAuaGFzQWxwaGEoKSkKICAgICAgICAgICAgICAgICBzY2FsZWRQaXhtYXAuZmlsbChR
dDo6dHJhbnNwYXJlbnQpOworI2VuZGlmCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
UVBhaW50ZXIgcGFpbnRlcigmc2NhbGVkUGl4bWFwKTsKICAgICAgICAgICAgICAgICBwYWludGVy
LnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CiAg
ICAgICAgICAgICAgICAgcGFpbnRlci5zZXRSZW5kZXJIaW50cyhwLT5yZW5kZXJIaW50cygpKTsK
KyNpZiBVU0UoUVRfUUlNQUdFKQorICAgICAgICAgICAgICAgIHBhaW50ZXIuZHJhd0ltYWdlKFFS
ZWN0KDAsIDAsIHNjYWxlZFBpeG1hcC53aWR0aCgpLCBzY2FsZWRQaXhtYXAuaGVpZ2h0KCkpLCBw
aXhtYXApOworI2Vsc2UKICAgICAgICAgICAgICAgICBwYWludGVyLmRyYXdQaXhtYXAoUVJlY3Qo
MCwgMCwgc2NhbGVkUGl4bWFwLndpZHRoKCksIHNjYWxlZFBpeG1hcC5oZWlnaHQoKSksIHBpeG1h
cCk7CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBpeG1hcCA9IHNjYWxlZFBp
eG1hcDsKICAgICAgICAgICAgIHRyYW5zZm9ybSA9IFFUcmFuc2Zvcm06OmZyb21UcmFuc2xhdGUo
dHJhbnNmb3JtLmR4KCksIHRyYW5zZm9ybS5keSgpKTsKQEAgLTE4NCw3ICsyMDcsNyBAQCB2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlz
KTsKIH0KIAotQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFFQaXhtYXAqIHBpeG1hcCwgSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCitCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQ
dHIgcGl4bWFwLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVy
KQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCkBAIC0yMDksNyAr
MjMyLDExIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRUGl4bWFwKiBwaXhtYXAsIEltYWdl
T2JzZXJ2ZXIqIG9ic2VydmVyKQogCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAgICBtX2ZyYW1l
c1swXS5tX2ZyYW1lID0gcGl4bWFwOworI2lmIFVTRShRVF9RSU1BR0UpCisgICAgbV9mcmFtZXNb
MF0ubV9oYXNBbHBoYSA9IHBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCk7CisjZWxzZQogICAgIG1f
ZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBwaXhtYXAtPmhhc0FscGhhKCk7CisjZW5kaWYKICAgICBt
X2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAgICAgY2hlY2tGb3JTb2xpZENvbG9y
KCk7CiB9CkBAIC0yMzAsNyArMjU3LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgIGlmIChub3JtYWxpemVk
U3JjLmlzRW1wdHkoKSB8fCBub3JtYWxpemVkRHN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUVBpeG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
ICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0MCwyMCArMjY3LDI5IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwKICAgICB9CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJh
dG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CisjaWYgVVNFKFFUX1FJTUFHRSkKKyAg
ICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oIWltYWdlLT5oYXNBbHBoYUNoYW5uZWwoKSAm
JiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKKyNlbHNl
CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBv
cCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKLQorI2VuZGlm
CiAgICAgaWYgKGN0eHQtPmhhc1NoYWRvdygpKSB7CiAgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRv
dyA9IGN0eHQtPnNoYWRvd0JsdXIoKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dD
b250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwog
ICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgewogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRv
d1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNpZiBVU0UoUVRf
UUlNQUdFKQorICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd0ltYWdlKG5vcm1hbGl6ZWRE
c3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CisjZWxzZQogICAgICAgICAgICAgc2hhZG93UGFp
bnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwor
I2VuZGlmCiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwogICAgICAg
ICB9CiAgICAgfQotCisjaWYgVVNFKFFUX1FJTUFHRSkKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+ZHJhd0ltYWdlKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7Cisj
ZWxzZQogICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWRE
c3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7Ci0KKyNlbmRpZgogICAgIGN0eHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIAogICAgIGlmIChpbWFnZU9ic2VydmVy
KCkpCkBAIC0yNjgsMTggKzMwNCwyNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlk
Q29sb3IoKQogICAgIGlmIChmcmFtZUNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBRUGl4bWFwKiBmcmFtZVBpeG1hcCA9IGZyYW1lQXRJbmRleCgwKTsKKyAgICBOYXRpdmVJbWFn
ZVB0ciBmcmFtZVBpeG1hcCA9IGZyYW1lQXRJbmRleCgwKTsKICAgICBpZiAoIWZyYW1lUGl4bWFw
IHx8IGZyYW1lUGl4bWFwLT53aWR0aCgpICE9IDEgfHwgZnJhbWVQaXhtYXAtPmhlaWdodCgpICE9
IDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKKyNpZiBV
U0UoUVRfUUlNQUdFKQorICAgIG1fc29saWRDb2xvciA9IFFDb2xvcjo6ZnJvbVJnYmEoZnJhbWVQ
aXhtYXAtPnBpeGVsKDAsIDApKTsKKyNlbHNlCiAgICAgbV9zb2xpZENvbG9yID0gUUNvbG9yOjpm
cm9tUmdiYShmcmFtZVBpeG1hcC0+dG9JbWFnZSgpLnBpeGVsKDAsIDApKTsKKyNlbmRpZgogfQog
CiAjaWYgT1MoV0lORE9XUykKIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpj
cmVhdGUoSEJJVE1BUCBoQml0bWFwKQogeworI2lmIFVTRShRVF9RSU1BR0UpCisgICAgcmV0dXJu
IEJpdG1hcEltYWdlOjpjcmVhdGUobmV3IFFJbWFnZShRUGl4bWFwOjpmcm9tV2luSEJJVE1BUCho
Qml0bWFwKS50b0ltYWdlKCkpKTsKKyNlbHNlCiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVh
dGUobmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJvbVdpbkhCSVRNQVAoaEJpdG1hcCkpKTsKKyNlbmRp
ZgogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1BhdHRlcm5RdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9QYXR0ZXJuUXQuY3BwCmluZGV4IGFmN2IxMjguLjY4ODE4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcApAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFFCcnVzaCBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3QKIHsKLSAgICBRUGl4bWFwKiBw
aXhtYXAgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBO
YXRpdmVJbWFnZVB0ciBwaXhtYXAgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKICAgICBpZiAoIXBpeG1hcCkKICAgICAgICAgcmV0dXJuIFFCcnVzaCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdl
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmNwcAppbmRleCBjYjJhNDQyLi4yOGJmNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKQEAgLTM2LDEyICszNiwxMiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0aWxsSW1hZ2U6OlN0aWxsSW1hZ2UoY29uc3Qg
UVBpeG1hcCYgcGl4bWFwKQotICAgIDogbV9waXhtYXAobmV3IFFQaXhtYXAocGl4bWFwKSkKK1N0
aWxsSW1hZ2U6OlN0aWxsSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2UmIHBpeG1hcCkKKyAgICA6IG1f
cGl4bWFwKG5ldyBOYXRpdmVJbWFnZShwaXhtYXApKQogICAgICwgbV9vd25zUGl4bWFwKHRydWUp
CiB7fQogCi1TdGlsbEltYWdlOjpTdGlsbEltYWdlKGNvbnN0IFFQaXhtYXAqIHBpeG1hcCkKK1N0
aWxsSW1hZ2U6OlN0aWxsSW1hZ2UoTmF0aXZlSW1hZ2VDb25zdFB0ciBwaXhtYXApCiAgICAgOiBt
X3BpeG1hcChwaXhtYXApCiAgICAgLCBtX293bnNQaXhtYXAoZmFsc2UpCiB7fQpAQCAtNzksMTIg
Kzc5LDIwIEBAIHZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRl
eHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CiAgICAg
ICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CiAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworI2lmIFVTRShRVF9RSU1B
R0UpCisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwg
Km1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKKyNlbHNlCiAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICptX3BpeG1hcCwgbm9ybWFsaXplZFNyYyk7
CisjZW5kaWYKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4dCk7CiAgICAg
ICAgIH0KICAgICB9CiAKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgIGN0eHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3Jj
KTsKKyNlbHNlCiAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAobm9ybWFs
aXplZERzdCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKKyNlbmRpZgogICAgIGN0eHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAppbmRleCA1ODA3
MWQ5Li5mNGI3ZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TdGlsbEltYWdlUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TdGlsbEltYWdlUXQuaApAQCAtMzQsMTIgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIFN0aWxsSW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gY3JlYXRlKGNvbnN0IFFQaXht
YXAmIHBpeG1hcCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gY3JlYXRl
KGNvbnN0IE5hdGl2ZUltYWdlJiBwaXhtYXApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3RpbGxJbWFnZShwaXhtYXApKTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGNyZWF0ZUZvclJlbmRlcmluZyhjb25zdCBR
UGl4bWFwKiBwaXhtYXApCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGNy
ZWF0ZUZvclJlbmRlcmluZyhOYXRpdmVJbWFnZUNvbnN0UHRyIHBpeG1hcCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbEltYWdlKHBpeG1hcCkpOwogICAg
ICAgICB9CkBAIC01NCwxMSArNTQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0aWxsSW1hZ2Uo
Y29uc3QgUVBpeG1hcCYgcGl4bWFwKTsKLSAgICAgICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFw
KiBwaXhtYXApOworICAgICAgICBTdGlsbEltYWdlKGNvbnN0IE5hdGl2ZUltYWdlJiBpbWFnZSk7
CisgICAgICAgIFN0aWxsSW1hZ2UoTmF0aXZlSW1hZ2VDb25zdFB0ciBpbWFnZSk7CiAgICAgICAg
IH5TdGlsbEltYWdlKCk7CiAgICAgICAgIAotICAgICAgICBjb25zdCBRUGl4bWFwKiBtX3BpeG1h
cDsKKyAgICAgICAgTmF0aXZlSW1hZ2VDb25zdFB0ciBtX3BpeG1hcDsKICAgICAgICAgYm9vbCBt
X293bnNQaXhtYXA7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxheWVyLmgKaW5kZXggZjEzZGViMC4uZTdkY2Yw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNw
YXJlbmN5TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9U
cmFuc3BhcmVuY3lMYXllci5oCkBAIC0zNiw2ICszNiw4IEBACiAjaWZuZGVmIFRyYW5zcGFyZW5j
eUxheWVyX2gKICNkZWZpbmUgVHJhbnNwYXJlbmN5TGF5ZXJfaAogCisjaW5jbHVkZSAiSW1hZ2VT
b3VyY2UuaCIKKwogI2luY2x1ZGUgPFFQYWludEVuZ2luZT4KICNpbmNsdWRlIDxRUGFpbnRlcj4K
ICNpbmNsdWRlIDxRUGl4bWFwPgpAQCAtNDUsOCArNDcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciogcCwgY29u
c3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzaykKKyAgICBU
cmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciogcCwgY29uc3QgUVJlY3QgJnJlY3QsIHFy
ZWFsIG9wYWNpdHksIE5hdGl2ZUltYWdlJiBhbHBoYU1hc2spCisjaWYgVVNFKFFUX1FJTUFHRSkK
KyAgICAgICAgOiBwaXhtYXAocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBERUZBVUxUX0lN
QUdFX0ZPUk1BVCkKKyNlbHNlCiAgICAgICAgIDogcGl4bWFwKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSkKKyNlbmRpZgogICAgICAgICAsIG9wYWNpdHkob3BhY2l0eSkKICAgICAgICAgLCBh
bHBoYU1hc2soYWxwaGFNYXNrKQogICAgICAgICAsIHNhdmVDb3VudGVyKDEpIC8vIHNlZSB0aGUg
Y29tbWVudCBmb3Igc2F2ZUNvdW50ZXIKQEAgLTY3LDEyICs3MywxMiBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIFFQaXhtYXAgcGl4bWFwOworICAgIE5hdGl2ZUltYWdlIHBpeG1hcDsK
ICAgICBRUG9pbnQgb2Zmc2V0OwogICAgIFFQYWludGVyIHBhaW50ZXI7CiAgICAgcXJlYWwgb3Bh
Y2l0eTsKICAgICAvLyBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIKLSAgICBRUGl4bWFwIGFscGhhTWFz
azsKKyAgICBOYXRpdmVJbWFnZSBhbHBoYU1hc2s7CiAgICAgLy8gc2F2ZUNvdW50ZXIgaXMgb25s
eSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYWxwaGFNYXNrCiAgICAgLy8gb3RoZXJ3aXNlLCBp
dHMgdmFsdWUgaXMgdW5zcGVjaWZpZWQKICAgICBpbnQgc2F2ZUNvdW50ZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCmluZGV4IGJjN2MxMjYuLjgzOTJkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
CkBAIC01MDUsNiArNTA1LDkgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRz
KEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KIAogI2lmIFBMQVRG
T1JNKFFUKQogICAgIFFJbWFnZSBxdEltYWdlOworI2lmIFVTRShRVF9RSU1BR0UpCisgICAgcXRJ
bWFnZSA9ICpmcmFtZUltYWdlOworI2Vsc2UKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05f
Q0hFQ0soNSwgMCwgMCkKICAgICAvLyBXaXRoIFFQQSwgd2UgY2FuIGF2b2lkIGEgZGVlcCBjb3B5
LgogICAgIHF0SW1hZ2UgPSAqZnJhbWVJbWFnZS0+aGFuZGxlKCktPmJ1ZmZlcigpOwpAQCAtNTEy
LDYgKzUxNSw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSog
aW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvCiAgICAgLy8gVGhpcyBtaWdodCBi
ZSBhIGRlZXAgY29weSwgZGVwZW5kaW5nIG9uIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIHBpeG1h
cC4KICAgICBxdEltYWdlID0gZnJhbWVJbWFnZS0+dG9JbWFnZSgpOwogI2VuZGlmCisjZW5kaWYK
ICAgICBpbWFnZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihxdEltYWdlLmNv
bnN0Qml0cygpKTsKICAgICBieXRlc1BlckxpbmUgPSBxdEltYWdlLmJ5dGVzUGVyTGluZSgpOwog
I2VsaWYgVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAKaW5kZXggOTk5YWMyOS4uYWI3Zjc4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQv
SW1hZ2VGcmFtZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9xdC9JbWFnZUZyYW1lUXQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgaW50IEltYWdlRnJh
bWU6OmhlaWdodCgpIGNvbnN0CiAKICNlbHNlCiAKLVFQaXhtYXAqIEltYWdlRnJhbWU6OmFzTmV3
TmF0aXZlSW1hZ2UoKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRp
dmVJbWFnZSgpIGNvbnN0CiB7CiAgICAgUUltYWdlOjpGb3JtYXQgZm10OwogICAgIGlmIChtX2hh
c0FscGhhKQpAQCAtMTY0LDggKzE2NCwxMSBAQCBRUGl4bWFwKiBJbWFnZUZyYW1lOjphc05ld05h
dGl2ZUltYWdlKCkgY29uc3QKICAgICAgICAgZm10ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CiAK
ICAgICBRSW1hZ2UgaW1nKHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihtX2J5dGVzKSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc2l6ZW9mKFBpeGVsRGF0YSkgKiBtX3NpemUud2lk
dGgoKSwgZm10KTsKLQorI2lmIFVTRShRVF9RSU1BR0UpCisgICAgcmV0dXJuIG5ldyBRSW1hZ2Uo
aW1nKTsKKyNlbHNlCiAgICAgcmV0dXJuIG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShp
bWcpKTsKKyNlbmRpZgogfQogCiAjZW5kaWYgLy8gVVNFKFFUX0lNQUdFX0RFQ09ERVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKaW5kZXggNmQyYWI3Mi4uNzAx
MDU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcApAQCAt
MjczLDcgKzI3Myw3IEBAIHZvaWQgQ2xpcGJvYXJkUXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFn
ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvCiAgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7CiAgICAgaWYgKCFjYWNoZWRJ
bWFnZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIo
KSkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUVBp
eG1hcCogcGl4bWFwID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVu
ZGVyZXIoKSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2Uq
IHBpeG1hcCA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVy
KCkpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmIChwaXhtYXApCiAgICAg
ICAgIG1fd3JpdGFibGVEYXRhLT5zZXRJbWFnZURhdGEoKnBpeG1hcCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcAppbmRleCBlNzg1NGRkLi4zNWMwOWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwCkBAIC03OCw3ICs3OCwxMSBAQCBzdGF0
aWMgUUN1cnNvciogY3JlYXRlQ3VzdG9tQ3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9p
bnQmIGhvdFNwb3QpCiAgICAgaWYgKCFpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRl
dGVybWluZUhvdFNwb3QoaW1hZ2UsIGhvdFNwb3QpOworI2lmIFVTRShRVF9RSU1BR0UpCisgICAg
cmV0dXJuIG5ldyBRQ3Vyc29yKFFQaXhtYXA6OmZyb21JbWFnZSgqKGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpKSksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RT
cG90LnkoKSk7CisjZWxzZQogICAgIHJldHVybiBuZXcgUUN1cnNvcigqKGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhv
dFNwb3QueSgpKTsKKyNlbmRpZgogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0RyYWdJbWFnZVF0LmNwcAppbmRleCAwZTdjZTA0Li5hN2FhOTM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCkBAIC02Niw3ICs2Niw3IEBAIERyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbkVudW0pCiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIG5ldyBR
UGl4bWFwKCppbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJu
IG5ldyBOYXRpdmVJbWFnZSgqaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOwog
fQogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hl
ZEltYWdlKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9h
cmRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCmlu
ZGV4IGRjN2ZiOGYuLjJhMjI3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFz
dGVib2FyZFF0LmNwcApAQCAtMTY2LDExICsxNjYsMTYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQogICAgIEltYWdl
KiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKG5vZGUtPnJlbmRlcmVyKCkp
OwogICAgIEFTU0VSVChpbWFnZSk7CiAKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBwaXhtYXAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIXBpeG1hcCkKICAg
ICAgICAgcmV0dXJuOworCisjaWYgVVNFKFFUX1FJTUFHRSkKKyAgICBRR3VpQXBwbGljYXRpb246
OmNsaXBib2FyZCgpLT5zZXRJbWFnZSgqcGl4bWFwLCBRQ2xpcGJvYXJkOjpDbGlwYm9hcmQpOwor
I2Vsc2UKICAgICBRR3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5zZXRQaXhtYXAoKnBpeG1h
cCwgUUNsaXBib2FyZDo6Q2xpcGJvYXJkKTsKICNlbmRpZgorI2VuZGlmCiB9CiAKIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGVDbGlwYm9hcmQoQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcAppbmRleCBmMDlhOGE4Li40NjM2YWZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKQEAgLTE3NjMsOSArMTc2MywxNSBAQCBRV2ViSGl0VGVzdFJlc3VsdFBy
aXZhdGU6OlFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0CiAgICAgYm91bmRpbmdSZWN0ID0gaW5uZXJOb25TaGFyZWROb2RlID8gaW5uZXJOb25TaGFy
ZWROb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpIDogSW50UmVjdCgp
OwogICAgIFdlYkNvcmU6OkltYWdlICppbWcgPSBoaXRUZXN0LmltYWdlKCk7CiAgICAgaWYgKGlt
ZykgeworI2lmIFVTRShRVF9RSU1BR0UpCisgICAgICAgIFFJbWFnZSAqcGl4ID0gaW1nLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBpZiAocGl4KQorICAgICAgICAgICAg
cGl4bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKCpwaXgpOworI2Vsc2UKICAgICAgICAgUVBpeG1h
cCAqcGl4ID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICBpZiAo
cGl4KQogICAgICAgICAgICAgcGl4bWFwID0gKnBpeDsKKyNlbmRpZgogICAgIH0KICAgICBXZWJD
b3JlOjpGcmFtZSAqd2ZyYW1lID0gaGl0VGVzdC50YXJnZXRGcmFtZSgpOwogICAgIGlmICh3ZnJh
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKaW5kZXggZmM1YmRkNS4uYjI2YTZh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApAQCAtMTU4LDggKzE1OCwxMSBA
QCBRRGF0ZVRpbWUgUVdlYkhpc3RvcnlJdGVtOjpsYXN0VmlzaXRlZCgpIGNvbnN0CiBRSWNvbiBR
V2ViSGlzdG9yeUl0ZW06Omljb24oKSBjb25zdAogewogICAgIGlmIChkLT5pdGVtKQorI2lmIFVT
RShRVF9RSU1BR0UpCisgICAgICAgIHJldHVybiBRUGl4bWFwOjpmcm9tSW1hZ2UoKldlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoZC0+aXRlbS0+dXJsKCks
IFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkp
OworI2Vsc2UKICAgICAgICAgcmV0dXJuICpXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJv
bm91c0ljb25Gb3JQYWdlVVJMKGQtPml0ZW0tPnVybCgpLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAx
NikpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCisjZW5kaWYKICAgICByZXR1cm4g
UUljb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRp
bmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKaW5kZXggNGUw
MTgzNi4uYTA2OGEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRp
bmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC03
MTksMTIgKzcxOSwxOSBAQCBRSWNvbiBRV2ViU2V0dGluZ3M6Omljb25Gb3JVcmwoY29uc3QgUVVy
bCYgdXJsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpJbnRTaXpl
KDE2LCAxNikpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBRUGl4bWFwKCk7Cisj
aWYgVVNFKFFUX1FJTUFHRSkKKyAgICBRSW1hZ2UqIGljb24gPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWljb24pCisgICAgICAgIHJldHVybiBRUGl4bWFw
KCk7CiAKKyAgICByZXR1cm4gUVBpeG1hcDo6ZnJvbUltYWdlKCppY29uKTsKKyNlbHNlCiAgICAg
UVBpeG1hcCogaWNvbiA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaWNvbikKICAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKIAogICAgIHJldHVybiogaWNv
bjsKKyNlbmRpZgogfQogCiAvKgpAQCAtNzY3LDcgKzc3NCwxMSBAQCBzdGF0aWMgY29uc3QgY2hh
ciogcmVzb3VyY2VOYW1lRm9yV2ViR3JhcGhpYyhRV2ViU2V0dGluZ3M6OldlYkdyYXBoaWMgdHlw
ZSkKIHZvaWQgUVdlYlNldHRpbmdzOjpzZXRXZWJHcmFwaGljKFdlYkdyYXBoaWMgdHlwZSwgY29u
c3QgUVBpeG1hcCYgZ3JhcGhpYykKIHsKICAgICBXZWJDb3JlOjppbml0aWFsaXplV2ViQ29yZVF0
KCk7CisjaWYgVVNFKFFUX1FJTUFHRSkKKyAgICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1S
ZXNvdXJjZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKHR5cGUpLCBncmFwaGljLnRvSW1hZ2Uo
KSk7CisjZWxzZQogICAgIFdlYkNvcmU6OkltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKHJlc291
cmNlTmFtZUZvcldlYkdyYXBoaWModHlwZSksIGdyYXBoaWMpOworI2VuZGlmCiB9CiAKIC8qIQpA
QCAtNzgyLDEwICs3OTMsMTYgQEAgUVBpeG1hcCBRV2ViU2V0dGluZ3M6OndlYkdyYXBoaWMoV2Vi
R3JhcGhpYyB0eXBlKQogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1nID0gV2ViQ29yZTo6
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKHJlc291cmNlTmFtZUZvcldlYkdyYXBoaWModHlw
ZSkpOwogICAgIGlmICghaW1nKQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOworI2lmIFVTRShR
VF9RSU1BR0UpCisgICAgUUltYWdlKiBwaXhtYXAgPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CisgICAgaWYgKHBpeG1hcCkKKyAgICAgICAgcmV0dXJuIFFQaXhtYXA6OmZyb21J
bWFnZSgqcGl4bWFwKTsKKyNlbHNlCiAgICAgUVBpeG1hcCogcGl4bWFwID0gaW1nLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghcGl4bWFwKQotICAgICAgICByZXR1cm4g
UVBpeG1hcCgpOwotICAgIHJldHVybiAqcGl4bWFwOworICAgIGlmIChwaXhtYXApCisgICAgICAg
IHJldHVybiAqcGl4bWFwOworI2VuZGlmCisgICAgcmV0dXJuIFFQaXhtYXAoKTsKIH0KIAogLyoh
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAK
aW5kZXggY2I2MzI4My4uMTkxNDk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcApAQCAtOTcsNyArOTcsMTEgQEAgdm9pZCBEcmFnQ2xp
ZW50UXQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFAKICAgICBpZiAodmlldykgewogICAgICAgICBRRHJhZyogZHJhZyA9IG5ldyBR
RHJhZyh2aWV3KTsKICAgICAgICAgaWYgKGRyYWdJbWFnZSkKKyNpZiBVU0UoUVRfUUlNQUdFKQor
ICAgICAgICAgICAgZHJhZy0+c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZSgqZHJhZ0ltYWdl
KSk7CisjZWxzZQogICAgICAgICAgICAgZHJhZy0+c2V0UGl4bWFwKCpkcmFnSW1hZ2UpOworI2Vu
ZGlmCiAgICAgICAgIGVsc2UgaWYgKGNsaXBib2FyZERhdGEgJiYgY2xpcGJvYXJkRGF0YS0+aGFz
SW1hZ2UoKSkKICAgICAgICAgICAgIGRyYWctPnNldFBpeG1hcChxdmFyaWFudF9jYXN0PFFQaXht
YXA+KGNsaXBib2FyZERhdGEtPmltYWdlRGF0YSgpKSk7CiAgICAgICAgIERyYWdPcGVyYXRpb24g
ZHJhZ09wZXJhdGlvbk1hc2sgPSBjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKaW5kZXgg
NDUyMDkxYy4uZjUyNGY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9Jbml0V2ViQ29yZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luaXRXZWJDb3JlUXQuY3BwCkBAIC04MSw5ICs4MSwxNSBAQCB2b2lkIGluaXRpYWxpemVX
ZWJDb3JlUXQoKQogI2VuZGlmCiAKICAgICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1
dHRvbkdyYXBoaWMKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJl
c291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b24iLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0YW5k
YXJkUGl4bWFwKFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24pLnRvSW1hZ2UoKSk7CisgICAg
Ly8gUVdlYlNldHRpbmdzOjpTZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkR3JhcGhpYworICAgIElt
YWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIiwgUUFw
cGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3Nl
QnV0dG9uKS50b0ltYWdlKCkpOworI2Vsc2UKICAgICBJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsQnV0dG9uIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBp
eG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKSk7CiAgICAgLy8gUVdlYlNldHRpbmdz
OjpTZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkR3JhcGhpYwogICAgIEltYWdlOjpzZXRQbGF0Zm9y
bVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIiwgUUFwcGxpY2F0aW9uOjpzdHls
ZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKSk7CisjZW5k
aWYKIAogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwCmluZGV4IGE3YWI4ZDQuLmZiOGVjYzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcApAQCAtNTIs
NyArNTIsMTEgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6OnJlbGVhc2VTaGFyZWRNZW1vcnlEYXRh
KHZvaWQqIHR5cGVsZXNzQml0bWFwKQogCiBQYXNzUmVmUHRyPEltYWdlPiBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZUltYWdlKCkKIHsKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgIFFJbWFnZSogcGl4
bWFwID0gbmV3IFFJbWFnZShjcmVhdGVRSW1hZ2UoKSk7CisjZWxzZQogICAgIFFQaXhtYXAqIHBp
eG1hcCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShjcmVhdGVRSW1hZ2UoKSkpOwor
I2VuZGlmCiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUocGl4bWFwKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNs
aWVudC5jcHAKaW5kZXggYzc2OWM4Yi4uNTM3M2Q3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwCkBAIC03Nywx
MSArNzcsMTQgQEAgUUltYWdlIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjppY29uSW1hZ2VGb3JQ
YWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCwgY29uc3QKICAgICBpZiAoIWltYWdlKQogICAg
ICAgICByZXR1cm4gUUltYWdlKCk7CiAKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAg
ICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJuIFFJbWFnZSgpOwotCisjaWYgVVNF
KFFUX1FJTUFHRSkKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2UtPmNvcHkoKTsKKyNlbHNlCiAgICAg
cmV0dXJuIG5hdGl2ZUltYWdlLT50b0ltYWdlKCk7CisjZW5kaWYKIH0KIAogdW5zaWduZWQgUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQ6Omljb25VUkxIYXNoRm9yUGFnZVVSTChjb25zdCBTdHJpbmcm
IHBhZ2VVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAKaW5kZXggYmJkYjYzNS4uZTc4
ZjVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcApAQCAtMzgsNyArMzgsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1h
cChRUGl4bWFwKiBwaXhtYXApCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNv
bnZlcnRRUGl4bWFwVG9TaGFyZWFibGVCaXRtYXAoTmF0aXZlSW1hZ2UqIHBpeG1hcCkKIHsKICAg
ICBpZiAoIXBpeG1hcCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00Niw3ICs0NiwxMSBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRRUGl4bWFwVG9TaGFyZWFibGVC
aXRtYXAoUVBpeG1hcCogcGl4bQogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUocGl4bWFwLT5zaXplKCkp
LCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7
CiAKKyNpZiBVU0UoUVRfUUlNQUdFKQorICAgIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmRyYXdJbWFnZSgwLCAwLCAqcGl4bWFwKTsKKyNlbHNlCiAgICAgZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcCgwLCAwLCAqcGl4bWFwKTsKKyNlbmRp
ZgogICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4
IDEyODZiYzkuLmJhOGY1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0zOTAsNyArMzkwLDcgQEAg
aW50NjRfdCBMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGlt
YWdlKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJ
RDsKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKIAogICAgIGlmICghcGl4bWFwKQogICAgICAgICByZXR1cm4gSW52YWxp
ZFdlYkxheWVySUQ7CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmlu
ZGV4IDAzODMwODguLjkzOGYwMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVh
dHVyZXMucHJmCkBAIC0yMSw2ICsyMSw4IEBACiBDT05GSUcgKz0gdXNlX3N5c3RlbV9pY3UKIENP
TkZJRyArPSBmb3JjZV9zdGF0aWNfbGlic19hc19zaGFyZWQKIERFRklORVMgKz0gRU5BQkxFX1dF
QkdMPTAKK0RFRklORVMrPVdURl9VU0VfUVRfUUlNQUdFCitERUZJTkVTKz1XVEZfVVNFX1FUX0lN
QUdFX0RFQ09ERVI9MAogfQogCiAjIC0tLS0tLS0tLS0tLS0gUHJlcGFyZSBmb3IgZmVhdHVyZSBk
ZXRlY3Rpb24gLS0tLS0tLS0tLS0tLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147343</attachid>
            <date>2012-06-13 09:51:26 -0700</date>
            <delta_ts>2012-07-13 05:15:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>qpixmap2qimage.patch</filename>
            <type>text/plain</type>
            <size>54433</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZWJkNzZhLi42NmQ3Nzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODgg
QEAKKzIwMTItMDYtMTMgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgW1F0XSBDaGFuZ2UgTmF0aXZlSW1hZ2VQdHIgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2Uq
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdl
IHVzZSByYXN0ZXIgZW5naW5lIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBRUGl4bWFw
IGFuZCBRSW1hZ2UsIHNvIHdlIGFyZSBnb2luZworICAgICAgICB0byB1c2UgUUltYWdlIGV2ZXJ5
d2hlcmUgd2hlcmUgaXQgaXMgcG9zc2libGUuIFRoaXMgcmVmYWN0b3JpbmcgY29udGFpbnMgdGhl
IGNoYW5nZSBvZiB0aGUKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgdHlwZWRlZiBmcm9tIFFQaXht
YXAqIHRvIFFJbWFnZSogYW5kIGNvdmVycyB0aGUgcmVsYXRlZCBtb2RpZmljYXRpb25zLgorCisg
ICAgICAgIFBhcnQgb2YgdGhlIGNoYW5nZSBpcyBiYXNlZCBvbiBWaWF0Y2hlc2xhdiBPc3RhcGVu
a28ncyB3b3JrLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZDo6aW52b2tlKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoR3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAo
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJRdC5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFt
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwdXNoVHJhbnNwYXJlbmN5TGF5ZXJJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZv
cm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlQnVmZmVyRGF0YVF0Lmg6CisgICAgICAgIChJbWFnZUJ1ZmZlckRhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoZ3JhcGhp
Y3MpOgorICAgICAgICAobG9hZFJlc291cmNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzZXRQ
bGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3RpbGxJbWFnZTo6U3RpbGxJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbElt
YWdlOjp+U3RpbGxJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpjdXJyZW50
RnJhbWVIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpzaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFn
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRl
cmluZyk6CisgICAgICAgIChTdGlsbEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9UcmFuc3BhcmVuY3lMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5
TGF5ZXI6OlRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFRyYW5zcGFyZW5jeUxheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZFF0OjpjcmVhdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
UXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ3Vy
c29yUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3VzdG9tQ3Vyc29yKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Bhc3RlYm9hcmRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKwogMjAx
Mi0wNi0xMiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVt
b3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uczogc2V0TmFtZSgpIGFuZCBmb3JtQ29udHJvbE5hbWUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCm9sZCBt
b2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYzAwZmI0OS4uY2UzOTAxYwotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCkBAIC0xNDYsOCArMTQ2LDgg
QEAgcHVibGljOgogICAgICAgICBpZiAoIW9iamVjdEFyZy0+aW5oZXJpdHMoJkpTSFRNTEltYWdl
RWxlbWVudDo6c19pbmZvKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgICAgIC8vIHdlIG5vdyBrbm93IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIDxpbWc+IGVsZW1lbnQg
YXMgdGhlIGFyZ3VtZW50LCB3ZSBjYW4gYXR0YWNoIHRoZSBwaXhtYXAgdG8gaXQuCi0gICAgICAg
IFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gc3RpbGxJbWFnZSA9IFdlYkNvcmU6OlN0aWxsSW1hZ2U6
OmNyZWF0ZShpbnN0YW5jZS0+dG9QaXhtYXAoKSk7CisgICAgICAgIC8vIHdlIG5vdyBrbm93IHRo
YXQgd2UgaGF2ZSBhIHZhbGlkIDxpbWc+IGVsZW1lbnQgYXMgdGhlIGFyZ3VtZW50LCB3ZSBjYW4g
YXR0YWNoIHRoZSBpbWFnZSB0byBpdC4KKyAgICAgICAgUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxs
SW1hZ2UgPSBXZWJDb3JlOjpTdGlsbEltYWdlOjpjcmVhdGUoaW5zdGFuY2UtPnRvSW1hZ2UoKSk7
CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQqPihvYmplY3RB
cmcpLT5pbXBsKCkpOwogICAgICAgICBpbWFnZUVsZW1lbnQtPnNldENhY2hlZEltYWdlKG5ldyBD
YWNoZWRJbWFnZShzdGlsbEltYWdlLmdldCgpKSk7CiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWwgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGluc3RhbmNlLT5yb290
T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpKTsKQEAgLTM4MywxMyArMzgzLDEzIEBAIFFWYXJpYW50
IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QsIFFN
ZXRhVHlwZTo6VHlwZSBoCiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJl
dHVybkVtcHR5VmFyaWFudDsKIAotICAgICAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKCFwaXhtYXApCisgICAgICAg
IFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgICAgIGdvdG8gcmV0dXJuRW1w
dHlWYXJpYW50OwogCiAgICAgICAgIHJldHVybiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5
cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKQotICAgICAgICAgICAgICAgICAgPyBR
VmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpwaXhtYXApCi0gICAgICAgICAgICAgICAgICA6
IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihwaXhtYXAtPnRvSW1hZ2UoKSk7CisgICAgICAg
ICAgICAgICAgICA/IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4oUVBpeG1hcDo6ZnJvbUlt
YWdlKCpuYXRpdmVJbWFnZSkpCisgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFs
dWU8UUltYWdlPigqbmF0aXZlSW1hZ2UpOwogICAgIH0KIAogICAgIGlmIChvYmplY3QtPmluaGVy
aXRzKCZRdFBpeG1hcFJ1bnRpbWVPYmplY3Q6OnNfaW5mbykpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0ltYWdlLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBkZDk3MGQy
Li5lNzhhOWQzCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCkBAIC0zNiw3ICszNiw3IEBACiBP
QkpDX0NMQVNTIE5TSW1hZ2U7CiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFD
RQotY2xhc3MgUVBpeG1hcDsKK2NsYXNzIFFJbWFnZTsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlm
IFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKQEAgLTYy
LDcgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICB0
eXBlZGVmIFJldGFpblB0cjxOU0ltYWdlPiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShR
VCkKLSAgICB0eXBlZGVmIFFQaXhtYXAqIERyYWdJbWFnZVJlZjsKKyAgICB0eXBlZGVmIFFJbWFn
ZSogRHJhZ0ltYWdlUmVmOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEJJVE1B
UCBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKb2xkIG1vZGUgMTAwNjQ0Cm5l
dyBtb2RlIDEwMDc1NQppbmRleCBhZjI1MmE3Li5mNGNmY2Y5Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01MDEsNyArNTAxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSAgICAgICAg
dm9pZCBwdXNoVHJhbnNwYXJlbmN5TGF5ZXJJbnRlcm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJl
YWwgb3BhY2l0eSwgUVBpeG1hcCYgYWxwaGFNYXNrKTsKKyAgICAgICAgdm9pZCBwdXNoVHJhbnNw
YXJlbmN5TGF5ZXJJbnRlcm5hbChjb25zdCBRUmVjdCYsIHFyZWFsLCBRSW1hZ2UmKTsKICAgICAg
ICAgdm9pZCB0YWtlT3duZXJzaGlwT2ZQbGF0Zm9ybUNvbnRleHQoKTsKICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1v
ZGUgMTAwNzU1CmluZGV4IDNmZjQ4MjMuLjRmMzEyMGMKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCkBAIC01MiwxMCArNTIsNiBAQCB0eXBlZGVmIFNJWkUqIExQU0laRTsKIHR5
cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
UVQpCi0jaW5jbHVkZSA8UVBpeG1hcD4KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oR1RLKQogdHlw
ZWRlZiBzdHJ1Y3QgX0dka1BpeGJ1ZiBHZGtQaXhidWY7CiAjZW5kaWYKQEAgLTE1Nyw3ICsxNTMs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQotICAgIHN0YXRpYyB2b2lk
IHNldFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgUVBpeG1hcCYpOwor
ICAgIHN0YXRpYyB2b2lkIHNldFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgY29u
c3QgUUltYWdlJik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXgg
ZWQ2MjViYy4uNTBkZDRlYwotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKQEAgLTQzLDcgKzQzLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEq
IENGRGF0YVJlZjsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPHFnbG9iYWwuaD4KIFFU
X0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKK2NsYXNzIFFJbWFnZTsKIFFUX0VORF9O
QU1FU1BBQ0UKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJOYXRpdmVJbWFnZUNhaXJvLmgi
CkBAIC05MCw3ICs5MCw5IEBAIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNv
ZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7
CiAjZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVBpeG1hcCogTmF0aXZlSW1hZ2VQdHI7Cit0
eXBlZGVmIFFJbWFnZSogTmF0aXZlSW1hZ2VQdHI7CisjZGVmaW5lIE9QQVFVRV9JTUFHRV9GT1JN
QVQgICAgICBRSW1hZ2U6OkZvcm1hdF9SR0I4ODgKKyNkZWZpbmUgVFJBTlNQQVJFTlRfSU1BR0Vf
Rk9STUFUIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkCiAjZW5kaWYKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUK
aW5kZXggMzhlMDgzZi4uMTBiOWZiOAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMzEsNiArMzEsMTAg
QEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNs
dWRlIDxRSW1hZ2U+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9k
ZSAxMDA3NTUKaW5kZXggMzZiMDgwNi4uZmEzZjg0YwotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3Bw
CkBAIC01MCwxMCArNTAsOCBAQCBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJl
YW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCiBJbWFnZUdTdHJlYW1lcjo6SW1h
Z2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9y
bWF0IGltYWdlRm9ybWF0KQogICAgIDogbV9pbWFnZSgwKQogewotICAgIFFQaXhtYXAqIHN1cmZh
Y2UgPSBuZXcgUVBpeG1hcDsKLSAgICBRSW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZl
ciksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwotICAgIHN1cmZh
Y2UtPmNvbnZlcnRGcm9tSW1hZ2UoaW1hZ2UpOwotICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKHN1cmZhY2UpOworICAgIFFJbWFnZSogaW1hZ2UgPSBuZXcgUUltYWdlKEdTVF9CVUZG
RVJfREFUQShidWZmZXIpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGltYWdlRm9ybWF0
KTsKKyAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShpbWFnZSk7CiB9CiAKIEltYWdl
R1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApvbGQgbW9k
ZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDJmNTI2MjEuLjFjOTMxMjQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKQEAgLTQ4OCwxMCArNDg4LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAgICAvLyBJcyBpbWFnZSBhbHJlYWR5IGxvYWRlZD8g
SWYgbm90LCBsb2FkIGl0LgogICAgIGlmIChpbWFnZS0+ZGF0YSgpKQogICAgICAgICBuYXRpdmVJ
bWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGlt
YWdlLT5kYXRhKCktPmRhdGEoKSksIGltYWdlLT5kYXRhKCktPnNpemUoKSkuY29udmVydFRvRm9y
bWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFFQaXhtYXAq
IG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAg
ICAgICBuYXRpdmVJbWFnZSA9IG5hdGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1h
dChRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIG5hdGl2
ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPmNvbnZlcnRUb0Zv
cm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworCiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9w
ID0gQWxwaGFEb05vdGhpbmc7CiAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgIG5l
ZWRlZEFscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKb2xkIG1v
ZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2NDJhMWE1Li4xMWQwYWVjCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAKQEAgLTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBs
YXRmb3JtU2hhZG93KCkKICAgICBtX2RhdGEtPnNoYWRvdy0+Y2xlYXIoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0
ICZyZWN0LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3QgJnJlY3Qs
IHFyZWFsIG9wYWNpdHksIFFJbWFnZSYgYWxwaGFNYXNrKQogewogICAgIFFQYWludGVyKiBwID0g
bV9kYXRhLT5wKCk7CiAKQEAgLTEwNjMsNyArMTA2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICAgICAg
aCA9IGludChxQm91bmQocXJlYWwoMCksIGRldmljZUNsaXAuaGVpZ2h0KCksIChxcmVhbCloKSAr
IDIpOwogICAgIH0KIAotICAgIFFQaXhtYXAgZW1wdHlBbHBoYU1hc2s7CisgICAgUUltYWdlIGVt
cHR5QWxwaGFNYXNrOwogICAgIG1fZGF0YS0+bGF5ZXJzLnB1c2gobmV3IFRyYW5zcGFyZW5jeUxh
eWVyKHAsIFFSZWN0KHgsIHksIHcsIGgpLCBvcGFjaXR5LCBlbXB0eUFscGhhTWFzaykpOwogICAg
ICsrbV9kYXRhLT5sYXllckNvdW50OwogfQpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGlmICghbGF5
ZXItPmFscGhhTWFzay5pc051bGwoKSkgewogICAgICAgICBsYXllci0+cGFpbnRlci5yZXNldFRy
YW5zZm9ybSgpOwogICAgICAgICBsYXllci0+cGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKLSAgICAgICAgbGF5ZXItPnBh
aW50ZXIuZHJhd1BpeG1hcChRUG9pbnQoKSwgbGF5ZXItPmFscGhhTWFzayk7CisgICAgICAgIGxh
eWVyLT5wYWludGVyLmRyYXdJbWFnZShRUG9pbnQoKSwgbGF5ZXItPmFscGhhTWFzayk7CiAgICAg
fSBlbHNlCiAgICAgICAgIC0tbV9kYXRhLT5sYXllckNvdW50OyAvLyBzZWUgdGhlIGNvbW1lbnQg
Zm9yIGxheWVyQ291bnQKICAgICBsYXllci0+cGFpbnRlci5lbmQoKTsKQEAgLTEwODYsNyArMTA4
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVy
KCkKICAgICBwLT5zYXZlKCk7CiAgICAgcC0+cmVzZXRUcmFuc2Zvcm0oKTsKICAgICBwLT5zZXRP
cGFjaXR5KGxheWVyLT5vcGFjaXR5KTsKLSAgICBwLT5kcmF3UGl4bWFwKGxheWVyLT5vZmZzZXQs
IGxheWVyLT5waXhtYXApOworICAgIHAtPmRyYXdJbWFnZShsYXllci0+b2Zmc2V0LCBsYXllci0+
aW1hZ2UpOwogICAgIHAtPnJlc3RvcmUoKTsKIAogICAgIGRlbGV0ZSBsYXllcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0YVF0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGFR
dC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOWNmNzgyYi4uOTQwNjVk
MwotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRh
dGFRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyRGF0YVF0LmgKQEAgLTI1LDggKzI1LDggQEAKIAogI2luY2x1ZGUgIkltYWdlLmgiCiAKKyNp
bmNsdWRlIDxRSW1hZ2U+CiAjaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBpeG1hcD4K
IAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0z
OSw5ICszOSw3IEBAIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CiBwdWJsaWM6CiAgICAgSW1hZ2VC
dWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsKIAotICAgIFFJbWFnZSB0b1FJbWFnZSgpIGNvbnN0
OwotCi0gICAgUVBpeG1hcCBtX3BpeG1hcDsKKyAgICBRSW1hZ2UgbV9uYXRpdmVJbWFnZTsKICAg
ICBPd25QdHI8UVBhaW50ZXI+IG1fcGFpbnRlcjsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZUJ1ZmZlclF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGI5Yjll
YmYuLjk3MWUxZTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAKQEAgLTQyLDIzICs0MiwyMiBAQAogI2luY2x1ZGUgPFFJbWFnZT4K
ICNpbmNsdWRlIDxRSW1hZ2VXcml0ZXI+CiAjaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8
UVBpeG1hcD4KICNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6
IG1fcGl4bWFwKHNpemUpCisgICAgOiBtX25hdGl2ZUltYWdlKHNpemUsIE9QQVFVRV9JTUFHRV9G
T1JNQVQpCiB7Ci0gICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpKQorICAgIGlmIChtX25hdGl2ZUlt
YWdlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BpeG1hcC5maWxsKFFDb2xv
cihRdDo6dHJhbnNwYXJlbnQpKTsKKyAgICBtX25hdGl2ZUltYWdlLmZpbGwoUUNvbG9yKFF0Ojp0
cmFuc3BhcmVudCkpOwogCiAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBuZXcgUVBhaW50ZXI7CiAg
ICAgbV9wYWludGVyID0gYWRvcHRQdHIocGFpbnRlcik7CiAKLSAgICBpZiAoIXBhaW50ZXItPmJl
Z2luKCZtX3BpeG1hcCkpCisgICAgaWYgKCFwYWludGVyLT5iZWdpbigmbV9uYXRpdmVJbWFnZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNpbmNlIEltYWdlQnVmZmVyIGlzIHVzZWQgbWFp
bmx5IGZvciBDYW52YXMsIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZQpAQCAtNzYsMjIgKzc1LDcgQEAg
SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAg
ICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7CiAgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25N
b2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7CiAgICAgCi0gICAgbV9p
bWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9waXhtYXApOwotfQotCi1R
SW1hZ2UgSW1hZ2VCdWZmZXJEYXRhOjp0b1FJbWFnZSgpIGNvbnN0Ci17Ci0gICAgUVBhaW50RW5n
aW5lKiBwYWludEVuZ2luZSA9IG1fcGl4bWFwLnBhaW50RW5naW5lKCk7Ci0gICAgaWYgKCFwYWlu
dEVuZ2luZSB8fCBwYWludEVuZ2luZS0+dHlwZSgpICE9IFFQYWludEVuZ2luZTo6UmFzdGVyKQot
ICAgICAgICByZXR1cm4gbV9waXhtYXAudG9JbWFnZSgpOwotCi0gICAgLy8gUVJhc3RlclBpeG1h
cERhdGE6OnRvSW1hZ2UoKSB3aWxsIGRlZXAtY29weSB0aGUgYmFja2luZyBRSW1hZ2UgaWYgdGhl
cmUncyBhbiBhY3RpdmUgUVBhaW50ZXIgb24gaXQuCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMsIHdlIGRvbid0IHdhbnQgdGhhdCBoZXJlLCBzbyB3ZSB0ZW1wb3JhcmlseSByZWRpcmVj
dCB0aGUgcGFpbnQgZW5naW5lLgotICAgIFFQYWludERldmljZSogY3VycmVudFBhaW50RGV2aWNl
ID0gcGFpbnRFbmdpbmUtPnBhaW50RGV2aWNlKCk7Ci0gICAgcGFpbnRFbmdpbmUtPnNldFBhaW50
RGV2aWNlKDApOwotICAgIFFJbWFnZSBpbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsKLSAgICBw
YWludEVuZ2luZS0+c2V0UGFpbnREZXZpY2UoY3VycmVudFBhaW50RGV2aWNlKTsKLSAgICByZXR1
cm4gaW1hZ2U7CisgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygm
bV9uYXRpdmVJbWFnZSk7CiB9CiAKIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8sIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUsIERlZmVycmFsTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTEyMCw5ICsxMDQsOSBA
QCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIFBhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IpIGNvbnN0CiB7CiAgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3Jl
KQotICAgICAgICByZXR1cm4gU3RpbGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5tX3BpeG1hcCk7Cisg
ICAgICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwog
Ci0gICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4
bWFwKTsKKyAgICByZXR1cm4gU3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKCZtX2RhdGEu
bV9uYXRpdmVJbWFnZSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKQEAgLTE0OSwxMiArMTMz
LDEyIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjCiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkgY29u
c3QKIHsKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBtX2RhdGEu
bV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIW5hdGl2ZUlt
YWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGZsb2F0UmVjdCk7Ci0gICAgUVBpeG1hcCBhbHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7Cisg
ICAgUUltYWdlIGFscGhhTWFzayA9ICpuYXRpdmVJbWFnZTsKIAogICAgIGNvbnRleHQtPnB1c2hU
cmFuc3BhcmVuY3lMYXllckludGVybmFsKHJlY3QsIDEuMCwgYWxwaGFNYXNrKTsKIH0KQEAgLTE2
NSw3ICsxNDksNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAgIGlmIChpc1BhaW50aW5nKQog
ICAgICAgICBtX2RhdGEubV9wYWludGVyLT5lbmQoKTsKIAotICAgIFFJbWFnZSBpbWFnZSA9IG1f
ZGF0YS50b1FJbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwor
ICAgIFFJbWFnZSBpbWFnZSA9IG1fZGF0YS5tX25hdGl2ZUltYWdlOwogICAgIEFTU0VSVCghaW1h
Z2UuaXNOdWxsKCkpOwogCiAgICAgdWNoYXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7CkBAIC0xODIs
MTAgKzE2NiwxMCBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV9kYXRhLm1fcGl4bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKGltYWdlKTsKKyAgICBtX2Rh
dGEubV9uYXRpdmVJbWFnZSA9IGltYWdlOwogCiAgICAgaWYgKGlzUGFpbnRpbmcpCi0gICAgICAg
IG1fZGF0YS5tX3BhaW50ZXItPmJlZ2luKCZtX2RhdGEubV9waXhtYXApOworICAgICAgICBtX2Rh
dGEubV9wYWludGVyLT5iZWdpbigmbV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwogfQogCiB0ZW1wbGF0
ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KQEAgLTIyNCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW1hZ2VCdWZmZQogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CiAKICAgICAvLyBO
T1RFOiBGb3IgdW5tdWx0aXBsaWVkIGRhdGEsIHdlIHVuZG8gdGhlIHByZW11bHRpcGxpY2F0aW9u
IGJlbG93LgotICAgIFFJbWFnZSBpbWFnZSA9IGltYWdlRGF0YS50b1FJbWFnZSgpLmNvbnZlcnRU
b0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgUUltYWdl
IGltYWdlID0gaW1hZ2VEYXRhLm1fbmF0aXZlSW1hZ2UuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6
Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKIAogICAgIEFTU0VSVCghaW1hZ2UuaXNOdWxs
KCkpOwogCkBAIC0zNTgsNyArMzQyLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2UsIGMKIAogICAg
IGJvb2wgaXNQYWludGluZyA9IG1fZGF0YS5tX3BhaW50ZXItPmlzQWN0aXZlKCk7CiAgICAgaWYg
KCFpc1BhaW50aW5nKQotICAgICAgICBtX2RhdGEubV9wYWludGVyLT5iZWdpbigmbV9kYXRhLm1f
cGl4bWFwKTsKKyAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+YmVnaW4oJm1fZGF0YS5tX25hdGl2
ZUltYWdlKTsKICAgICBlbHNlIHsKICAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+c2F2ZSgpOwog
CkBAIC0zNzcsNyArMzYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRp
cGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2UsIGMKICAgICAgICAgbV9k
YXRhLm1fcGFpbnRlci0+cmVzdG9yZSgpOwogfQogCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShj
b25zdCBRUGl4bWFwJiBwaXhtYXAsIGNvbnN0IFN0cmluZyYgZm9ybWF0LCBjb25zdCBkb3VibGUq
IHF1YWxpdHksIFFCeXRlQXJyYXkmIGRhdGEpCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjb25z
dCBRSW1hZ2UmIGltYWdlLCBjb25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgZG91YmxlKiBxdWFs
aXR5LCBRQnl0ZUFycmF5JiBkYXRhKQogewogICAgIGludCBjb21wcmVzc2lvblF1YWxpdHkgPSAx
MDA7CiAgICAgaWYgKHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEu
MCkKQEAgLTM4NSw3ICszNjksNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjb25zdCBRUGl4
bWFwJiBwaXhtYXAsIGNvbnN0IFN0cmluZyYgZm9ybWF0LCBjb25zdCBkb3VibAogCiAgICAgUUJ1
ZmZlciBidWZmZXIoJmRhdGEpOwogICAgIGJ1ZmZlci5vcGVuKFFCdWZmZXI6OldyaXRlT25seSk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGl4bWFwLnNhdmUoJmJ1ZmZlciwgZm9ybWF0LnV0ZjgoKS5k
YXRhKCksIGNvbXByZXNzaW9uUXVhbGl0eSk7CisgICAgYm9vbCBzdWNjZXNzID0gaW1hZ2Uuc2F2
ZSgmYnVmZmVyLCBmb3JtYXQudXRmOCgpLmRhdGEoKSwgY29tcHJlc3Npb25RdWFsaXR5KTsKICAg
ICBidWZmZXIuY2xvc2UoKTsKIAogICAgIHJldHVybiBzdWNjZXNzOwpAQCAtMzk3LDEwICszODEs
MTAgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBDb28KIAogICAgIC8vIFFJbWFnZVdyaXRlciBkb2Vz
IG5vdCBzdXBwb3J0IG1pbWV0eXBlcy4gSXQgZG9lcyBzdXBwb3J0IFF0IGltYWdlIGZvcm1hdHMg
KHBuZywKICAgICAvLyBnaWYsIGpwZWcuLi4sIHhwbSkgc28gc2tpcCB0aGUgaW1hZ2UvIHRvIGdl
dCB0aGUgUXQgaW1hZ2UgZm9ybWF0IHVzZWQgdG8gZW5jb2RlCi0gICAgLy8gdGhlIG1fcGl4bWFw
IGltYWdlLgorICAgIC8vIHRoZSBtX25hdGl2ZUltYWdlIGltYWdlLgogCiAgICAgUUJ5dGVBcnJh
eSBkYXRhOwotICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fcGl4bWFwLCBtaW1lVHlwZS5z
dWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpLCBxdWFsaXR5LCBkYXRhKSkKKyAgICBpZiAoIWVuY29k
ZUltYWdlKG1fZGF0YS5tX25hdGl2ZUltYWdlLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJp
bWFnZSIpLCBxdWFsaXR5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCiAgICAg
cmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBkYXRhLnRvQmFzZTY0KCku
ZGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VEZWNvZGVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VEZWNvZGVyUXQuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXgg
ZTAzNjM2Zi4uYWU0MGZiNgotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZURlY29kZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCkBAIC0yNzQsNyArMjc0LDcgQEAgTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CiAKICAgICBRSW1hZ2UgaW1n
KHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihtX2J5dGVzKSwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSwgc2l6ZW9mKFBpeGVsRGF0YSkgKiBtX3NpemUud2lkdGgoKSwgZm9ybWF0KTsK
IAotICAgIHJldHVybiBuZXcgUVBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoaW1nKSk7CisgICAg
cmV0dXJuIG5ldyBRSW1hZ2UoaW1nKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAw
NzU1CmluZGV4IDY5MjI3YmMuLjMzYzllMzUKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAKIAogI2luY2x1ZGUgPG1hdGgu
aD4KIAotdHlwZWRlZiBRSGFzaDxRQnl0ZUFycmF5LCBRUGl4bWFwPiBXZWJHcmFwaGljSGFzaDsK
K3R5cGVkZWYgUUhhc2g8UUJ5dGVBcnJheSwgUUltYWdlPiBXZWJHcmFwaGljSGFzaDsKIFFfR0xP
QkFMX1NUQVRJQyhXZWJHcmFwaGljSGFzaCwgX2dyYXBoaWNzKQogCiBzdGF0aWMgdm9pZCBlYXJs
eUNsZWFyR3JhcGhpY3MoKQpAQCAtNjUsMjggKzY1LDI4IEBAIHN0YXRpYyBXZWJHcmFwaGljSGFz
aCogZ3JhcGhpY3MoKQogCiAgICAgaWYgKGhhc2gtPmlzRW1wdHkoKSkgewogCi0gICAgICAgIC8v
IHByZXZlbnQgflFQaXhtYXAgcnVubmluZyBhZnRlciB+UUFwcGxpY2F0aW9uIChsZWFrcyBuYXRp
dmUgcGl4bWFwcykKKyAgICAgICAgLy8gcHJldmVudCB+UUltYWdlIHJ1bm5pbmcgYWZ0ZXIgflFB
cHBsaWNhdGlvbiAobGVha3MgbmF0aXZlIGltYWdlcykKICAgICAgICAgcUFkZFBvc3RSb3V0aW5l
KGVhcmx5Q2xlYXJHcmFwaGljcyk7CiAKICAgICAgICAgLy8gUVdlYlNldHRpbmdzOjpNaXNzaW5n
SW1hZ2VHcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgibWlzc2luZ0ltYWdlIiwgUVBpeG1h
cChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9taXNzaW5nSW1hZ2UucG5nIikpKTsK
KyAgICAgICAgaGFzaC0+aW5zZXJ0KCJtaXNzaW5nSW1hZ2UiLCBRSW1hZ2UoUUxhdGluMVN0cmlu
ZygiOndlYmtpdC9yZXNvdXJjZXMvbWlzc2luZ0ltYWdlLnBuZyIpKSk7CiAgICAgICAgIC8vIFFX
ZWJTZXR0aW5nczo6TWlzc2luZ1BsdWdpbkdyYXBoaWMKLSAgICAgICAgaGFzaC0+aW5zZXJ0KCJu
dWxsUGx1Z2luIiwgUVBpeG1hcChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9udWxs
UGx1Z2luLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgibnVsbFBsdWdpbiIsIFFJbWFn
ZShRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9udWxsUGx1Z2luLnBuZyIpKSk7CiAg
ICAgICAgIC8vIFFXZWJTZXR0aW5nczo6RGVmYXVsdEZyYW1lSWNvbkdyYXBoaWMKLSAgICAgICAg
aGFzaC0+aW5zZXJ0KCJ1cmxJY29uIiwgUVBpeG1hcChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jl
c291cmNlcy91cmxJY29uLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgidXJsSWNvbiIs
IFFJbWFnZShRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy91cmxJY29uLnBuZyIpKSk7
CiAgICAgICAgIC8vIFFXZWJTZXR0aW5nczo6VGV4dEFyZWFTaXplR3JpcENvcm5lckdyYXBoaWMK
LSAgICAgICAgaGFzaC0+aW5zZXJ0KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIsIFFQaXhtYXAoUUxh
dGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvdGV4dEFyZWFSZXNpemVDb3JuZXIucG5nIikp
KTsKKyAgICAgICAgaGFzaC0+aW5zZXJ0KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIsIFFJbWFnZShR
TGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy90ZXh0QXJlYVJlc2l6ZUNvcm5lci5wbmci
KSkpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6OkRlbGV0ZUJ1dHRvbkdyYXBoaWMKLSAgICAg
ICAgaGFzaC0+aW5zZXJ0KCJkZWxldGVCdXR0b24iLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3
ZWJraXQvcmVzb3VyY2VzL2RlbGV0ZUJ1dHRvbi5wbmciKSkpOworICAgICAgICBoYXNoLT5pbnNl
cnQoImRlbGV0ZUJ1dHRvbiIsIFFJbWFnZShRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNl
cy9kZWxldGVCdXR0b24ucG5nIikpKTsKICAgICAgICAgLy8gUVdlYlNldHRpbmdzOjpJbnB1dFNw
ZWVjaEJ1dHRvbkdyYXBoaWMKLSAgICAgICAgaGFzaC0+aW5zZXJ0KCJpbnB1dFNwZWVjaCIsIFFQ
aXhtYXAoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvaW5wdXRTcGVlY2gucG5nIikp
KTsKKyAgICAgICAgaGFzaC0+aW5zZXJ0KCJpbnB1dFNwZWVjaCIsIFFJbWFnZShRTGF0aW4xU3Ry
aW5nKCI6d2Via2l0L3Jlc291cmNlcy9pbnB1dFNwZWVjaC5wbmciKSkpOwogICAgIH0KIAogICAg
IHJldHVybiBoYXNoOwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBpbnRv
IFdlYktpdAotc3RhdGljIFFQaXhtYXAgbG9hZFJlc291cmNlUGl4bWFwKGNvbnN0IGNoYXIgKm5h
bWUpCitzdGF0aWMgUUltYWdlIGxvYWRSZXNvdXJjZUltYWdlKGNvbnN0IGNoYXIgKm5hbWUpCiB7
CiAgICAgcmV0dXJuIGdyYXBoaWNzKCktPnZhbHVlKG5hbWUpOwogfQpAQCAtMTEzLDIzICsxMTMs
MjMgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAogUGFzc1Jl
ZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUp
CiB7Ci0gICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFt
ZSkpOworICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobG9hZFJlc291cmNlSW1hZ2UobmFt
ZSkpOwogfQogCi12b2lkIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKK3ZvaWQgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3Vy
Y2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgUUltYWdlJiBpbWFnZSkKIHsKICAgICBXZWJHcmFw
aGljSGFzaCogaCA9IGdyYXBoaWNzKCk7Ci0gICAgaWYgKHBpeG1hcC5pc051bGwoKSkKKyAgICBp
ZiAoaW1hZ2UuaXNOdWxsKCkpCiAgICAgICAgIGgtPnJlbW92ZShuYW1lKTsKICAgICBlbHNlCi0g
ICAgICAgIGgtPmluc2VydChuYW1lLCBwaXhtYXApOworICAgICAgICBoLT5pbnNlcnQobmFtZSwg
aW1hZ2UpOwogfQogCiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKLSAgICBRUGl4bWFwKiBmcmFtZVBpeG1hcCA9IG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZVBpeG1hcCkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgUUltYWdlKiBmcmFtZUltYWdlID0g
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UpIC8vIElm
IGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1
cm47CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtMTQ0LDM0
ICsxNDQsMzggQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgIGlmICghZHIud2lkdGgoKSB8
fCAhZHIuaGVpZ2h0KCkgfHwgIXRyLndpZHRoKCkgfHwgIXRyLmhlaWdodCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBRUGl4bWFwIHBpeG1hcCA9ICpmcmFtZVBpeG1hcDsKLSAgICBpZiAodHIu
eCgpIHx8IHRyLnkoKSB8fCB0ci53aWR0aCgpICE9IHBpeG1hcC53aWR0aCgpIHx8IHRyLmhlaWdo
dCgpICE9IHBpeG1hcC5oZWlnaHQoKSkKLSAgICAgICAgcGl4bWFwID0gcGl4bWFwLmNvcHkodHIp
OworICAgIFFJbWFnZSBpbWFnZSA9ICpmcmFtZUltYWdlOworICAgIGlmICh0ci54KCkgfHwgdHIu
eSgpIHx8IHRyLndpZHRoKCkgIT0gaW1hZ2Uud2lkdGgoKSB8fCB0ci5oZWlnaHQoKSAhPSBpbWFn
ZS5oZWlnaHQoKSkKKyAgICAgICAgaW1hZ2UgPSBpbWFnZS5jb3B5KHRyKTsKIAogICAgIENvbXBv
c2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjdHh0LT5jb21wb3NpdGVPcGVyYXRpb24o
KTsKIAotICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighcGl4bWFwLmhhc0FscGhhKCkg
JiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CisgICAg
Y3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKSAmJiBv
cCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKIAogICAgIFFQ
YWludGVyKiBwID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUVRyYW5zZm9ybSB0cmFu
c2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7CiAKLSAgICAvLyBJZiB0aGlzIHdvdWxkIGRyYXcgbW9y
ZSB0aGFuIG9uZSBzY2FsZWQgdGlsZSwgd2Ugc2NhbGUgdGhlIHBpeG1hcCBmaXJzdCBhbmQgdGhl
biB1c2UgdGhlIHJlc3VsdCB0byBkcmF3LgorICAgIC8vIElmIHRoaXMgd291bGQgZHJhdyBtb3Jl
IHRoYW4gb25lIHNjYWxlZCB0aWxlLCB3ZSBzY2FsZSB0aGUgaW1hZ2UgZmlyc3QgYW5kIHRoZW4g
dXNlIHRoZSByZXN1bHQgdG8gZHJhdy4KICAgICBpZiAodHJhbnNmb3JtLnR5cGUoKSA9PSBRVHJh
bnNmb3JtOjpUeFNjYWxlKSB7CiAgICAgICAgIFFSZWN0RiB0aWxlUmVjdEluVGFyZ2V0Q29vcmRz
ID0gKHRyYW5zZm9ybSAqIFFUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGhhc2UueCgpLCBwaGFzZS55
KCkpKS5tYXBSZWN0KHRyKTsKIAogICAgICAgICBib29sIHRpbGVXaWxsQmVQYWludGVkT25seU9u
Y2UgPSB0aWxlUmVjdEluVGFyZ2V0Q29vcmRzLmNvbnRhaW5zKGRyKTsKICAgICAgICAgaWYgKCF0
aWxlV2lsbEJlUGFpbnRlZE9ubHlPbmNlKSB7Ci0gICAgICAgICAgICBRU2l6ZUYgc2NhbGVkU2l6
ZShmbG9hdChwaXhtYXAud2lkdGgoKSkgKiB0cmFuc2Zvcm0ubTExKCksIGZsb2F0KHBpeG1hcC5o
ZWlnaHQoKSkgKiB0cmFuc2Zvcm0ubTIyKCkpOwotICAgICAgICAgICAgUVBpeG1hcCBzY2FsZWRQ
aXhtYXAoc2NhbGVkU2l6ZS50b1NpemUoKSk7Ci0gICAgICAgICAgICBpZiAocGl4bWFwLmhhc0Fs
cGhhKCkpCi0gICAgICAgICAgICAgICAgc2NhbGVkUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50
KTsKKyAgICAgICAgICAgIFFTaXplRiBzY2FsZWRTaXplKGZsb2F0KGltYWdlLndpZHRoKCkpICog
dHJhbnNmb3JtLm0xMSgpLCBmbG9hdChpbWFnZS5oZWlnaHQoKSkgKiB0cmFuc2Zvcm0ubTIyKCkp
OworICAgICAgICAgICAgUUltYWdlIHNjYWxlZEltYWdlOworICAgICAgICAgICAgaWYgKGltYWdl
Lmhhc0FscGhhQ2hhbm5lbCgpKSB7CisgICAgICAgICAgICAgICAgc2NhbGVkSW1hZ2UgPSBRSW1h
Z2Uoc2NhbGVkU2l6ZS50b1NpemUoKSwgVFJBTlNQQVJFTlRfSU1BR0VfRk9STUFUKTsKKyAgICAg
ICAgICAgICAgICBzY2FsZWRJbWFnZS5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY2FsZWRJbWFnZSA9IFFJbWFnZShzY2FsZWRTaXpl
LnRvU2l6ZSgpLCBPUEFRVUVfSU1BR0VfRk9STUFUKTsKKwogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnNjYWxlZFBpeG1hcCk7CisgICAgICAgICAgICAg
ICAgUVBhaW50ZXIgcGFpbnRlcigmc2NhbGVkSW1hZ2UpOwogICAgICAgICAgICAgICAgIHBhaW50
ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsK
ICAgICAgICAgICAgICAgICBwYWludGVyLnNldFJlbmRlckhpbnRzKHAtPnJlbmRlckhpbnRzKCkp
OwotICAgICAgICAgICAgICAgIHBhaW50ZXIuZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBzY2FsZWRQ
aXhtYXAud2lkdGgoKSwgc2NhbGVkUGl4bWFwLmhlaWdodCgpKSwgcGl4bWFwKTsKKyAgICAgICAg
ICAgICAgICBwYWludGVyLmRyYXdJbWFnZShRUmVjdCgwLCAwLCBzY2FsZWRJbWFnZS53aWR0aCgp
LCBzY2FsZWRJbWFnZS5oZWlnaHQoKSksIGltYWdlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHBpeG1hcCA9IHNjYWxlZFBpeG1hcDsKKyAgICAgICAgICAgIGltYWdlID0gc2NhbGVkSW1h
Z2U7CiAgICAgICAgICAgICB0cmFuc2Zvcm0gPSBRVHJhbnNmb3JtOjpmcm9tVHJhbnNsYXRlKHRy
YW5zZm9ybS5keCgpLCB0cmFuc2Zvcm0uZHkoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODAs
NyArMTg0LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgIHRyYW5zZm9ybSAqPSBRVHJh
bnNmb3JtKCkudHJhbnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgpKTsKICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKHRyLngoKSwgdHIueSgpKTsKIAotICAgIFFCcnVzaCBiKHBpeG1hcCk7CisgICAg
UUJydXNoIGIoaW1hZ2UpOwogICAgIGIuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgcC0+
ZmlsbFJlY3QoZHIsIGIpOwogCkBAIC0xOTAsNyArMTk0LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLUJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShRUGl4bWFwKiBwaXhtYXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQorQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFFJbWFnZSogaW1hZ2UsIEltYWdlT2JzZXJ2
ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2N1cnJlbnRGcmFt
ZSgwKQogICAgICwgbV9mcmFtZXMoMCkKQEAgLTIwOCwxNCArMjEyLDE0IEBAIEJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZShRUGl4bWFwKiBwaXhtYXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQog
ICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCiAgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUp
CiB7Ci0gICAgaW50IHdpZHRoID0gcGl4bWFwLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBw
aXhtYXAtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IGltYWdlLT53aWR0aCgpOworICAgIGlu
dCBoZWlnaHQgPSBpbWFnZS0+aGVpZ2h0KCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICog
aGVpZ2h0ICogNDsKICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCiAgICAg
bV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gcGl4bWFwOwotICAg
IG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBwaXhtYXAtPmhhc0FscGhhKCk7CisgICAgbV9mcmFt
ZXNbMF0ubV9mcmFtZSA9IGltYWdlOworICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBpbWFn
ZS0+aGFzQWxwaGFDaGFubmVsKCk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0
cnVlOwogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQpAQCAtMjM2LDcgKzI0MCw4IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwKICAgICBpZiAobm9ybWFsaXplZFNyYy5pc0VtcHR5KCkgfHwgbm9ybWFsaXplZERz
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQaXhtYXAqIGltYWdlID0gbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBRSW1hZ2UqIGltYWdlID0gbmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjUwLDE5ICsyNTUsMTkgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogI2VuZGlmCiAKICAgICBDb21wb3Np
dGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7
Ci0gICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBv
cCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKKyAgICBjdHh0
LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oIWltYWdlLT5oYXNBbHBoYUNoYW5uZWwoKSAmJiBvcCA9
PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKIAogICAgIGlmIChj
dHh0LT5oYXNTaGFkb3coKSkgewogICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBjdHh0LT5z
aGFkb3dCbHVyKCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVkRHN0KTsKICAgICAgICAgaWYg
KHNoYWRvd0NvbnRleHQpIHsKICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0g
c2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7Cisg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKmltYWdl
LCBub3JtYWxpemVkU3JjKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4
dCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJh
d1BpeG1hcChub3JtYWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOworICAgIGN0eHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKmltYWdlLCBub3Jt
YWxpemVkU3JjKTsKIAogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09w
ZXJhdG9yKTsKIApAQCAtMjc4LDEyICsyODMsMTIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tG
b3JTb2xpZENvbG9yKCkKICAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBmcmFtZUF0SW5kZXgoMCk7Ci0gICAgaWYg
KCFmcmFtZVBpeG1hcCB8fCBmcmFtZVBpeG1hcC0+d2lkdGgoKSAhPSAxIHx8IGZyYW1lUGl4bWFw
LT5oZWlnaHQoKSAhPSAxKQorICAgIFFJbWFnZSogZnJhbWVJbWFnZSA9IGZyYW1lQXRJbmRleCgw
KTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UgfHwgZnJhbWVJbWFnZS0+d2lkdGgoKSAhPSAxIHx8IGZy
YW1lSW1hZ2UtPmhlaWdodCgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTb2xp
ZENvbG9yID0gdHJ1ZTsKLSAgICBtX3NvbGlkQ29sb3IgPSBRQ29sb3I6OmZyb21SZ2JhKGZyYW1l
UGl4bWFwLT50b0ltYWdlKCkucGl4ZWwoMCwgMCkpOworICAgIG1fc29saWRDb2xvciA9IFFDb2xv
cjo6ZnJvbVJnYmEoZnJhbWVJbWFnZS0+cGl4ZWwoMCwgMCkpOwogfQogCiAjaWYgT1MoV0lORE9X
UykKQEAgLTI5NSwxMiArMzAwLDEyIEBAIFFfR1VJX0VYUE9SVCBRUGl4bWFwIHF0X3BpeG1hcEZy
b21XaW5IQklUTUFQKEhCSVRNQVAsIGludCBoYml0bWFwRm9ybWF0ID0gMCk7CiBQYXNzUmVmUHRy
PEJpdG1hcEltYWdlPiBCaXRtYXBJbWFnZTo6Y3JlYXRlKEhCSVRNQVAgaEJpdG1hcCkKIHsKICNp
ZiBIQVZFKFFUNSkKLSAgICBRUGl4bWFwKiBxUGl4bWFwID0gbmV3IFFQaXhtYXAocXRfcGl4bWFw
RnJvbVdpbkhCSVRNQVAoaEJpdG1hcCkpOworICAgIFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBuZXcg
UUltYWdlKHF0X3BpeG1hcEZyb21XaW5IQklUTUFQKGhCaXRtYXApLnRvSW1hZ2UoKSk7CiAjZWxz
ZQotICAgIFFQaXhtYXAqIHFQaXhtYXAgPSBuZXcgUVBpeG1hcChRUGl4bWFwOjpmcm9tV2luSEJJ
VE1BUChoQml0bWFwKSk7CisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IG5ldyBRSW1hZ2UoUVBp
eG1hcDo6ZnJvbVdpbkhCSVRNQVAoaEJpdG1hcCkudG9JbWFnZSgpKTsKICNlbmRpZgogCi0gICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUocVBpeG1hcCk7CisgICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUobmF0aXZlSW1hZ2UpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCm9sZCBtb2RlIDEwMDY0NApu
ZXcgbW9kZSAxMDA3NTUKaW5kZXggYWY3YjEyOC4uNjU0YzE5YQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAKQEAgLTMzLDEyICszMywxMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFFCcnVzaCBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3QKIHsKLSAgICBRUGl4bWFwKiBwaXhtYXAg
PSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBp
eG1hcCkKKyAgICBRSW1hZ2UqIGltYWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIFFCcnVzaCgpOwog
CiAgICAgLy8gUXQgbWVyZ2VzIHBhdHRlciBzcGFjZSBhbmQgdXNlciBzcGFjZSBpdHNlbGYKLSAg
ICBRQnJ1c2ggYnJ1c2goKnBpeG1hcCk7CisgICAgUUJydXNoIGJydXNoKCppbWFnZSk7CiAgICAg
YnJ1c2guc2V0VHJhbnNmb3JtKG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOwogCiAgICAg
cmV0dXJuIGJydXNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1N0aWxsSW1hZ2VRdC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCA4MDY2NmJhLi4wNDEyNTIwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1N0aWxsSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvU3RpbGxJbWFnZVF0LmNwcApAQCAtMzYsNDEgKzM2LDQxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU3RpbGxJbWFnZTo6U3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXAp
Ci0gICAgOiBtX3BpeG1hcChuZXcgUVBpeG1hcChwaXhtYXApKQotICAgICwgbV9vd25zUGl4bWFw
KHRydWUpCitTdGlsbEltYWdlOjpTdGlsbEltYWdlKGNvbnN0IFFJbWFnZSYgaW1hZ2UpCisgICAg
OiBtX2ltYWdlKG5ldyBRSW1hZ2UoaW1hZ2UpKQorICAgICwgbV9vd25zSW1hZ2UodHJ1ZSkKIHt9
CiAKLVN0aWxsSW1hZ2U6OlN0aWxsSW1hZ2UoY29uc3QgUVBpeG1hcCogcGl4bWFwKQotICAgIDog
bV9waXhtYXAocGl4bWFwKQotICAgICwgbV9vd25zUGl4bWFwKGZhbHNlKQorU3RpbGxJbWFnZTo6
U3RpbGxJbWFnZShjb25zdCBRSW1hZ2UqIGltYWdlKQorICAgIDogbV9pbWFnZShpbWFnZSkKKyAg
ICAsIG1fb3duc0ltYWdlKGZhbHNlKQoge30KIAogU3RpbGxJbWFnZTo6flN0aWxsSW1hZ2UoKQog
ewotICAgIGlmIChtX293bnNQaXhtYXApCi0gICAgICAgIGRlbGV0ZSBtX3BpeG1hcDsKKyAgICBp
ZiAobV9vd25zSW1hZ2UpCisgICAgICAgIGRlbGV0ZSBtX2ltYWdlOwogfQogCiBib29sIFN0aWxs
SW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKCkKIHsKLSAgICByZXR1cm4gbV9waXhtYXAtPmhh
c0FscGhhKCk7CisgICAgcmV0dXJuIG1faW1hZ2UtPmhhc0FscGhhQ2hhbm5lbCgpOwogfQogCiBJ
bnRTaXplIFN0aWxsSW1hZ2U6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBJbnRTaXplKG1f
cGl4bWFwLT53aWR0aCgpLCBtX3BpeG1hcC0+aGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRTaXpl
KG1faW1hZ2UtPndpZHRoKCksIG1faW1hZ2UtPmhlaWdodCgpKTsKIH0KIAogTmF0aXZlSW1hZ2VQ
dHIgU3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVy
biBjb25zdF9jYXN0PE5hdGl2ZUltYWdlUHRyPihtX3BpeG1hcCk7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8TmF0aXZlSW1hZ2VQdHI+KG1faW1hZ2UpOwogfQogCiB2b2lkIFN0aWxsSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCiB7Ci0gICAgaWYgKG1fcGl4bWFwLT5pc051bGwoKSkKKyAgICBpZiAobV9p
bWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCBub3JtYWxp
emVkU3JjID0gc3JjLm5vcm1hbGl6ZWQoKTsKQEAgLTg0LDEyICs4NCwxMiBAQCB2b2lkIFN0aWxs
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNo
YWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwogICAgICAgICBpZiAoc2hhZG93Q29udGV4
dCkgewogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdQaXht
YXAobm9ybWFsaXplZERzdCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKKyAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPmRyYXdJbWFnZShub3JtYWxpemVkRHN0LCAqbV9pbWFnZSwgbm9ybWFs
aXplZFNyYyk7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAo
bm9ybWFsaXplZERzdCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKKyAgICBjdHh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKG5vcm1hbGl6ZWREc3QsICptX2ltYWdlLCBub3JtYWxp
emVkU3JjKTsKICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRv
cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1N0aWxsSW1hZ2VRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3Rp
bGxJbWFnZVF0LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzNjgyNjZh
Li40YWYzNTkwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5oCkBAIC0zNCwxNCArMzQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgU3RpbGxJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBjcmVhdGUoY29uc3QgUVBpeG1hcCYgcGl4bWFw
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBjcmVhdGUoY29uc3QgUUlt
YWdlJiBpbWFnZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dGlsbEltYWdlKHBpeG1hcCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGls
bEltYWdlKGltYWdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dGlsbEltYWdlPiBjcmVhdGVGb3JSZW5kZXJpbmcoY29uc3QgUVBpeG1hcCogcGl4bWFwKQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBjcmVhdGVGb3JSZW5kZXJpbmcoY29u
c3QgUUltYWdlKiBpbWFnZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdGlsbEltYWdlKHBpeG1hcCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdGlsbEltYWdlKGltYWdlKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
Y3VycmVudEZyYW1lSGFzQWxwaGEoKTsKQEAgLTU2LDEyICs1NiwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOwotICAgICAgICBTdGlsbElt
YWdlKGNvbnN0IFFQaXhtYXAqIHBpeG1hcCk7CisgICAgICAgIFN0aWxsSW1hZ2UoY29uc3QgUUlt
YWdlJik7CisgICAgICAgIFN0aWxsSW1hZ2UoY29uc3QgUUltYWdlKik7CiAgICAgICAgIH5TdGls
bEltYWdlKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBRUGl4bWFwKiBtX3BpeG1hcDsKLSAg
ICAgICAgYm9vbCBtX293bnNQaXhtYXA7CisKKyAgICAgICAgY29uc3QgUUltYWdlKiBtX2ltYWdl
OworICAgICAgICBib29sIG1fb3duc0ltYWdlOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5oCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZjEzZGViMC4uYmQ5ZTFmMwotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxh
eWVyLmgKQEAgLTM2LDI0ICszNiwyNCBAQAogI2lmbmRlZiBUcmFuc3BhcmVuY3lMYXllcl9oCiAj
ZGVmaW5lIFRyYW5zcGFyZW5jeUxheWVyX2gKIAorCiAjaW5jbHVkZSA8UVBhaW50RW5naW5lPgog
I2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFQaXhtYXA+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciog
cCwgY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzaykK
LSAgICAgICAgOiBwaXhtYXAocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKQorICAgIFRyYW5z
cGFyZW5jeUxheWVyKGNvbnN0IFFQYWludGVyKiBwLCBjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwg
b3BhY2l0eSwgUUltYWdlJiBhbHBoYU1hc2spCisgICAgICAgIDogaW1hZ2UocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpLCBUUkFOU1BBUkVOVF9JTUFHRV9GT1JNQVQpCiAgICAgICAgICwgb3Bh
Y2l0eShvcGFjaXR5KQogICAgICAgICAsIGFscGhhTWFzayhhbHBoYU1hc2spCiAgICAgICAgICwg
c2F2ZUNvdW50ZXIoMSkgLy8gc2VlIHRoZSBjb21tZW50IGZvciBzYXZlQ291bnRlcgogICAgIHsK
ICAgICAgICAgb2Zmc2V0ID0gcmVjdC50b3BMZWZ0KCk7Ci0gICAgICAgIHBpeG1hcC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIHBhaW50ZXIuYmVnaW4oJnBpeG1hcCk7CisgICAgICAg
IGltYWdlLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgcGFpbnRlci5iZWdpbigmaW1h
Z2UpOwogICAgICAgICBwYWludGVyLnNldFJlbmRlckhpbnRzKHAtPnJlbmRlckhpbnRzKCkpOwog
ICAgICAgICBwYWludGVyLnRyYW5zbGF0ZSgtb2Zmc2V0KTsKICAgICAgICAgcGFpbnRlci5zZXRQ
ZW4ocC0+cGVuKCkpOwpAQCAtNjcsMTIgKzY3LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgUVBpeG1hcCBwaXhtYXA7CisgICAgUUltYWdlIGltYWdlOwogICAgIFFQb2ludCBvZmZz
ZXQ7CiAgICAgUVBhaW50ZXIgcGFpbnRlcjsKICAgICBxcmVhbCBvcGFjaXR5OwogICAgIC8vIGZv
ciBjbGlwVG9JbWFnZUJ1ZmZlcgotICAgIFFQaXhtYXAgYWxwaGFNYXNrOworICAgIFFJbWFnZSBh
bHBoYU1hc2s7CiAgICAgLy8gc2F2ZUNvdW50ZXIgaXMgb25seSB1c2VkIGluIGNvbWJpbmF0aW9u
IHdpdGggYWxwaGFNYXNrCiAgICAgLy8gb3RoZXJ3aXNlLCBpdHMgdmFsdWUgaXMgdW5zcGVjaWZp
ZWQKICAgICBpbnQgc2F2ZUNvdW50ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYjE2NGExZi4uMjJjNmViOQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcApAQCAtNTQxLDEwICs1NDEsMTAgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KICAgICBR
SW1hZ2UgcXRJbWFnZTsKICNpZiBIQVZFKFFUNSkKICAgICAvLyBXaXRoIFFQQSwgd2UgY2FuIGF2
b2lkIGEgZGVlcCBjb3B5LgotICAgIHF0SW1hZ2UgPSAqZnJhbWVJbWFnZS0+aGFuZGxlKCktPmJ1
ZmZlcigpOworICAgIHF0SW1hZ2UgPSAqZnJhbWVJbWFnZTsKICNlbHNlCi0gICAgLy8gVGhpcyBt
aWdodCBiZSBhIGRlZXAgY29weSwgZGVwZW5kaW5nIG9uIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhl
IHBpeG1hcC4KLSAgICBxdEltYWdlID0gZnJhbWVJbWFnZS0+dG9JbWFnZSgpOworICAgIC8vIFRo
aXMgbWlnaHQgYmUgYSBkZWVwIGNvcHksIGRlcGVuZGluZyBvbiBvdGhlciByZWZlcmVuY2VzIHRv
IHRoZSBpbWFnZS4KKyAgICBxdEltYWdlID0gUUltYWdlKCpmcmFtZUltYWdlKTsKICNlbmRpZgog
ICAgIGltYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHF0SW1hZ2UuY29u
c3RCaXRzKCkpOwogICAgIGJ5dGVzUGVyTGluZSA9IHF0SW1hZ2UuYnl0ZXNQZXJMaW5lKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKb2xkIG1vZGUgMTAwNjQ0
Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2ZDJhYjcyLi44ZTRjNTgwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgPFFH
dWlBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRQ2xpcGJvYXJkPgorI2luY2x1ZGUgPFFJbWFnZT4K
ICNpbmNsdWRlIDxRTGlzdD4KICNpbmNsdWRlIDxRTWltZURhdGE+CiAjaW5jbHVkZSA8UVN0cmlu
Z0xpc3Q+CkBAIC0yNDMsNyArMjQ0LDcgQEAgRHJhZ0ltYWdlUmVmIENsaXBib2FyZFF0OjpjcmVh
dGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0CiAgICAgaWYgKCFtX2RyYWdJbWFn
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZHJhZ0xvYyA9IG1fZHJhZ0xvYzsKLSAgICByZXR1
cm4gbV9kcmFnSW1hZ2UtPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgcmV0dXJuIG5ldyBRSW1hZ2UoKm1fZHJhZ0ltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpKTsKIH0KIAogCkBAIC0yNzMsOSArMjc0LDkgQEAgdm9pZCBDbGlwYm9h
cmRRdDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY28KICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFn
ZShlbGVtZW50KTsKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2VG
b3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+
aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKLSAgICBpZiAocGl4bWFwKQotICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0
SW1hZ2VEYXRhKCpwaXhtYXApOworICAgIFFJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1h
Z2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRJbWFn
ZURhdGEoKmltYWdlKTsKIAogICAgIFFMaXN0PFFVcmw+IHVybHM7CiAgICAgdXJscy5hcHBlbmQo
dXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcApvbGQgbW9kZSAxMDA2
NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGU3ODU0ZGQuLjE2OGEyZjUKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0N1cnNvclF0LmNwcApAQCAtMzcsNiArMzcsOCBAQAogCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKIAorI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKQEAgLTc1LDEwICs3NywxMSBA
QCBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiAjaWZuZGVm
IFFUX05PX0NVUlNPUgogc3RhdGljIFFDdXJzb3IqIGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSog
aW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewotICAgIGlmICghaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEludFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1p
bmVIb3RTcG90KGltYWdlLCBob3RTcG90KTsKLSAgICByZXR1cm4gbmV3IFFDdXJzb3IoKihpbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBl
ZmZlY3RpdmVIb3RTcG90LnkoKSk7CisgICAgcmV0dXJuIG5ldyBRQ3Vyc29yKFFQaXhtYXA6OmZy
b21JbWFnZSgqbmF0aXZlSW1hZ2UpLCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90
U3BvdC55KCkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0RyYWdJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJ
bWFnZVF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDBlN2NlMDQu
LmU5M2FjNzAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcApAQCAtMjks
NiArMjksOCBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
IAorI2luY2x1ZGUgPFFJbWFnZT4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbnRTaXplIGRy
YWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmIGltYWdlKQpAQCAtNjYsNyArNjgsNyBAQCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgUmVzcGVjdEltYWdl
T3JpZW50YXRpb25FbnVtKQogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBuZXcgUVBp
eG1hcCgqaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBu
ZXcgUUltYWdlKCppbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CiB9CiAKIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2Uq
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKb2xkIG1vZGUg
MTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBkNmY0ZTFkLi5jNmUzZDAxCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKQogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVy
KG5vZGUtPnJlbmRlcmVyKCkpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKLSAgICBRUGl4bWFwKiBw
aXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBp
eG1hcCkKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIFFHdWlB
cHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldFBpeG1hcCgqcGl4bWFwLCBRQ2xpcGJvYXJkOjpD
bGlwYm9hcmQpOworICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldEltYWdlKCpu
YXRpdmVJbWFnZSwgUUNsaXBib2FyZDo6Q2xpcGJvYXJkKTsKICNlbmRpZgogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmZyYW1lLmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4
IDQzOWU4ZWQuLjMzZDU3MmQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0xNzY0LDkgKzE3
NjQsOSBAQCBRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGU6OlFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0
ZShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0CiAgICAgYm91bmRpbmdSZWN0ID0gaW5uZXJO
b25TaGFyZWROb2RlID8gaW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpIDogSW50UmVjdCgpOwogICAgIFdlYkNvcmU6OkltYWdlICppbWcgPSBo
aXRUZXN0LmltYWdlKCk7CiAgICAgaWYgKGltZykgewotICAgICAgICBRUGl4bWFwICpwaXggPSBp
bWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFJbWFnZSAqcGl4ID0g
aW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICBpZiAocGl4KQotICAg
ICAgICAgICAgcGl4bWFwID0gKnBpeDsKKyAgICAgICAgICAgIGltYWdlID0gKnBpeDsKICAgICB9
CiAgICAgV2ViQ29yZTo6RnJhbWUgKndmcmFtZSA9IGhpdFRlc3QudGFyZ2V0RnJhbWUoKTsKICAg
ICBpZiAod2ZyYW1lKQpAQCAtMTk2NSw3ICsxOTY1LDcgQEAgUVBpeG1hcCBRV2ViSGl0VGVzdFJl
c3VsdDo6cGl4bWFwKCkgY29uc3QKIHsKICAgICBpZiAoIWQpCiAgICAgICAgIHJldHVybiBRUGl4
bWFwKCk7Ci0gICAgcmV0dXJuIGQtPnBpeG1hcDsKKyAgICByZXR1cm4gUVBpeG1hcDo6ZnJvbUlt
YWdlKGQtPmltYWdlKTsKIH0KIAogLyohCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWVfcC5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApvbGQg
bW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGYwZGUzYmEuLmY0MTlkMDEKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWVfcC5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIFFXZWJF
bGVtZW50IGxpbmtFbGVtZW50OwogICAgIFFTdHJpbmcgYWx0ZXJuYXRlVGV4dDsKICAgICBRVXJs
IGltYWdlVXJsOwotICAgIFFQaXhtYXAgcGl4bWFwOworICAgIFFJbWFnZSBpbWFnZTsKICAgICBi
b29sIGlzQ29udGVudEVkaXRhYmxlOwogICAgIGJvb2wgaXNDb250ZW50U2VsZWN0ZWQ7CiAgICAg
Ym9vbCBpc1Njcm9sbEJhcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJo
aXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApvbGQgbW9k
ZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGZjNWJkZDUuLjAwM2VhMWQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJoaXN0b3J5LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIFFEYXRlVGltZSBRV2ViSGlz
dG9yeUl0ZW06Omxhc3RWaXNpdGVkKCkgY29uc3QKIFFJY29uIFFXZWJIaXN0b3J5SXRlbTo6aWNv
bigpIGNvbnN0CiB7CiAgICAgaWYgKGQtPml0ZW0pCi0gICAgICAgIHJldHVybiAqV2ViQ29yZTo6
aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChkLT5pdGVtLT51cmwoKSwg
V2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICAgICAgcmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgqKFdlYkNvcmU6Omljb25EYXRhYmFz
ZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoZC0+aXRlbS0+dXJsKCksIFdlYkNvcmU6Oklu
dFNpemUoMTYsIDE2KSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpKTsKIAogICAgIHJl
dHVybiBRSWNvbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNl
dHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKb2xkIG1v
ZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1NDI1YTkyLi5mNWUwZWJjCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNldHRpbmdzLmNwcApAQCAtNzE4LDEzICs3MTgsMTMgQEAgUUljb24gUVdlYlNl
dHRpbmdzOjppY29uRm9yVXJsKGNvbnN0IFFVcmwmIHVybCkKICAgICBXZWJDb3JlOjpJbWFnZSog
aW1hZ2UgPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJM
KFdlYkNvcmU6OktVUkwodXJsKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKICAgICBpZiAoIWltYWdlKQotICAgICAg
ICByZXR1cm4gUVBpeG1hcCgpOworICAgICAgICByZXR1cm4gUUljb24oKTsKIAotICAgIFFQaXht
YXAqIGljb24gPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBRSW1h
Z2UqIGljb24gPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAo
IWljb24pCi0gICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisgICAgICAgIHJldHVybiBRSWNvbigp
OwogCi0gICAgcmV0dXJuKiBpY29uOworICAgIHJldHVybiBRUGl4bWFwOjpmcm9tSW1hZ2UoKmlj
b24pOwogfQogCiAvKgpAQCAtNzY3LDcgKzc2Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiByZXNv
dXJjZU5hbWVGb3JXZWJHcmFwaGljKFFXZWJTZXR0aW5nczo6V2ViR3JhcGhpYyB0eXBlKQogdm9p
ZCBRV2ViU2V0dGluZ3M6OnNldFdlYkdyYXBoaWMoV2ViR3JhcGhpYyB0eXBlLCBjb25zdCBRUGl4
bWFwJiBncmFwaGljKQogewogICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsKLSAg
ICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZU5hbWVGb3JXZWJH
cmFwaGljKHR5cGUpLCBncmFwaGljKTsKKyAgICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1S
ZXNvdXJjZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKHR5cGUpLCBncmFwaGljLnRvSW1hZ2Uo
KSk7CiB9CiAKIC8qIQpAQCAtNzgyLDEwICs3ODIsMTAgQEAgUVBpeG1hcCBRV2ViU2V0dGluZ3M6
OndlYkdyYXBoaWMoV2ViR3JhcGhpYyB0eXBlKQogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4g
aW1nID0gV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKHJlc291cmNlTmFtZUZv
cldlYkdyYXBoaWModHlwZSkpOwogICAgIGlmICghaW1nKQogICAgICAgICByZXR1cm4gUVBpeG1h
cCgpOwotICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKKyAgICBRSW1hZ2UqIGltYWdlID0gaW1nLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBR
UGl4bWFwKCk7Ci0gICAgcmV0dXJuICpwaXhtYXA7CisgICAgcmV0dXJuIFFQaXhtYXA6OmZyb21J
bWFnZSgqaW1hZ2UpOwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMmY4YWM2Zi4uZWE0ODE2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0wNi0xMyAgWm9sdGFuIEhv
cnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJ
bWFnZVB0ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2UgdXNlIHJhc3RlciBlbmdpbmUgdGhlcmUg
aXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIFFQaXhtYXAgYW5kIFFJbWFnZSwgc28gd2UgYXJlIGdv
aW5nCisgICAgICAgIHRvIHVzZSBRSW1hZ2UgZXZlcnl3aGVyZSB3aGVyZSBpdCBpcyBwb3NzaWJs
ZS4gVGhpcyByZWZhY3RvcmluZyBjb250YWlucyB0aGUgY2hhbmdlIG9mIHRoZQorICAgICAgICBO
YXRpdmVJbWFnZVB0ciB0eXBlZGVmIGZyb20gUVBpeG1hcCogdG8gUUltYWdlKiBhbmQgY292ZXJz
IHRoZSByZWxhdGVkIG1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgUGFydCBvZiB0aGUgY2hhbmdl
IGlzIGJhc2VkIG9uIFZpYXRjaGVzbGF2IE9zdGFwZW5rbydzIHdvcmsuCisKKyAgICAgICAgKiBB
cGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTo6UVdl
YkhpdFRlc3RSZXN1bHRQcml2YXRlKToKKyAgICAgICAgKFFXZWJIaXRUZXN0UmVzdWx0OjpwaXht
YXApOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAoUVdlYkhpdFRlc3RS
ZXN1bHRQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYmhpc3RvcnkuY3BwOgorICAgICAgICAo
UVdlYkhpc3RvcnlJdGVtOjppY29uKToKKyAgICAgICAgKiBBcGkvcXdlYnNldHRpbmdzLmNwcDoK
KyAgICAgICAgKFFXZWJTZXR0aW5nczo6aWNvbkZvclVybCk6CisgICAgICAgIChRV2ViU2V0dGlu
Z3M6OnNldFdlYkdyYXBoaWMpOgorICAgICAgICAoUVdlYlNldHRpbmdzOjp3ZWJHcmFwaGljKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NsaWVudFF0OjpzdGFydERyYWcpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0luaXRXZWJDb3JlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVR
dCk6CisKIDIwMTItMDYtMTEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbUXRdW1dpbl0gQWRkIG1pc3NpbmcgaW5jbHVkZXMgdG8gZml4IHRoZSBidWls
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3Bw
Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggY2I2MzI4My4uOGI2NDhjMQot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCkBAIC05
Nyw5ICs5Nyw5IEBAIHZvaWQgRHJhZ0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRy
YWdJbWFnZSwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQCiAgICAgaWYgKHZpZXcpIHsKICAg
ICAgICAgUURyYWcqIGRyYWcgPSBuZXcgUURyYWcodmlldyk7CiAgICAgICAgIGlmIChkcmFnSW1h
Z2UpCi0gICAgICAgICAgICBkcmFnLT5zZXRQaXhtYXAoKmRyYWdJbWFnZSk7CisgICAgICAgICAg
ICBkcmFnLT5zZXRQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKCpkcmFnSW1hZ2UpKTsKICAgICAg
ICAgZWxzZSBpZiAoY2xpcGJvYXJkRGF0YSAmJiBjbGlwYm9hcmREYXRhLT5oYXNJbWFnZSgpKQot
ICAgICAgICAgICAgZHJhZy0+c2V0UGl4bWFwKHF2YXJpYW50X2Nhc3Q8UVBpeG1hcD4oY2xpcGJv
YXJkRGF0YS0+aW1hZ2VEYXRhKCkpKTsKKyAgICAgICAgICAgIGRyYWctPnNldFBpeG1hcChRUGl4
bWFwOjpmcm9tSW1hZ2UocXZhcmlhbnRfY2FzdDxRSW1hZ2U+KGNsaXBib2FyZERhdGEtPmltYWdl
RGF0YSgpKSkpOwogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb25NYXNrID0gY2xp
cGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKTsKICAgICAgICAgZHJhZy0+c2V0TWltZURhdGEoY2xp
cGJvYXJkRGF0YSk7CiAgICAgICAgIFF0OjpEcm9wQWN0aW9uIGFjdHVhbERyb3BBY3Rpb24gPSBk
cmFnLT5leGVjKGRyYWdPcGVyYXRpb25zVG9Ecm9wQWN0aW9ucyhkcmFnT3BlcmF0aW9uTWFzaykp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29y
ZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5j
cHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA0NTIwOTFjLi43Mzk2YmYz
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApA
QCAtODEsOSArODEsOSBAQCB2b2lkIGluaXRpYWxpemVXZWJDb3JlUXQoKQogI2VuZGlmCiAKICAg
ICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRvbkdyYXBoaWMKLSAgICBJbWFnZTo6
c2V0UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uIiwgUUFwcGxpY2F0aW9uOjpz
dHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKSk7Cisg
ICAgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvbiIsIFFBcHBs
aWNhdGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1
dHRvbikudG9JbWFnZSgpKTsKICAgICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRv
blByZXNzZWRHcmFwaGljCi0gICAgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENh
bmNlbEJ1dHRvblByZXNzZWQiLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFw
KFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24pKTsKKyAgICBJbWFnZTo6c2V0UGxhdGZvcm1S
ZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZCIsIFFBcHBsaWNhdGlvbjo6c3R5bGUo
KS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1dHRvbikudG9JbWFnZSgp
KTsKIAogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0YjUxMjljLi42
YTYyZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMDYtMTMgIFpvbHRhbiBI
b3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBDaGFuZ2UgTmF0aXZl
SW1hZ2VQdHIgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2UqCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdlIHVzZSByYXN0ZXIgZW5naW5lIHRoZXJl
IGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBRUGl4bWFwIGFuZCBRSW1hZ2UsIHNvIHdlIGFyZSBn
b2luZworICAgICAgICB0byB1c2UgUUltYWdlIGV2ZXJ5d2hlcmUgd2hlcmUgaXQgaXMgcG9zc2li
bGUuIFRoaXMgcmVmYWN0b3JpbmcgY29udGFpbnMgdGhlIGNoYW5nZSBvZiB0aGUKKyAgICAgICAg
TmF0aXZlSW1hZ2VQdHIgdHlwZWRlZiBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSogYW5kIGNvdmVy
cyB0aGUgcmVsYXRlZCBtb2RpZmljYXRpb25zLgorCisgICAgICAgIFBhcnQgb2YgdGhlIGNoYW5n
ZSBpcyBiYXNlZCBvbiBWaWF0Y2hlc2xhdiBPc3RhcGVua28ncyB3b3JrLgorCisgICAgICAgICog
U2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJJY29uRGF0YWJhc2VD
bGllbnQ6Omljb25JbWFnZUZvclBhZ2VVUkwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29udmVy
dFFJbWFnZVRvU2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVu
dDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVl
SG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdl
QmFja2luZ1N0b3JlKToKKwogMjAxMi0wNi0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXVtXSzJdIE1ha2UgV2ViUHJvY2VzcyB0YXJnZXQg
bmFtZSBtb3JlIGNsZWFyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1No
YXJlYWJsZUJpdG1hcFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVC
aXRtYXBRdC5jcHAKaW5kZXggYTdhYjhkNC4uYjZjZWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwCkBAIC01Miw4ICs1Miw4IEBAIHZvaWQg
U2hhcmVhYmxlQml0bWFwOjpyZWxlYXNlU2hhcmVkTWVtb3J5RGF0YSh2b2lkKiB0eXBlbGVzc0Jp
dG1hcCkKIAogUGFzc1JlZlB0cjxJbWFnZT4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVJbWFnZSgp
CiB7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gbmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdl
KGNyZWF0ZVFJbWFnZSgpKSk7Ci0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUocGl4bWFw
KTsKKyAgICBRSW1hZ2UqIGltYWdlID0gbmV3IFFJbWFnZShjcmVhdGVRSW1hZ2UoKSk7CisgICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaW1hZ2UpOwogfQogCiBQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNs
aWVudC5jcHAKaW5kZXggNTEzMmM3OS4uMTA2NzJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwCkBAIC05Mywx
MSArOTMsMTEgQEAgUUltYWdlIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjppY29uSW1hZ2VGb3JQ
YWdlVVJMKGNvbnN0IFdURjo6U3RyaW5nJiBwYWdlVVJMLAogICAgIGlmICghaW1hZ2UpCiAgICAg
ICAgIHJldHVybiBRSW1hZ2UoKTsKIAotICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghbmF0aXZlSW1h
Z2UpCiAgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKIAotICAgIHJldHVybiBuYXRpdmVJbWFnZS0+
dG9JbWFnZSgpOworICAgIHJldHVybiAqbmF0aXZlSW1hZ2U7CiB9CiAKIHZvaWQgUXRXZWJJY29u
RGF0YWJhc2VDbGllbnQ6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVS
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQvV2ViRHJhZ0NsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcAppbmRleCBiYmRiNjM1Li5kOWU2ZDFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dl
YkRyYWdDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCkBAIC0zOCwxNSArMzgsMTUgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRRUGl4bWFwVG9TaGFyZWFibGVCaXRtYXAoUVBp
eG1hcCogcGl4bWFwKQorc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0
UUltYWdlVG9TaGFyZWFibGVCaXRtYXAoUUltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoIXBpeG1h
cCkKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKElu
dFNpemUocGl4bWFwLT5zaXplKCkpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwor
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlU2hhcmVhYmxlKEludFNpemUoaW1hZ2UtPnNpemUoKSksIFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSk7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0
ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKIAotICAgIGdyYXBoaWNzQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAoMCwgMCwgKnBpeG1hcCk7CisgICAgZ3Jh
cGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKDAsIDAsICppbWFnZSk7
CiAgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9p
ZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3Qg
SW50UG9pbnQmIGNsaWVudFBvc2kKICAgICBzdGF0aWNfY2FzdDxDbGlwYm9hcmRRdCo+KGNsaXBi
b2FyZCktPmludmFsaWRhdGVXcml0YWJsZURhdGEoKTsKICAgICBEcmFnRGF0YSBkcmFnRGF0YShj
bGlwYm9hcmREYXRhLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGRyYWdPcGVyYXRp
b25NYXNrKTsKIAotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRR
UGl4bWFwVG9TaGFyZWFibGVCaXRtYXAoZHJhZ0ltYWdlKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBjb252ZXJ0UUltYWdlVG9TaGFyZWFibGVCaXRtYXAoZHJhZ0ltYWdl
KTsKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CiAgICAgaWYgKGJpdG1hcCAm
JiAhYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmNwcAppbmRleCBjMjk2NDgxLi5lM2YxMTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMzk2
LDEyICszOTYsMTIgQEAgaW50NjRfdCBMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUoSW1hZ2UqIGltYWdlKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBJ
bnZhbGlkV2ViTGF5ZXJJRDsKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKLSAgICBpZiAoIXBpeG1hcCkKKyAgICBpZiAo
IW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CiAKLSAgICBp
bnQ2NF90IGtleSA9IHBpeG1hcC0+Y2FjaGVLZXkoKTsKKyAgICBpbnQ2NF90IGtleSA9IG5hdGl2
ZUltYWdlLT5jYWNoZUtleSgpOwogICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKIAogICAg
IGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152222</attachid>
            <date>2012-07-13 05:15:57 -0700</date>
            <delta_ts>2012-07-13 09:21:09 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>qpixmap2qimage.patch</filename>
            <type>text/plain</type>
            <size>54401</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYzY5M2NmLi5hMDc4ZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODgg
QEAKKzIwMTItMDctMTMgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgW1F0XSBDaGFuZ2UgTmF0aXZlSW1hZ2VQdHIgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2Uq
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdl
IHVzZSByYXN0ZXIgZW5naW5lIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBRUGl4bWFw
IGFuZCBRSW1hZ2UsIHNvIHdlIGFyZSBnb2luZworICAgICAgICB0byB1c2UgUUltYWdlIGV2ZXJ5
d2hlcmUgd2hlcmUgaXQgaXMgcG9zc2libGUuIFRoaXMgcmVmYWN0b3JpbmcgY29udGFpbnMgdGhl
IGNoYW5nZSBvZiB0aGUKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgdHlwZWRlZiBmcm9tIFFQaXht
YXAqIHRvIFFJbWFnZSogYW5kIGNvdmVycyB0aGUgcmVsYXRlZCBtb2RpZmljYXRpb25zLgorCisg
ICAgICAgIFBhcnQgb2YgdGhlIGNoYW5nZSBpcyBzaW1pbGFyIHRvIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbydzIGludGVybmFsIHdvcmsuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQXNzaWduVG9FbGVtZW50TWV0aG9kOjppbnZva2UpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmpl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IChHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6
CisgICAgICAgIChJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJ
bWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnB1c2hUcmFuc3Bh
cmVuY3lMYXllckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaDoKKyAgICAgICAgKEltYWdlQnVm
ZmVyRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VE
ZWNvZGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAg
ICAgIChncmFwaGljcyk6CisgICAgICAgIChsb2FkUmVzb3VyY2VJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRl
cm5RdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRl
cm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpTdGlsbEltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0aWxsSW1hZ2U6On5TdGlsbEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1h
Z2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6ZHJhdyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdGlsbEltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6Y3Jl
YXRlRm9yUmVuZGVyaW5nKToKKyAgICAgICAgKFN0aWxsSW1hZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
cmFuc3BhcmVuY3lMYXllcjo6VHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZFF0OjpjcmVhdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkUXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3VzdG9t
Q3Vyc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlKToKKwogMjAxMi0wNy0xMyAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBTaG91bGQgYmUgcG9zc2libGUgdG8gZm9jdXMgZWxlbWVudHMgd2l0
aGluIGNhbnZhcyBmYWxsYmFjayBjb250ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcGl4bWFwcnVudGltZS5jcHAKaW5kZXggYjBlNWY2Mi4uYTJkYWFkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcApAQCAtMTQ2LDggKzE0Niw4
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFvYmplY3RBcmctPmluaGVyaXRzKCZKU0hUTUxJbWFn
ZUVsZW1lbnQ6OnNfaW5mbykpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgICAgICAvLyB3ZSBub3cga25vdyB0aGF0IHdlIGhhdmUgYSB2YWxpZCA8aW1nPiBlbGVtZW50
IGFzIHRoZSBhcmd1bWVudCwgd2UgY2FuIGF0dGFjaCB0aGUgcGl4bWFwIHRvIGl0LgotICAgICAg
ICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxsSW1hZ2UgPSBXZWJDb3JlOjpTdGlsbEltYWdl
OjpjcmVhdGUoaW5zdGFuY2UtPnRvUGl4bWFwKCkpOworICAgICAgICAvLyB3ZSBub3cga25vdyB0
aGF0IHdlIGhhdmUgYSB2YWxpZCA8aW1nPiBlbGVtZW50IGFzIHRoZSBhcmd1bWVudCwgd2UgY2Fu
IGF0dGFjaCB0aGUgaW1hZ2UgdG8gaXQuCisgICAgICAgIFJlZlB0cjxTdGlsbEltYWdlPiBzdGls
bEltYWdlID0gV2ViQ29yZTo6U3RpbGxJbWFnZTo6Y3JlYXRlKGluc3RhbmNlLT50b0ltYWdlKCkp
OwogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MSW1hZ2VFbGVtZW50Kj4ob2JqZWN0
QXJnKS0+aW1wbCgpKTsKICAgICAgICAgaW1hZ2VFbGVtZW50LT5zZXRDYWNoZWRJbWFnZShuZXcg
Q2FjaGVkSW1hZ2Uoc3RpbGxJbWFnZS5nZXQoKSkpOwogICAgICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihpbnN0YW5jZS0+cm9v
dE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKSk7CkBAIC0zODMsMTMgKzM4MywxMyBAQCBRVmFyaWFu
dCBRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdChKU09iamVjdCogb2JqZWN0LCBR
TWV0YVR5cGU6OlR5cGUgaAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgZ290byBy
ZXR1cm5FbXB0eVZhcmlhbnQ7CiAKLSAgICAgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIGlmICghcGl4bWFwKQorICAgICAg
ICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJldHVybkVt
cHR5VmFyaWFudDsKIAogICAgICAgICByZXR1cm4gKGhpbnQgPT0gc3RhdGljX2Nhc3Q8UU1ldGFU
eXBlOjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKLSAgICAgICAgICAgICAgICAgID8g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPigqcGl4bWFwKQotICAgICAgICAgICAgICAgICAg
OiBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4ocGl4bWFwLT50b0ltYWdlKCkpOworICAgICAg
ICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KFFQaXhtYXA6OmZyb21J
bWFnZSgqbmF0aXZlSW1hZ2UpKQorICAgICAgICAgICAgICAgICAgOiBRVmFyaWFudDo6ZnJvbVZh
bHVlPFFJbWFnZT4oKm5hdGl2ZUltYWdlKTsKICAgICB9CiAKICAgICBpZiAob2JqZWN0LT5pbmhl
cml0cygmUXRQaXhtYXBSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5oCmluZGV4IGRkOTcwZDIuLmU3OGE5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5oCkBAIC0zNiw3ICszNiw3IEBACiBPQkpDX0NMQVNTIE5TSW1hZ2U7CiAjZWxp
ZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKK2NsYXNz
IFFJbWFnZTsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYg
c3RydWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICB0eXBlZGVmIFJldGFpblB0cjxOU0ltYWdl
PiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB0eXBlZGVmIFFQaXhtYXAq
IERyYWdJbWFnZVJlZjsKKyAgICB0eXBlZGVmIFFJbWFnZSogRHJhZ0ltYWdlUmVmOwogI2VsaWYg
UExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEJJVE1BUCBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQ
TEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggZjI3YmVjNy4uYTJlMDgzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTUwMSw3ICs1
MDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQot
ICAgICAgICB2b2lkIHB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0ICZy
ZWN0LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spOworICAgICAgICB2b2lkIHB1
c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0JiwgcXJlYWwsIFFJbWFnZSYp
OwogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmluZGV4IDNmZjQ4MjMu
LjRmMzEyMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAt
NTIsMTAgKzUyLDYgQEAgdHlwZWRlZiBTSVpFKiBMUFNJWkU7CiB0eXBlZGVmIHN0cnVjdCBIQklU
TUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQ
aXhtYXA+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0IF9HZGtQ
aXhidWYgR2RrUGl4YnVmOwogI2VuZGlmCkBAIC0xNTcsNyArMTUzLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSAgICBzdGF0aWMgdm9pZCBzZXRQbGF0Zm9ybVJlc291
cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFQaXhtYXAmKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFJbWFnZSYpOwogI2Vu
ZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAppbmRleCBlZDYyNWJjLi5mY2I2YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQzLDcgKzQzLDcgQEAgdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DRkRhdGEqIENGRGF0YVJlZjsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUg
PHFnbG9iYWwuaD4KIFFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKK2NsYXNzIFFJ
bWFnZTsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJOYXRp
dmVJbWFnZUNhaXJvLmgiCkBAIC05MCw3ICs5MCw5IEBAIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5
cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgdm9pZCog
TmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVBpeG1hcCogTmF0
aXZlSW1hZ2VQdHI7Cit0eXBlZGVmIFFJbWFnZSogTmF0aXZlSW1hZ2VQdHI7CisjZGVmaW5lIE9Q
QVFVRV9JTUFHRV9GT1JNQVQgICAgICBRSW1hZ2U6OkZvcm1hdF9SR0IzMgorI2RlZmluZSBUUkFO
U1BBUkVOVF9JTUFHRV9GT1JNQVQgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQK
ICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKaW5kZXggODNiZGZlMi4uN2Ew
ZTVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKQEAgLTI5LDYgKzI5LDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKKyNpZiBQTEFU
Rk9STShRVCkKKyNpbmNsdWRlIDxRSW1hZ2U+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgSW50U2l6ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCmluZGV4IDUw
M2MxM2QuLmQ2ZTZlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKQEAgLTM2LDcg
KzM2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBJbWFnZUdTdHJlYW1lcjo6SW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCiAgICAgOiBtX2ltYWdl
KDApCiB7Ci0gICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwogICAgIEdzdFZpZGVv
Rm9ybWF0IGZvcm1hdDsKICAgICBJbnRTaXplIHNpemU7CiAgICAgaW50IHBpeGVsQXNwZWN0UmF0
aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlOwpAQCAtNjks
OCArNjgsNyBAQCBJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiBidWZm
ZXIsIEdzdENhcHMqIGNhcHMpCiAgICAgaW1hZ2UuaW52ZXJ0UGl4ZWxzKGludmVydE1vZGUpOwog
I2VuZGlmCiAKLSAgICBzdXJmYWNlLT5jb252ZXJ0RnJvbUltYWdlKGltYWdlKTsKLSAgICBtX2lt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJmYWNlKTsKKyAgICBtX2ltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShuZXcgUUltYWdlKGltYWdlKSk7CiAKICNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQogICAgIGlmIChHc3RWaWRlb0Nyb3BNZXRhKiBjcm9wTWV0YSA9IGdzdF9idWZmZXJfZ2V0
X3ZpZGVvX2Nyb3BfbWV0YShidWZmZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBjNzE5
MWUzLi4xOGUzYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNDkxLDIzICs0OTEsMTYg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBRSW1hZ2UgcXRJbWFn
ZTsKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2U7CiAgICAgLy8gSXMgaW1hZ2UgYWxyZWFkeSBsb2Fk
ZWQ/IElmIG5vdCwgbG9hZCBpdC4KICAgICBpZiAoaW1hZ2UtPmRhdGEoKSkKLSAgICAgICAgcXRJ
bWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGlt
YWdlLT5kYXRhKCktPmRhdGEoKSksIGltYWdlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwotI2lmIEhBVkUoUVQ1KQotICAgICAgICAvLyBXaXRoIFFQQSwgd2UgY2Fu
IGF2b2lkIGEgZGVlcCBjb3B5LgotICAgICAgICBxdEltYWdlID0gKm5hdGl2ZVBpeG1hcC0+aGFu
ZGxlKCktPmJ1ZmZlcigpOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBhIGRlZXAg
Y29weSwgZGVwZW5kaW5nIG9uIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIHBpeG1hcC4KLSAgICAg
ICAgcXRJbWFnZSA9IG5hdGl2ZVBpeG1hcC0+dG9JbWFnZSgpOwotI2VuZGlmCi0gICAgfQorICAg
ICAgICBuYXRpdmVJbWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1Y2hhcio+KGltYWdlLT5kYXRhKCktPmRhdGEoKSksIGltYWdlLT5kYXRhKCktPnNpemUoKSk7
CisgICAgZWxzZQorICAgICAgICBuYXRpdmVJbWFnZSA9ICppbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKwogCiAgICAgQWxwaGFPcCBhbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7
Ci0gICAgc3dpdGNoIChxdEltYWdlLmZvcm1hdCgpKSB7CisgICAgc3dpdGNoIChuYXRpdmVJbWFn
ZS5mb3JtYXQoKSkgewogICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMzI6CiAgICAgICAgIC8v
IEZvciBvcGFxdWUgaW1hZ2VzLCB3ZSBzaG91bGQgbm90IHByZW11bHRpcGx5IG9yIHVubXVsdGlw
bHkgYWxwaGEuCiAgICAgICAgIGJyZWFrOwpAQCAtNTIxLDcgKzUxNCw3IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRoZSBpbWFnZSBoYXMgYSBmb3JtYXQgdGhhdCBpcyBu
b3Qgc3VwcG9ydGVkIGluIHBhY2tQaXhlbHMuIFdlIGhhdmUgdG8gY29udmVydCBpdCBoZXJlLgot
ICAgICAgICBxdEltYWdlID0gcXRJbWFnZS5jb252ZXJ0VG9Gb3JtYXQocHJlbXVsdGlwbHlBbHBo
YSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRf
QVJHQjMyKTsKKyAgICAgICAgbmF0aXZlSW1hZ2UgPSBuYXRpdmVJbWFnZS5jb252ZXJ0VG9Gb3Jt
YXQocHJlbXVsdGlwbHlBbHBoYSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVk
IDogUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01
MzIsNyArNTI1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdl
KiBpbWFnZSwKIAogICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBy
ZXR1cm4gcGFja1BpeGVscyhxdEltYWdlLmNvbnN0Qml0cygpLCBTb3VyY2VGb3JtYXRCR1JBOCwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9w
LCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKKyAgICByZXR1cm4gcGFja1BpeGVscyhuYXRpdmVJbWFn
ZS5jb25zdEJpdHMoKSwgU291cmNlRm9ybWF0QkdSQTgsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+
aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFz
c093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCBjMDM0
ZjY0Li42MTFlZmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC0xMDIyLDcgKzEwMjIsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCiAgICAgbV9kYXRhLT5z
aGFkb3ctPmNsZWFyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwdXNoVHJhbnNwYXJl
bmN5TGF5ZXJJbnRlcm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUVBpeG1h
cCYgYWxwaGFNYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnB1c2hUcmFuc3BhcmVuY3lMYXll
ckludGVybmFsKGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBvcGFjaXR5LCBRSW1hZ2UmIGFscGhh
TWFzaykKIHsKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwogCkBAIC0xMDU3LDcgKzEw
NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgICAgIGggPSBpbnQocUJvdW5kKHFyZWFsKDApLCBkZXZp
Y2VDbGlwLmhlaWdodCgpLCAocXJlYWwpaCkgKyAyKTsKICAgICB9CiAKLSAgICBRUGl4bWFwIGVt
cHR5QWxwaGFNYXNrOworICAgIFFJbWFnZSBlbXB0eUFscGhhTWFzazsKICAgICBtX2RhdGEtPmxh
eWVycy5wdXNoKG5ldyBUcmFuc3BhcmVuY3lMYXllcihwLCBRUmVjdCh4LCB5LCB3LCBoKSwgb3Bh
Y2l0eSwgZW1wdHlBbHBoYU1hc2spKTsKICAgICArK21fZGF0YS0+bGF5ZXJDb3VudDsKIH0KQEAg
LTEwNzEsNyArMTA3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5z
cGFyZW5jeUxheWVyKCkKICAgICBpZiAoIWxheWVyLT5hbHBoYU1hc2suaXNOdWxsKCkpIHsKICAg
ICAgICAgbGF5ZXItPnBhaW50ZXIucmVzZXRUcmFuc2Zvcm0oKTsKICAgICAgICAgbGF5ZXItPnBh
aW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGlu
YXRpb25Jbik7Ci0gICAgICAgIGxheWVyLT5wYWludGVyLmRyYXdQaXhtYXAoUVBvaW50KCksIGxh
eWVyLT5hbHBoYU1hc2spOworICAgICAgICBsYXllci0+cGFpbnRlci5kcmF3SW1hZ2UoUVBvaW50
KCksIGxheWVyLT5hbHBoYU1hc2spOwogICAgIH0gZWxzZQogICAgICAgICAtLW1fZGF0YS0+bGF5
ZXJDb3VudDsgLy8gc2VlIHRoZSBjb21tZW50IGZvciBsYXllckNvdW50CiAgICAgbGF5ZXItPnBh
aW50ZXIuZW5kKCk7CkBAIC0xMDgwLDcgKzEwODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcC0+c2F2ZSgpOwogICAgIHAtPnJl
c2V0VHJhbnNmb3JtKCk7CiAgICAgcC0+c2V0T3BhY2l0eShsYXllci0+b3BhY2l0eSk7Ci0gICAg
cC0+ZHJhd1BpeG1hcChsYXllci0+b2Zmc2V0LCBsYXllci0+cGl4bWFwKTsKKyAgICBwLT5kcmF3
SW1hZ2UobGF5ZXItPm9mZnNldCwgbGF5ZXItPmltYWdlKTsKICAgICBwLT5yZXN0b3JlKCk7CiAK
ICAgICBkZWxldGUgbGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGFRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaAppbmRleCA5Y2Y3ODJiLi45NDA2NWQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
ckRhdGFRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyRGF0YVF0LmgKQEAgLTI1LDggKzI1LDggQEAKIAogI2luY2x1ZGUgIkltYWdlLmgiCiAK
KyNpbmNsdWRlIDxRSW1hZ2U+CiAjaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBpeG1h
cD4KIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBA
IC0zOSw5ICszOSw3IEBAIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CiBwdWJsaWM6CiAgICAgSW1h
Z2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsKIAotICAgIFFJbWFnZSB0b1FJbWFnZSgpIGNv
bnN0OwotCi0gICAgUVBpeG1hcCBtX3BpeG1hcDsKKyAgICBRSW1hZ2UgbV9uYXRpdmVJbWFnZTsK
ICAgICBPd25QdHI8UVBhaW50ZXI+IG1fcGFpbnRlcjsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1h
Z2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZUJ1ZmZlclF0LmNwcAppbmRleCBiOWI5ZWJmLi40MDdlNDZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApAQCAt
NDIsMjMgKzQyLDIyIEBACiAjaW5jbHVkZSA8UUltYWdlPgogI2luY2x1ZGUgPFFJbWFnZVdyaXRl
cj4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgPG1h
dGguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVm
ZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9waXhtYXAoc2l6ZSkKKyAgICA6
IG1fbmF0aXZlSW1hZ2Uoc2l6ZSwgVFJBTlNQQVJFTlRfSU1BR0VfRk9STUFUKQogewotICAgIGlm
IChtX3BpeG1hcC5pc051bGwoKSkKKyAgICBpZiAobV9uYXRpdmVJbWFnZS5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9waXhtYXAuZmlsbChRQ29sb3IoUXQ6OnRyYW5zcGFyZW50
KSk7CisgICAgbV9uYXRpdmVJbWFnZS5maWxsKFFDb2xvcihRdDo6dHJhbnNwYXJlbnQpKTsKIAog
ICAgIFFQYWludGVyKiBwYWludGVyID0gbmV3IFFQYWludGVyOwogICAgIG1fcGFpbnRlciA9IGFk
b3B0UHRyKHBhaW50ZXIpOwogCi0gICAgaWYgKCFwYWludGVyLT5iZWdpbigmbV9waXhtYXApKQor
ICAgIGlmICghcGFpbnRlci0+YmVnaW4oJm1fbmF0aXZlSW1hZ2UpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBTaW5jZSBJbWFnZUJ1ZmZlciBpcyB1c2VkIG1haW5seSBmb3IgQ2FudmFzLCBl
eHBsaWNpdGx5IGluaXRpYWxpemUKQEAgLTc2LDIyICs3NSw3IEBAIEltYWdlQnVmZmVyRGF0YTo6
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcGFpbnRlci0+c2V0QnJ1
c2goYnJ1c2gpOwogICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpOwogICAgIAotICAgIG1faW1hZ2UgPSBTdGlsbEltYWdl
OjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fcGl4bWFwKTsKLX0KLQotUUltYWdlIEltYWdlQnVmZmVy
RGF0YTo6dG9RSW1hZ2UoKSBjb25zdAotewotICAgIFFQYWludEVuZ2luZSogcGFpbnRFbmdpbmUg
PSBtX3BpeG1hcC5wYWludEVuZ2luZSgpOwotICAgIGlmICghcGFpbnRFbmdpbmUgfHwgcGFpbnRF
bmdpbmUtPnR5cGUoKSAhPSBRUGFpbnRFbmdpbmU6OlJhc3RlcikKLSAgICAgICAgcmV0dXJuIG1f
cGl4bWFwLnRvSW1hZ2UoKTsKLQotICAgIC8vIFFSYXN0ZXJQaXhtYXBEYXRhOjp0b0ltYWdlKCkg
d2lsbCBkZWVwLWNvcHkgdGhlIGJhY2tpbmcgUUltYWdlIGlmIHRoZXJlJ3MgYW4gYWN0aXZlIFFQ
YWludGVyIG9uIGl0LgotICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBkb24ndCB3
YW50IHRoYXQgaGVyZSwgc28gd2UgdGVtcG9yYXJpbHkgcmVkaXJlY3QgdGhlIHBhaW50IGVuZ2lu
ZS4KLSAgICBRUGFpbnREZXZpY2UqIGN1cnJlbnRQYWludERldmljZSA9IHBhaW50RW5naW5lLT5w
YWludERldmljZSgpOwotICAgIHBhaW50RW5naW5lLT5zZXRQYWludERldmljZSgwKTsKLSAgICBR
SW1hZ2UgaW1hZ2UgPSBtX3BpeG1hcC50b0ltYWdlKCk7Ci0gICAgcGFpbnRFbmdpbmUtPnNldFBh
aW50RGV2aWNlKGN1cnJlbnRQYWludERldmljZSk7Ci0gICAgcmV0dXJuIGltYWdlOworICAgIG1f
aW1hZ2UgPSBTdGlsbEltYWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fbmF0aXZlSW1hZ2UpOwog
fQogCiBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQg
LyogcmVzb2x1dGlvblNjYWxlICovLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJh
bE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCkBAIC0xMjAsOSArMTA0LDkgQEAgR3JhcGhpY3NDb250ZXh0
KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogewog
ICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJu
IFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOworICAgICAgICByZXR1cm4gU3Rp
bGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5tX25hdGl2ZUltYWdlKTsKIAotICAgIHJldHVybiBTdGls
bEltYWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fZGF0YS5tX3BpeG1hcCk7CisgICAgcmV0dXJu
IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwog
fQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCkBAIC0xNDksMTIgKzEzMywxMiBAQCB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHNyYwogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpIGNvbnN0CiB7Ci0gICAgUVBpeG1h
cCogbmF0aXZlSW1hZ2UgPSBtX2RhdGEubV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgSW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmbG9hdFJlY3QpOwot
ICAgIFFQaXhtYXAgYWxwaGFNYXNrID0gKm5hdGl2ZUltYWdlOworICAgIFFJbWFnZSBhbHBoYU1h
c2sgPSAqbmF0aXZlSW1hZ2U7CiAKICAgICBjb250ZXh0LT5wdXNoVHJhbnNwYXJlbmN5TGF5ZXJJ
bnRlcm5hbChyZWN0LCAxLjAsIGFscGhhTWFzayk7CiB9CkBAIC0xNjUsNyArMTQ5LDcgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3Rvcjxp
bnQ+JiBsb29rVXBUYWJsZSkKICAgICBpZiAoaXNQYWludGluZykKICAgICAgICAgbV9kYXRhLm1f
cGFpbnRlci0+ZW5kKCk7CiAKLSAgICBRSW1hZ2UgaW1hZ2UgPSBtX2RhdGEudG9RSW1hZ2UoKS5j
b252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICBRSW1hZ2UgaW1hZ2Ug
PSBtX2RhdGEubV9uYXRpdmVJbWFnZTsKICAgICBBU1NFUlQoIWltYWdlLmlzTnVsbCgpKTsKIAog
ICAgIHVjaGFyKiBiaXRzID0gaW1hZ2UuYml0cygpOwpAQCAtMTgyLDEwICsxNjYsMTAgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3Rvcjxp
bnQ+JiBsb29rVXBUYWJsZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fZGF0YS5tX3BpeG1h
cCA9IFFQaXhtYXA6OmZyb21JbWFnZShpbWFnZSk7CisgICAgbV9kYXRhLm1fbmF0aXZlSW1hZ2Ug
PSBpbWFnZTsKIAogICAgIGlmIChpc1BhaW50aW5nKQotICAgICAgICBtX2RhdGEubV9wYWludGVy
LT5iZWdpbigmbV9kYXRhLm1fcGl4bWFwKTsKKyAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+YmVn
aW4oJm1fZGF0YS5tX25hdGl2ZUltYWdlKTsKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRp
cGxpZWQ+CkBAIC0yMjQsNyArMjA4LDcgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmUKICAgICBp
bnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwogCiAgICAgLy8gTk9URTogRm9yIHVubXVsdGlw
bGllZCBkYXRhLCB3ZSB1bmRvIHRoZSBwcmVtdWx0aXBsaWNhdGlvbiBiZWxvdy4KLSAgICBRSW1h
Z2UgaW1hZ2UgPSBpbWFnZURhdGEudG9RSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpG
b3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIFFJbWFnZSBpbWFnZSA9IGltYWdlRGF0
YS5tX25hdGl2ZUltYWdlLmNvbnZlcnRUb0Zvcm1hdChUUkFOU1BBUkVOVF9JTUFHRV9GT1JNQVQp
OwogCiAgICAgQVNTRVJUKCFpbWFnZS5pc051bGwoKSk7CiAKQEAgLTM1OCw3ICszNDIsNyBAQCB2
b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhD
bGFtcGVkQXJyYXkqIHNvdXJjZSwgYwogCiAgICAgYm9vbCBpc1BhaW50aW5nID0gbV9kYXRhLm1f
cGFpbnRlci0+aXNBY3RpdmUoKTsKICAgICBpZiAoIWlzUGFpbnRpbmcpCi0gICAgICAgIG1fZGF0
YS5tX3BhaW50ZXItPmJlZ2luKCZtX2RhdGEubV9waXhtYXApOworICAgICAgICBtX2RhdGEubV9w
YWludGVyLT5iZWdpbigmbV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwogICAgIGVsc2UgewogICAgICAg
ICBtX2RhdGEubV9wYWludGVyLT5zYXZlKCk7CiAKQEAgLTM3Nyw3ICszNjEsNyBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhDbGFtcGVk
QXJyYXkqIHNvdXJjZSwgYwogICAgICAgICBtX2RhdGEubV9wYWludGVyLT5yZXN0b3JlKCk7CiB9
CiAKLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCwgY29uc3Qg
U3RyaW5nJiBmb3JtYXQsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgUUJ5dGVBcnJheSYgZGF0YSkK
K3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNvbnN0IFFJbWFnZSYgaW1hZ2UsIGNvbnN0IFN0cmlu
ZyYgZm9ybWF0LCBjb25zdCBkb3VibGUqIHF1YWxpdHksIFFCeXRlQXJyYXkmIGRhdGEpCiB7CiAg
ICAgaW50IGNvbXByZXNzaW9uUXVhbGl0eSA9IDEwMDsKICAgICBpZiAocXVhbGl0eSAmJiAqcXVh
bGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKQpAQCAtMzg1LDcgKzM2OSw3IEBAIHN0YXRp
YyBib29sIGVuY29kZUltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCwgY29uc3QgU3RyaW5nJiBm
b3JtYXQsIGNvbnN0IGRvdWJsCiAKICAgICBRQnVmZmVyIGJ1ZmZlcigmZGF0YSk7CiAgICAgYnVm
ZmVyLm9wZW4oUUJ1ZmZlcjo6V3JpdGVPbmx5KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBwaXhtYXAu
c2F2ZSgmYnVmZmVyLCBmb3JtYXQudXRmOCgpLmRhdGEoKSwgY29tcHJlc3Npb25RdWFsaXR5KTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBpbWFnZS5zYXZlKCZidWZmZXIsIGZvcm1hdC51dGY4KCkuZGF0
YSgpLCBjb21wcmVzc2lvblF1YWxpdHkpOwogICAgIGJ1ZmZlci5jbG9zZSgpOwogCiAgICAgcmV0
dXJuIHN1Y2Nlc3M7CkBAIC0zOTcsMTAgKzM4MSwxMCBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIENv
bwogCiAgICAgLy8gUUltYWdlV3JpdGVyIGRvZXMgbm90IHN1cHBvcnQgbWltZXR5cGVzLiBJdCBk
b2VzIHN1cHBvcnQgUXQgaW1hZ2UgZm9ybWF0cyAocG5nLAogICAgIC8vIGdpZiwganBlZy4uLiwg
eHBtKSBzbyBza2lwIHRoZSBpbWFnZS8gdG8gZ2V0IHRoZSBRdCBpbWFnZSBmb3JtYXQgdXNlZCB0
byBlbmNvZGUKLSAgICAvLyB0aGUgbV9waXhtYXAgaW1hZ2UuCisgICAgLy8gdGhlIG1fbmF0aXZl
SW1hZ2UgaW1hZ2UuCiAKICAgICBRQnl0ZUFycmF5IGRhdGE7Ci0gICAgaWYgKCFlbmNvZGVJbWFn
ZShtX2RhdGEubV9waXhtYXAsIG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIiksIHF1
YWxpdHksIGRhdGEpKQorICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fbmF0aXZlSW1hZ2Us
IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIiksIHF1YWxpdHksIGRhdGEpKQogICAg
ICAgICByZXR1cm4gImRhdGE6LCI7CiAKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsg
IjtiYXNlNjQsIiArIGRhdGEudG9CYXNlNjQoKS5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHAKaW5kZXggZTAz
NjM2Zi4uYWU0MGZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIE5hdGl2ZUlt
YWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogCiAgICAgUUltYWdl
IGltZyhyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9ieXRlcyksIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksIHNpemVvZihQaXhlbERhdGEpICogbV9zaXplLndpZHRoKCksIGZvcm1h
dCk7CiAKLSAgICByZXR1cm4gbmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGltZykpOwor
ICAgIHJldHVybiBuZXcgUUltYWdlKGltZyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggZTA5OGUwOS4uOTFjMTMzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAKIFFfR1VJX0VYUE9SVCBRUGl4bWFwIHF0X3BpeG1hcEZyb21XaW5I
QklUTUFQKEhCSVRNQVAsIGludCBoYml0bWFwRm9ybWF0ID0gMCk7CiAjZW5kaWYKIAotdHlwZWRl
ZiBRSGFzaDxRQnl0ZUFycmF5LCBRUGl4bWFwPiBXZWJHcmFwaGljSGFzaDsKK3R5cGVkZWYgUUhh
c2g8UUJ5dGVBcnJheSwgUUltYWdlPiBXZWJHcmFwaGljSGFzaDsKIFFfR0xPQkFMX1NUQVRJQyhX
ZWJHcmFwaGljSGFzaCwgX2dyYXBoaWNzKQogCiBzdGF0aWMgdm9pZCBlYXJseUNsZWFyR3JhcGhp
Y3MoKQpAQCAtNjksMjggKzY5LDI4IEBAIHN0YXRpYyBXZWJHcmFwaGljSGFzaCogZ3JhcGhpY3Mo
KQogCiAgICAgaWYgKGhhc2gtPmlzRW1wdHkoKSkgewogCi0gICAgICAgIC8vIHByZXZlbnQgflFQ
aXhtYXAgcnVubmluZyBhZnRlciB+UUFwcGxpY2F0aW9uIChsZWFrcyBuYXRpdmUgcGl4bWFwcykK
KyAgICAgICAgLy8gcHJldmVudCB+UUltYWdlIHJ1bm5pbmcgYWZ0ZXIgflFBcHBsaWNhdGlvbiAo
bGVha3MgbmF0aXZlIGltYWdlcykKICAgICAgICAgcUFkZFBvc3RSb3V0aW5lKGVhcmx5Q2xlYXJH
cmFwaGljcyk7CiAKICAgICAgICAgLy8gUVdlYlNldHRpbmdzOjpNaXNzaW5nSW1hZ2VHcmFwaGlj
Ci0gICAgICAgIGhhc2gtPmluc2VydCgibWlzc2luZ0ltYWdlIiwgUVBpeG1hcChRTGF0aW4xU3Ry
aW5nKCI6d2Via2l0L3Jlc291cmNlcy9taXNzaW5nSW1hZ2UucG5nIikpKTsKKyAgICAgICAgaGFz
aC0+aW5zZXJ0KCJtaXNzaW5nSW1hZ2UiLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9y
ZXNvdXJjZXMvbWlzc2luZ0ltYWdlLnBuZyIpKSk7CiAgICAgICAgIC8vIFFXZWJTZXR0aW5nczo6
TWlzc2luZ1BsdWdpbkdyYXBoaWMKLSAgICAgICAgaGFzaC0+aW5zZXJ0KCJudWxsUGx1Z2luIiwg
UVBpeG1hcChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9udWxsUGx1Z2luLnBuZyIp
KSk7CisgICAgICAgIGhhc2gtPmluc2VydCgibnVsbFBsdWdpbiIsIFFJbWFnZShRTGF0aW4xU3Ry
aW5nKCI6d2Via2l0L3Jlc291cmNlcy9udWxsUGx1Z2luLnBuZyIpKSk7CiAgICAgICAgIC8vIFFX
ZWJTZXR0aW5nczo6RGVmYXVsdEZyYW1lSWNvbkdyYXBoaWMKLSAgICAgICAgaGFzaC0+aW5zZXJ0
KCJ1cmxJY29uIiwgUVBpeG1hcChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy91cmxJ
Y29uLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgidXJsSWNvbiIsIFFJbWFnZShRTGF0
aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy91cmxJY29uLnBuZyIpKSk7CiAgICAgICAgIC8v
IFFXZWJTZXR0aW5nczo6VGV4dEFyZWFTaXplR3JpcENvcm5lckdyYXBoaWMKLSAgICAgICAgaGFz
aC0+aW5zZXJ0KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIsIFFQaXhtYXAoUUxhdGluMVN0cmluZygi
OndlYmtpdC9yZXNvdXJjZXMvdGV4dEFyZWFSZXNpemVDb3JuZXIucG5nIikpKTsKKyAgICAgICAg
aGFzaC0+aW5zZXJ0KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIsIFFJbWFnZShRTGF0aW4xU3RyaW5n
KCI6d2Via2l0L3Jlc291cmNlcy90ZXh0QXJlYVJlc2l6ZUNvcm5lci5wbmciKSkpOwogICAgICAg
ICAvLyBRV2ViU2V0dGluZ3M6OkRlbGV0ZUJ1dHRvbkdyYXBoaWMKLSAgICAgICAgaGFzaC0+aW5z
ZXJ0KCJkZWxldGVCdXR0b24iLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3Vy
Y2VzL2RlbGV0ZUJ1dHRvbi5wbmciKSkpOworICAgICAgICBoYXNoLT5pbnNlcnQoImRlbGV0ZUJ1
dHRvbiIsIFFJbWFnZShRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9kZWxldGVCdXR0
b24ucG5nIikpKTsKICAgICAgICAgLy8gUVdlYlNldHRpbmdzOjpJbnB1dFNwZWVjaEJ1dHRvbkdy
YXBoaWMKLSAgICAgICAgaGFzaC0+aW5zZXJ0KCJpbnB1dFNwZWVjaCIsIFFQaXhtYXAoUUxhdGlu
MVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvaW5wdXRTcGVlY2gucG5nIikpKTsKKyAgICAgICAg
aGFzaC0+aW5zZXJ0KCJpbnB1dFNwZWVjaCIsIFFJbWFnZShRTGF0aW4xU3RyaW5nKCI6d2Via2l0
L3Jlc291cmNlcy9pbnB1dFNwZWVjaC5wbmciKSkpOwogICAgIH0KIAogICAgIHJldHVybiBoYXNo
OwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBpbnRvIFdlYktpdAotc3Rh
dGljIFFQaXhtYXAgbG9hZFJlc291cmNlUGl4bWFwKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMg
UUltYWdlIGxvYWRSZXNvdXJjZUltYWdlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgcmV0dXJu
IGdyYXBoaWNzKCktPnZhbHVlKG5hbWUpOwogfQpAQCAtMTE3LDIzICsxMTcsMjMgQEAgYm9vbCBG
cmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAogUGFzc1JlZlB0cjxJbWFnZT4g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0
dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkpOworICAgIHJl
dHVybiBTdGlsbEltYWdlOjpjcmVhdGUobG9hZFJlc291cmNlSW1hZ2UobmFtZSkpOwogfQogCi12
b2lkIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFQ
aXhtYXAmIHBpeG1hcCkKK3ZvaWQgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgUUltYWdlJiBpbWFnZSkKIHsKICAgICBXZWJHcmFwaGljSGFzaCogaCA9
IGdyYXBoaWNzKCk7Ci0gICAgaWYgKHBpeG1hcC5pc051bGwoKSkKKyAgICBpZiAoaW1hZ2UuaXNO
dWxsKCkpCiAgICAgICAgIGgtPnJlbW92ZShuYW1lKTsKICAgICBlbHNlCi0gICAgICAgIGgtPmlu
c2VydChuYW1lLCBwaXhtYXApOworICAgICAgICBoLT5pbnNlcnQobmFtZSwgaW1hZ2UpOwogfQog
CiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKLSAgICBRUGl4bWFwKiBmcmFtZVBpeG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZVBpeG1hcCkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgUUltYWdlKiBmcmFtZUltYWdlID0gbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVh
cmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKICNpZiBF
TkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtMTQ4LDM0ICsxNDgsMzggQEAg
dm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgIGlmICghZHIud2lkdGgoKSB8fCAhZHIuaGVpZ2h0
KCkgfHwgIXRyLndpZHRoKCkgfHwgIXRyLmhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBRUGl4bWFwIHBpeG1hcCA9ICpmcmFtZVBpeG1hcDsKLSAgICBpZiAodHIueCgpIHx8IHRyLnko
KSB8fCB0ci53aWR0aCgpICE9IHBpeG1hcC53aWR0aCgpIHx8IHRyLmhlaWdodCgpICE9IHBpeG1h
cC5oZWlnaHQoKSkKLSAgICAgICAgcGl4bWFwID0gcGl4bWFwLmNvcHkodHIpOworICAgIFFJbWFn
ZSBpbWFnZSA9ICpmcmFtZUltYWdlOworICAgIGlmICh0ci54KCkgfHwgdHIueSgpIHx8IHRyLndp
ZHRoKCkgIT0gaW1hZ2Uud2lkdGgoKSB8fCB0ci5oZWlnaHQoKSAhPSBpbWFnZS5oZWlnaHQoKSkK
KyAgICAgICAgaW1hZ2UgPSBpbWFnZS5jb3B5KHRyKTsKIAogICAgIENvbXBvc2l0ZU9wZXJhdG9y
IHByZXZpb3VzT3BlcmF0b3IgPSBjdHh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKIAotICAgIGN0
eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighcGl4bWFwLmhhc0FscGhhKCkgJiYgb3AgPT0gQ29t
cG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CisgICAgY3R4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKCFpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKSAmJiBvcCA9PSBDb21wb3Np
dGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKIAogICAgIFFQYWludGVyKiBwID0g
Y3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0ocGF0dGVy
blRyYW5zZm9ybSk7CiAKLSAgICAvLyBJZiB0aGlzIHdvdWxkIGRyYXcgbW9yZSB0aGFuIG9uZSBz
Y2FsZWQgdGlsZSwgd2Ugc2NhbGUgdGhlIHBpeG1hcCBmaXJzdCBhbmQgdGhlbiB1c2UgdGhlIHJl
c3VsdCB0byBkcmF3LgorICAgIC8vIElmIHRoaXMgd291bGQgZHJhdyBtb3JlIHRoYW4gb25lIHNj
YWxlZCB0aWxlLCB3ZSBzY2FsZSB0aGUgaW1hZ2UgZmlyc3QgYW5kIHRoZW4gdXNlIHRoZSByZXN1
bHQgdG8gZHJhdy4KICAgICBpZiAodHJhbnNmb3JtLnR5cGUoKSA9PSBRVHJhbnNmb3JtOjpUeFNj
YWxlKSB7CiAgICAgICAgIFFSZWN0RiB0aWxlUmVjdEluVGFyZ2V0Q29vcmRzID0gKHRyYW5zZm9y
bSAqIFFUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGhhc2UueCgpLCBwaGFzZS55KCkpKS5tYXBSZWN0
KHRyKTsKIAogICAgICAgICBib29sIHRpbGVXaWxsQmVQYWludGVkT25seU9uY2UgPSB0aWxlUmVj
dEluVGFyZ2V0Q29vcmRzLmNvbnRhaW5zKGRyKTsKICAgICAgICAgaWYgKCF0aWxlV2lsbEJlUGFp
bnRlZE9ubHlPbmNlKSB7Ci0gICAgICAgICAgICBRU2l6ZUYgc2NhbGVkU2l6ZShmbG9hdChwaXht
YXAud2lkdGgoKSkgKiB0cmFuc2Zvcm0ubTExKCksIGZsb2F0KHBpeG1hcC5oZWlnaHQoKSkgKiB0
cmFuc2Zvcm0ubTIyKCkpOwotICAgICAgICAgICAgUVBpeG1hcCBzY2FsZWRQaXhtYXAoc2NhbGVk
U2l6ZS50b1NpemUoKSk7Ci0gICAgICAgICAgICBpZiAocGl4bWFwLmhhc0FscGhhKCkpCi0gICAg
ICAgICAgICAgICAgc2NhbGVkUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAg
ICAgIFFTaXplRiBzY2FsZWRTaXplKGZsb2F0KGltYWdlLndpZHRoKCkpICogdHJhbnNmb3JtLm0x
MSgpLCBmbG9hdChpbWFnZS5oZWlnaHQoKSkgKiB0cmFuc2Zvcm0ubTIyKCkpOworICAgICAgICAg
ICAgUUltYWdlIHNjYWxlZEltYWdlOworICAgICAgICAgICAgaWYgKGltYWdlLmhhc0FscGhhQ2hh
bm5lbCgpKSB7CisgICAgICAgICAgICAgICAgc2NhbGVkSW1hZ2UgPSBRSW1hZ2Uoc2NhbGVkU2l6
ZS50b1NpemUoKSwgVFJBTlNQQVJFTlRfSU1BR0VfRk9STUFUKTsKKyAgICAgICAgICAgICAgICBz
Y2FsZWRJbWFnZS5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBzY2FsZWRJbWFnZSA9IFFJbWFnZShzY2FsZWRTaXplLnRvU2l6ZSgpLCBP
UEFRVUVfSU1BR0VfRk9STUFUKTsKKwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFQ
YWludGVyIHBhaW50ZXIoJnNjYWxlZFBpeG1hcCk7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmc2NhbGVkSW1hZ2UpOwogICAgICAgICAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9z
aXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKICAgICAgICAgICAg
ICAgICBwYWludGVyLnNldFJlbmRlckhpbnRzKHAtPnJlbmRlckhpbnRzKCkpOwotICAgICAgICAg
ICAgICAgIHBhaW50ZXIuZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBzY2FsZWRQaXhtYXAud2lkdGgo
KSwgc2NhbGVkUGl4bWFwLmhlaWdodCgpKSwgcGl4bWFwKTsKKyAgICAgICAgICAgICAgICBwYWlu
dGVyLmRyYXdJbWFnZShRUmVjdCgwLCAwLCBzY2FsZWRJbWFnZS53aWR0aCgpLCBzY2FsZWRJbWFn
ZS5oZWlnaHQoKSksIGltYWdlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBpeG1hcCA9
IHNjYWxlZFBpeG1hcDsKKyAgICAgICAgICAgIGltYWdlID0gc2NhbGVkSW1hZ2U7CiAgICAgICAg
ICAgICB0cmFuc2Zvcm0gPSBRVHJhbnNmb3JtOjpmcm9tVHJhbnNsYXRlKHRyYW5zZm9ybS5keCgp
LCB0cmFuc2Zvcm0uZHkoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODQsNyArMTg4LDcgQEAg
dm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgIHRyYW5zZm9ybSAqPSBRVHJhbnNmb3JtKCkudHJh
bnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgpKTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHRy
LngoKSwgdHIueSgpKTsKIAotICAgIFFCcnVzaCBiKHBpeG1hcCk7CisgICAgUUJydXNoIGIoaW1h
Z2UpOwogICAgIGIuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgcC0+ZmlsbFJlY3QoZHIs
IGIpOwogCkBAIC0xOTQsNyArMTk4LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAg
ICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLUJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShRUGl4bWFwKiBwaXhtYXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKFFJbWFnZSogaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVy
KQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAgICwg
bV9mcmFtZXMoMCkKQEAgLTIxMiwxNCArMjE2LDE0IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShRUGl4bWFwKiBwaXhtYXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICwgbV9zaXpl
QXZhaWxhYmxlKHRydWUpCiAgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCiB7Ci0gICAgaW50
IHdpZHRoID0gcGl4bWFwLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBwaXhtYXAtPmhlaWdo
dCgpOworICAgIGludCB3aWR0aCA9IGltYWdlLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBp
bWFnZS0+aGVpZ2h0KCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsK
ICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCiAgICAgbV9mcmFtZXMuZ3Jv
dygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gcGl4bWFwOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBwaXhtYXAtPmhhc0FscGhhKCk7CisgICAgbV9mcmFtZXNbMF0ubV9mcmFt
ZSA9IGltYWdlOworICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBpbWFnZS0+aGFzQWxwaGFD
aGFubmVsKCk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwogICAgIGNo
ZWNrRm9yU29saWRDb2xvcigpOwogfQpAQCAtMjQwLDcgKzI0NCw4IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAg
ICBpZiAobm9ybWFsaXplZFNyYy5pc0VtcHR5KCkgfHwgbm9ybWFsaXplZERzdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFFQaXhtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKyAgICBRSW1hZ2UqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjU0LDE5
ICsyNTksMTkgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogI2VuZGlmCiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBw
cmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgY3R4dC0+
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBvcCA9PSBDb21wb3Np
dGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKKyAgICBjdHh0LT5zZXRDb21wb3Np
dGVPcGVyYXRpb24oIWltYWdlLT5oYXNBbHBoYUNoYW5uZWwoKSAmJiBvcCA9PSBDb21wb3NpdGVT
b3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKIAogICAgIGlmIChjdHh0LT5oYXNTaGFk
b3coKSkgewogICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBjdHh0LT5zaGFkb3dCbHVyKCk7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVkRHN0KTsKICAgICAgICAgaWYgKHNoYWRvd0NvbnRl
eHQpIHsKICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3UGl4
bWFwKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CisgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKmltYWdlLCBub3JtYWxpemVk
U3JjKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4dCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcChub3Jt
YWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOworICAgIGN0eHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKmltYWdlLCBub3JtYWxpemVkU3JjKTsK
IAogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIApA
QCAtMjgyLDI0ICsyODcsMjQgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9y
KCkKICAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBp
eG1hcCogZnJhbWVQaXhtYXAgPSBmcmFtZUF0SW5kZXgoMCk7Ci0gICAgaWYgKCFmcmFtZVBpeG1h
cCB8fCBmcmFtZVBpeG1hcC0+d2lkdGgoKSAhPSAxIHx8IGZyYW1lUGl4bWFwLT5oZWlnaHQoKSAh
PSAxKQorICAgIFFJbWFnZSogZnJhbWVJbWFnZSA9IGZyYW1lQXRJbmRleCgwKTsKKyAgICBpZiAo
IWZyYW1lSW1hZ2UgfHwgZnJhbWVJbWFnZS0+d2lkdGgoKSAhPSAxIHx8IGZyYW1lSW1hZ2UtPmhl
aWdodCgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTb2xpZENvbG9yID0gdHJ1
ZTsKLSAgICBtX3NvbGlkQ29sb3IgPSBRQ29sb3I6OmZyb21SZ2JhKGZyYW1lUGl4bWFwLT50b0lt
YWdlKCkucGl4ZWwoMCwgMCkpOworICAgIG1fc29saWRDb2xvciA9IFFDb2xvcjo6ZnJvbVJnYmEo
ZnJhbWVJbWFnZS0+cGl4ZWwoMCwgMCkpOwogfQogCiAjaWYgT1MoV0lORE9XUykKIFBhc3NSZWZQ
dHI8Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmVhdGUoSEJJVE1BUCBoQml0bWFwKQogewog
I2lmIEhBVkUoUVQ1KQotICAgIFFQaXhtYXAqIHFQaXhtYXAgPSBuZXcgUVBpeG1hcChxdF9waXht
YXBGcm9tV2luSEJJVE1BUChoQml0bWFwKSk7CisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IG5l
dyBRSW1hZ2UocXRfcGl4bWFwRnJvbVdpbkhCSVRNQVAoaEJpdG1hcCkudG9JbWFnZSgpKTsKICNl
bHNlCi0gICAgUVBpeG1hcCogcVBpeG1hcCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21XaW5I
QklUTUFQKGhCaXRtYXApKTsKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gbmV3IFFJbWFnZShR
UGl4bWFwOjpmcm9tV2luSEJJVE1BUChoQml0bWFwKS50b0ltYWdlKCkpOwogI2VuZGlmCiAKLSAg
ICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShxUGl4bWFwKTsKKyAgICByZXR1cm4gQml0bWFw
SW1hZ2U6OmNyZWF0ZShuYXRpdmVJbWFnZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAKaW5kZXggN2FhZTYyNS4u
NWM5NDEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
UGF0dGVyblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Q
YXR0ZXJuUXQuY3BwCkBAIC0zMywxMiArMzMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBR
QnJ1c2ggUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCkgY29uc3QKIHsKLSAgICBRUGl4
bWFwKiBwaXhtYXAgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
LSAgICBpZiAoIXBpeG1hcCkKKyAgICBRSW1hZ2UqIGltYWdlID0gdGlsZUltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJu
IFFCcnVzaCgpOwogCiAgICAgLy8gUXQgbWVyZ2VzIHBhdHRlciBzcGFjZSBhbmQgdXNlciBzcGFj
ZSBpdHNlbGYKLSAgICBRQnJ1c2ggYnJ1c2goKnBpeG1hcCk7CisgICAgUUJydXNoIGJydXNoKCpp
bWFnZSk7CiAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRp
b24pOwogCiAgICAgcmV0dXJuIGJydXNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKaW5kZXggODA2NjZiYS4uMDQxMjUyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbElt
YWdlUXQuY3BwCkBAIC0zNiw0MSArMzYsNDEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
dGlsbEltYWdlOjpTdGlsbEltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKLSAgICA6IG1fcGl4
bWFwKG5ldyBRUGl4bWFwKHBpeG1hcCkpCi0gICAgLCBtX293bnNQaXhtYXAodHJ1ZSkKK1N0aWxs
SW1hZ2U6OlN0aWxsSW1hZ2UoY29uc3QgUUltYWdlJiBpbWFnZSkKKyAgICA6IG1faW1hZ2UobmV3
IFFJbWFnZShpbWFnZSkpCisgICAgLCBtX293bnNJbWFnZSh0cnVlKQoge30KIAotU3RpbGxJbWFn
ZTo6U3RpbGxJbWFnZShjb25zdCBRUGl4bWFwKiBwaXhtYXApCi0gICAgOiBtX3BpeG1hcChwaXht
YXApCi0gICAgLCBtX293bnNQaXhtYXAoZmFsc2UpCitTdGlsbEltYWdlOjpTdGlsbEltYWdlKGNv
bnN0IFFJbWFnZSogaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICwgbV9vd25zSW1h
Z2UoZmFsc2UpCiB7fQogCiBTdGlsbEltYWdlOjp+U3RpbGxJbWFnZSgpCiB7Ci0gICAgaWYgKG1f
b3duc1BpeG1hcCkKLSAgICAgICAgZGVsZXRlIG1fcGl4bWFwOworICAgIGlmIChtX293bnNJbWFn
ZSkKKyAgICAgICAgZGVsZXRlIG1faW1hZ2U7CiB9CiAKIGJvb2wgU3RpbGxJbWFnZTo6Y3VycmVu
dEZyYW1lSGFzQWxwaGEoKQogewotICAgIHJldHVybiBtX3BpeG1hcC0+aGFzQWxwaGEoKTsKKyAg
ICByZXR1cm4gbV9pbWFnZS0+aGFzQWxwaGFDaGFubmVsKCk7CiB9CiAKIEludFNpemUgU3RpbGxJ
bWFnZTo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludFNpemUobV9waXhtYXAtPndpZHRo
KCksIG1fcGl4bWFwLT5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEludFNpemUobV9pbWFnZS0+d2lk
dGgoKSwgbV9pbWFnZS0+aGVpZ2h0KCkpOwogfQogCiBOYXRpdmVJbWFnZVB0ciBTdGlsbEltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
TmF0aXZlSW1hZ2VQdHI+KG1fcGl4bWFwKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxOYXRpdmVJ
bWFnZVB0cj4obV9pbWFnZSk7CiB9CiAKIHZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
IHsKLSAgICBpZiAobV9waXhtYXAtPmlzTnVsbCgpKQorICAgIGlmIChtX2ltYWdlLT5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRTcmMgPSBzcmMu
bm9ybWFsaXplZCgpOwpAQCAtODQsMTIgKzg0LDEyIEBAIHZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICBHcmFw
aGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4
dCwgbm9ybWFsaXplZERzdCk7CiAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CiAgICAgICAg
ICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVk
RHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOworICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZHJhd0ltYWdlKG5vcm1hbGl6ZWREc3QsICptX2ltYWdlLCBub3JtYWxpemVkU3JjKTsKICAg
ICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4dCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0
LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOworICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKm1faW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAg
IGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaApv
bGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDI2ZGY0NzEuLjhjOWVjMGQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKQEAg
LTM0LDE0ICszNCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTdGlsbElt
YWdlIDogcHVibGljIEltYWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0aWxsSW1hZ2U+IGNyZWF0ZShjb25zdCBRUGl4bWFwJiBwaXhtYXApCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGNyZWF0ZShjb25zdCBRSW1hZ2UmIGltYWdlKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0aWxsSW1hZ2UocGl4
bWFwKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0aWxsSW1hZ2UoaW1hZ2Up
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGNy
ZWF0ZUZvclJlbmRlcmluZyhjb25zdCBRUGl4bWFwKiBwaXhtYXApCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGNyZWF0ZUZvclJlbmRlcmluZyhjb25zdCBRSW1hZ2UqIGlt
YWdlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0aWxsSW1h
Z2UocGl4bWFwKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0aWxsSW1hZ2Uo
aW1hZ2UpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVI
YXNBbHBoYSgpOwpAQCAtNTYsMTIgKzU2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBTdGlsbElt
YWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCk7Ci0gICAgICAgIFN0aWxsSW1hZ2UoY29uc3QgUVBp
eG1hcCogcGl4bWFwKTsKKyAgICAgICAgU3RpbGxJbWFnZShjb25zdCBRSW1hZ2UmKTsKKyAgICAg
ICAgU3RpbGxJbWFnZShjb25zdCBRSW1hZ2UqKTsKICAgICAgICAgdmlydHVhbCB+U3RpbGxJbWFn
ZSgpOwogICAgICAgICAKLSAgICAgICAgY29uc3QgUVBpeG1hcCogbV9waXhtYXA7Ci0gICAgICAg
IGJvb2wgbV9vd25zUGl4bWFwOworICAgICAgICBjb25zdCBRSW1hZ2UqIG1faW1hZ2U7CisgICAg
ICAgIGJvb2wgbV9vd25zSW1hZ2U7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxheWVyLmgKaW5kZXggZjEz
ZGViMC4uMWMxNTMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5oCkBAIC0zOCwyMiArMzgsMjEgQEAKIAogI2lu
Y2x1ZGUgPFFQYWludEVuZ2luZT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGl4
bWFwPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBUcmFuc3BhcmVuY3lMYXllciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHJhbnNwYXJlbmN5
TGF5ZXIoY29uc3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBvcGFjaXR5
LCBRUGl4bWFwJiBhbHBoYU1hc2spCi0gICAgICAgIDogcGl4bWFwKHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkKKyAgICBUcmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciogcCwgY29u
c3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFJbWFnZSYgYWxwaGFNYXNrKQorICAgICAg
ICA6IGltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgVFJBTlNQQVJFTlRfSU1BR0Vf
Rk9STUFUKQogICAgICAgICAsIG9wYWNpdHkob3BhY2l0eSkKICAgICAgICAgLCBhbHBoYU1hc2so
YWxwaGFNYXNrKQogICAgICAgICAsIHNhdmVDb3VudGVyKDEpIC8vIHNlZSB0aGUgY29tbWVudCBm
b3Igc2F2ZUNvdW50ZXIKICAgICB7CiAgICAgICAgIG9mZnNldCA9IHJlY3QudG9wTGVmdCgpOwot
ICAgICAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBwYWludGVyLmJl
Z2luKCZwaXhtYXApOworICAgICAgICBpbWFnZS5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAg
ICAgIHBhaW50ZXIuYmVnaW4oJmltYWdlKTsKICAgICAgICAgcGFpbnRlci5zZXRSZW5kZXJIaW50
cyhwLT5yZW5kZXJIaW50cygpKTsKICAgICAgICAgcGFpbnRlci50cmFuc2xhdGUoLW9mZnNldCk7
CiAgICAgICAgIHBhaW50ZXIuc2V0UGVuKHAtPnBlbigpKTsKQEAgLTY3LDEyICs2NiwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFFQaXhtYXAgcGl4bWFwOworICAgIFFJbWFnZSBp
bWFnZTsKICAgICBRUG9pbnQgb2Zmc2V0OwogICAgIFFQYWludGVyIHBhaW50ZXI7CiAgICAgcXJl
YWwgb3BhY2l0eTsKICAgICAvLyBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIKLSAgICBRUGl4bWFwIGFs
cGhhTWFzazsKKyAgICBRSW1hZ2UgYWxwaGFNYXNrOwogICAgIC8vIHNhdmVDb3VudGVyIGlzIG9u
bHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFscGhhTWFzawogICAgIC8vIG90aGVyd2lzZSwg
aXRzIHZhbHVlIGlzIHVuc3BlY2lmaWVkCiAgICAgaW50IHNhdmVDb3VudGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCmluZGV4IDZkMmFiNzIuLjhlNGM1ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKQEAgLTUwLDYg
KzUwLDcgQEAKIAogI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRQ2xpcGJv
YXJkPgorI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRlIDxRTGlzdD4KICNpbmNsdWRlIDxRTWlt
ZURhdGE+CiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CkBAIC0yNDMsNyArMjQ0LDcgQEAgRHJhZ0lt
YWdlUmVmIENsaXBib2FyZFF0OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNv
bnN0CiAgICAgaWYgKCFtX2RyYWdJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZHJhZ0xv
YyA9IG1fZHJhZ0xvYzsKLSAgICByZXR1cm4gbV9kcmFnSW1hZ2UtPmltYWdlKCktPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIG5ldyBRSW1hZ2UoKm1fZHJhZ0ltYWdl
LT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKIH0KIAogCkBAIC0yNzMs
OSArMjc0LDkgQEAgdm9pZCBDbGlwYm9hcmRRdDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY28KICAgICBDYWNoZWRJbWFnZSogY2Fj
aGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKICAgICBpZiAoIWNhY2hlZEltYWdl
IHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKSB8
fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBRUGl4bWFw
KiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJl
cigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAocGl4bWFwKQotICAg
ICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SW1hZ2VEYXRhKCpwaXhtYXApOworICAgIFFJbWFnZSog
aW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigp
KS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoaW1hZ2UpCisgICAgICAg
IG1fd3JpdGFibGVEYXRhLT5zZXRJbWFnZURhdGEoKmltYWdlKTsKIAogICAgIFFMaXN0PFFVcmw+
IHVybHM7CiAgICAgdXJscy5hcHBlbmQodXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1
cnNvclF0LmNwcAppbmRleCBlNzg1NGRkLi4xNjhhMmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvQ3Vyc29yUXQuY3BwCkBAIC0zNyw2ICszNyw4IEBACiAKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogCisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIApAQCAtNzUsMTAgKzc3LDExIEBA
IEN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKICNpZm5kZWYg
UVRfTk9fQ1VSU09SCiBzdGF0aWMgUUN1cnNvciogY3JlYXRlQ3VzdG9tQ3Vyc29yKEltYWdlKiBp
bWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCiB7Ci0gICAgaWYgKCFpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWlu
ZUhvdFNwb3QoaW1hZ2UsIGhvdFNwb3QpOwotICAgIHJldHVybiBuZXcgUUN1cnNvcigqKGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVm
ZmVjdGl2ZUhvdFNwb3QueSgpKTsKKyAgICByZXR1cm4gbmV3IFFDdXJzb3IoUVBpeG1hcDo6ZnJv
bUltYWdlKCpuYXRpdmVJbWFnZSksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RT
cG90LnkoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvRHJhZ0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0lt
YWdlUXQuY3BwCmluZGV4IDBlN2NlMDQuLmU5M2FjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAKKyNpbmNsdWRlIDxRSW1hZ2U+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZiBp
bWFnZSkKQEAgLTY2LDcgKzY4LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21J
bWFnZShJbWFnZSogaW1hZ2UsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSkKICAgICBpZiAo
IWltYWdlIHx8ICFpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbmV3IFFQaXhtYXAoKmltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4gbmV3IFFJbWFnZSgqaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkpOwogfQogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
SWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9QYXN0ZWJvYXJkUXQuY3BwCmluZGV4IGQ2ZjRlMWQuLmM2ZTNkMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcApAQCAtMTY2LDEwICsxNjYsMTAg
QEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKQogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJl
bmRlcmVyKG5vZGUtPnJlbmRlcmVyKCkpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKLSAgICBRUGl4
bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBp
ZiAoIXBpeG1hcCkKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAg
IFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldFBpeG1hcCgqcGl4bWFwLCBRQ2xpcGJv
YXJkOjpDbGlwYm9hcmQpOworICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldElt
YWdlKCpuYXRpdmVJbWFnZSwgUUNsaXBib2FyZDo6Q2xpcGJvYXJkKTsKICNlbmRpZgogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRleCBlZDE4MDZmLi41N2QzZTAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTE3NzMsOSArMTc3Myw5IEBAIFFXZWJIaXRUZXN0
UmVzdWx0UHJpdmF0ZTo6UVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlKGNvbnN0IFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQKICAgICBib3VuZGluZ1JlY3QgPSBpbm5lck5vblNoYXJlZE5vZGUgPyBpbm5l
ck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkgOiBJ
bnRSZWN0KCk7CiAgICAgV2ViQ29yZTo6SW1hZ2UgKmltZyA9IGhpdFRlc3QuaW1hZ2UoKTsKICAg
ICBpZiAoaW1nKSB7Ci0gICAgICAgIFFQaXhtYXAgKnBpeCA9IGltZy0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKyAgICAgICAgUUltYWdlICpwaXggPSBpbWctPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlmIChwaXgpCi0gICAgICAgICAgICBwaXhtYXAgPSAq
cGl4OworICAgICAgICAgICAgaW1hZ2UgPSAqcGl4OwogICAgIH0KICAgICBXZWJDb3JlOjpGcmFt
ZSAqd2ZyYW1lID0gaGl0VGVzdC50YXJnZXRGcmFtZSgpOwogICAgIGlmICh3ZnJhbWUpCkBAIC0x
OTc0LDcgKzE5NzQsNyBAQCBRUGl4bWFwIFFXZWJIaXRUZXN0UmVzdWx0OjpwaXhtYXAoKSBjb25z
dAogewogICAgIGlmICghZCkKICAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKLSAgICByZXR1cm4g
ZC0+cGl4bWFwOworICAgIHJldHVybiBRUGl4bWFwOjpmcm9tSW1hZ2UoZC0+aW1hZ2UpOwogfQog
CiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDI3NjJjMmIuLmFlODE1NWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1Ymxp
YzoKICAgICBRV2ViRWxlbWVudCBsaW5rRWxlbWVudDsKICAgICBRU3RyaW5nIGFsdGVybmF0ZVRl
eHQ7CiAgICAgUVVybCBpbWFnZVVybDsKLSAgICBRUGl4bWFwIHBpeG1hcDsKKyAgICBRSW1hZ2Ug
aW1hZ2U7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKICAgICBib29sIGlzQ29udGVudFNl
bGVjdGVkOwogICAgIGJvb2wgaXNTY3JvbGxCYXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9y
eS5jcHAKaW5kZXggMTVkNGFkOC4uNzEyYzI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0
b3J5LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIFFEYXRlVGltZSBRV2ViSGlzdG9yeUl0ZW06Omxh
c3RWaXNpdGVkKCkgY29uc3QKIFFJY29uIFFXZWJIaXN0b3J5SXRlbTo6aWNvbigpIGNvbnN0CiB7
CiAgICAgaWYgKGQtPml0ZW0pCi0gICAgICAgIHJldHVybiAqV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkuc3luY2hyb25vdXNOYXRpdmVJY29uRm9yUGFnZVVSTChkLT5pdGVtLT51cmwoKSwgV2ViQ29y
ZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICAgICAgcmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgq
V2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNOYXRpdmVJY29uRm9yUGFnZVVSTChk
LT5pdGVtLT51cmwoKSwgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKSk7CiAKICAgICByZXR1cm4g
UUljb24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5n
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IDUzNThk
ZDIuLmNhZjk1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5n
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcApAQCAtNzE3
LDEyICs3MTcsMTIgQEAgdm9pZCBRV2ViU2V0dGluZ3M6OmNsZWFySWNvbkRhdGFiYXNlKCkKIFFJ
Y29uIFFXZWJTZXR0aW5nczo6aWNvbkZvclVybChjb25zdCBRVXJsJiB1cmwpCiB7CiAgICAgV2Vi
Q29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwotICAgIFFQaXhtYXAqIGljb24gPSBXZWJDb3Jl
OjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c05hdGl2ZUljb25Gb3JQYWdlVVJMKFdlYkNvcmU6
OktVUkwodXJsKS5zdHJpbmcoKSwKKyAgICBRSW1hZ2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5zeW5jaHJvbm91c05hdGl2ZUljb25Gb3JQYWdlVVJMKFdlYkNvcmU6OktVUkwodXJs
KS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SW50
U2l6ZSgxNiwgMTYpKTsKICAgICBpZiAoIWljb24pCi0gICAgICAgIHJldHVybiBRUGl4bWFwKCk7
CisgICAgICAgIHJldHVybiBRSWNvbigpOwogCi0gICAgcmV0dXJuKiBpY29uOworICAgIHJldHVy
biBRUGl4bWFwOjpmcm9tSW1hZ2UoKmljb24pOwogfQogCiAvKgpAQCAtNzY1LDcgKzc2NSw3IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiByZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKFFXZWJTZXR0aW5n
czo6V2ViR3JhcGhpYyB0eXBlKQogdm9pZCBRV2ViU2V0dGluZ3M6OnNldFdlYkdyYXBoaWMoV2Vi
R3JhcGhpYyB0eXBlLCBjb25zdCBRUGl4bWFwJiBncmFwaGljKQogewogICAgIFdlYkNvcmU6Omlu
aXRpYWxpemVXZWJDb3JlUXQoKTsKLSAgICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNv
dXJjZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKHR5cGUpLCBncmFwaGljKTsKKyAgICBXZWJD
b3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGlj
KHR5cGUpLCBncmFwaGljLnRvSW1hZ2UoKSk7CiB9CiAKIC8qIQpAQCAtNzgwLDEwICs3ODAsMTAg
QEAgUVBpeG1hcCBRV2ViU2V0dGluZ3M6OndlYkdyYXBoaWMoV2ViR3JhcGhpYyB0eXBlKQogICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1nID0gV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKHJlc291cmNlTmFtZUZvcldlYkdyYXBoaWModHlwZSkpOwogICAgIGlmICghaW1n
KQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltZy0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKKyAgICBRSW1h
Z2UqIGltYWdlID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybiBRUGl4bWFwKCk7Ci0gICAgcmV0dXJuICpwaXhtYXA7Cisg
ICAgcmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgqaW1hZ2UpOwogfQogCiAvKiEKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKaW5kZXggNmQyNmVhMi4uMzFlNGRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMi0wNy0xMyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4Nzg1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ug
dXNlIHJhc3RlciBlbmdpbmUgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIFFQaXhtYXAg
YW5kIFFJbWFnZSwgc28gd2UgYXJlIGdvaW5nCisgICAgICAgIHRvIHVzZSBRSW1hZ2UgZXZlcnl3
aGVyZSB3aGVyZSBpdCBpcyBwb3NzaWJsZS4gVGhpcyByZWZhY3RvcmluZyBjb250YWlucyB0aGUg
Y2hhbmdlIG9mIHRoZQorICAgICAgICBOYXRpdmVJbWFnZVB0ciB0eXBlZGVmIGZyb20gUVBpeG1h
cCogdG8gUUltYWdlKiBhbmQgY292ZXJzIHRoZSByZWxhdGVkIG1vZGlmaWNhdGlvbnMuCisKKyAg
ICAgICAgUGFydCBvZiB0aGUgY2hhbmdlIGlzIHNpbWlsYXIgdG8gVmlhdGNoZXNsYXYgT3N0YXBl
bmtvJ3MgaW50ZXJuYWwgd29yay4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
LgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViSGl0VGVzdFJl
c3VsdFByaXZhdGU6OlFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZSk6CisgICAgICAgIChRV2ViSGl0
VGVzdFJlc3VsdDo6cGl4bWFwKToKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lX3AuaDoKKyAgICAg
ICAgKFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZSk6CisgICAgICAgICogQXBpL3F3ZWJoaXN0b3J5
LmNwcDoKKyAgICAgICAgKFFXZWJIaXN0b3J5SXRlbTo6aWNvbik6CisgICAgICAgICogQXBpL3F3
ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0dGluZ3M6Omljb25Gb3JVcmwpOgorICAg
ICAgICAoUVdlYlNldHRpbmdzOjpzZXRXZWJHcmFwaGljKToKKyAgICAgICAgKFFXZWJTZXR0aW5n
czo6d2ViR3JhcGhpYyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRRdDo6c3RhcnREcmFnKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
aXRpYWxpemVXZWJDb3JlUXQpOgorCiAyMDEyLTA3LTEyICBIdWFuZyBEb25nc3VuZyAgPGx1eHRl
bGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtRdF0gSW5jcmVhc2UgdGhlIGRyYXdpbmcg
cGVyZm9ybWFuY2UgYnkgbWVyZ2luZyBkaXJ0eSByZWN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcAppbmRleCBjYjYzMjgzLi44YjY0OGMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQu
Y3BwCkBAIC05Nyw5ICs5Nyw5IEBAIHZvaWQgRHJhZ0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0lt
YWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQCiAgICAgaWYgKHZp
ZXcpIHsKICAgICAgICAgUURyYWcqIGRyYWcgPSBuZXcgUURyYWcodmlldyk7CiAgICAgICAgIGlm
IChkcmFnSW1hZ2UpCi0gICAgICAgICAgICBkcmFnLT5zZXRQaXhtYXAoKmRyYWdJbWFnZSk7Cisg
ICAgICAgICAgICBkcmFnLT5zZXRQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKCpkcmFnSW1hZ2Up
KTsKICAgICAgICAgZWxzZSBpZiAoY2xpcGJvYXJkRGF0YSAmJiBjbGlwYm9hcmREYXRhLT5oYXNJ
bWFnZSgpKQotICAgICAgICAgICAgZHJhZy0+c2V0UGl4bWFwKHF2YXJpYW50X2Nhc3Q8UVBpeG1h
cD4oY2xpcGJvYXJkRGF0YS0+aW1hZ2VEYXRhKCkpKTsKKyAgICAgICAgICAgIGRyYWctPnNldFBp
eG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UocXZhcmlhbnRfY2FzdDxRSW1hZ2U+KGNsaXBib2FyZERh
dGEtPmltYWdlRGF0YSgpKSkpOwogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb25N
YXNrID0gY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKTsKICAgICAgICAgZHJhZy0+c2V0TWlt
ZURhdGEoY2xpcGJvYXJkRGF0YSk7CiAgICAgICAgIFF0OjpEcm9wQWN0aW9uIGFjdHVhbERyb3BB
Y3Rpb24gPSBkcmFnLT5leGVjKGRyYWdPcGVyYXRpb25zVG9Ecm9wQWN0aW9ucyhkcmFnT3BlcmF0
aW9uTWFzaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bml0V2ViQ29yZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdl
YkNvcmVRdC5jcHAKaW5kZXggNWFjNDQ5ZC4uYzYzY2NiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCkBAIC04Myw5ICs4Myw5IEBA
IHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAjZW5kaWYKIAogICAgIC8vIFFXZWJTZXR0aW5n
czo6U2VhcmNoQ2FuY2VsQnV0dG9uR3JhcGhpYwotICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291
cmNlKCJzZWFyY2hDYW5jZWxCdXR0b24iLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0YW5kYXJk
UGl4bWFwKFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24pKTsKKyAgICBJbWFnZTo6c2V0UGxh
dGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgp
LT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKS50b0ltYWdlKCkp
OwogICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZEdyYXBoaWMK
LSAgICBJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3Nl
ZCIsIFFBcHBsaWNhdGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFs
b2dDbG9zZUJ1dHRvbikpOworICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hD
YW5jZWxCdXR0b25QcmVzc2VkIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1h
cChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKS50b0ltYWdlKCkpOwogCiAgICAgaW5pdGlh
bGl6ZWQgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGM5MDA4NWMuLmZkYTA2NDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wNy0xMyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0ciBmcm9tIFFQ
aXhtYXAqIHRvIFFJbWFnZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg4Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU2luY2Ugd2UgdXNlIHJhc3RlciBlbmdpbmUgdGhlcmUgaXMgbm8gZGlmZmVyZW5j
ZSBiZXR3ZWVuIFFQaXhtYXAgYW5kIFFJbWFnZSwgc28gd2UgYXJlIGdvaW5nCisgICAgICAgIHRv
IHVzZSBRSW1hZ2UgZXZlcnl3aGVyZSB3aGVyZSBpdCBpcyBwb3NzaWJsZS4gVGhpcyByZWZhY3Rv
cmluZyBjb250YWlucyB0aGUgY2hhbmdlIG9mIHRoZQorICAgICAgICBOYXRpdmVJbWFnZVB0ciB0
eXBlZGVmIGZyb20gUVBpeG1hcCogdG8gUUltYWdlKiBhbmQgY292ZXJzIHRoZSByZWxhdGVkIG1v
ZGlmaWNhdGlvbnMuCisKKyAgICAgICAgUGFydCBvZiB0aGUgY2hhbmdlIGlzIHNpbWlsYXIgdG8g
VmlhdGNoZXNsYXYgT3N0YXBlbmtvJ3MgaW50ZXJuYWwgd29yay4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1h
cFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVJbWFnZSk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6Omljb25JbWFnZUZvclBhZ2VV
UkwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVu
dFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFFJbWFnZVRvU2hhcmVhYmxlQml0bWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJ
bWFnZUJhY2tpbmdTdG9yZSk6CisKIDIwMTItMDctMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gZ2V0IEhUVFBT
IHN0YXR1cyB0byBXZWJLaXQyIEdUSysKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvU2hh
cmVhYmxlQml0bWFwUXQuY3BwCmluZGV4IGE3YWI4ZDQuLmI2Y2ViM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcApAQCAtNTIsOCArNTIsOCBA
QCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cmVsZWFzZVNoYXJlZE1lbW9yeURhdGEodm9pZCogdHlw
ZWxlc3NCaXRtYXApCiAKIFBhc3NSZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
SW1hZ2UoKQogewotICAgIFFQaXhtYXAqIHBpeG1hcCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZy
b21JbWFnZShjcmVhdGVRSW1hZ2UoKSkpOwotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KHBpeG1hcCk7CisgICAgUUltYWdlKiBpbWFnZSA9IG5ldyBRSW1hZ2UoY3JlYXRlUUltYWdlKCkp
OworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlKTsKIH0KIAogUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRh
YmFzZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0
YWJhc2VDbGllbnQuY3BwCmluZGV4IDU5MmJiMzcuLmFmZGZhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcApA
QCAtOTAsMTEgKzkwLDExIEBAIFFJbWFnZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6aWNvbklt
YWdlRm9yUGFnZVVSTChjb25zdCBXVEY6OlN0cmluZyYgcGFnZVVSTCwKIAogICAgIFdlYkNvcmU6
OkludFNpemUgc2l6ZShpY29uU2l6ZS53aWR0aCgpLCBpY29uU2l6ZS5oZWlnaHQoKSk7CiAKLSAg
ICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IG1faWNvbkRhdGFiYXNlLT5uYXRpdmVJbWFnZUZvclBh
Z2VVUkwocGFnZVVSTCwgc2l6ZSk7CisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IG1faWNvbkRh
dGFiYXNlLT5uYXRpdmVJbWFnZUZvclBhZ2VVUkwocGFnZVVSTCwgc2l6ZSk7CiAgICAgaWYgKCFu
YXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJuIFFJbWFnZSgpOwogCi0gICAgcmV0dXJuIG5hdGl2
ZUltYWdlLT50b0ltYWdlKCk7CisgICAgcmV0dXJuICpuYXRpdmVJbWFnZTsKIH0KIAogdm9pZCBR
dFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmV0YWluSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5n
JiBwYWdlVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCmluZGV4IGJiZGI2MzUuLmQ5
ZTZkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAKQEAgLTM4LDE1ICszOCwxNSBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJp
dG1hcChRUGl4bWFwKiBwaXhtYXApCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGNvbnZlcnRRSW1hZ2VUb1NoYXJlYWJsZUJpdG1hcChRSW1hZ2UqIGltYWdlKQogewotICAgIGlm
ICghcGl4bWFwKQorICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFy
ZWFibGUoSW50U2l6ZShwaXhtYXAtPnNpemUoKSksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNB
bHBoYSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZS0+c2l6ZSgpKSwgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGlj
c0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCi0gICAgZ3JhcGhp
Y3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcCgwLCAwLCAqcGl4bWFwKTsK
KyAgICBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3SW1hZ2UoMCwgMCwg
KmltYWdlKTsKICAgICByZXR1cm4gYml0bWFwLnJlbGVhc2UoKTsKIH0KIApAQCAtNTcsNyArNTcs
NyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdl
LCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaQogICAgIHN0YXRpY19jYXN0PENsaXBib2FyZFF0
Kj4oY2xpcGJvYXJkKS0+aW52YWxpZGF0ZVdyaXRhYmxlRGF0YSgpOwogICAgIERyYWdEYXRhIGRy
YWdEYXRhKGNsaXBib2FyZERhdGEsIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgZHJh
Z09wZXJhdGlvbk1hc2spOwogCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0g
Y29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1hcChkcmFnSW1hZ2UpOworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRRSW1hZ2VUb1NoYXJlYWJsZUJpdG1hcChk
cmFnSW1hZ2UpOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBpZiAo
Yml0bWFwICYmICFiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmNwcAppbmRleCBhZTA5OWQxLi5hM2I5YTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVD
b29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTQwOSwxMiArNDA5LDEyIEBA
IGludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1h
Z2UqIGltYWdlKQogICAgIGludDY0X3Qga2V5ID0gMDsKIAogI2lmIFBMQVRGT1JNKFFUKQotICAg
IFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKIAotICAgIGlmICghcGl4bWFwKQorICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAg
IHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKIAotICAgIGtleSA9IHBpeG1hcC0+Y2FjaGVLZXko
KTsKKyAgICBrZXkgPSBuYXRpdmVJbWFnZS0+Y2FjaGVLZXkoKTsKICNlbmRpZgogCiAgICAgSGFz
aE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMuZmluZChrZXkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152276</attachid>
            <date>2012-07-13 09:21:09 -0700</date>
            <delta_ts>2012-07-16 01:42:24 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>qpixmap2qimage.patch</filename>
            <type>text/plain</type>
            <size>58019</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYzY5M2NmLi44MjA4ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMg
QEAKKzIwMTItMDctMTMgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgW1F0XSBDaGFuZ2UgTmF0aXZlSW1hZ2VQdHIgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2Uq
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdl
IHVzZSByYXN0ZXIgZW5naW5lIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBRUGl4bWFw
IGFuZCBRSW1hZ2UsIHNvIHdlIGFyZSBnb2luZworICAgICAgICB0byB1c2UgUUltYWdlIGV2ZXJ5
d2hlcmUgd2hlcmUgaXQgaXMgcG9zc2libGUuIFRoaXMgcmVmYWN0b3JpbmcgY29udGFpbnMgdGhl
IGNoYW5nZSBvZiB0aGUKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgdHlwZWRlZiBmcm9tIFFQaXht
YXAqIHRvIFFJbWFnZSogYW5kIGNvdmVycyB0aGUgcmVsYXRlZCBtb2RpZmljYXRpb25zLgorCisg
ICAgICAgIFBhcnQgb2YgdGhlIGNoYW5nZSBpcyBzaW1pbGFyIHRvIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbydzIGludGVybmFsIHdvcmsuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQXNzaWduVG9FbGVtZW50TWV0aG9kOjppbnZva2UpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmpl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IChHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6
CisgICAgICAgIChJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJ
bWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnB1c2hUcmFuc3Bh
cmVuY3lMYXllckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaDoKKyAgICAgICAgKEltYWdlQnVm
ZmVyRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VE
ZWNvZGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAg
ICAgIChncmFwaGljcyk6CisgICAgICAgIChsb2FkUmVzb3VyY2VJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L05hdGl2
ZUltYWdlUXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5hdGl2ZUlt
YWdlUXQpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VRdDo6ZGVmYXVsdEZvcm1hdEZv
ckFscGhhRW5hYmxlZEltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVF0Ojpk
ZWZhdWx0Rm9ybWF0Rm9yT3BhcXVlSW1hZ2VzKToKKyAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvUGF0dGVyblF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBs
YXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OlN0aWxsSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6flN0aWxsSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RpbGxJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
U3RpbGxJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGls
bEltYWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcpOgorICAgICAgICAoU3RpbGxJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyOjpUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAg
IChUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OmNyZWF0ZURyYWdJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDdXN0b21DdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UpOgorCiAyMDEyLTA3LTEzICBEb21pbmljIE1henpvbmkgIDxkbWF6
em9uaUBnb29nbGUuY29tPgogCiAgICAgICAgIFNob3VsZCBiZSBwb3NzaWJsZSB0byBmb2N1cyBl
bGVtZW50cyB3aXRoaW4gY2FudmFzIGZhbGxiYWNrIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDk0
OTQxYjEuLjI2YjU0YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjMxNSw2ICsyMzE1LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1JvdW5kZWRSZWN0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTmF0aXZlSW1hZ2VR
dC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcGl4bWFwcnVudGltZS5jcHAKaW5kZXggYjBlNWY2Mi4uYTJkYWFkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcApAQCAtMTQ2LDggKzE0Niw4
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFvYmplY3RBcmctPmluaGVyaXRzKCZKU0hUTUxJbWFn
ZUVsZW1lbnQ6OnNfaW5mbykpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgICAgICAvLyB3ZSBub3cga25vdyB0aGF0IHdlIGhhdmUgYSB2YWxpZCA8aW1nPiBlbGVtZW50
IGFzIHRoZSBhcmd1bWVudCwgd2UgY2FuIGF0dGFjaCB0aGUgcGl4bWFwIHRvIGl0LgotICAgICAg
ICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxsSW1hZ2UgPSBXZWJDb3JlOjpTdGlsbEltYWdl
OjpjcmVhdGUoaW5zdGFuY2UtPnRvUGl4bWFwKCkpOworICAgICAgICAvLyB3ZSBub3cga25vdyB0
aGF0IHdlIGhhdmUgYSB2YWxpZCA8aW1nPiBlbGVtZW50IGFzIHRoZSBhcmd1bWVudCwgd2UgY2Fu
IGF0dGFjaCB0aGUgaW1hZ2UgdG8gaXQuCisgICAgICAgIFJlZlB0cjxTdGlsbEltYWdlPiBzdGls
bEltYWdlID0gV2ViQ29yZTo6U3RpbGxJbWFnZTo6Y3JlYXRlKGluc3RhbmNlLT50b0ltYWdlKCkp
OwogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MSW1hZ2VFbGVtZW50Kj4ob2JqZWN0
QXJnKS0+aW1wbCgpKTsKICAgICAgICAgaW1hZ2VFbGVtZW50LT5zZXRDYWNoZWRJbWFnZShuZXcg
Q2FjaGVkSW1hZ2Uoc3RpbGxJbWFnZS5nZXQoKSkpOwogICAgICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihpbnN0YW5jZS0+cm9v
dE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKSk7CkBAIC0zODMsMTMgKzM4MywxMyBAQCBRVmFyaWFu
dCBRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdChKU09iamVjdCogb2JqZWN0LCBR
TWV0YVR5cGU6OlR5cGUgaAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgZ290byBy
ZXR1cm5FbXB0eVZhcmlhbnQ7CiAKLSAgICAgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIGlmICghcGl4bWFwKQorICAgICAg
ICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJldHVybkVt
cHR5VmFyaWFudDsKIAogICAgICAgICByZXR1cm4gKGhpbnQgPT0gc3RhdGljX2Nhc3Q8UU1ldGFU
eXBlOjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKLSAgICAgICAgICAgICAgICAgID8g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPigqcGl4bWFwKQotICAgICAgICAgICAgICAgICAg
OiBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4ocGl4bWFwLT50b0ltYWdlKCkpOworICAgICAg
ICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KFFQaXhtYXA6OmZyb21J
bWFnZSgqbmF0aXZlSW1hZ2UpKQorICAgICAgICAgICAgICAgICAgOiBRVmFyaWFudDo6ZnJvbVZh
bHVlPFFJbWFnZT4oKm5hdGl2ZUltYWdlKTsKICAgICB9CiAKICAgICBpZiAob2JqZWN0LT5pbmhl
cml0cygmUXRQaXhtYXBSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5oCmluZGV4IGRkOTcwZDIuLmU3OGE5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5oCkBAIC0zNiw3ICszNiw3IEBACiBPQkpDX0NMQVNTIE5TSW1hZ2U7CiAjZWxp
ZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKK2NsYXNz
IFFJbWFnZTsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYg
c3RydWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICB0eXBlZGVmIFJldGFpblB0cjxOU0ltYWdl
PiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB0eXBlZGVmIFFQaXhtYXAq
IERyYWdJbWFnZVJlZjsKKyAgICB0eXBlZGVmIFFJbWFnZSogRHJhZ0ltYWdlUmVmOwogI2VsaWYg
UExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEJJVE1BUCBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQ
TEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggZjI3YmVjNy4uYTJlMDgzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTUwMSw3ICs1
MDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQot
ICAgICAgICB2b2lkIHB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0ICZy
ZWN0LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spOworICAgICAgICB2b2lkIHB1
c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0JiwgcXJlYWwsIFFJbWFnZSYp
OwogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmluZGV4IDNmZjQ4MjMu
LjRmMzEyMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAt
NTIsMTAgKzUyLDYgQEAgdHlwZWRlZiBTSVpFKiBMUFNJWkU7CiB0eXBlZGVmIHN0cnVjdCBIQklU
TUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQ
aXhtYXA+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0IF9HZGtQ
aXhidWYgR2RrUGl4YnVmOwogI2VuZGlmCkBAIC0xNTcsNyArMTUzLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSAgICBzdGF0aWMgdm9pZCBzZXRQbGF0Zm9ybVJlc291
cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFQaXhtYXAmKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFJbWFnZSYpOwogI2Vu
ZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGVkNjI1YmMuLjkxM2EzZTcK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00Myw3
ICs0Myw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CiAjZWxp
ZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UK
LWNsYXNzIFFQaXhtYXA7CitjbGFzcyBRSW1hZ2U7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBV
U0UoQ0FJUk8pCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgpAQCAtOTAsNyArOTAsNyBA
QCBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VT
b3VyY2VQdHI7CiB0eXBlZGVmIHZvaWQqIE5hdGl2ZUltYWdlUHRyOwogI2VsaWYgUExBVEZPUk0o
UVQpCi10eXBlZGVmIFFQaXhtYXAqIE5hdGl2ZUltYWdlUHRyOwordHlwZWRlZiBRSW1hZ2UqIE5h
dGl2ZUltYWdlUHRyOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAppbmRl
eCA4M2JkZmUyLi43YTBlNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMjksNiArMjks
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFJbWFnZT4KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRTaXplOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJR
dC5jcHAKaW5kZXggNTAzYzEzZC4uZDZlNmUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0
LmNwcApAQCAtMzYsNyArMzYsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIEltYWdlR1N0
cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykK
ICAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7
CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwogICAgIEludFNpemUgc2l6ZTsKICAgICBpbnQg
cGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBz
dHJpZGU7CkBAIC02OSw4ICs2OCw3IEBAIEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihH
c3RCdWZmZXIqIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKICAgICBpbWFnZS5pbnZlcnRQaXhlbHMo
aW52ZXJ0TW9kZSk7CiAjZW5kaWYKIAotICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1hZ2UoaW1h
Z2UpOwotICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworICAgIG1f
aW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5ldyBRSW1hZ2UoaW1hZ2UpKTsKIAogI2lmZGVm
IEdTVF9BUElfVkVSU0lPTl8xCiAgICAgaWYgKEdzdFZpZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0g
Z3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwCmluZGV4IGM3MTkxZTMuLjE4ZTNjNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC00
OTEsMjMgKzQ5MSwxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1h
Z2UqIGltYWdlLAogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFFJbWFnZSBxdEltYWdlOworICAgIFFJbWFnZSBuYXRpdmVJbWFnZTsKICAgICAvLyBJcyBpbWFn
ZSBhbHJlYWR5IGxvYWRlZD8gSWYgbm90LCBsb2FkIGl0LgogICAgIGlmIChpbWFnZS0+ZGF0YSgp
KQotICAgICAgICBxdEltYWdlID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVjaGFyKj4oaW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRhdGEoKS0+c2l6ZSgp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0jaWYgSEFWRShRVDUpCi0gICAgICAgIC8vIFdp
dGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBkZWVwIGNvcHkuCi0gICAgICAgIHF0SW1hZ2UgPSAqbmF0
aXZlUGl4bWFwLT5oYW5kbGUoKS0+YnVmZmVyKCk7Ci0jZWxzZQotICAgICAgICAvLyBUaGlzIG1p
Z2h0IGJlIGEgZGVlcCBjb3B5LCBkZXBlbmRpbmcgb24gb3RoZXIgcmVmZXJlbmNlcyB0byB0aGUg
cGl4bWFwLgotICAgICAgICBxdEltYWdlID0gbmF0aXZlUGl4bWFwLT50b0ltYWdlKCk7Ci0jZW5k
aWYKLSAgICB9CisgICAgICAgIG5hdGl2ZUltYWdlID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oaW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRh
dGEoKS0+c2l6ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG5hdGl2ZUltYWdlID0gKmltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworCiAKICAgICBBbHBoYU9wIGFscGhhT3AgPSBB
bHBoYURvTm90aGluZzsKLSAgICBzd2l0Y2ggKHF0SW1hZ2UuZm9ybWF0KCkpIHsKKyAgICBzd2l0
Y2ggKG5hdGl2ZUltYWdlLmZvcm1hdCgpKSB7CiAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0Iz
MjoKICAgICAgICAgLy8gRm9yIG9wYXF1ZSBpbWFnZXMsIHdlIHNob3VsZCBub3QgcHJlbXVsdGlw
bHkgb3IgdW5tdWx0aXBseSBhbHBoYS4KICAgICAgICAgYnJlYWs7CkBAIC01MjEsNyArNTE0LDcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gVGhlIGltYWdlIGhhcyBhIGZv
cm1hdCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gcGFja1BpeGVscy4gV2UgaGF2ZSB0byBjb252
ZXJ0IGl0IGhlcmUuCi0gICAgICAgIHF0SW1hZ2UgPSBxdEltYWdlLmNvbnZlcnRUb0Zvcm1hdChw
cmVtdWx0aXBseUFscGhhID8gUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQgOiBR
SW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgICAgICBuYXRpdmVJbWFnZSA9IG5hdGl2ZUltYWdl
LmNvbnZlcnRUb0Zvcm1hdChwcmVtdWx0aXBseUFscGhhID8gUUltYWdlOjpGb3JtYXRfQVJHQjMy
X1ByZW11bHRpcGxpZWQgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTUzMiw3ICs1MjUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEoSW1hZ2UqIGltYWdlLAogCiAgICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRT
aXplKTsKIAotICAgIHJldHVybiBwYWNrUGl4ZWxzKHF0SW1hZ2UuY29uc3RCaXRzKCksIFNvdXJj
ZUZvcm1hdEJHUkE4LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIGFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOworICAgIHJldHVybiBwYWNrUGl4
ZWxzKG5hdGl2ZUltYWdlLmNvbnN0Qml0cygpLCBTb3VyY2VGb3JtYXRCR1JBOCwgaW1hZ2UtPndp
ZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBvdXRwdXRW
ZWN0b3IuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExv
c3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQu
Y3BwCmluZGV4IGMwMzRmNjQuLjYxMWVmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTEwMjIs
NyArMTAyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkK
ICAgICBtX2RhdGEtPnNoYWRvdy0+Y2xlYXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBv
cGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cHVzaFRy
YW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHks
IFFJbWFnZSYgYWxwaGFNYXNrKQogewogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAK
QEAgLTEwNTcsNyArMTA1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3Jt
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICAgICAgaCA9IGludChxQm91bmQo
cXJlYWwoMCksIGRldmljZUNsaXAuaGVpZ2h0KCksIChxcmVhbCloKSArIDIpOwogICAgIH0KIAot
ICAgIFFQaXhtYXAgZW1wdHlBbHBoYU1hc2s7CisgICAgUUltYWdlIGVtcHR5QWxwaGFNYXNrOwog
ICAgIG1fZGF0YS0+bGF5ZXJzLnB1c2gobmV3IFRyYW5zcGFyZW5jeUxheWVyKHAsIFFSZWN0KHgs
IHksIHcsIGgpLCBvcGFjaXR5LCBlbXB0eUFscGhhTWFzaykpOwogICAgICsrbV9kYXRhLT5sYXll
ckNvdW50OwogfQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVu
ZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGlmICghbGF5ZXItPmFscGhhTWFzay5p
c051bGwoKSkgewogICAgICAgICBsYXllci0+cGFpbnRlci5yZXNldFRyYW5zZm9ybSgpOwogICAg
ICAgICBsYXllci0+cGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKLSAgICAgICAgbGF5ZXItPnBhaW50ZXIuZHJhd1BpeG1h
cChRUG9pbnQoKSwgbGF5ZXItPmFscGhhTWFzayk7CisgICAgICAgIGxheWVyLT5wYWludGVyLmRy
YXdJbWFnZShRUG9pbnQoKSwgbGF5ZXItPmFscGhhTWFzayk7CiAgICAgfSBlbHNlCiAgICAgICAg
IC0tbV9kYXRhLT5sYXllckNvdW50OyAvLyBzZWUgdGhlIGNvbW1lbnQgZm9yIGxheWVyQ291bnQK
ICAgICBsYXllci0+cGFpbnRlci5lbmQoKTsKQEAgLTEwODAsNyArMTA4MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBwLT5zYXZl
KCk7CiAgICAgcC0+cmVzZXRUcmFuc2Zvcm0oKTsKICAgICBwLT5zZXRPcGFjaXR5KGxheWVyLT5v
cGFjaXR5KTsKLSAgICBwLT5kcmF3UGl4bWFwKGxheWVyLT5vZmZzZXQsIGxheWVyLT5waXhtYXAp
OworICAgIHAtPmRyYXdJbWFnZShsYXllci0+b2Zmc2V0LCBsYXllci0+aW1hZ2UpOwogICAgIHAt
PnJlc3RvcmUoKTsKIAogICAgIGRlbGV0ZSBsYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0YVF0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGFRdC5oCmluZGV4IDljZjc4
MmIuLjk0MDY1ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlQnVmZmVyRGF0YVF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaApAQCAtMjUsOCArMjUsOCBAQAogCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKIAorI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNp
bmNsdWRlIDxRUGl4bWFwPgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KQEAgLTM5LDkgKzM5LDcgQEAgY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKIHB1
YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOwogCi0gICAgUUltYWdl
IHRvUUltYWdlKCkgY29uc3Q7Ci0KLSAgICBRUGl4bWFwIG1fcGl4bWFwOworICAgIFFJbWFnZSBt
X25hdGl2ZUltYWdlOwogICAgIE93blB0cjxRUGFpbnRlcj4gbV9wYWludGVyOwogICAgIFJlZlB0
cjxJbWFnZT4gbV9pbWFnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAx
MDA3NTUKaW5kZXggYjliOWViZi4uZWFjZGM3ZQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCiAjaW5j
bHVkZSAiU3RpbGxJbWFnZVF0LmgiCiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC00MiwyMyArNDMsMjIgQEAKICNpbmNsdWRl
IDxRSW1hZ2U+CiAjaW5jbHVkZSA8UUltYWdlV3JpdGVyPgogI2luY2x1ZGUgPFFQYWludGVyPgot
I2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNp
emUpCi0gICAgOiBtX3BpeG1hcChzaXplKQorICAgIDogbV9uYXRpdmVJbWFnZShzaXplLCBOYXRp
dmVJbWFnZVF0OjpkZWZhdWx0Rm9ybWF0Rm9yQWxwaGFFbmFibGVkSW1hZ2VzKCkpCiB7Ci0gICAg
aWYgKG1fcGl4bWFwLmlzTnVsbCgpKQorICAgIGlmIChtX25hdGl2ZUltYWdlLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3BpeG1hcC5maWxsKFFDb2xvcihRdDo6dHJhbnNwYXJl
bnQpKTsKKyAgICBtX25hdGl2ZUltYWdlLmZpbGwoUUNvbG9yKFF0Ojp0cmFuc3BhcmVudCkpOwog
CiAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBuZXcgUVBhaW50ZXI7CiAgICAgbV9wYWludGVyID0g
YWRvcHRQdHIocGFpbnRlcik7CiAKLSAgICBpZiAoIXBhaW50ZXItPmJlZ2luKCZtX3BpeG1hcCkp
CisgICAgaWYgKCFwYWludGVyLT5iZWdpbigmbV9uYXRpdmVJbWFnZSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFNpbmNlIEltYWdlQnVmZmVyIGlzIHVzZWQgbWFpbmx5IGZvciBDYW52YXMs
IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZQpAQCAtNzYsMjIgKzc2LDcgQEAgSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBwYWludGVyLT5zZXRC
cnVzaChicnVzaCk7CiAgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpD
b21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7CiAgICAgCi0gICAgbV9pbWFnZSA9IFN0aWxsSW1h
Z2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9waXhtYXApOwotfQotCi1RSW1hZ2UgSW1hZ2VCdWZm
ZXJEYXRhOjp0b1FJbWFnZSgpIGNvbnN0Ci17Ci0gICAgUVBhaW50RW5naW5lKiBwYWludEVuZ2lu
ZSA9IG1fcGl4bWFwLnBhaW50RW5naW5lKCk7Ci0gICAgaWYgKCFwYWludEVuZ2luZSB8fCBwYWlu
dEVuZ2luZS0+dHlwZSgpICE9IFFQYWludEVuZ2luZTo6UmFzdGVyKQotICAgICAgICByZXR1cm4g
bV9waXhtYXAudG9JbWFnZSgpOwotCi0gICAgLy8gUVJhc3RlclBpeG1hcERhdGE6OnRvSW1hZ2Uo
KSB3aWxsIGRlZXAtY29weSB0aGUgYmFja2luZyBRSW1hZ2UgaWYgdGhlcmUncyBhbiBhY3RpdmUg
UVBhaW50ZXIgb24gaXQuCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGRvbid0
IHdhbnQgdGhhdCBoZXJlLCBzbyB3ZSB0ZW1wb3JhcmlseSByZWRpcmVjdCB0aGUgcGFpbnQgZW5n
aW5lLgotICAgIFFQYWludERldmljZSogY3VycmVudFBhaW50RGV2aWNlID0gcGFpbnRFbmdpbmUt
PnBhaW50RGV2aWNlKCk7Ci0gICAgcGFpbnRFbmdpbmUtPnNldFBhaW50RGV2aWNlKDApOwotICAg
IFFJbWFnZSBpbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsKLSAgICBwYWludEVuZ2luZS0+c2V0
UGFpbnREZXZpY2UoY3VycmVudFBhaW50RGV2aWNlKTsKLSAgICByZXR1cm4gaW1hZ2U7CisgICAg
bV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9uYXRpdmVJbWFnZSk7
CiB9CiAKIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBmbG9h
dCAvKiByZXNvbHV0aW9uU2NhbGUgKi8sIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERlZmVy
cmFsTW9kZSwgYm9vbCYgc3VjY2VzcykKQEAgLTEyMCw5ICsxMDUsOSBAQCBHcmFwaGljc0NvbnRl
eHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0CiB7
CiAgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1
cm4gU3RpbGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5tX3BpeG1hcCk7CisgICAgICAgIHJldHVybiBT
dGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwogCi0gICAgcmV0dXJuIFN0
aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsKKyAgICByZXR1
cm4gU3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKCZtX2RhdGEubV9uYXRpdmVJbWFnZSk7
CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKQEAgLTE0OSwxMiArMTM0LDEyIEBAIHZvaWQgSW1h
Z2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjCiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkgY29uc3QKIHsKLSAgICBRUGl4
bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBtX2RhdGEubV9pbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBJbnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZsb2F0UmVjdCk7
Ci0gICAgUVBpeG1hcCBhbHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7CisgICAgUUltYWdlIGFscGhh
TWFzayA9ICpuYXRpdmVJbWFnZTsKIAogICAgIGNvbnRleHQtPnB1c2hUcmFuc3BhcmVuY3lMYXll
ckludGVybmFsKHJlY3QsIDEuMCwgYWxwaGFNYXNrKTsKIH0KQEAgLTE2NSw3ICsxNTAsNyBAQCB2
b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9y
PGludD4mIGxvb2tVcFRhYmxlKQogICAgIGlmIChpc1BhaW50aW5nKQogICAgICAgICBtX2RhdGEu
bV9wYWludGVyLT5lbmQoKTsKIAotICAgIFFJbWFnZSBpbWFnZSA9IG1fZGF0YS50b1FJbWFnZSgp
LmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIFFJbWFnZSBpbWFn
ZSA9IG1fZGF0YS5tX25hdGl2ZUltYWdlOwogICAgIEFTU0VSVCghaW1hZ2UuaXNOdWxsKCkpOwog
CiAgICAgdWNoYXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7CkBAIC0xODIsMTAgKzE2NywxMCBAQCB2
b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9y
PGludD4mIGxvb2tVcFRhYmxlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9kYXRhLm1fcGl4
bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKGltYWdlKTsKKyAgICBtX2RhdGEubV9uYXRpdmVJbWFn
ZSA9IGltYWdlOwogCiAgICAgaWYgKGlzUGFpbnRpbmcpCi0gICAgICAgIG1fZGF0YS5tX3BhaW50
ZXItPmJlZ2luKCZtX2RhdGEubV9waXhtYXApOworICAgICAgICBtX2RhdGEubV9wYWludGVyLT5i
ZWdpbigmbV9kYXRhLm1fbmF0aXZlSW1hZ2UpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KQEAgLTIyNCw3ICsyMDksNyBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZQogICAg
IGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CiAKICAgICAvLyBOT1RFOiBGb3IgdW5tdWx0
aXBsaWVkIGRhdGEsIHdlIHVuZG8gdGhlIHByZW11bHRpcGxpY2F0aW9uIGJlbG93LgotICAgIFFJ
bWFnZSBpbWFnZSA9IGltYWdlRGF0YS50b1FJbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgUUltYWdlIGltYWdlID0gaW1hZ2VE
YXRhLm1fbmF0aXZlSW1hZ2UuY29udmVydFRvRm9ybWF0KE5hdGl2ZUltYWdlUXQ6OmRlZmF1bHRG
b3JtYXRGb3JBbHBoYUVuYWJsZWRJbWFnZXMoKSk7CiAKICAgICBBU1NFUlQoIWltYWdlLmlzTnVs
bCgpKTsKIApAQCAtMzU4LDcgKzM0Myw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJh
eShNdWx0aXBseSBtdWx0aXBsaWVkLCBVaW50OENsYW1wZWRBcnJheSogc291cmNlLCBjCiAKICAg
ICBib29sIGlzUGFpbnRpbmcgPSBtX2RhdGEubV9wYWludGVyLT5pc0FjdGl2ZSgpOwogICAgIGlm
ICghaXNQYWludGluZykKLSAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+YmVnaW4oJm1fZGF0YS5t
X3BpeG1hcCk7CisgICAgICAgIG1fZGF0YS5tX3BhaW50ZXItPmJlZ2luKCZtX2RhdGEubV9uYXRp
dmVJbWFnZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fZGF0YS5tX3BhaW50ZXItPnNhdmUoKTsK
IApAQCAtMzc3LDcgKzM2Miw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShNdWx0
aXBseSBtdWx0aXBsaWVkLCBVaW50OENsYW1wZWRBcnJheSogc291cmNlLCBjCiAgICAgICAgIG1f
ZGF0YS5tX3BhaW50ZXItPnJlc3RvcmUoKTsKIH0KIAotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2Uo
Y29uc3QgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgZG91Ymxl
KiBxdWFsaXR5LCBRQnl0ZUFycmF5JiBkYXRhKQorc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY29u
c3QgUUltYWdlJiBpbWFnZSwgY29uc3QgU3RyaW5nJiBmb3JtYXQsIGNvbnN0IGRvdWJsZSogcXVh
bGl0eSwgUUJ5dGVBcnJheSYgZGF0YSkKIHsKICAgICBpbnQgY29tcHJlc3Npb25RdWFsaXR5ID0g
MTAwOwogICAgIGlmIChxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAx
LjApCkBAIC0zODUsNyArMzcwLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY29uc3QgUVBp
eG1hcCYgcGl4bWFwLCBjb25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgZG91YmwKIAogICAgIFFC
dWZmZXIgYnVmZmVyKCZkYXRhKTsKICAgICBidWZmZXIub3BlbihRQnVmZmVyOjpXcml0ZU9ubHkp
OwotICAgIGJvb2wgc3VjY2VzcyA9IHBpeG1hcC5zYXZlKCZidWZmZXIsIGZvcm1hdC51dGY4KCku
ZGF0YSgpLCBjb21wcmVzc2lvblF1YWxpdHkpOworICAgIGJvb2wgc3VjY2VzcyA9IGltYWdlLnNh
dmUoJmJ1ZmZlciwgZm9ybWF0LnV0ZjgoKS5kYXRhKCksIGNvbXByZXNzaW9uUXVhbGl0eSk7CiAg
ICAgYnVmZmVyLmNsb3NlKCk7CiAKICAgICByZXR1cm4gc3VjY2VzczsKQEAgLTM5NywxMCArMzgy
LDEwIEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgQ29vCiAKICAgICAvLyBRSW1hZ2VXcml0ZXIgZG9l
cyBub3Qgc3VwcG9ydCBtaW1ldHlwZXMuIEl0IGRvZXMgc3VwcG9ydCBRdCBpbWFnZSBmb3JtYXRz
IChwbmcsCiAgICAgLy8gZ2lmLCBqcGVnLi4uLCB4cG0pIHNvIHNraXAgdGhlIGltYWdlLyB0byBn
ZXQgdGhlIFF0IGltYWdlIGZvcm1hdCB1c2VkIHRvIGVuY29kZQotICAgIC8vIHRoZSBtX3BpeG1h
cCBpbWFnZS4KKyAgICAvLyB0aGUgbV9uYXRpdmVJbWFnZSBpbWFnZS4KIAogICAgIFFCeXRlQXJy
YXkgZGF0YTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3BpeG1hcCwgbWltZVR5cGUu
c3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKSwgcXVhbGl0eSwgZGF0YSkpCisgICAgaWYgKCFlbmNv
ZGVJbWFnZShtX2RhdGEubV9uYXRpdmVJbWFnZSwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAi
aW1hZ2UiKSwgcXVhbGl0eSwgZGF0YSkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAogICAg
IHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgZGF0YS50b0Jhc2U2NCgp
LmRhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlRGVjb2RlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlRGVjb2RlclF0LmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4
IGUwMzYzNmYuLmYwMzllNDMKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VEZWNvZGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcApAQCAtMjcyLDkgKzI3Miw3IEBAIE5hdGl2ZUltYWdl
UHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogICAgIGVsc2UKICAgICAg
ICAgZm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CiAKLSAgICBRSW1hZ2UgaW1nKHJlaW50
ZXJwcmV0X2Nhc3Q8dWNoYXIqPihtX2J5dGVzKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSwgc2l6ZW9mKFBpeGVsRGF0YSkgKiBtX3NpemUud2lkdGgoKSwgZm9ybWF0KTsKLQotICAg
IHJldHVybiBuZXcgUVBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoaW1nKSk7CisgICAgcmV0dXJu
IG5ldyBRSW1hZ2UocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KG1fYnl0ZXMpLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCBzaXplb2YoUGl4ZWxEYXRhKSAqIG1fc2l6ZS53aWR0aCgp
LCBmb3JtYXQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZTA5
OGUwOS4uMTBmZTFmZQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJOYXRpdmVJbWFnZVF0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCkBAIC01NSw3ICs1
Niw3IEBACiBRX0dVSV9FWFBPUlQgUVBpeG1hcCBxdF9waXhtYXBGcm9tV2luSEJJVE1BUChIQklU
TUFQLCBpbnQgaGJpdG1hcEZvcm1hdCA9IDApOwogI2VuZGlmCiAKLXR5cGVkZWYgUUhhc2g8UUJ5
dGVBcnJheSwgUVBpeG1hcD4gV2ViR3JhcGhpY0hhc2g7Cit0eXBlZGVmIFFIYXNoPFFCeXRlQXJy
YXksIFFJbWFnZT4gV2ViR3JhcGhpY0hhc2g7CiBRX0dMT0JBTF9TVEFUSUMoV2ViR3JhcGhpY0hh
c2gsIF9ncmFwaGljcykKIAogc3RhdGljIHZvaWQgZWFybHlDbGVhckdyYXBoaWNzKCkKQEAgLTY5
LDI4ICs3MCwyOCBAQCBzdGF0aWMgV2ViR3JhcGhpY0hhc2gqIGdyYXBoaWNzKCkKIAogICAgIGlm
IChoYXNoLT5pc0VtcHR5KCkpIHsKIAotICAgICAgICAvLyBwcmV2ZW50IH5RUGl4bWFwIHJ1bm5p
bmcgYWZ0ZXIgflFBcHBsaWNhdGlvbiAobGVha3MgbmF0aXZlIHBpeG1hcHMpCisgICAgICAgIC8v
IHByZXZlbnQgflFJbWFnZSBydW5uaW5nIGFmdGVyIH5RQXBwbGljYXRpb24gKGxlYWtzIG5hdGl2
ZSBpbWFnZXMpCiAgICAgICAgIHFBZGRQb3N0Um91dGluZShlYXJseUNsZWFyR3JhcGhpY3MpOwog
CiAgICAgICAgIC8vIFFXZWJTZXR0aW5nczo6TWlzc2luZ0ltYWdlR3JhcGhpYwotICAgICAgICBo
YXNoLT5pbnNlcnQoIm1pc3NpbmdJbWFnZSIsIFFQaXhtYXAoUUxhdGluMVN0cmluZygiOndlYmtp
dC9yZXNvdXJjZXMvbWlzc2luZ0ltYWdlLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2VydCgi
bWlzc2luZ0ltYWdlIiwgUUltYWdlKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVzb3VyY2VzL21p
c3NpbmdJbWFnZS5wbmciKSkpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6Ok1pc3NpbmdQbHVn
aW5HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgibnVsbFBsdWdpbiIsIFFQaXhtYXAoUUxh
dGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvbnVsbFBsdWdpbi5wbmciKSkpOworICAgICAg
ICBoYXNoLT5pbnNlcnQoIm51bGxQbHVnaW4iLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtp
dC9yZXNvdXJjZXMvbnVsbFBsdWdpbi5wbmciKSkpOwogICAgICAgICAvLyBRV2ViU2V0dGluZ3M6
OkRlZmF1bHRGcmFtZUljb25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgidXJsSWNvbiIs
IFFQaXhtYXAoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvdXJsSWNvbi5wbmciKSkp
OworICAgICAgICBoYXNoLT5pbnNlcnQoInVybEljb24iLCBRSW1hZ2UoUUxhdGluMVN0cmluZygi
OndlYmtpdC9yZXNvdXJjZXMvdXJsSWNvbi5wbmciKSkpOwogICAgICAgICAvLyBRV2ViU2V0dGlu
Z3M6OlRleHRBcmVhU2l6ZUdyaXBDb3JuZXJHcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgi
dGV4dEFyZWFSZXNpemVDb3JuZXIiLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3ZWJraXQvcmVz
b3VyY2VzL3RleHRBcmVhUmVzaXplQ29ybmVyLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2Vy
dCgidGV4dEFyZWFSZXNpemVDb3JuZXIiLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9y
ZXNvdXJjZXMvdGV4dEFyZWFSZXNpemVDb3JuZXIucG5nIikpKTsKICAgICAgICAgLy8gUVdlYlNl
dHRpbmdzOjpEZWxldGVCdXR0b25HcmFwaGljCi0gICAgICAgIGhhc2gtPmluc2VydCgiZGVsZXRl
QnV0dG9uIiwgUVBpeG1hcChRTGF0aW4xU3RyaW5nKCI6d2Via2l0L3Jlc291cmNlcy9kZWxldGVC
dXR0b24ucG5nIikpKTsKKyAgICAgICAgaGFzaC0+aW5zZXJ0KCJkZWxldGVCdXR0b24iLCBRSW1h
Z2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMvZGVsZXRlQnV0dG9uLnBuZyIpKSk7
CiAgICAgICAgIC8vIFFXZWJTZXR0aW5nczo6SW5wdXRTcGVlY2hCdXR0b25HcmFwaGljCi0gICAg
ICAgIGhhc2gtPmluc2VydCgiaW5wdXRTcGVlY2giLCBRUGl4bWFwKFFMYXRpbjFTdHJpbmcoIjp3
ZWJraXQvcmVzb3VyY2VzL2lucHV0U3BlZWNoLnBuZyIpKSk7CisgICAgICAgIGhhc2gtPmluc2Vy
dCgiaW5wdXRTcGVlY2giLCBRSW1hZ2UoUUxhdGluMVN0cmluZygiOndlYmtpdC9yZXNvdXJjZXMv
aW5wdXRTcGVlY2gucG5nIikpKTsKICAgICB9CiAKICAgICByZXR1cm4gaGFzaDsKIH0KIAogLy8g
VGhpcyBmdW5jdGlvbiBsb2FkcyByZXNvdXJjZXMgaW50byBXZWJLaXQKLXN0YXRpYyBRUGl4bWFw
IGxvYWRSZXNvdXJjZVBpeG1hcChjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIFFJbWFnZSBsb2Fk
UmVzb3VyY2VJbWFnZShjb25zdCBjaGFyICpuYW1lKQogewogICAgIHJldHVybiBncmFwaGljcygp
LT52YWx1ZShuYW1lKTsKIH0KQEAgLTExNywyMyArMTE4LDIzIEBAIGJvb2wgRnJhbWVEYXRhOjpj
bGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAKIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBTdGlsbElt
YWdlOjpjcmVhdGUobG9hZFJlc291cmNlUGl4bWFwKG5hbWUpKTsKKyAgICByZXR1cm4gU3RpbGxJ
bWFnZTo6Y3JlYXRlKGxvYWRSZXNvdXJjZUltYWdlKG5hbWUpKTsKIH0KIAotdm9pZCBJbWFnZTo6
c2V0UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBRUGl4bWFwJiBwaXht
YXApCit2b2lkIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IFFJbWFnZSYgaW1hZ2UpCiB7CiAgICAgV2ViR3JhcGhpY0hhc2gqIGggPSBncmFwaGljcygp
OwotICAgIGlmIChwaXhtYXAuaXNOdWxsKCkpCisgICAgaWYgKGltYWdlLmlzTnVsbCgpKQogICAg
ICAgICBoLT5yZW1vdmUobmFtZSk7CiAgICAgZWxzZQotICAgICAgICBoLT5pbnNlcnQobmFtZSwg
cGl4bWFwKTsKKyAgICAgICAgaC0+aW5zZXJ0KG5hbWUsIGltYWdlKTsKIH0KIAogdm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgUVBp
eG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlm
ICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1h
Z2UgeWV0LgorICAgIFFJbWFnZSogZnJhbWVJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZUltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24n
dCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTE0OCwzNCArMTQ5LDM4IEBAIHZvaWQgSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QKICAgICBpZiAoIWRyLndpZHRoKCkgfHwgIWRyLmhlaWdodCgpIHx8ICF0ci53
aWR0aCgpIHx8ICF0ci5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBpeG1hcCBw
aXhtYXAgPSAqZnJhbWVQaXhtYXA7Ci0gICAgaWYgKHRyLngoKSB8fCB0ci55KCkgfHwgdHIud2lk
dGgoKSAhPSBwaXhtYXAud2lkdGgoKSB8fCB0ci5oZWlnaHQoKSAhPSBwaXhtYXAuaGVpZ2h0KCkp
Ci0gICAgICAgIHBpeG1hcCA9IHBpeG1hcC5jb3B5KHRyKTsKKyAgICBRSW1hZ2UgaW1hZ2UgPSAq
ZnJhbWVJbWFnZTsKKyAgICBpZiAodHIueCgpIHx8IHRyLnkoKSB8fCB0ci53aWR0aCgpICE9IGlt
YWdlLndpZHRoKCkgfHwgdHIuaGVpZ2h0KCkgIT0gaW1hZ2UuaGVpZ2h0KCkpCisgICAgICAgIGlt
YWdlID0gaW1hZ2UuY29weSh0cik7CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09w
ZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAKLSAgICBjdHh0LT5zZXRDb21w
b3NpdGVPcGVyYXRpb24oIXBpeG1hcC5oYXNBbHBoYSgpICYmIG9wID09IENvbXBvc2l0ZVNvdXJj
ZU92ZXIgPyBDb21wb3NpdGVDb3B5IDogb3ApOworICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbighaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3Zl
ciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKICAgICBRUGFpbnRlciogcCA9IGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0p
OwogCi0gICAgLy8gSWYgdGhpcyB3b3VsZCBkcmF3IG1vcmUgdGhhbiBvbmUgc2NhbGVkIHRpbGUs
IHdlIHNjYWxlIHRoZSBwaXhtYXAgZmlyc3QgYW5kIHRoZW4gdXNlIHRoZSByZXN1bHQgdG8gZHJh
dy4KKyAgICAvLyBJZiB0aGlzIHdvdWxkIGRyYXcgbW9yZSB0aGFuIG9uZSBzY2FsZWQgdGlsZSwg
d2Ugc2NhbGUgdGhlIGltYWdlIGZpcnN0IGFuZCB0aGVuIHVzZSB0aGUgcmVzdWx0IHRvIGRyYXcu
CiAgICAgaWYgKHRyYW5zZm9ybS50eXBlKCkgPT0gUVRyYW5zZm9ybTo6VHhTY2FsZSkgewogICAg
ICAgICBRUmVjdEYgdGlsZVJlY3RJblRhcmdldENvb3JkcyA9ICh0cmFuc2Zvcm0gKiBRVHJhbnNm
b3JtKCkudHJhbnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgpKSkubWFwUmVjdCh0cik7CiAKICAg
ICAgICAgYm9vbCB0aWxlV2lsbEJlUGFpbnRlZE9ubHlPbmNlID0gdGlsZVJlY3RJblRhcmdldENv
b3Jkcy5jb250YWlucyhkcik7CiAgICAgICAgIGlmICghdGlsZVdpbGxCZVBhaW50ZWRPbmx5T25j
ZSkgewotICAgICAgICAgICAgUVNpemVGIHNjYWxlZFNpemUoZmxvYXQocGl4bWFwLndpZHRoKCkp
ICogdHJhbnNmb3JtLm0xMSgpLCBmbG9hdChwaXhtYXAuaGVpZ2h0KCkpICogdHJhbnNmb3JtLm0y
MigpKTsKLSAgICAgICAgICAgIFFQaXhtYXAgc2NhbGVkUGl4bWFwKHNjYWxlZFNpemUudG9TaXpl
KCkpOwotICAgICAgICAgICAgaWYgKHBpeG1hcC5oYXNBbHBoYSgpKQotICAgICAgICAgICAgICAg
IHNjYWxlZFBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgICAgICBRU2l6ZUYg
c2NhbGVkU2l6ZShmbG9hdChpbWFnZS53aWR0aCgpKSAqIHRyYW5zZm9ybS5tMTEoKSwgZmxvYXQo
aW1hZ2UuaGVpZ2h0KCkpICogdHJhbnNmb3JtLm0yMigpKTsKKyAgICAgICAgICAgIFFJbWFnZSBz
Y2FsZWRJbWFnZTsKKyAgICAgICAgICAgIGlmIChpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKSkgewor
ICAgICAgICAgICAgICAgIHNjYWxlZEltYWdlID0gUUltYWdlKHNjYWxlZFNpemUudG9TaXplKCks
IE5hdGl2ZUltYWdlUXQ6OmRlZmF1bHRGb3JtYXRGb3JBbHBoYUVuYWJsZWRJbWFnZXMoKSk7Cisg
ICAgICAgICAgICAgICAgc2NhbGVkSW1hZ2UuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NhbGVkSW1hZ2UgPSBRSW1hZ2Uoc2NhbGVk
U2l6ZS50b1NpemUoKSwgTmF0aXZlSW1hZ2VRdDo6ZGVmYXVsdEZvcm1hdEZvck9wYXF1ZUltYWdl
cygpKTsKKwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIo
JnNjYWxlZFBpeG1hcCk7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmc2NhbGVk
SW1hZ2UpOwogICAgICAgICAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKICAgICAgICAgICAgICAgICBwYWludGVyLnNl
dFJlbmRlckhpbnRzKHAtPnJlbmRlckhpbnRzKCkpOwotICAgICAgICAgICAgICAgIHBhaW50ZXIu
ZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBzY2FsZWRQaXhtYXAud2lkdGgoKSwgc2NhbGVkUGl4bWFw
LmhlaWdodCgpKSwgcGl4bWFwKTsKKyAgICAgICAgICAgICAgICBwYWludGVyLmRyYXdJbWFnZShR
UmVjdCgwLCAwLCBzY2FsZWRJbWFnZS53aWR0aCgpLCBzY2FsZWRJbWFnZS5oZWlnaHQoKSksIGlt
YWdlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBpeG1hcCA9IHNjYWxlZFBpeG1hcDsK
KyAgICAgICAgICAgIGltYWdlID0gc2NhbGVkSW1hZ2U7CiAgICAgICAgICAgICB0cmFuc2Zvcm0g
PSBRVHJhbnNmb3JtOjpmcm9tVHJhbnNsYXRlKHRyYW5zZm9ybS5keCgpLCB0cmFuc2Zvcm0uZHko
KSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODQsNyArMTg5LDcgQEAgdm9pZCBJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdAogICAgIHRyYW5zZm9ybSAqPSBRVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBoYXNlLngo
KSwgcGhhc2UueSgpKTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHRyLngoKSwgdHIueSgpKTsK
IAotICAgIFFCcnVzaCBiKHBpeG1hcCk7CisgICAgUUJydXNoIGIoaW1hZ2UpOwogICAgIGIuc2V0
VHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgcC0+ZmlsbFJlY3QoZHIsIGIpOwogCkBAIC0xOTQs
NyArMTk5LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7CiB9CiAKLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRUGl4bWFw
KiBwaXhtYXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKFFJbWFnZSogaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uo
b2JzZXJ2ZXIpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAgICwgbV9mcmFtZXMoMCkKQEAg
LTIxMiwxNCArMjE3LDE0IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRUGl4bWFwKiBwaXht
YXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUp
CiAgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCiB7Ci0gICAgaW50IHdpZHRoID0gcGl4bWFw
LT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBwaXhtYXAtPmhlaWdodCgpOworICAgIGludCB3
aWR0aCA9IGltYWdlLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBpbWFnZS0+aGVpZ2h0KCk7
CiAgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsKICAgICBtX3NpemUgPSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2Zy
YW1lc1swXS5tX2ZyYW1lID0gcGl4bWFwOwotICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBw
aXhtYXAtPmhhc0FscGhhKCk7CisgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IGltYWdlOworICAg
IG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBpbWFnZS0+aGFzQWxwaGFDaGFubmVsKCk7CiAgICAg
bV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwogICAgIGNoZWNrRm9yU29saWRDb2xv
cigpOwogfQpAQCAtMjQwLDcgKzI0NSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICBpZiAobm9ybWFsaXpl
ZFNyYy5pc0VtcHR5KCkgfHwgbm9ybWFsaXplZERzdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFFQaXhtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBRSW1hZ2UqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjU0LDE5ICsyNjAsMTkgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0LAogI2VuZGlmCiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9y
ID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgY3R4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8g
Q29tcG9zaXRlQ29weSA6IG9wKTsKKyAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oIWlt
YWdlLT5oYXNBbHBoYUNoYW5uZWwoKSAmJiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29t
cG9zaXRlQ29weSA6IG9wKTsKIAogICAgIGlmIChjdHh0LT5oYXNTaGFkb3coKSkgewogICAgICAg
ICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBjdHh0LT5zaGFkb3dCbHVyKCk7CiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0
LCBub3JtYWxpemVkRHN0KTsKICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKICAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWRE
c3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5k
cmF3SW1hZ2Uobm9ybWFsaXplZERzdCwgKmltYWdlLCBub3JtYWxpemVkU3JjKTsKICAgICAgICAg
ICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4dCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqaW1h
Z2UsIG5vcm1hbGl6ZWRTcmMpOworICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3SW1h
Z2Uobm9ybWFsaXplZERzdCwgKmltYWdlLCBub3JtYWxpemVkU3JjKTsKIAogICAgIGN0eHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIApAQCAtMjgyLDI0ICsyODgs
MjQgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICBpZiAoZnJh
bWVDb3VudCgpID4gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBpeG1hcCogZnJhbWVQaXht
YXAgPSBmcmFtZUF0SW5kZXgoMCk7Ci0gICAgaWYgKCFmcmFtZVBpeG1hcCB8fCBmcmFtZVBpeG1h
cC0+d2lkdGgoKSAhPSAxIHx8IGZyYW1lUGl4bWFwLT5oZWlnaHQoKSAhPSAxKQorICAgIFFJbWFn
ZSogZnJhbWVJbWFnZSA9IGZyYW1lQXRJbmRleCgwKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UgfHwg
ZnJhbWVJbWFnZS0+d2lkdGgoKSAhPSAxIHx8IGZyYW1lSW1hZ2UtPmhlaWdodCgpICE9IDEpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKLSAgICBtX3NvbGlk
Q29sb3IgPSBRQ29sb3I6OmZyb21SZ2JhKGZyYW1lUGl4bWFwLT50b0ltYWdlKCkucGl4ZWwoMCwg
MCkpOworICAgIG1fc29saWRDb2xvciA9IFFDb2xvcjo6ZnJvbVJnYmEoZnJhbWVJbWFnZS0+cGl4
ZWwoMCwgMCkpOwogfQogCiAjaWYgT1MoV0lORE9XUykKIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+
IEJpdG1hcEltYWdlOjpjcmVhdGUoSEJJVE1BUCBoQml0bWFwKQogewogI2lmIEhBVkUoUVQ1KQot
ICAgIFFQaXhtYXAqIHFQaXhtYXAgPSBuZXcgUVBpeG1hcChxdF9waXhtYXBGcm9tV2luSEJJVE1B
UChoQml0bWFwKSk7CisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IG5ldyBRSW1hZ2UocXRfcGl4
bWFwRnJvbVdpbkhCSVRNQVAoaEJpdG1hcCkudG9JbWFnZSgpKTsKICNlbHNlCi0gICAgUVBpeG1h
cCogcVBpeG1hcCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21XaW5IQklUTUFQKGhCaXRtYXAp
KTsKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gbmV3IFFJbWFnZShRUGl4bWFwOjpmcm9tV2lu
SEJJVE1BUChoQml0bWFwKS50b0ltYWdlKCkpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gQml0bWFw
SW1hZ2U6OmNyZWF0ZShxUGl4bWFwKTsKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShu
YXRpdmVJbWFnZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTmF0aXZlSW1hZ2VRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTmF0aXZlSW1hZ2VRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAuLjBmZDFkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9OYXRpdmVJbWFnZVF0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBab2x0YW4gSG9ydmF0aCAoem9sdGFuQHdlYmtpdC5vcmcpIDIw
MTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOYXRpdmVJbWFnZVF0X2gK
KyNkZWZpbmUgTmF0aXZlSW1hZ2VRdF9oCisKKyNpbmNsdWRlIDxRSW1hZ2U+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTmF0aXZlSW1hZ2VRdCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFFJbWFnZTo6Rm9ybWF0IGRlZmF1bHRGb3JtYXRGb3JBbHBoYUVuYWJsZWRJbWFnZXMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOwor
ICAgIH0KKworICAgIHN0YXRpYyBRSW1hZ2U6OkZvcm1hdCBkZWZhdWx0Rm9ybWF0Rm9yT3BhcXVl
SW1hZ2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKKyAg
ICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBOYXRpdmVJbWFnZVF0X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCmluZGV4IDdhYWU2MjUu
LjVjOTQxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1BhdHRlcm5RdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
UGF0dGVyblF0LmNwcApAQCAtMzMsMTIgKzMzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
UUJydXNoIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybigpIGNvbnN0CiB7Ci0gICAgUVBp
eG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
Ci0gICAgaWYgKCFwaXhtYXApCisgICAgUUltYWdlKiBpbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVy
biBRQnJ1c2goKTsKIAogICAgIC8vIFF0IG1lcmdlcyBwYXR0ZXIgc3BhY2UgYW5kIHVzZXIgc3Bh
Y2UgaXRzZWxmCi0gICAgUUJydXNoIGJydXNoKCpwaXhtYXApOworICAgIFFCcnVzaCBicnVzaCgq
aW1hZ2UpOwogICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0
aW9uKTsKIAogICAgIHJldHVybiBicnVzaDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCmluZGV4IDgwNjY2YmEuLjA0MTI1MjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1h
Z2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJ
bWFnZVF0LmNwcApAQCAtMzYsNDEgKzM2LDQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U3RpbGxJbWFnZTo6U3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApCi0gICAgOiBtX3Bp
eG1hcChuZXcgUVBpeG1hcChwaXhtYXApKQotICAgICwgbV9vd25zUGl4bWFwKHRydWUpCitTdGls
bEltYWdlOjpTdGlsbEltYWdlKGNvbnN0IFFJbWFnZSYgaW1hZ2UpCisgICAgOiBtX2ltYWdlKG5l
dyBRSW1hZ2UoaW1hZ2UpKQorICAgICwgbV9vd25zSW1hZ2UodHJ1ZSkKIHt9CiAKLVN0aWxsSW1h
Z2U6OlN0aWxsSW1hZ2UoY29uc3QgUVBpeG1hcCogcGl4bWFwKQotICAgIDogbV9waXhtYXAocGl4
bWFwKQotICAgICwgbV9vd25zUGl4bWFwKGZhbHNlKQorU3RpbGxJbWFnZTo6U3RpbGxJbWFnZShj
b25zdCBRSW1hZ2UqIGltYWdlKQorICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fb3duc0lt
YWdlKGZhbHNlKQoge30KIAogU3RpbGxJbWFnZTo6flN0aWxsSW1hZ2UoKQogewotICAgIGlmICht
X293bnNQaXhtYXApCi0gICAgICAgIGRlbGV0ZSBtX3BpeG1hcDsKKyAgICBpZiAobV9vd25zSW1h
Z2UpCisgICAgICAgIGRlbGV0ZSBtX2ltYWdlOwogfQogCiBib29sIFN0aWxsSW1hZ2U6OmN1cnJl
bnRGcmFtZUhhc0FscGhhKCkKIHsKLSAgICByZXR1cm4gbV9waXhtYXAtPmhhc0FscGhhKCk7Cisg
ICAgcmV0dXJuIG1faW1hZ2UtPmhhc0FscGhhQ2hhbm5lbCgpOwogfQogCiBJbnRTaXplIFN0aWxs
SW1hZ2U6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBJbnRTaXplKG1fcGl4bWFwLT53aWR0
aCgpLCBtX3BpeG1hcC0+aGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRTaXplKG1faW1hZ2UtPndp
ZHRoKCksIG1faW1hZ2UtPmhlaWdodCgpKTsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgU3RpbGxJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVybiBjb25zdF9jYXN0
PE5hdGl2ZUltYWdlUHRyPihtX3BpeG1hcCk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TmF0aXZl
SW1hZ2VQdHI+KG1faW1hZ2UpOwogfQogCiB2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
CiB7Ci0gICAgaWYgKG1fcGl4bWFwLT5pc051bGwoKSkKKyAgICBpZiAobV9pbWFnZS0+aXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCBub3JtYWxpemVkU3JjID0gc3Jj
Lm5vcm1hbGl6ZWQoKTsKQEAgLTg0LDEyICs4NCwxMiBAQCB2b2lkIFN0aWxsSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0
eHQsIG5vcm1hbGl6ZWREc3QpOwogICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgewogICAgICAg
ICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdQaXhtYXAobm9ybWFsaXpl
ZERzdCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmRyYXdJbWFnZShub3JtYWxpemVkRHN0LCAqbV9pbWFnZSwgbm9ybWFsaXplZFNyYyk7CiAg
ICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAobm9ybWFsaXplZERz
dCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+ZHJhd0ltYWdlKG5vcm1hbGl6ZWREc3QsICptX2ltYWdlLCBub3JtYWxpemVkU3JjKTsKICAg
ICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgK
b2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyNmRmNDcxLi44YzllYzBkCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCkBA
IC0zNCwxNCArMzQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU3RpbGxJ
bWFnZSA6IHB1YmxpYyBJbWFnZSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdGlsbEltYWdlPiBjcmVhdGUoY29uc3QgUVBpeG1hcCYgcGl4bWFwKQorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBjcmVhdGUoY29uc3QgUUltYWdlJiBpbWFnZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbEltYWdlKHBp
eG1hcCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbEltYWdlKGltYWdl
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBj
cmVhdGVGb3JSZW5kZXJpbmcoY29uc3QgUVBpeG1hcCogcGl4bWFwKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdGlsbEltYWdlPiBjcmVhdGVGb3JSZW5kZXJpbmcoY29uc3QgUUltYWdlKiBp
bWFnZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbElt
YWdlKHBpeG1hcCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbEltYWdl
KGltYWdlKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1l
SGFzQWxwaGEoKTsKQEAgLTU2LDEyICs1NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3RpbGxJ
bWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOwotICAgICAgICBTdGlsbEltYWdlKGNvbnN0IFFQ
aXhtYXAqIHBpeG1hcCk7CisgICAgICAgIFN0aWxsSW1hZ2UoY29uc3QgUUltYWdlJik7CisgICAg
ICAgIFN0aWxsSW1hZ2UoY29uc3QgUUltYWdlKik7CiAgICAgICAgIHZpcnR1YWwgflN0aWxsSW1h
Z2UoKTsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFFQaXhtYXAqIG1fcGl4bWFwOwotICAgICAg
ICBib29sIG1fb3duc1BpeG1hcDsKKyAgICAgICAgY29uc3QgUUltYWdlKiBtX2ltYWdlOworICAg
ICAgICBib29sIG1fb3duc0ltYWdlOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5oCm9sZCBtb2Rl
IDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZjEzZGViMC4uMDVhY2E4ZAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxheWVyLmgK
QEAgLTM2LDI0ICszNiwyNSBAQAogI2lmbmRlZiBUcmFuc3BhcmVuY3lMYXllcl9oCiAjZGVmaW5l
IFRyYW5zcGFyZW5jeUxheWVyX2gKIAorI2luY2x1ZGUgPE5hdGl2ZUltYWdlUXQuaD4KKwogI2lu
Y2x1ZGUgPFFQYWludEVuZ2luZT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGl4
bWFwPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBUcmFuc3BhcmVuY3lMYXllciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHJhbnNwYXJlbmN5
TGF5ZXIoY29uc3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBvcGFjaXR5
LCBRUGl4bWFwJiBhbHBoYU1hc2spCi0gICAgICAgIDogcGl4bWFwKHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkKKyAgICBUcmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciogcCwgY29u
c3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFJbWFnZSYgYWxwaGFNYXNrKQorICAgICAg
ICA6IGltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgTmF0aXZlSW1hZ2VRdDo6ZGVm
YXVsdEZvcm1hdEZvckFscGhhRW5hYmxlZEltYWdlcygpKQogICAgICAgICAsIG9wYWNpdHkob3Bh
Y2l0eSkKICAgICAgICAgLCBhbHBoYU1hc2soYWxwaGFNYXNrKQogICAgICAgICAsIHNhdmVDb3Vu
dGVyKDEpIC8vIHNlZSB0aGUgY29tbWVudCBmb3Igc2F2ZUNvdW50ZXIKICAgICB7CiAgICAgICAg
IG9mZnNldCA9IHJlY3QudG9wTGVmdCgpOwotICAgICAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNw
YXJlbnQpOwotICAgICAgICBwYWludGVyLmJlZ2luKCZwaXhtYXApOworICAgICAgICBpbWFnZS5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIHBhaW50ZXIuYmVnaW4oJmltYWdlKTsKICAg
ICAgICAgcGFpbnRlci5zZXRSZW5kZXJIaW50cyhwLT5yZW5kZXJIaW50cygpKTsKICAgICAgICAg
cGFpbnRlci50cmFuc2xhdGUoLW9mZnNldCk7CiAgICAgICAgIHBhaW50ZXIuc2V0UGVuKHAtPnBl
bigpKTsKQEAgLTY3LDEyICs2OCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFFQ
aXhtYXAgcGl4bWFwOworICAgIFFJbWFnZSBpbWFnZTsKICAgICBRUG9pbnQgb2Zmc2V0OwogICAg
IFFQYWludGVyIHBhaW50ZXI7CiAgICAgcXJlYWwgb3BhY2l0eTsKICAgICAvLyBmb3IgY2xpcFRv
SW1hZ2VCdWZmZXIKLSAgICBRUGl4bWFwIGFscGhhTWFzazsKKyAgICBRSW1hZ2UgYWxwaGFNYXNr
OwogICAgIC8vIHNhdmVDb3VudGVyIGlzIG9ubHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFs
cGhhTWFzawogICAgIC8vIG90aGVyd2lzZSwgaXRzIHZhbHVlIGlzIHVuc3BlY2lmaWVkCiAgICAg
aW50IHNhdmVDb3VudGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
Q2xpcGJvYXJkUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
Y3BwCmluZGV4IDZkMmFiNzIuLjhlNGM1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9DbGlwYm9hcmRRdC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgPFFHdWlBcHBs
aWNhdGlvbj4KICNpbmNsdWRlIDxRQ2xpcGJvYXJkPgorI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNs
dWRlIDxRTGlzdD4KICNpbmNsdWRlIDxRTWltZURhdGE+CiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+
CkBAIC0yNDMsNyArMjQ0LDcgQEAgRHJhZ0ltYWdlUmVmIENsaXBib2FyZFF0OjpjcmVhdGVEcmFn
SW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0CiAgICAgaWYgKCFtX2RyYWdJbWFnZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgZHJhZ0xvYyA9IG1fZHJhZ0xvYzsKLSAgICByZXR1cm4gbV9k
cmFnSW1hZ2UtPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0
dXJuIG5ldyBRSW1hZ2UoKm1fZHJhZ0ltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpKTsKIH0KIAogCkBAIC0yNzMsOSArMjc0LDkgQEAgdm9pZCBDbGlwYm9hcmRRdDo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY28KICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVt
ZW50KTsKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5k
ZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2VG
b3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICBpZiAocGl4bWFwKQotICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SW1hZ2VE
YXRhKCpwaXhtYXApOworICAgIFFJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JS
ZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRJbWFnZURhdGEo
KmltYWdlKTsKIAogICAgIFFMaXN0PFFVcmw+IHVybHM7CiAgICAgdXJscy5hcHBlbmQodXJsKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcAppbmRleCBlNzg1NGRkLi4xNjhh
MmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwCkBAIC0zNyw2ICsz
Nyw4IEBACiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaW5jbHVkZSA8UUltYWdl
PgorI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRs
aWIuaD4KIApAQCAtNzUsMTAgKzc3LDExIEBAIEN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29u
c3QgQ3Vyc29yJiBvdGhlcikKICNpZm5kZWYgUVRfTk9fQ1VSU09SCiBzdGF0aWMgUUN1cnNvciog
Y3JlYXRlQ3VzdG9tQ3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3Qp
CiB7Ci0gICAgaWYgKCFpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAgICBR
SW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSW50UG9pbnQg
ZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1hZ2UsIGhvdFNwb3QpOwotICAg
IHJldHVybiBuZXcgUUN1cnNvcigqKGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
KSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgpKTsKKyAgICByZXR1
cm4gbmV3IFFDdXJzb3IoUVBpeG1hcDo6ZnJvbUltYWdlKCpuYXRpdmVJbWFnZSksIGVmZmVjdGl2
ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCmluZGV4IDBlN2NlMDQuLmU5M2Fj
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAKQEAgLTI5
LDYgKzI5LDggQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlLmgi
CiAKKyNpbmNsdWRlIDxRSW1hZ2U+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW50U2l6ZSBk
cmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZiBpbWFnZSkKQEAgLTY2LDcgKzY4LDcgQEAgRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uRW51bSkKICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbmV3IFFQ
aXhtYXAoKmltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4g
bmV3IFFJbWFnZSgqaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOwogfQogCiBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdl
KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCmluZGV4IGQ2
ZjRlMWQuLmM2ZTNkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bh
c3RlYm9hcmRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2Fy
ZFF0LmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdl
KE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQogICAgIEltYWdlKiBpbWFn
ZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKG5vZGUtPnJlbmRlcmVyKCkpOwogICAg
IEFTU0VSVChpbWFnZSk7CiAKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXBpeG1hcCkKKyAgICBRSW1hZ2UqIG5hdGl2
ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCkt
PnNldFBpeG1hcCgqcGl4bWFwLCBRQ2xpcGJvYXJkOjpDbGlwYm9hcmQpOworICAgIFFHdWlBcHBs
aWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldEltYWdlKCpuYXRpdmVJbWFnZSwgUUNsaXBib2FyZDo6
Q2xpcGJvYXJkKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRl
eCBlZDE4MDZmLi41N2QzZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTE3
NzMsOSArMTc3Myw5IEBAIFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTo6UVdlYkhpdFRlc3RSZXN1
bHRQcml2YXRlKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQKICAgICBib3VuZGluZ1JlY3Qg
PSBpbm5lck5vblNoYXJlZE5vZGUgPyBpbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkgOiBJbnRSZWN0KCk7CiAgICAgV2ViQ29yZTo6SW1hZ2Ug
KmltZyA9IGhpdFRlc3QuaW1hZ2UoKTsKICAgICBpZiAoaW1nKSB7Ci0gICAgICAgIFFQaXhtYXAg
KnBpeCA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgUUltYWdl
ICpwaXggPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlmIChw
aXgpCi0gICAgICAgICAgICBwaXhtYXAgPSAqcGl4OworICAgICAgICAgICAgaW1hZ2UgPSAqcGl4
OwogICAgIH0KICAgICBXZWJDb3JlOjpGcmFtZSAqd2ZyYW1lID0gaGl0VGVzdC50YXJnZXRGcmFt
ZSgpOwogICAgIGlmICh3ZnJhbWUpCkBAIC0xOTc0LDcgKzE5NzQsNyBAQCBRUGl4bWFwIFFXZWJI
aXRUZXN0UmVzdWx0OjpwaXhtYXAoKSBjb25zdAogewogICAgIGlmICghZCkKICAgICAgICAgcmV0
dXJuIFFQaXhtYXAoKTsKLSAgICByZXR1cm4gZC0+cGl4bWFwOworICAgIHJldHVybiBRUGl4bWFw
Ojpmcm9tSW1hZ2UoZC0+aW1hZ2UpOwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVf
cC5oCmluZGV4IDI3NjJjMmIuLmFlODE1NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3Au
aApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKICAgICBRV2ViRWxlbWVudCBsaW5rRWxlbWVu
dDsKICAgICBRU3RyaW5nIGFsdGVybmF0ZVRleHQ7CiAgICAgUVVybCBpbWFnZVVybDsKLSAgICBR
UGl4bWFwIHBpeG1hcDsKKyAgICBRSW1hZ2UgaW1hZ2U7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0
YWJsZTsKICAgICBib29sIGlzQ29udGVudFNlbGVjdGVkOwogICAgIGJvb2wgaXNTY3JvbGxCYXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKaW5kZXggMTVkNGFkOC4uNzEyYzI4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIFFE
YXRlVGltZSBRV2ViSGlzdG9yeUl0ZW06Omxhc3RWaXNpdGVkKCkgY29uc3QKIFFJY29uIFFXZWJI
aXN0b3J5SXRlbTo6aWNvbigpIGNvbnN0CiB7CiAgICAgaWYgKGQtPml0ZW0pCi0gICAgICAgIHJl
dHVybiAqV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNOYXRpdmVJY29uRm9yUGFn
ZVVSTChkLT5pdGVtLT51cmwoKSwgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICAgICAg
cmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgqV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hy
b25vdXNOYXRpdmVJY29uRm9yUGFnZVVSTChkLT5pdGVtLT51cmwoKSwgV2ViQ29yZTo6SW50U2l6
ZSgxNiwgMTYpKSk7CiAKICAgICByZXR1cm4gUUljb24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuY3BwCmluZGV4IDUzNThkZDIuLmNhZjk1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnNldHRpbmdzLmNwcApAQCAtNzE3LDEyICs3MTcsMTIgQEAgdm9pZCBRV2ViU2V0dGlu
Z3M6OmNsZWFySWNvbkRhdGFiYXNlKCkKIFFJY29uIFFXZWJTZXR0aW5nczo6aWNvbkZvclVybChj
b25zdCBRVXJsJiB1cmwpCiB7CiAgICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwot
ICAgIFFQaXhtYXAqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c05h
dGl2ZUljb25Gb3JQYWdlVVJMKFdlYkNvcmU6OktVUkwodXJsKS5zdHJpbmcoKSwKKyAgICBRSW1h
Z2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c05hdGl2ZUljb25G
b3JQYWdlVVJMKFdlYkNvcmU6OktVUkwodXJsKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKICAgICBpZiAoIWljb24p
Ci0gICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisgICAgICAgIHJldHVybiBRSWNvbigpOwogCi0g
ICAgcmV0dXJuKiBpY29uOworICAgIHJldHVybiBRUGl4bWFwOjpmcm9tSW1hZ2UoKmljb24pOwog
fQogCiAvKgpAQCAtNzY1LDcgKzc2NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiByZXNvdXJjZU5h
bWVGb3JXZWJHcmFwaGljKFFXZWJTZXR0aW5nczo6V2ViR3JhcGhpYyB0eXBlKQogdm9pZCBRV2Vi
U2V0dGluZ3M6OnNldFdlYkdyYXBoaWMoV2ViR3JhcGhpYyB0eXBlLCBjb25zdCBRUGl4bWFwJiBn
cmFwaGljKQogewogICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsKLSAgICBXZWJD
b3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGlj
KHR5cGUpLCBncmFwaGljKTsKKyAgICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJj
ZShyZXNvdXJjZU5hbWVGb3JXZWJHcmFwaGljKHR5cGUpLCBncmFwaGljLnRvSW1hZ2UoKSk7CiB9
CiAKIC8qIQpAQCAtNzgwLDEwICs3ODAsMTAgQEAgUVBpeG1hcCBRV2ViU2V0dGluZ3M6OndlYkdy
YXBoaWMoV2ViR3JhcGhpYyB0eXBlKQogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1nID0g
V2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKHJlc291cmNlTmFtZUZvcldlYkdy
YXBoaWModHlwZSkpOwogICAgIGlmICghaW1nKQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwot
ICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
LSAgICBpZiAoIXBpeG1hcCkKKyAgICBRSW1hZ2UqIGltYWdlID0gaW1nLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBRUGl4bWFw
KCk7Ci0gICAgcmV0dXJuICpwaXhtYXA7CisgICAgcmV0dXJuIFFQaXhtYXA6OmZyb21JbWFnZSgq
aW1hZ2UpOwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNmQyNmVhMi4uMzFlNGRkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMi0wNy0xMyAgWm9sdGFuIEhvcnZhdGgg
IDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0
ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg4Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU2luY2Ugd2UgdXNlIHJhc3RlciBlbmdpbmUgdGhlcmUgaXMgbm8g
ZGlmZmVyZW5jZSBiZXR3ZWVuIFFQaXhtYXAgYW5kIFFJbWFnZSwgc28gd2UgYXJlIGdvaW5nCisg
ICAgICAgIHRvIHVzZSBRSW1hZ2UgZXZlcnl3aGVyZSB3aGVyZSBpdCBpcyBwb3NzaWJsZS4gVGhp
cyByZWZhY3RvcmluZyBjb250YWlucyB0aGUgY2hhbmdlIG9mIHRoZQorICAgICAgICBOYXRpdmVJ
bWFnZVB0ciB0eXBlZGVmIGZyb20gUVBpeG1hcCogdG8gUUltYWdlKiBhbmQgY292ZXJzIHRoZSBy
ZWxhdGVkIG1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgUGFydCBvZiB0aGUgY2hhbmdlIGlzIHNp
bWlsYXIgdG8gVmlhdGNoZXNsYXYgT3N0YXBlbmtvJ3MgaW50ZXJuYWwgd29yay4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5j
cHA6CisgICAgICAgIChRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGU6OlFXZWJIaXRUZXN0UmVzdWx0
UHJpdmF0ZSk6CisgICAgICAgIChRV2ViSGl0VGVzdFJlc3VsdDo6cGl4bWFwKToKKyAgICAgICAg
KiBBcGkvcXdlYmZyYW1lX3AuaDoKKyAgICAgICAgKFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZSk6
CisgICAgICAgICogQXBpL3F3ZWJoaXN0b3J5LmNwcDoKKyAgICAgICAgKFFXZWJIaXN0b3J5SXRl
bTo6aWNvbik6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2Vi
U2V0dGluZ3M6Omljb25Gb3JVcmwpOgorICAgICAgICAoUVdlYlNldHRpbmdzOjpzZXRXZWJHcmFw
aGljKToKKyAgICAgICAgKFFXZWJTZXR0aW5nczo6d2ViR3JhcGhpYyk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGll
bnRRdDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQpOgorCiAyMDEyLTA3
LTEyICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAg
IFtRdF0gSW5jcmVhc2UgdGhlIGRyYXdpbmcgcGVyZm9ybWFuY2UgYnkgbWVyZ2luZyBkaXJ0eSBy
ZWN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0Ns
aWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0
LmNwcAppbmRleCBjYjYzMjgzLi44YjY0OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCkBAIC05Nyw5ICs5Nyw5IEBAIHZvaWQgRHJh
Z0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9p
bnQmLCBjb25zdCBJbnRQCiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgUURyYWcqIGRyYWcgPSBu
ZXcgUURyYWcodmlldyk7CiAgICAgICAgIGlmIChkcmFnSW1hZ2UpCi0gICAgICAgICAgICBkcmFn
LT5zZXRQaXhtYXAoKmRyYWdJbWFnZSk7CisgICAgICAgICAgICBkcmFnLT5zZXRQaXhtYXAoUVBp
eG1hcDo6ZnJvbUltYWdlKCpkcmFnSW1hZ2UpKTsKICAgICAgICAgZWxzZSBpZiAoY2xpcGJvYXJk
RGF0YSAmJiBjbGlwYm9hcmREYXRhLT5oYXNJbWFnZSgpKQotICAgICAgICAgICAgZHJhZy0+c2V0
UGl4bWFwKHF2YXJpYW50X2Nhc3Q8UVBpeG1hcD4oY2xpcGJvYXJkRGF0YS0+aW1hZ2VEYXRhKCkp
KTsKKyAgICAgICAgICAgIGRyYWctPnNldFBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UocXZhcmlh
bnRfY2FzdDxRSW1hZ2U+KGNsaXBib2FyZERhdGEtPmltYWdlRGF0YSgpKSkpOwogICAgICAgICBE
cmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb25NYXNrID0gY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRp
b24oKTsKICAgICAgICAgZHJhZy0+c2V0TWltZURhdGEoY2xpcGJvYXJkRGF0YSk7CiAgICAgICAg
IFF0OjpEcm9wQWN0aW9uIGFjdHVhbERyb3BBY3Rpb24gPSBkcmFnLT5leGVjKGRyYWdPcGVyYXRp
b25zVG9Ecm9wQWN0aW9ucyhkcmFnT3BlcmF0aW9uTWFzaykpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKaW5kZXggNWFjNDQ5ZC4uYzYz
Y2NiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2Vi
Q29yZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJD
b3JlUXQuY3BwCkBAIC04Myw5ICs4Myw5IEBAIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAj
ZW5kaWYKIAogICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uR3JhcGhpYwot
ICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b24iLCBRQXBw
bGljYXRpb246OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFwKFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VC
dXR0b24pKTsKKyAgICBJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0
dG9uIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0Rp
YWxvZ0Nsb3NlQnV0dG9uKS50b0ltYWdlKCkpOwogICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNo
Q2FuY2VsQnV0dG9uUHJlc3NlZEdyYXBoaWMKLSAgICBJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZCIsIFFBcHBsaWNhdGlvbjo6c3R5bGUoKS0+c3Rh
bmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1dHRvbikpOworICAgIEltYWdlOjpz
ZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIiwgUUFwcGxpY2F0
aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9u
KS50b0ltYWdlKCkpOwogCiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGM5MDA4NWMuLmZkYTA2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wNy0x
MyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIENo
YW5nZSBOYXRpdmVJbWFnZVB0ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4Nzg1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2UgdXNlIHJhc3RlciBl
bmdpbmUgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIFFQaXhtYXAgYW5kIFFJbWFnZSwg
c28gd2UgYXJlIGdvaW5nCisgICAgICAgIHRvIHVzZSBRSW1hZ2UgZXZlcnl3aGVyZSB3aGVyZSBp
dCBpcyBwb3NzaWJsZS4gVGhpcyByZWZhY3RvcmluZyBjb250YWlucyB0aGUgY2hhbmdlIG9mIHRo
ZQorICAgICAgICBOYXRpdmVJbWFnZVB0ciB0eXBlZGVmIGZyb20gUVBpeG1hcCogdG8gUUltYWdl
KiBhbmQgY292ZXJzIHRoZSByZWxhdGVkIG1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgUGFydCBv
ZiB0aGUgY2hhbmdlIGlzIHNpbWlsYXIgdG8gVmlhdGNoZXNsYXYgT3N0YXBlbmtvJ3MgaW50ZXJu
YWwgd29yay4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2Vi
SWNvbkRhdGFiYXNlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJJY29uRGF0YWJh
c2VDbGllbnQ6Omljb25JbWFnZUZvclBhZ2VVUkwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29u
dmVydFFJbWFnZVRvU2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSk6CisKIDIwMTItMDct
MTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdIEFkZCBBUEkgdG8gZ2V0IEhUVFBTIHN0YXR1cyB0byBXZWJLaXQyIEdUSysKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwCmluZGV4IGE3YWI4
ZDQuLmI2Y2ViM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFi
bGVCaXRtYXBRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJp
dG1hcFF0LmNwcApAQCAtNTIsOCArNTIsOCBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cmVsZWFz
ZVNoYXJlZE1lbW9yeURhdGEodm9pZCogdHlwZWxlc3NCaXRtYXApCiAKIFBhc3NSZWZQdHI8SW1h
Z2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UoKQogewotICAgIFFQaXhtYXAqIHBpeG1h
cCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShjcmVhdGVRSW1hZ2UoKSkpOwotICAg
IHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKHBpeG1hcCk7CisgICAgUUltYWdlKiBpbWFnZSA9
IG5ldyBRSW1hZ2UoY3JlYXRlUUltYWdlKCkpOworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGltYWdlKTsKIH0KIAogUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwCmluZGV4IDU5MmJiMzcu
LmFmZGZhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYklj
b25EYXRhYmFzZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcApAQCAtOTAsMTEgKzkwLDExIEBAIFFJbWFnZSBRdFdl
Ykljb25EYXRhYmFzZUNsaWVudDo6aWNvbkltYWdlRm9yUGFnZVVSTChjb25zdCBXVEY6OlN0cmlu
ZyYgcGFnZVVSTCwKIAogICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZShpY29uU2l6ZS53aWR0aCgp
LCBpY29uU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IG1faWNv
bkRhdGFiYXNlLT5uYXRpdmVJbWFnZUZvclBhZ2VVUkwocGFnZVVSTCwgc2l6ZSk7CisgICAgUUlt
YWdlKiBuYXRpdmVJbWFnZSA9IG1faWNvbkRhdGFiYXNlLT5uYXRpdmVJbWFnZUZvclBhZ2VVUkwo
cGFnZVVSTCwgc2l6ZSk7CiAgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJuIFFJ
bWFnZSgpOwogCi0gICAgcmV0dXJuIG5hdGl2ZUltYWdlLT50b0ltYWdlKCk7CisgICAgcmV0dXJu
ICpuYXRpdmVJbWFnZTsKIH0KIAogdm9pZCBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmV0YWlu
SWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJEcmFnQ2xp
ZW50UXQuY3BwCmluZGV4IGJiZGI2MzUuLmQ5ZTZkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGll
bnRRdC5jcHAKQEAgLTM4LDE1ICszOCwxNSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Y29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1hcChRUGl4bWFwKiBwaXhtYXApCitzdGF0aWMg
UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRRSW1hZ2VUb1NoYXJlYWJsZUJpdG1h
cChRSW1hZ2UqIGltYWdlKQogewotICAgIGlmICghcGl4bWFwKQorICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShwaXhtYXAtPnNpemUoKSks
IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShp
bWFnZS0+c2l6ZSgpKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
ZHJhd1BpeG1hcCgwLCAwLCAqcGl4bWFwKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5kcmF3SW1hZ2UoMCwgMCwgKmltYWdlKTsKICAgICByZXR1cm4gYml0bWFwLnJl
bGVhc2UoKTsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0
RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaQog
ICAgIHN0YXRpY19jYXN0PENsaXBib2FyZFF0Kj4oY2xpcGJvYXJkKS0+aW52YWxpZGF0ZVdyaXRh
YmxlRGF0YSgpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGNsaXBib2FyZERhdGEsIGNsaWVudFBv
c2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgZHJhZ09wZXJhdGlvbk1hc2spOwogCi0gICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1h
cChkcmFnSW1hZ2UpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZl
cnRRSW1hZ2VUb1NoYXJlYWJsZUJpdG1hcChkcmFnSW1hZ2UpOwogICAgIFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGhhbmRsZTsKICAgICBpZiAoYml0bWFwICYmICFiaXRtYXAtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3Jk
aW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCBhZTA5OWQxLi5hM2I5YTEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5jcHAKQEAgLTQwOSwxMiArNDA5LDEyIEBAIGludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAgIGludDY0X3Qga2V5ID0g
MDsKIAogI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBpbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIAotICAgIGlmICghcGl4bWFwKQorICAg
IGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKIAot
ICAgIGtleSA9IHBpeG1hcC0+Y2FjaGVLZXkoKTsKKyAgICBrZXkgPSBuYXRpdmVJbWFnZS0+Y2Fj
aGVLZXkoKTsKICNlbmRpZgogCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBp
dCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwo=
</data>
<flag name="review"
          id="160935"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>