<?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>240368</bug_id>
          
          <creation_ts>2022-05-12 22:22:33 -0700</creation_ts>
          <short_desc>[GPU Process] Drawing the PDF snapshot should take place in WebProcess</short_desc>
          <delta_ts>2022-06-07 04:04: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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=241367</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1868640</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-12 22:22:33 -0700</bug_when>
    <thetext>Generating a PDFDocument for a web page should take place in the WebProcess.

To do that, the ImageBufferBackend should never draw itself to the destination GraphicsContext. Instead we need to get a NativeImage from the backend and draw it in the destination GraphicsContext. The virtual method copyNativeImage() knows to access the backend and how to get the pixels out of it in the WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868641</commentid>
    <comment_count>1</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-12 22:33:27 -0700</bug_when>
    <thetext>rdar://91660159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868644</commentid>
    <comment_count>2</comment_count>
      <attachid>459276</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-12 22:48:09 -0700</bug_when>
    <thetext>Created attachment 459276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868962</commentid>
    <comment_count>3</comment_count>
      <attachid>459347</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-13 23:08:13 -0700</bug_when>
    <thetext>Created attachment 459347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869121</commentid>
    <comment_count>4</comment_count>
      <attachid>459387</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-15 20:30:29 -0700</bug_when>
    <thetext>Created attachment 459387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869122</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2022-05-15 20:31:56 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869325</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-16 10:58:06 -0700</bug_when>
    <thetext>We decided to keep the canvas 2D behavior on macOS as it is. If we have access to the ImageBuffer backend, we should copy the NativeImage from it directly instead of going through the IPC. This will make us avoid a regression on the MotionMark/Images sub-test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869503</commentid>
    <comment_count>7</comment_count>
      <attachid>459465</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-16 17:08:45 -0700</bug_when>
    <thetext>Created attachment 459465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869602</commentid>
    <comment_count>8</comment_count>
      <attachid>459347</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-05-17 00:25:36 -0700</bug_when>
    <thetext>Comment on attachment 459347
Patch

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

Great direction. I hope we do the same with ImageBuffer at some point, e.g. make GraphicsContextXX::drawImageBuffer use ImageBuffeR::copyNativeImage().

&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:195
&gt; +                image-&gt;drawPattern(destContext, destRect, adjustedSrcRect, patternTransform, phase, spacing, options);

In a later patch, we should add backend-&gt;finalizeDrawIntoContext() here.

&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:228
&gt; +                destContext.drawNativeImage(*image, backendSize, destRect, adjustedSrcRect, options);

In a later patch, we should add backend-&gt;finalizeDrawIntoContext() here.

&gt; Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:172
&gt; +}

There&apos;s two cases why invalidateCachedNativeImage() needs to be done:
1) Memory optimization, so that a particular ImageBuffer which holds an IOSurface would not  ALSO hold an CGImage that would hold a malloc buffer
2) Correctness aspect, where the underlying IOSurface has been modified but the CGImage taken out of the IOSurface through a particular CGIOSurfaceContext does not know about that modification.

Here in this spot, finalizeDrawIntoContext, we take care of the memory aspect.

The correctness aspect is taken care of:
i)  invalidating the cache after putimagedata (For any IOSurface operation)
ii) invalidating the cache in WP after GPUP has modified the surface

So you need to still take care of ii)
Suggestion how to do it:

&quot;flush&quot; equals &quot;I know I have modified the the image buffer and will read the results out-of-band&quot;.
 
So add invalidateCachedNativeImage() in all WP-side remote backends.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:183
&gt; +        // Copy the image from the backend if it is accessible.

The code says literally the same thing as the comment. Maybe remove the comment.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:187
&gt;          const_cast&lt;RemoteImageBufferProxy*&gt;(this)-&gt;flushDrawingContext();

Waiting for the flush should happen before copying the image.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:199
&gt; +        // Copy the image from the backend if it is accessible.

The code says literally the same thing as the comment. Maybe remove the comment.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:203
&gt;          const_cast&lt;RemoteImageBufferProxy*&gt;(this)-&gt;flushDrawingContext();

Waiting for the flush should happen before copying the image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869603</commentid>
    <comment_count>9</comment_count>
      <attachid>459465</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-05-17 00:38:11 -0700</bug_when>
    <thetext>Comment on attachment 459465
Patch

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

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:184
&gt; +        if (canMapBackingStore())

It would be better to leave these perf optimization hunks to a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869614</commentid>
    <comment_count>10</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-05-17 02:01:49 -0700</bug_when>
    <thetext>Thinking about it:

The correctness aspect is taken care of:
i)  Invalidating the CGImage cache entry in the CGIOSurfaceContext after putimagedata (For any IOSurface operation), before next copy image
ii) Invalidating the CGImage cache entry in the CGIOSurfaceContext in WP after GPUP has modified the surface, before next copy image
iii) Forcing read back of IOSurface contents to memory in already copied CGImage *before* GPU has modified the surface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869722</commentid>
    <comment_count>11</comment_count>
      <attachid>459465</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-05-17 10:15:50 -0700</bug_when>
    <thetext>Comment on attachment 459465
Patch

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

&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:196
&gt;          }

Why is there no finalizeDrawIntoContext() call here? Why aren&apos;t prepareToDrawIntoContext/finalizeDrawIntoContext always paired?

&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:229
&gt;          }

Why is there no finalizeDrawIntoContext() call here? Why aren&apos;t prepareToDrawIntoContext/finalizeDrawIntoContext always paired?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869924</commentid>
    <comment_count>12</comment_count>
      <attachid>459527</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-17 23:15:50 -0700</bug_when>
    <thetext>Created attachment 459527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869929</commentid>
    <comment_count>13</comment_count>
      <attachid>459529</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-17 23:44:10 -0700</bug_when>
    <thetext>Created attachment 459529
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869959</commentid>
    <comment_count>14</comment_count>
      <attachid>459529</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-05-18 04:25:38 -0700</bug_when>
    <thetext>Comment on attachment 459529
Patch

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

&gt; Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:-185
&gt; -    // Accelerated to/from unaccelerated image buffers need complex caching. We trust that

Here you are losing the intended memory optimization of clearing the cache after a draw

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:182
&gt; +

I still think this could be a separate change, as I don&apos;t think it&apos;s entirely correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870028</commentid>
    <comment_count>15</comment_count>
      <attachid>459529</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-18 09:16:02 -0700</bug_when>
    <thetext>Comment on attachment 459529
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:-185
&gt;&gt; -    // Accelerated to/from unaccelerated image buffers need complex caching. We trust that
&gt; 
&gt; Here you are losing the intended memory optimization of clearing the cache after a draw

I am not sure whether CG clears the cache immediately after we draw the empty rect or it just sets a dirty flag but let&apos;s assume it does clears the cache. This code runs only when we draw the image of the IOSurface to a un-accelerated GraphicsContext. This is the case of applying filter, mask or clip-path. Do you think we need to optimize the memory in these cases only?

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:182
&gt;&gt; +
&gt; 
&gt; I still think this could be a separate change, as I don&apos;t think it&apos;s entirely correct.

One layout test failed without this change on https://ews-build.s3-us-west-2.amazonaws.com/macOS-AppleSilicon-Big-Sur-Debug-WK2-Tests-EWS/459276-30746/results.html. It looks like the CGImage interpolation is different on AS. So to fix this bug I need to get the CGImage form the backend in WebProcess. Also I did not want to cause any temporary regression.

But why do think this is not correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870227</commentid>
    <comment_count>16</comment_count>
      <attachid>459465</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-18 18:12:10 -0700</bug_when>
    <thetext>Comment on attachment 459465
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:196
&gt;&gt;          }
&gt; 
&gt; Why is there no finalizeDrawIntoContext() call here? Why aren&apos;t prepareToDrawIntoContext/finalizeDrawIntoContext always paired?

I think we do not need prepareToDrawIntoContext() or finalizeDrawIntoContext() here. I made ImageBufferShareableMappedIOSurfaceBackend::copyNativeImage() invalidate the platform image cache when the IOSurface changes.

&gt;&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:229
&gt;&gt;          }
&gt; 
&gt; Why is there no finalizeDrawIntoContext() call here? Why aren&apos;t prepareToDrawIntoContext/finalizeDrawIntoContext always paired?

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870284</commentid>
    <comment_count>17</comment_count>
      <attachid>459347</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-18 22:12:22 -0700</bug_when>
    <thetext>Comment on attachment 459347
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:195
&gt;&gt; +                image-&gt;drawPattern(destContext, destRect, adjustedSrcRect, patternTransform, phase, spacing, options);
&gt; 
&gt; In a later patch, we should add backend-&gt;finalizeDrawIntoContext() here.

I think we do not need prepareToDrawIntoContext() or finalizeDrawIntoContext() here. I made ImageBufferShareableMappedIOSurfaceBackend::copyNativeImage() invalidate the platform image cache when the IOSurface changes.

&gt;&gt; Source/WebCore/platform/graphics/ConcreteImageBuffer.h:228
&gt;&gt; +                destContext.drawNativeImage(*image, backendSize, destRect, adjustedSrcRect, options);
&gt; 
&gt; In a later patch, we should add backend-&gt;finalizeDrawIntoContext() here.

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:172
&gt;&gt; +}
&gt; 
&gt; There&apos;s two cases why invalidateCachedNativeImage() needs to be done:
&gt; 1) Memory optimization, so that a particular ImageBuffer which holds an IOSurface would not  ALSO hold an CGImage that would hold a malloc buffer
&gt; 2) Correctness aspect, where the underlying IOSurface has been modified but the CGImage taken out of the IOSurface through a particular CGIOSurfaceContext does not know about that modification.
&gt; 
&gt; Here in this spot, finalizeDrawIntoContext, we take care of the memory aspect.
&gt; 
&gt; The correctness aspect is taken care of:
&gt; i)  invalidating the cache after putimagedata (For any IOSurface operation)
&gt; ii) invalidating the cache in WP after GPUP has modified the surface
&gt; 
&gt; So you need to still take care of ii)
&gt; Suggestion how to do it:
&gt; 
&gt; &quot;flush&quot; equals &quot;I know I have modified the the image buffer and will read the results out-of-band&quot;.
&gt;  
&gt; So add invalidateCachedNativeImage() in all WP-side remote backends.

There are three cases for the ImageBuffer backed by an IOSurface:

1. ImageBufferIOSurfaceBackend: in this case the IOSurface is local. All the drawing happens in the same process and IOSurface is not shared.. The only thing we need to worry about is invalidating the image cache after calling putImageData(). We do not need to invalidate the image cache before or after getting the platform image from IOSurface since CG does the invalidation itself once we draw anything to it.
2. ImageBufferRemoteIOSurfaceBackend: in this case, the IOSurface is remote but it is not shared. All the drawing happens in GPUProcess and WebProcess does not have any access to IOSurface. Currently this can happen only on iOS when GPUProcess for DOM rendering is enabled. If the WebProcess wants an NativeImage from this IOSurface, this has to happen through an IPC message from RemoteImageBufferProxy::copyNativeImage().
3. ImageBufferShareableMappedIOSurfaceBackend: in this case, the IOSurface is remote and it is shared. All the drawing happens in GPUProcess but WebProcess can have any access to IOSurface. Currently this can happen only on macOS when GPUProcess for Canvas is enabled. If the WebProcess wants an NativeImage from this IOSurface, it can get it directly from the IOSurface but it has to ensure the cached is not stale. And we can do this by invalidating the image cache if the IOSurface seed was incremented since last time an image was copied from it. So we need to implement ImageBufferShareableMappedIOSurfaceBackend::copyNativeImage().

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:183
&gt;&gt; +        // Copy the image from the backend if it is accessible.
&gt; 
&gt; The code says literally the same thing as the comment. Maybe remove the comment.

removed.

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:187
&gt;&gt;          const_cast&lt;RemoteImageBufferProxy*&gt;(this)-&gt;flushDrawingContext();
&gt; 
&gt; Waiting for the flush should happen before copying the image.

ConcreteImageBuffer::copyNativeImage() has it own flushDrawingContext().

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:199
&gt;&gt; +        // Copy the image from the backend if it is accessible.
&gt; 
&gt; The code says literally the same thing as the comment. Maybe remove the comment.

ditto.

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:203
&gt;&gt;          const_cast&lt;RemoteImageBufferProxy*&gt;(this)-&gt;flushDrawingContext();
&gt; 
&gt; Waiting for the flush should happen before copying the image.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870495</commentid>
    <comment_count>18</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-05-19 12:07:51 -0700</bug_when>
    <thetext>&gt; If the WebProcess wants an NativeImage from this IOSurface, it can get it directly from the IOSurface but it has to ensure the cached is not stale.

That ensuring is not enough.
It has to ensure that the existing CGImage instances pointing to that IOSurface are invalidated *before* the GPUP modifies that IOSurface.
Otherwise when the existing CGImage instances are used, they show the new content, and not the content at the snapshot time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870498</commentid>
    <comment_count>19</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-05-19 12:19:55 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #15)
&gt; Comment on attachment 459529 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=459529&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:-185
&gt; &gt;&gt; -    // Accelerated to/from unaccelerated image buffers need complex caching. We trust that
&gt; &gt; 
&gt; &gt; Here you are losing the intended memory optimization of clearing the cache after a draw
&gt; 
&gt; I am not sure whether CG clears the cache immediately after we draw the
&gt; empty rect or it just sets a dirty flag but let&apos;s assume it does clears the
&gt; cache. This code runs only when we draw the image of the IOSurface to a
&gt; un-accelerated GraphicsContext. This is the case of applying filter, mask or
&gt; clip-path. Do you think we need to optimize the memory in these cases only?


No, I don&apos;t think that&apos;s the case necessarily. At least at the time I worked on it on bug 231471.
Draw to snapshots, toDataURL, ImageBitmap, it&apos;s not clear if these don&apos;t have bitmap as destination.

&gt; &gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:182
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; I still think this could be a separate change, as I don&apos;t think it&apos;s entirely correct.
&gt; 
&gt; One layout test failed without this change on
&gt; https://ews-build.s3-us-west-2.amazonaws.com/macOS-AppleSilicon-Big-Sur-
&gt; Debug-WK2-Tests-EWS/459276-30746/results.html. It looks like the CGImage
&gt; interpolation is different on AS. So to fix this bug I need to get the
&gt; CGImage form the backend in WebProcess. Also I did not want to cause any
&gt; temporary regression.
&gt; 
&gt; But why do think this is not correct?

So are you saying you get different results from 
a) WP asks GPUP to read the surface
b) WP reads the surface


I think you yourself are saying one or another is not correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870584</commentid>
    <comment_count>20</comment_count>
      <attachid>459604</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-19 17:51:05 -0700</bug_when>
    <thetext>Created attachment 459604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870585</commentid>
    <comment_count>21</comment_count>
      <attachid>459529</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-19 17:53:14 -0700</bug_when>
    <thetext>Comment on attachment 459529
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:-185
&gt;&gt;&gt;&gt; -    // Accelerated to/from unaccelerated image buffers need complex caching. We trust that
&gt;&gt;&gt; 
&gt;&gt;&gt; Here you are losing the intended memory optimization of clearing the cache after a draw
&gt;&gt; 
&gt;&gt; I am not sure whether CG clears the cache immediately after we draw the empty rect or it just sets a dirty flag but let&apos;s assume it does clears the cache. This code runs only when we draw the image of the IOSurface to a un-accelerated GraphicsContext. This is the case of applying filter, mask or clip-path. Do you think we need to optimize the memory in these cases only?
&gt; 
&gt; No, I don&apos;t think that&apos;s the case necessarily. At least at the time I worked on it on bug 231471.
&gt; Draw to snapshots, toDataURL, ImageBitmap, it&apos;s not clear if these don&apos;t have bitmap as destination.

I put this code back in a new function named ImageBufferIOSurfaceBackend::finalizeDrawIntoContext(). This function will be called from ConcreteImageBuffer::draw().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870646</commentid>
    <comment_count>22</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-20 00:17:10 -0700</bug_when>
    <thetext>Committed r294536 (250791@main): &lt;https://commits.webkit.org/250791@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 459604.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459276</attachid>
            <date>2022-05-12 22:48:09 -0700</date>
            <delta_ts>2022-05-13 23:08:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>snapshot-pdf-2.patch</filename>
            <type>text/plain</type>
            <size>23182</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYzlkOGVkYzUwYTYuLjgzNDIwYmEwNzRiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDIyLTA1LTEyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRHJhd2luZyB0aGUgUERGIHNuYXBzaG90IHNo
b3VsZCB0YWtlIHBsYWNlIGluIFdlYlByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MDM2OAorICAgICAgICByZGFyOi8vOTE2NjAxNTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgSW1hZ2VC
dWZmZXJCYWNrZW5kcyBzaG91bGQgYWN0IGxpa2UgYSBkcmF3aW5nIHN1cmZhY2Ugb25seS4gSXQg
aGFzCisgICAgICAgIGEgR3JhcGhpY3NDb250ZXh0LiBJdCBjYW4gZ2V0IGFuZCBzZXQgcGl4ZWxz
LiBBbmQgaXQgY2FuIGdldCBhIE5hdGl2ZUltYWdlCisgICAgICAgIG91dCBvZiB0aGUgcGl4ZWxz
LiBCdXQgaXQgc2hvdWxkIG5ldmVyIGRyYXcgaXRzZWxmIHRvIGEgR3JhcGhpY3NDb250ZXh0Lgor
ICAgICAgICBUaGUgSW1hZ2VCdWZmZXIgY2FuIGFjdCBsaWtlIGFuIGltYWdlLiBJdCBjYW4gZHJh
dyBpdHNlbGYgYXMgYW4gaW1hZ2Ugb3IKKyAgICAgICAgYXMgYSBwYXR0ZXJuIGludG8gYSBHcmFw
aGljc0NvbnRleHQuCisKKyAgICAgICAgU28gZHJhdygpLCBkcmF3UGF0dGVybigpIGFuZCBkcmF3
Q29uc3VtaW5nKCkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlCisgICAgICAgIEltYWdlQnVmZmVy
QmFja2VuZCBzdXBlciBjbGFzc2VzIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1bmlm
aWVkCisgICAgICAgIGZvciBhbGwgcGxhdGZvcm1zIGFuZCBtb3ZlZCB0byBDb25jcmV0ZUltYWdl
QnVmZmVyLgorCisgICAgICAgIEJ5IGRvaW5nIHRoYXQsIGEgY2FudmFzIGNhbiBiZSBkcmF3biB0
byB0aGUgUERGIGNvbnRleHQgaW4gV2ViUHJvY2VzcyAKKyAgICAgICAgZXZlbiBpZiB0aGUgR1BV
UHJvY2VzcyBmb3IgRE9NIHJlbmRlcmluZyBpcyBlbmFibGVkLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmaW5hbGl6ZURyYXdJbnRvQ29udGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJu
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZpbmFsaXplRHJhd0lu
dG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6ZHJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIyLTA1LTEyICBM
b8OvYyBMZSBQYWdlICA8bGxlcGFnZUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJd
W1ZpZGVvQ2FwdHVyZV0gQWRkIHN1cHBvcnQgZm9yIGNhcHR1cmluZyBlbmNvZGVkIHZpZGVvIHN0
cmVhbXMgZnJvbSBhIHdlYmNhbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGJmNjhkMWFkNjE4ZC4uOGEwYzc3
NzNmOWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25j
cmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJSZXN1bHRzLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCkBAIC0xNjksMTggKzE3MCwzNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICB9CisgICAgICAgIGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwor
ICAgICAgICBiYWNrZW5kLT5wcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwor
CisgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICAgICAgc3Jj
UmVjdFNjYWxlZC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7CisKKyAgICAgICAgaWYgKGF1dG8g
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5
QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICAgICAgZGVzdENv
bnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNy
Y1JlY3RTY2FsZWQsIG9wdGlvbnMpOworCisgICAgICAgIGJhY2tlbmQtPmZpbmFsaXplRHJhd0lu
dG9Db250ZXh0KGRlc3RDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewotICAg
ICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICAgICAgYmFja2VuZC0+ZHJh
d1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgIGJhY2tlbmQtPnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7CisKKyAg
ICAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7CisKKyAgICAgICAgaWYgKGF1dG8g
aW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2lu
Z1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICAgICAgaW1hZ2UtPmRyYXdQ
YXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiAgICAgfQogCiAgICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKQEAgLTIwNCwxMCArMjIz
LDIwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIEFTU0VSVCgmZGVzdENvbnRleHQgIT0gJmNvbnRleHQoKSk7Ci0gICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewotICAgICAg
ICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0Nv
bnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAg
ICB9CisgICAgCisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgp
OworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Zmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBiYWNrZW5kLT5wcmVwYXJlVG9EcmF3SW50
b0NvbnRleHQoZGVzdENvbnRleHQpOworCisgICAgICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OworICAgICAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNj
YWxlKCkpOworCisgICAgICAgIGF1dG8gYmFja2VuZFNpemUgPSBiYWNrZW5kLT5iYWNrZW5kU2l6
ZSgpOworICAgICAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAg
ICAgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXpl
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpIG92ZXJyaWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAppbmRleCBjNjhkMzE4ZDNmMzku
LmQwZTMxMzQyMDBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC02NSwxMSArNjUsNiBAQCBSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbAogICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpk
cmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBkcmF3KGRlc3RpbmF0
aW9uQ29udGV4dCwgZGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCBvcHRpb25zKTsKLX0KLQog
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogewogICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlKCkgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgK
aW5kZXggY2Y3MTViMGEwY2QxLi4yNWNhZjBmYTQ3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0xMDgsMTUg
KzEwOCwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUoKSBj
b25zdCB7IHJldHVybiB7IH07IH0KIAorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9EcmF3SW50
b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
RHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYpIHsgfQogICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
PSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gc2lua0ludG9OYXRpdmVJbWFnZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgeyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAppbmRleCAzYjdhNzVkYzc4YWYu
LmQ4ZTY1MTA0OGM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAt
NTEsMzcgKzUxLDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLAogICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKIH0KIAotdm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghZGVzdENvbnRl
eHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBubyBwbGF0
Zm9ybUNvbnRleHQsIHdlJ3JlIHVzaW5nIHRocmVhZGVkIHJlbmRlcmluZywgYW5kIGFsbCB0aGUg
b3BlcmF0aW9ucyBtdXN0IGJlIGRvbmUKLSAgICAgICAgLy8gdGhyb3VnaCB0aGUgR3JhcGhpY3ND
b250ZXh0LgotICAgICAgICBhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAm
Y29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAg
ICAgICAgZGVzdENvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0
LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGNvbnN0IGF1dG8mIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKLQotICAgIGlmIChhdXRv
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29w
eUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZHJhd1BsYXRm
b3JtSW1hZ2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS0+cGxhdGZvcm1J
bWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNv
bnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgfSwgZGVzdGluYXRpb25Db250
ZXh0U3RhdGUuYWxwaGEoKSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9u
Q29udGV4dFN0YXRlKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBp
ZiAoIWRlc3RDb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKSB7Ci0gICAgICAgIC8vIElmIHRo
ZXJlJ3Mgbm8gcGxhdGZvcm1Db250ZXh0LCB3ZSdyZSB1c2luZyB0aHJlYWRlZCByZW5kZXJpbmcs
IGFuZCBhbGwgdGhlIG9wZXJhdGlvbnMgbXVzdCBiZSBkb25lCi0gICAgICAgIC8vIHRocm91Z2gg
dGhlIEdyYXBoaWNzQ29udGV4dC4KLSAgICAgICAgYXV0byBpbWFnZSA9IGNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChhdXRvIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdT
dG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJu
KCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgbG9naWNhbFNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBvcHRpb25zKTsKLX0KLQogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y2xp
cFRvTWFzayhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQogewogICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCmluZGV4IDI0YjNj
NGRjNTZmYy4uNmY4NjI3ZTRmMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgK
QEAgLTM5LDkgKzM5LDYgQEAgY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJCYWNrZW5kIHsKIHB1YmxpYzoKICAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KICAg
ICB2b2lkIGNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApp
bmRleCAxYWMxYmEzZTQ2ZmYuLmZiOGEwZGE4MmU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cApAQCAtMTMxLDI4ICsxMzEsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlcwogICAgIHJldHVy
biBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1h
Z2UoKSwgbG9naWNhbFNpemUoKSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSgpLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKLQotICAg
IEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKLSAgICBzcmNSZWN0U2NhbGVkLnNj
YWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdl
KCppbWFnZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgcHJlcGFyZVRvRHJhd0ludG9D
b250ZXh0KGRlc3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0K
LSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQo
KSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGlt
YWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCiB2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgYXV0byBuYXRpdmVJbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CkBAIC0yNDgsMTAgKzIyNiw2
IEBAIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRTYWZlSW1hZ2VCdWZmZXJGbHVzaGVyPiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6Y3JlYXRlRmx1c2hlCiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VGhyZWFk
U2FmZUltYWdlQnVmZmVyRmx1c2hlckNHPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0JikKLXsKLX0KLQogYm9vbCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6b3Jp
Z2luQXRCb3R0b21MZWZ0Q29ybmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNPcmlnaW5BdEJv
dHRvbUxlZnRDb3JuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAppbmRleCAxMmJlNDI5Y2Y2MGUuLmM4
NzI0MTk2ZmZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC00MSwxMiArNDEsMTEgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0Qm90dG9tTGVmdENvcm5l
ciA9IHRydWU7CiAKIHByb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZDsKKwogICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICAKICAg
ICB2b2lkIGNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkgb3ZlcnJpZGU7CiAKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0IG92ZXJyaWRlOwpAQCAtNTYsMTIgKzU1LDggQEAgcHJvdGVjdGVkOgogCiAgICAgYm9v
bCBvcmlnaW5BdEJvdHRvbUxlZnRDb3JuZXIoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHVzaW5n
IEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOwotCiAgICAgc3RhdGljIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOwogCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChH
cmFwaGljc0NvbnRleHQmKTsKLQogICAgIHZpcnR1YWwgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNv
cHlDR0ltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcAppbmRleCA1MzQ0ODJlMzM4YmEuLjJiMGMxZmVhMWFmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0xNjMsNiArMTYzLDE0IEBAIHZvaWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0JiBkZXN0CiAgICAgICAgIGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpOwogfQogCit2
b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZmluYWxpemVEcmF3SW50b0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKK3sKKyAgICAvLyBBY2NlbGVyYXRlZCB0by9m
cm9tIHVuYWNjZWxlcmF0ZWQgaW1hZ2UgYnVmZmVycyBuZWVkIGNvbXBsZXggY2FjaGluZy4gV2Ug
dHJ1c3QgdGhhdAorICAgIC8vIHRoaXMgaXMgYSBvbmUtb2ZmIGRyYXcsIGFuZCBhcyBzdWNoIHdl
IGNsZWFyIHRoZSBjYWNoZXMgb2YgdGhlIHNvdXJjZSBpbWFnZSBhZnRlciBlYWNoIGRyYXcuCisg
ICAgaWYgKGRlc3RDb250ZXh0LnJlbmRlcmluZ01vZGUoKSAhPSBjb250ZXh0KCkucmVuZGVyaW5n
TW9kZSgpKQorICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKTsKK30KKwogdm9p
ZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFn
ZSgpIGNvbnN0CiB7CiAgICAgLy8gRm9yY2UgUXVhcnR6Q29yZSB0byBpbnZhbGlkYXRlIGl0cyBj
YWNoZWQgQ0dJbWFnZVJlZiBmb3IgdGhpcyBJT1N1cmZhY2UuCkBAIC0xODMsMjYgKzE5MSw2IEBA
IFJlZlB0cjxOYXRpdmVJbWFnZT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50
b05hdGl2ZUltYWdlKCkKICAgICByZXR1cm4gTmF0aXZlSW1hZ2U6OmNyZWF0ZShJT1N1cmZhY2U6
OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAv
LyBBY2NlbGVyYXRlZCB0by9mcm9tIHVuYWNjZWxlcmF0ZWQgaW1hZ2UgYnVmZmVycyBuZWVkIGNv
bXBsZXggY2FjaGluZy4gV2UgdHJ1c3QgdGhhdAotICAgIC8vIHRoaXMgaXMgYSBvbmUtb2ZmIGRy
YXcsIGFuZCBhcyBzdWNoIHdlIGNsZWFyIHRoZSBjYWNoZXMgb2YgdGhlIHNvdXJjZSBpbWFnZSBh
ZnRlciBlYWNoIGRyYXcuCi0gICAgaWYgKGRlc3RDb250ZXh0LnJlbmRlcmluZ01vZGUoKSAhPSBj
b250ZXh0KCkucmVuZGVyaW5nTW9kZSgpKQotICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkTmF0aXZl
SW1hZ2UoKTsKLX0KLXZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsK
LQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBhdXRvIGJhY2tlbmRTaXpl
ID0gdGhpcy0+YmFja2VuZFNpemUoKTsKLSAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSkKLSAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwg
YmFja2VuZFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCiBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5Q0dJ
bWFnZUZvckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewogICAgIGlmIChtX3JlcXVpcmVzRHJh
d0FmdGVyUHV0UGl4ZWxCdWZmZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgK
aW5kZXggODEyMzNkNWQ2ZDAwLi4wMjkyNzcwMjU3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oCkBAIC02Miw5ICs2Miw2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBzaW5rSW50b05h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7Ci0KICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKQEAgLTg1LDYgKzgy
LDcgQEAgcHJvdGVjdGVkOgogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5Q0dJbWFnZUZv
ckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpIG92ZXJyaWRlOworICAgIHZvaWQgZmluYWxp
emVEcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpIG92
ZXJyaWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCkgY29uc3Q7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQy
NzZjMGZkOTIzNC4uYThjZjQwMmNhY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIy
LTA1LTEyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtH
UFUgUHJvY2Vzc10gRHJhd2luZyB0aGUgUERGIHNuYXBzaG90IHNob3VsZCB0YWtlIHBsYWNlIGlu
IFdlYlByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI0MDM2OAorICAgICAgICByZGFyOi8vOTE2NjAxNTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2Nv
Y29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6ZHJhdyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6ZHJhd1Bh
dHRlcm4pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29h
L0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIyLTA1LTEyICBPbGl2
aWVyIEJsaW4gIDxvbGl2aWVyLmJsaW5Ac29mdGF0aG9tZS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTihyMjkxMDM4KSBbR1RLXVtXUEVdIEZpeCBidWlsZCB3aXRob3V0IHJlbW90ZSBpbnNwZWN0
b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29j
b2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kLmNwcAppbmRleCBlYWU2Zjc5NWVkM2YuLjIwMzE3YzY0ZDBlNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJl
bW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmNwcApA
QCAtMTE4LDE2ICsxMTgsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyUmVtb3RlSU9TdXJm
YWNlQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZQogICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi12b2lkIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCiBTdHJpbmcgSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
Y29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNl
QmFja2VuZC5oCmluZGV4IDIwZDhjNjBlMTEzNS4uN2EwZmRkZGRlY2Q3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVt
b3RlSU9TdXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTYx
LDggKzYxLDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXplKCkg
Y29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZl
SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSwgV2Vi
Q29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGRyYXcoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQ
aXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459347</attachid>
            <date>2022-05-13 23:08:13 -0700</date>
            <delta_ts>2022-05-15 20:30:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240368-20220513230812.patch</filename>
            <type>text/plain</type>
            <size>26419</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY0MGUwOWQ1OTE2OGI4
NzNkNjk2OTFmYWMyMDJiMmU5MjIzOTNiNC4uNGExY2VmOGQyNmYwOGM2NGMzYWE3ZjIzZGU2OWM1
Njc5YjgzMTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTA1LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
RHJhd2luZyB0aGUgUERGIHNuYXBzaG90IHNob3VsZCB0YWtlIHBsYWNlIGluIFdlYlByb2Nlc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MDM2OAor
ICAgICAgICByZGFyOi8vOTE2NjAxNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGUgSW1hZ2VCdWZmZXJCYWNrZW5kcyBzaG91bGQgYWN0IGxpa2Ug
YSBkcmF3aW5nIHN1cmZhY2Ugb25seS4gSXQgaGFzCisgICAgICAgIGEgR3JhcGhpY3NDb250ZXh0
LiBJdCBjYW4gZ2V0IGFuZCBzZXQgcGl4ZWxzLiBBbmQgaXQgY2FuIGdldCBhIE5hdGl2ZUltYWdl
CisgICAgICAgIG91dCBvZiB0aGUgcGl4ZWxzLiBCdXQgaXQgc2hvdWxkIG5ldmVyIGRyYXcgaXRz
ZWxmIHRvIGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGUgSW1hZ2VCdWZmZXIgY2FuIGFj
dCBsaWtlIGFuIGltYWdlLiBJdCBjYW4gZHJhdyBpdHNlbGYgYXMgYW4gaW1hZ2Ugb3IKKyAgICAg
ICAgYXMgYSBwYXR0ZXJuIGludG8gYSBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgU28gZHJh
dygpLCBkcmF3UGF0dGVybigpIGFuZCBkcmF3Q29uc3VtaW5nKCkgd2lsbCBiZSByZW1vdmVkIGZy
b20gdGhlCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZCBzdXBlciBjbGFzc2VzIGFuZCB0aGUg
aW1wbGVtZW50YXRpb24gd2lsbCBiZSB1bmlmaWVkCisgICAgICAgIGZvciBhbGwgcGxhdGZvcm1z
IGFuZCBtb3ZlZCB0byBDb25jcmV0ZUltYWdlQnVmZmVyLgorCisgICAgICAgIEJ5IGRvaW5nIHRo
YXQsIGEgY2FudmFzIGNhbiBiZSBkcmF3biB0byB0aGUgUERGIGNvbnRleHQgaW4gV2ViUHJvY2Vz
cyAKKyAgICAgICAgZXZlbiBpZiB0aGUgR1BVUHJvY2VzcyBmb3IgRE9NIHJlbmRlcmluZyBpcyBl
bmFibGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50
b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmaW5hbGl6
ZURyYXdJbnRvQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6cHJlcGFyZVRvRHJhd0ludG9Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmZpbmFsaXplRHJhd0ludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oOgorCiAyMDIyLTA1LTEzICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGhhbmRsaW5nIG9mIGFjdGl2ZSBkZXNjZW5kYW50IGNo
YW5nZWQgbm90aWZpY2F0aW9ucyBvdXQgb2YgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggZTc3NGNmNDQyYjc4ZGMzZWVlOTA5NzEyZmU0M2FjMjU0YmJhYTVjZS4uNzgwMGI4
ZWE0MTUyYWIwZTNhZDJkYmNlYTkwY2ZlN2ZiMjQwYTgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAyMi0wNS0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbR1BVIFByb2Nlc3NdIERyYXdpbmcgdGhlIFBERiBzbmFwc2hvdCBzaG91bGQgdGFr
ZSBwbGFjZSBpbiBXZWJQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNDAzNjgKKyAgICAgICAgcmRhcjovLzkxNjYwMTU5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kOjpkcmF3
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kOjpkcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmg6CisKIDIw
MjItMDUtMTMgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBJUEMgY2Fubm90IGVuY29kZSwgZGVjb2RlIFJlZjw+LCBjYXVzaW5nIGR1cGxpY2F0ZSBjb2Rl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUlt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUlt
YWdlQnVmZmVyLmgKaW5kZXggYmY2OGQxYWQ2MThkMzFkNGEyMTE2OGI5NzBkZmVkMTA3ZTJmMTI1
OC4uOTlmNTZkMGExN2YyOTViMjc2NzAwMjA0OGY1MmZhYzlmZDBlYWJhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyUmVzdWx0cy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKIApAQCAtMTY5LDE3ICsxNzAsMjkgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9
IHNyY1JlY3Q7CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUocmVzb2x1dGlvblNjYWxlKCkp
OworCiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkg
ewotICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICAgICAgYmFja2Vu
ZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAg
ICAgICAgYmFja2VuZC0+cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKKwor
ICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICAgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJh
Y2tlbmRTaXplKCksIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKKworICAgICAg
ICAgICAgYmFja2VuZC0+ZmluYWxpemVEcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KHJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmRDcmVhdGVkKCkpIHsKLSAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
LSAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
ICAgICAgICAgYmFja2VuZC0+cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsK
KworICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09
ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQor
ICAgICAgICAgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDMsMTMgKzIxNiwxOSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgICAgICBhZGp1c3RlZFNy
Y1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgICAgIEFTU0VSVCgmZGVzdENv
bnRleHQgIT0gJmNvbnRleHQoKSk7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwot
ICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICAgICAgYmFja2VuZC0+cHJlcGFyZVRvRHJhd0lu
dG9Db250ZXh0KGRlc3RDb250ZXh0KTsKKworICAgICAgICAgICAgYXV0byBiYWNrZW5kU2l6ZSA9
IGJhY2tlbmQtPmJhY2tlbmRTaXplKCk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IHNp
bmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
b3B0aW9ucyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNsaXBUb01hc2so
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKaW5kZXggYzY4ZDMxOGQzZjM5ZTdjNDZhNDUzMjBi
ODg4ZWMxYmFkYzE0NDg4YS4uZDBlMzEzNDIwMGI2MWJmOTk3OWY2NjU1MDMwMDI4OGYzYmY2Yjhi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC02NSwxMSArNjUsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbAogICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZl
UmVzb2x1dGlvbik7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBkcmF3KGRlc3RpbmF0aW9uQ29udGV4dCwg
ZGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCBvcHRpb25zKTsKLX0KLQogdm9pZCBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogewogICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKaW5kZXggY2Y3MTVi
MGEwY2QxYjUxNTcwNjE4MmVmM2I2ZTZhMDUzODQ2ODM1Mi4uMjVjYWYwZmE0NzI3Y2RlZjNhYWMz
ZWIxOTU0NWQ2N2NiYmE4NmE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTEwOCwxNSArMTA4LDEzIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHsgfTsgfQogCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChHcmFw
aGljc0NvbnRleHQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVEcmF3SW50b0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0JikgeyB9CiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0ID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKLQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBz
aW5rSW50b05hdGl2ZUltYWdlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xpcFRv
TWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IDNiN2E3NWRjNzhhZjc5MmEwMDU5ZmZjNzI2
MzA3MTg2MjViOWIyZGUuLmQ4ZTY1MTA0OGM2YzM0YzYwMzNiNmEwZDZkOTkyYjY3NGFhNTUxOTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTUxLDM3ICs1MSw2IEBA
IFJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvciwKICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShj
b3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWRlc3RDb250ZXh0Lmhhc1BsYXRmb3Jt
Q29udGV4dCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcGxhdGZvcm1Db250ZXh0LCB3
ZSdyZSB1c2luZyB0aHJlYWRlZCByZW5kZXJpbmcsIGFuZCBhbGwgdGhlIG9wZXJhdGlvbnMgbXVz
dCBiZSBkb25lCi0gICAgICAgIC8vIHRocm91Z2ggdGhlIEdyYXBoaWNzQ29udGV4dC4KLSAgICAg
ICAgYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENv
cHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGRlc3RDb250
ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRT
dGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUg
OiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpkZXN0
Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhh
KCksIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFkZXN0Q29udGV4
dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSkgewotICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHBsYXRm
b3JtQ29udGV4dCwgd2UncmUgdXNpbmcgdGhyZWFkZWQgcmVuZGVyaW5nLCBhbmQgYWxsIHRoZSBv
cGVyYXRpb25zIG11c3QgYmUgZG9uZQotICAgICAgICAvLyB0aHJvdWdoIHRoZSBHcmFwaGljc0Nv
bnRleHQuCi0gICAgICAgIGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwotICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGxvZ2ljYWxT
aXplKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9u
cyk7Ci19Ci0KIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNsaXBUb01hc2soR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAppbmRleCAyNGIzYzRkYzU2ZmNlNzExNmJi
ODQzOTFhYjMxMDM2MzhhMzU2MmYzLi42Zjg2MjdlNGYwZGI0MDMxODJlYTRmZWYxY2VhMGNmZjky
MjAyYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTM5LDkgKzM5LDYg
QEAgY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNr
ZW5kIHsKIHB1YmxpYzoKICAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNv
bHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGNsaXBUb01h
c2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAppbmRleCAxYWMxYmEzZTQ2
ZmY1NDk2YzhkNmIwNzI1MGYxNmE5MGU5MGM2ZDFjLi5mYjhhMGRhODJlNzc4NTIyMmQ5ZjlhNmY4
N2MxYjc0MDhiNzMyZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0xMzEsMjggKzEz
MSw2IEBAIFJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2Uo
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzCiAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBsb2dpY2FsU2l6
ZSgpLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBwcmVw
YXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwotCi0gICAgRmxvYXRSZWN0IHNyY1Jl
Y3RTY2FsZWQgPSBzcmNSZWN0OwotICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUocmVzb2x1dGlvblNj
YWxlKCkpOwotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250
ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3Rv
cmUpKQotICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBiYWNrZW5k
U2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRl
eHQpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGlmIChhdXRvIGlt
YWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdT
dG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKIHsKICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKQEAgLTI0OCwxMCArMjI2LDYgQEAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
cmVhdGVGbHVzaGUKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUaHJlYWRTYWZlSW1hZ2VCdWZmZXJG
bHVzaGVyQ0c+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQm
KQotewotfQotCiBib29sIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpvcmlnaW5BdEJvdHRvbUxlZnRD
b3JuZXIoKSBjb25zdAogewogICAgIHJldHVybiBpc09yaWdpbkF0Qm90dG9tTGVmdENvcm5lcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oCmluZGV4IDEyYmU0MjljZjYwZTY5NDJhMTlhYWZkZGFlNzcyMGFl
OGE1OTJjYjQuLmM4NzI0MTk2ZmZjMDI2NDkzZWZiYWU5YzZkNWZlZTZiMDljODE1ODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaApAQCAtNDEsMTIgKzQxLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNPcmlnaW5BdEJvdHRvbUxlZnRDb3JuZXIgPSB0cnVlOwogCiBwcm90
ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7
CisKICAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZl
UmVzb2x1dGlvbikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgCiAgICAgdm9pZCBjbGlwVG9NYXNr
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpIG92ZXJyaWRlOwog
CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsK
QEAgLTU2LDEyICs1NSw4IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgb3JpZ2luQXRCb3R0b21M
ZWZ0Q29ybmVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKLQogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0Jik7
Ci0KICAgICB2aXJ0dWFsIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5Q0dJbWFnZUZvckVuY29k
aW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNTM0NDgy
ZTMzOGJhODY3MGMzNTg2ZWIzNWJjNGY2M2ZkMzIyOWM4Yi4uMmIwYzFmZWExYWY3OTNiZmIwOTNj
NTIxYmZkY2E2NTIyYjQ4NTRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwCkBAIC0xNjMsNiArMTYzLDE0IEBAIHZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBkZXN0CiAgICAgICAg
IGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpOwogfQogCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6ZmluYWxpemVEcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCkKK3sKKyAgICAvLyBBY2NlbGVyYXRlZCB0by9mcm9tIHVuYWNjZWxlcmF0ZWQg
aW1hZ2UgYnVmZmVycyBuZWVkIGNvbXBsZXggY2FjaGluZy4gV2UgdHJ1c3QgdGhhdAorICAgIC8v
IHRoaXMgaXMgYSBvbmUtb2ZmIGRyYXcsIGFuZCBhcyBzdWNoIHdlIGNsZWFyIHRoZSBjYWNoZXMg
b2YgdGhlIHNvdXJjZSBpbWFnZSBhZnRlciBlYWNoIGRyYXcuCisgICAgaWYgKGRlc3RDb250ZXh0
LnJlbmRlcmluZ01vZGUoKSAhPSBjb250ZXh0KCkucmVuZGVyaW5nTW9kZSgpKQorICAgICAgICBp
bnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpIGNvbnN0CiB7CiAgICAg
Ly8gRm9yY2UgUXVhcnR6Q29yZSB0byBpbnZhbGlkYXRlIGl0cyBjYWNoZWQgQ0dJbWFnZVJlZiBm
b3IgdGhpcyBJT1N1cmZhY2UuCkBAIC0xODMsMjYgKzE5MSw2IEBAIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKICAg
ICByZXR1cm4gTmF0aXZlSW1hZ2U6OmNyZWF0ZShJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RG
TW92ZShtX3N1cmZhY2UpKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAvLyBBY2NlbGVyYXRlZCB0by9m
cm9tIHVuYWNjZWxlcmF0ZWQgaW1hZ2UgYnVmZmVycyBuZWVkIGNvbXBsZXggY2FjaGluZy4gV2Ug
dHJ1c3QgdGhhdAotICAgIC8vIHRoaXMgaXMgYSBvbmUtb2ZmIGRyYXcsIGFuZCBhcyBzdWNoIHdl
IGNsZWFyIHRoZSBjYWNoZXMgb2YgdGhlIHNvdXJjZSBpbWFnZSBhZnRlciBlYWNoIGRyYXcuCi0g
ICAgaWYgKGRlc3RDb250ZXh0LnJlbmRlcmluZ01vZGUoKSAhPSBjb250ZXh0KCkucmVuZGVyaW5n
TW9kZSgpKQotICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKTsKLX0KLXZvaWQg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNv
bHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBhdXRvIGJhY2tlbmRTaXplID0gdGhpcy0+YmFja2VuZFNp
emUoKTsKLSAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKLSAgICAg
ICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgYmFja2VuZFNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCiBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5Q0dJbWFnZUZvckVuY29kaW5nKENG
U3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAogewogICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZm
ZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKaW5kZXggODEyMzNkNWQ2ZDAw
Njg0MTg4NjU0MzNhNTIzZGZlMzhlNDUxOGJiYy4uMDI5Mjc3MDI1N2VhZTVjNGFkNjlmMjA0NGI1
OWI3ZTBhODQ1Mjg2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTYy
LDkgKzYyLDYgQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlk
ZTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQogICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVy
Rm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIApAQCAtODUsNiArODIsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlDR0ltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdS
ZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgZmluYWw7CiAKICAg
ICB2b2lkIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
aW9uQ29udGV4dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5hbGl6ZURyYXdJbnRvQ29udGV4dChH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBp
bnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXgg
NTYzZTBiZjI0NjQ4ZjIxYjFmNzY3ZjI2M2ZjNmMzZTYzNWJjNjQ1Ni4uYzNkYzZkOGYxNGFiYWJm
OTk1NjQxMTVjMTY4MDdiNjRhMDg4YzliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgK
QEAgLTUwLDYgKzUwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBjbGFzcyBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+IHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdl
YkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VD
b25jcmV0ZUltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXI6OmNhbk1hcEJhY2tpbmdTdG9yZTsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFn
ZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAgdXNpbmcgQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZTsKIApAQCAtMTc0LDEwICsxNzUsMTUg
QEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPmdldERhdGFGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgbV9yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJ
bWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3Jl
OjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBmaW5hbAorICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRp
dmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgZmluYWwKICAgICB7CiAg
ICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAvLyBDb3B5IHRoZSBpbWFnZSBmcm9tIHRo
ZSBiYWNrZW5kIGlmIGl0IGlzIGFjY2Vzc2libGUuCisgICAgICAgIGlmIChjYW5NYXBCYWNraW5n
U3RvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisKICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5Kj4odGhpcyktPmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAg
YXV0byBiaXRtYXAgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0U2hhcmVhYmxl
Qml0bWFwKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJl
c29sdXRpb246Olllcyk7CiAgICAgICAgIGlmICghYml0bWFwKQpAQCAtMTg1LDEwICsxOTEsMTUg
QEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV2ViQ29yZTo6TmF0aXZlSW1hZ2U6OmNyZWF0
ZShiaXRtYXAtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoV2ViQ29yZTo6RG9udENvcHlCYWNraW5nU3Rv
cmUpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJD
b3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6OlByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IGZpbmFsCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdl
PiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBXZWJD
b3JlOjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgZmlu
YWwKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAvLyBDb3B5IHRoZSBp
bWFnZSBmcm9tIHRoZSBiYWNrZW5kIGlmIGl0IGlzIGFjY2Vzc2libGUuCisgICAgICAgIGlmIChj
YW5NYXBCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBCYXNlQ29uY3JldGVJbWFn
ZUJ1ZmZlcjo6Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKwog
ICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hE
cmF3aW5nQ29udGV4dCgpOwogICAgICAgICBhdXRvIGJpdG1hcCA9IG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LT5nZXRTaGFyZWFibGVCaXRtYXAobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIHByZXNlcnZlUmVzb2x1dGlvbik7CiAgICAgICAgIGlmICghYml0bWFwKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3Bw
CmluZGV4IGVhZTZmNzk1ZWQzZjkyNDY0MmM0ZDg0OWI5YTk4YTlhNzY5NzU3MjkuLjIwMzE3YzY0
ZDBlN2IxYjgwZjYyYzRkMWE3ZWEwM2UyNGRiMTQ1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZh
Y2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTExOCwxNiAr
MTE4LDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6
OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmUKICAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdl
QnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuaApp
bmRleCAyMGQ4YzYwZTExMzU2ZThiMmUwN2Q1ODliMGQzOTZmMmYyNDEyNDllLi43YTBmZGRkZGVj
ZDdhZjA2MjU2YWM1YzExMDEwMGM5Y2I1ZmIxNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNl
QmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29j
b2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTYxLDggKzYxLDYgQEAg
cHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgZmluYWw7
CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29y
ZTo6QmFja2luZ1N0b3JlQ29weSkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSwgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBmaW5hbDsK
ICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3QgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459387</attachid>
            <date>2022-05-15 20:30:29 -0700</date>
            <delta_ts>2022-05-16 17:08:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240368-20220515203028.patch</filename>
            <type>text/plain</type>
            <size>25140</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY0MGUwOWQ1OTE2OGI4
NzNkNjk2OTFmYWMyMDJiMmU5MjIzOTNiNC4uMGFjZmJhZTcyZDI3M2E1MTEzYmY1ODUwNzc5Y2Vj
ODJlNzExNjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTA1LTE1ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
RHJhd2luZyB0aGUgUERGIHNuYXBzaG90IHNob3VsZCB0YWtlIHBsYWNlIGluIFdlYlByb2Nlc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MDM2OAor
ICAgICAgICByZGFyOi8vOTE2NjAxNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGUgSW1hZ2VCdWZmZXJCYWNrZW5kcyBzaG91bGQgYWN0IGxpa2Ug
YSBkcmF3aW5nIHN1cmZhY2Ugb25seS4gSXQgaGFzCisgICAgICAgIGEgR3JhcGhpY3NDb250ZXh0
LiBJdCBjYW4gZ2V0IGFuZCBzZXQgcGl4ZWxzLiBBbmQgaXQgY2FuIGdldCBhIE5hdGl2ZUltYWdl
CisgICAgICAgIG91dCBvZiB0aGUgcGl4ZWxzLiBCdXQgaXQgc2hvdWxkIG5ldmVyIGRyYXcgaXRz
ZWxmIHRvIGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGUgSW1hZ2VCdWZmZXIgY2FuIGFj
dCBsaWtlIGFuIGltYWdlLiBJdCBjYW4gZHJhdyBpdHNlbGYgYXMgYW4gaW1hZ2Ugb3IKKyAgICAg
ICAgYXMgYSBwYXR0ZXJuIGludG8gYSBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgU28gZHJh
dygpLCBkcmF3UGF0dGVybigpIGFuZCBkcmF3Q29uc3VtaW5nKCkgd2lsbCBiZSByZW1vdmVkIGZy
b20gdGhlCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZCBzdXBlciBjbGFzc2VzIGFuZCB0aGUg
aW1wbGVtZW50YXRpb24gd2lsbCBiZSB1bmlmaWVkCisgICAgICAgIGZvciBhbGwgcGxhdGZvcm1z
IGFuZCBtb3ZlZCB0byBDb25jcmV0ZUltYWdlQnVmZmVyLgorCisgICAgICAgIEJ5IGRvaW5nIHRo
YXQsIGEgY2FudmFzIGNhbiBiZSBkcmF3biB0byB0aGUgUERGIGNvbnRleHQgaW4gV2ViUHJvY2Vz
cyAKKyAgICAgICAgZXZlbiBpZiB0aGUgR1BVUHJvY2VzcyBmb3IgRE9NIHJlbmRlcmluZyBpcyBl
bmFibGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50
b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmaW5hbGl6
ZURyYXdJbnRvQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6cHJlcGFyZVRvRHJhd0ludG9Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmZpbmFsaXplRHJhd0ludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oOgorCiAyMDIyLTA1LTEzICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGhhbmRsaW5nIG9mIGFjdGl2ZSBkZXNjZW5kYW50IGNo
YW5nZWQgbm90aWZpY2F0aW9ucyBvdXQgb2YgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggZTc3NGNmNDQyYjc4ZGMzZWVlOTA5NzEyZmU0M2FjMjU0YmJhYTVjZS4uZDZhMzI0
MTJkNDJmNWZlZTllYjgyMmM1YjI4NDc5YmU0ZmFlYjZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAyMi0wNS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbR1BVIFByb2Nlc3NdIERyYXdpbmcgdGhlIFBERiBzbmFwc2hvdCBzaG91bGQgdGFr
ZSBwbGFjZSBpbiBXZWJQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNDAzNjgKKyAgICAgICAgcmRhcjovLzkxNjYwMTU5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmRyYXcpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tl
bmQ6OmRyYXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuaDoKKwogMjAyMi0w
NS0xMyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIElQ
QyBjYW5ub3QgZW5jb2RlLCBkZWNvZGUgUmVmPD4sIGNhdXNpbmcgZHVwbGljYXRlIGNvZGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VC
dWZmZXIuaAppbmRleCBiZjY4ZDFhZDYxOGQzMWQ0YTIxMTY4Yjk3MGRmZWQxMDdlMmYxMjU4Li45
OWY1NmQwYTE3ZjI5NWIyNzY3MDAyMDQ4ZjUyZmFjOWZkMGVhYmE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVySW1h
Z2UuaCIKICNpbmNsdWRlICJGaWx0ZXJSZXN1bHRzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgogCkBAIC0xNjksMTcgKzE3MCwyOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3Jj
UmVjdDsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7CisK
ICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7Ci0g
ICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5k
cmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgICAg
ICBiYWNrZW5kLT5wcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOworCisgICAg
ICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0g
JmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisg
ICAgICAgICAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgYmFja2Vu
ZFNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworCisgICAgICAgICAg
ICBiYWNrZW5kLT5maW5hbGl6ZURyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgICAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVz
b2x1dGlvblNjYWxlKCkpOworCiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAg
ICAgICBiYWNrZW5kLT5wcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOworCisg
ICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNv
bnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAg
ICAgICAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMywxMyArMjE2LDE5IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICAgICAgQVNTRVJUKCZkZXN0Q29udGV4
dCAhPSAmY29udGV4dCgpKTsKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7Ci0gICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAg
ICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CisgICAgICAgICAgICBiYWNrZW5kLT5wcmVwYXJlVG9EcmF3SW50b0Nv
bnRleHQoZGVzdENvbnRleHQpOworCisgICAgICAgICAgICBhdXRvIGJhY2tlbmRTaXplID0gYmFj
a2VuZC0+YmFja2VuZFNpemUoKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gc2lua0lu
dG9OYXRpdmVJbWFnZSgpKQorICAgICAgICAgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZvaWQgY2xpcFRvTWFzayhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAppbmRleCBjNjhkMzE4ZDNmMzllN2M0NmE0NTMyMGI4ODhl
YzFiYWRjMTQ0ODhhLi5kMGUzMTM0MjAwYjYxYmY5OTc5ZjY2NTUwMzAwMjg4ZjNiZjZiOGIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAKQEAgLTY1LDExICs2NSw2IEBAIFJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGRyYXcoZGVzdGluYXRpb25Db250ZXh0LCBkZXN0
aW5hdGlvblJlY3QsIHNvdXJjZVJlY3QsIG9wdGlvbnMpOwotfQotCiB2b2lkIEltYWdlQnVmZmVy
QmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCiB7CiAgICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGNvbG9yU3BhY2UoKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAppbmRleCBjZjcxNWIwYTBj
ZDFiNTE1NzA2MTgyZWYzYjZlNmEwNTM4NDY4MzUyLi4yNWNhZjBmYTQ3MjdjZGVmM2FhYzNlYjE5
NTQ1ZDY3Y2JiYTg2YTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTA4LDE1ICsxMDgsMTMgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgeyByZXR1cm4geyB9
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZURyYXdJbnRvQ29udGV4dChH
cmFwaGljc0NvbnRleHQmKSB7IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJl
ZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAw
OwotCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFn
ZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9NYXNr
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAKaW5kZXggM2I3YTc1ZGM3OGFmNzkyYTAwNTlmZmM3MjYzMDcx
ODYyNWI5YjJkZS4uZDhlNjUxMDQ4YzZjMzRjNjAzM2I2YTBkNmQ5OTJiNjc0YWE1NTE5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtNTEsMzcgKzUxLDYgQEAgUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yLAogICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlO
YXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghZGVzdENvbnRleHQuaGFzUGxhdGZvcm1Db250
ZXh0KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBubyBwbGF0Zm9ybUNvbnRleHQsIHdlJ3Jl
IHVzaW5nIHRocmVhZGVkIHJlbmRlcmluZywgYW5kIGFsbCB0aGUgb3BlcmF0aW9ucyBtdXN0IGJl
IGRvbmUKLSAgICAgICAgLy8gdGhyb3VnaCB0aGUgR3JhcGhpY3NDb250ZXh0LgotICAgICAgICBh
dXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJh
Y2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgZGVzdENvbnRleHQu
ZHJhd0ltYWdlKCppbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVy
cG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0LCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRl
ID0gZGVzdENvbnRleHQuc3RhdGUoKTsKLQotICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZHJhd1BsYXRmb3JtSW1hZ2UoKmRlc3RDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEoKSwg
V2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWRlc3RDb250ZXh0Lmhh
c1BsYXRmb3JtQ29udGV4dCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcGxhdGZvcm1D
b250ZXh0LCB3ZSdyZSB1c2luZyB0aHJlYWRlZCByZW5kZXJpbmcsIGFuZCBhbGwgdGhlIG9wZXJh
dGlvbnMgbXVzdCBiZSBkb25lCi0gICAgICAgIC8vIHRocm91Z2ggdGhlIEdyYXBoaWNzQ29udGV4
dC4KLSAgICAgICAgYXV0byBpbWFnZSA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
Ci0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZk
ZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgbG9naWNhbFNpemUo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsK
LX0KLQogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y2xpcFRvTWFzayhHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGlm
IChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCmluZGV4IDI0YjNjNGRjNTZmY2U3MTE2YmI4NDM5
MWFiMzEwMzYzOGEzNTYyZjMuLjZmODYyN2U0ZjBkYjQwMzE4MmVhNGZlZjFjZWEwY2ZmOTIyMDJi
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMzksOSArMzksNiBAQCBj
bGFzcyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQg
ewogcHVibGljOgogICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQogICAgIHZvaWQgY2xpcFRvTWFzayhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCmluZGV4IDFhYzFiYTNlNDZmZjU0
OTZjOGQ2YjA3MjUwZjE2YTkwZTkwYzZkMWMuLmZiOGEwZGE4MmU3Nzg1MjIyZDlmOWE2Zjg3YzFi
NzQwOGI3MzJmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAgLTEzMSwyOCArMTMxLDYg
QEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXMKICAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIGxvZ2ljYWxTaXplKCks
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHByZXBhcmVU
b0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdFNj
YWxlZCA9IHNyY1JlY3Q7Ci0gICAgc3JjUmVjdFNjYWxlZC5zY2FsZShyZXNvbHV0aW9uU2NhbGUo
KSk7Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQg
PT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkp
Ci0gICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXpl
KCksIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7
Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgaWYgKGF1dG8gaW1hZ2Ug
PSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3Jl
IDogRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQogdm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogewogICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwpAQCAtMjQ4LDEwICsyMjYsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8
VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlcj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0
ZUZsdXNoZQogICAgIHJldHVybiBtYWtlVW5pcXVlPFRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNo
ZXJDRz4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYpCi17
Ci19Ci0KIGJvb2wgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6Om9yaWdpbkF0Qm90dG9tTGVmdENvcm5l
cigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzT3JpZ2luQXRCb3R0b21MZWZ0Q29ybmVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmgKaW5kZXggMTJiZTQyOWNmNjBlNjk0MmExOWFhZmRkYWU3NzIwYWU4YTU5
MmNiNC4uYzg3MjQxOTZmZmMwMjY0OTNlZmJhZTljNmQ1ZmVlNmIwOWM4MTU4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oCkBAIC00MSwxMiArNDEsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc09yaWdpbkF0Qm90dG9tTGVmdENvcm5lciA9IHRydWU7CiAKIHByb3RlY3Rl
ZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKwog
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZTsKICAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICAKICAgICB2b2lkIGNsaXBUb01hc2soR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3ZlcnJpZGU7CiAKICAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwpAQCAt
NTYsMTIgKzU1LDggQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBvcmlnaW5BdEJvdHRvbUxlZnRD
b3JuZXIoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6
SW1hZ2VCdWZmZXJCYWNrZW5kOwotCiAgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgdmly
dHVhbCB2b2lkIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmKTsKLQog
ICAgIHZpcnR1YWwgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlDR0ltYWdlRm9yRW5jb2Rpbmco
Q0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA1MzQ0ODJlMzM4
YmE4NjcwYzM1ODZlYjM1YmM0ZjYzZmQzMjI5YzhiLi4yYjBjMWZlYTFhZjc5M2JmYjA5M2M1MjFi
ZmRjYTY1MjJiNDg1NGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
QEAgLTE2Myw2ICsxNjMsMTQgQEAgdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnBy
ZXBhcmVUb0RyYXdJbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGRlc3QKICAgICAgICAgaW52
YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCk7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpmaW5hbGl6ZURyYXdJbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0KQoreworICAgIC8vIEFjY2VsZXJhdGVkIHRvL2Zyb20gdW5hY2NlbGVyYXRlZCBpbWFn
ZSBidWZmZXJzIG5lZWQgY29tcGxleCBjYWNoaW5nLiBXZSB0cnVzdCB0aGF0CisgICAgLy8gdGhp
cyBpcyBhIG9uZS1vZmYgZHJhdywgYW5kIGFzIHN1Y2ggd2UgY2xlYXIgdGhlIGNhY2hlcyBvZiB0
aGUgc291cmNlIGltYWdlIGFmdGVyIGVhY2ggZHJhdy4KKyAgICBpZiAoZGVzdENvbnRleHQucmVu
ZGVyaW5nTW9kZSgpICE9IGNvbnRleHQoKS5yZW5kZXJpbmdNb2RlKCkpCisgICAgICAgIGludmFs
aWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpOworfQorCiB2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6aW52YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICAvLyBG
b3JjZSBRdWFydHpDb3JlIHRvIGludmFsaWRhdGUgaXRzIGNhY2hlZCBDR0ltYWdlUmVmIGZvciB0
aGlzIElPU3VyZmFjZS4KQEAgLTE4MywyNiArMTkxLDYgQEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQogICAgIHJl
dHVybiBOYXRpdmVJbWFnZTo6Y3JlYXRlKElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3Zl
KG1fc3VyZmFjZSkpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgIC8vIEFjY2VsZXJhdGVkIHRvL2Zyb20g
dW5hY2NlbGVyYXRlZCBpbWFnZSBidWZmZXJzIG5lZWQgY29tcGxleCBjYWNoaW5nLiBXZSB0cnVz
dCB0aGF0Ci0gICAgLy8gdGhpcyBpcyBhIG9uZS1vZmYgZHJhdywgYW5kIGFzIHN1Y2ggd2UgY2xl
YXIgdGhlIGNhY2hlcyBvZiB0aGUgc291cmNlIGltYWdlIGFmdGVyIGVhY2ggZHJhdy4KLSAgICBp
ZiAoZGVzdENvbnRleHQucmVuZGVyaW5nTW9kZSgpICE9IGNvbnRleHQoKS5yZW5kZXJpbmdNb2Rl
KCkpCi0gICAgICAgIGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpOwotfQotdm9pZCBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBwcmVw
YXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwotCi0gICAgRmxvYXRSZWN0IGFkanVz
dGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRp
b25TY2FsZSgpKTsKLQotICAgIGF1dG8gYmFja2VuZFNpemUgPSB0aGlzLT5iYWNrZW5kU2l6ZSgp
OwotICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgpKQotICAgICAgICBk
ZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIFJldGFpblB0cjxDR0ltYWdlUmVmPiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlDR0ltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJp
bmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAppbmRleCA4MTIzM2Q1ZDZkMDA2ODQx
ODg2NTQzM2E1MjNkZmUzOGU0NTE4YmJjLi4wMjkyNzcwMjU3ZWFlNWM0YWQ2OWYyMDQ0YjU5Yjdl
MGE4NDUyODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtNjIsOSAr
NjIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCiAgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3Jt
YXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZv
aWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpIG92ZXJyaWRlOwogCkBAIC04NSw2ICs4Miw3IEBAIHByb3RlY3RlZDoKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBk
ZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKIAogICAgIHZv
aWQgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25D
b250ZXh0KSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmFsaXplRHJhd0ludG9Db250ZXh0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KSBvdmVycmlkZTsKICAgICB2b2lkIGludmFs
aWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpIGNvbnN0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4gbV9zdXJmYWNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IGVhZTZmNzk1ZWQzZjkyNDY0MmM0ZDg0
OWI5YTk4YTlhNzY5NzU3MjkuLjIwMzE3YzY0ZDBlN2IxYjgwZjYyYzRkMWE3ZWEwM2UyNGRiMTQ1
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29j
b2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJm
YWNlQmFja2VuZC5jcHAKQEAgLTExOCwxNiArMTE4LDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQ
cmUKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNl
QmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFj
ZUJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVy
UmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuaAppbmRleCAyMGQ4YzYwZTExMzU2ZThiMmUwN2Q1ODli
MGQzOTZmMmYyNDEyNDllLi43YTBmZGRkZGVjZDdhZjA2MjU2YWM1YzExMDEwMGM5Y2I1ZmIxNTY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29h
L0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kLmgKQEAgLTYxLDggKzYxLDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXpl
IGJhY2tlbmRTaXplKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUlt
YWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSkgY29uc3QgZmlu
YWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2lu
Z1N0b3JlQ29weSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8
dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBp
eGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1h
dCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgZmluYWw7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCA1ZGE0NDhkM2JkNDllNmYwOGUwNDA4ZGVk
NWQxYzE2NGM4YTBhZjFhLi4xMTcwNDBlYTU5YzdkOGE5ZDUyNWNmMWZlOTU2YmU4MjAxZjg3ODA2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMi0w
NS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BV
IFByb2Nlc3NdIERyYXdpbmcgdGhlIFBERiBzbmFwc2hvdCBzaG91bGQgdGFrZSBwbGFjZSBpbiBX
ZWJQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNDAzNjgKKyAgICAgICAgcmRhcjovLzkxNjYwMTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1hZ2UgaW50ZXJwb2xhdGlvbiBpcyBzbGlnaHRs
eSBkaWZmZXJlbnQgb24gbWFjT1MtQXBwbGVTaWxpY29uLgorCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMvaGlkcGkvc2ltcGxlLWJnLWNvbG9yLmh0bWw6
CisKIDIwMjItMDUtMTMgIFppcmFuIFN1biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBp
bnB1dC5zaG93UGlja2VyKCkgc2hvdWxkIHRocm93IHdoZW4gaW5wdXQgaXMgcmVhZG9ubHkvZGlz
YWJsZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2Nzcy1iYWNrZ3JvdW5kcy9oaWRwaS9zaW1wbGUtYmctY29sb3IuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNrZ3Jv
dW5kcy9oaWRwaS9zaW1wbGUtYmctY29sb3IuaHRtbAppbmRleCAwN2JlYTQ0ZDIxOTY0YjgzMmNk
OWU0YjRmMzIwOThlYzQxYTJjMjA2Li45NDIxZmI3NmU5MDRmZWViZTcyM2MwOWU2MDllNjZiMGU3
NzQ4N2JlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMvaGlkcGkvc2ltcGxlLWJnLWNvbG9yLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJh
Y2tncm91bmRzL2hpZHBpL3NpbXBsZS1iZy1jb2xvci5odG1sCkBAIC0xLDQgKzEsNSBAQAogPCFE
T0NUWVBFIGh0bWw+Cis8bWV0YSBuYW1lPSJmdXp6eSIgY29udGVudD0ibWF4RGlmZmVyZW5jZT0w
LTQ7IHRvdGFsUGl4ZWxzPTAtMzU4IiAvPgogPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWJhY2tncm91bmRzLTMvI2JhY2tncm91bmQtY29sb3IiPgog
PGxpbmsgcmVsPSJtYXRjaCIgaHJlZj0ic2ltcGxlLWJnLWNvbG9yLXJlZi5odG1sIj4KIDxzdHls
ZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459465</attachid>
            <date>2022-05-16 17:08:45 -0700</date>
            <delta_ts>2022-05-17 23:15:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240368-20220516170845.patch</filename>
            <type>text/plain</type>
            <size>28639</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZjZhNDcxZWM3N2M4ZDBlMDAzYTA5ZTI2ODY3ZGQxOTdhZGNlMmFhLi5j
NTFhNDkxYzdjMTU0MjVkZTI1NzM3ODllYjk3YzgwMzkxMGFjY2MwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMjItMDUtMTYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBEcmF3aW5nIHRoZSBQREYgc25hcHNob3Qgc2hv
dWxkIHRha2UgcGxhY2UgaW4gV2ViUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwMzY4CisgICAgICAgIHJkYXI6Ly85MTY2MDE1OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBJbWFnZUJ1
ZmZlckJhY2tlbmRzIHNob3VsZCBhY3QgbGlrZSBhIGRyYXdpbmcgc3VyZmFjZSBvbmx5LiBJdCBo
YXMKKyAgICAgICAgYSBHcmFwaGljc0NvbnRleHQuIEl0IGNhbiBnZXQgYW5kIHNldCBwaXhlbHMu
IEFuZCBpdCBjYW4gZ2V0IGEgTmF0aXZlSW1hZ2UKKyAgICAgICAgb3V0IG9mIHRoZSBwaXhlbHMu
IEJ1dCBpdCBzaG91bGQgbmV2ZXIgZHJhdyBpdHNlbGYgdG8gYSBHcmFwaGljc0NvbnRleHQuCisg
ICAgICAgIFRoZSBJbWFnZUJ1ZmZlciBjYW4gYWN0IGxpa2UgYW4gaW1hZ2UuIEl0IGNhbiBkcmF3
IGl0c2VsZiBhcyBhbiBpbWFnZSBvcgorICAgICAgICBhcyBhIHBhdHRlcm4gaW50byBhIEdyYXBo
aWNzQ29udGV4dC4KKworICAgICAgICBTbyBkcmF3KCksIGRyYXdQYXR0ZXJuKCkgYW5kIGRyYXdD
b25zdW1pbmcoKSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kIHN1cGVyIGNsYXNzZXMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVuaWZp
ZWQKKyAgICAgICAgZm9yIGFsbCBwbGF0Zm9ybXMgYW5kIG1vdmVkIHRvIENvbmNyZXRlSW1hZ2VC
dWZmZXIuCisKKyAgICAgICAgQnkgZG9pbmcgdGhhdCwgYSBjYW52YXMgY2FuIGJlIGRyYXduIHRv
IHRoZSBQREYgY29udGV4dCBpbiBXZWJQcm9jZXNzIAorICAgICAgICBldmVuIGlmIHRoZSBHUFVQ
cm9jZXNzIGZvciBET00gcmVuZGVyaW5nIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZpbmFsaXplRHJhd0ludG9Db250ZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmRyYXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZmluYWxpemVEcmF3SW50
b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpkcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6CisKIDIwMjItMDUtMTYgIExv
w69jIExlIFBhZ2UgIDxsbGVwYWdlQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihy
Mjk0MTA0KTogW0dTdHJlYW1lcl1bVmlkZW9DYXB0dXJlXSBXZWJjYW0gcmF3IHN0cmVhbXMgbWF5
IGhhbmcgdXAgdGhlIHZpZGVvIGNhcHR1cmUgcGlwZWxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDI5NDYyYTQw
YTQ5YjJiOWNjNTkwNWZjMmQzZWIxMTVjY2U0ZmY2ZC4uMjNlMGVmY2VlMWZkZDg4NTRkZmQxYTIx
MjM3OWU5YThiZDBiZGQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMi0wNS0xNiAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nl
c3NdIERyYXdpbmcgdGhlIFBERiBzbmFwc2hvdCBzaG91bGQgdGFrZSBwbGFjZSBpbiBXZWJQcm9j
ZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAz
NjgKKyAgICAgICAgcmRhcjovLzkxNjYwMTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kOjpkcmF3UGF0dGVy
bik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1
cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNl
QmFja2VuZC5oOgorCiAyMDIyLTA1LTE2ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxlLmNvbT4K
IAogICAgICAgICBSRUdSRVNTSU9OICgyNTA1MDFAbWFpbik6IFsgTWFjIF0gMiBUZXN0V2ViS2l0
QVBJLldlYkF1dGhlbnRpY2F0aW9uUGFuZWwuR2V0QXNzZXJ0aW9uTEEgdGVzdHMgZmFpbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFn
ZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFn
ZUJ1ZmZlci5oCmluZGV4IGJmNjhkMWFkNjE4ZDMxZDRhMjExNjhiOTcwZGZlZDEwN2UyZjEyNTgu
Ljk5ZjU2ZDBhMTdmMjk1YjI3NjcwMDIwNDhmNTJmYWM5ZmQwZWFiYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJJ
bWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlclJlc3VsdHMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTE2OSwxNyArMTcwLDI5IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBz
cmNSZWN0OworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsK
KwogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsK
LSAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQt
PmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAg
ICAgIGJhY2tlbmQtPnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7CisKKyAg
ICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBiYWNr
ZW5kU2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7CisKKyAgICAgICAg
ICAgIGJhY2tlbmQtPmZpbmFsaXplRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShy
ZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kQ3JlYXRlZCgpKSB7Ci0gICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0g
ICAgICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7CisK
KyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAm
Y29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAg
ICAgICAgICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAzLDEzICsyMTYsMTkgQEAgcHJvdGVjdGVkOgog
CiAgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAgYWRqdXN0ZWRTcmNS
ZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgICAgICBBU1NFUlQoJmRlc3RDb250
ZXh0ICE9ICZjb250ZXh0KCkpOwogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmRDcmVhdGVkKCkpIHsKLSAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAg
ICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnByZXBhcmVUb0RyYXdJbnRv
Q29udGV4dChkZXN0Q29udGV4dCk7CisKKyAgICAgICAgICAgIGF1dG8gYmFja2VuZFNpemUgPSBi
YWNrZW5kLT5iYWNrZW5kU2l6ZSgpOworICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5r
SW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgICAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2
ZUltYWdlKCppbWFnZSwgYmFja2VuZFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9w
dGlvbnMpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBjbGlwVG9NYXNrKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRD
cmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCmluZGV4IGM2OGQzMThkM2YzOWU3YzQ2YTQ1MzIwYjg4
OGVjMWJhZGMxNDQ4OGEuLmQwZTMxMzQyMDBiNjFiZjk5NzlmNjY1NTAzMDAyODhmM2JmNmI4YjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApAQCAtNjUsMTEgKzY1LDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2wKICAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJl
c29sdXRpb24pOwogfQogCi12b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRl
c3RpbmF0aW9uUmVjdCwgc291cmNlUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCmluZGV4IGNmNzE1YjBh
MGNkMWI1MTU3MDYxODJlZjNiNmU2YTA1Mzg0NjgzNTIuLjI1Y2FmMGZhNDcyN2NkZWYzYWFjM2Vi
MTk1NDVkNjdjYmJhODZhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0xMDgsMTUgKzEwOCwxMyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCB7IHJldHVybiB7
IH07IH0KIAorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplRHJhd0ludG9Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCYpIHsgfQogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
UmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdCA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gc2lu
a0ludG9OYXRpdmVJbWFnZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbik7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsaXBUb01h
c2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAppbmRleCAzYjdhNzVkYzc4YWY3OTJhMDA1OWZmYzcyNjMw
NzE4NjI1YjliMmRlLi5kOGU2NTEwNDhjNmMzNGM2MDMzYjZhMGQ2ZDk5MmI2NzRhYTU1MTk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC01MSwzNyArNTEsNiBAQCBS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IsCiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFkZXN0Q29udGV4dC5oYXNQbGF0Zm9ybUNv
bnRleHQoKSkgewotICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHBsYXRmb3JtQ29udGV4dCwgd2Un
cmUgdXNpbmcgdGhyZWFkZWQgcmVuZGVyaW5nLCBhbmQgYWxsIHRoZSBvcGVyYXRpb25zIG11c3Qg
YmUgZG9uZQotICAgICAgICAvLyB0aHJvdWdoIHRoZSBHcmFwaGljc0NvbnRleHQuCi0gICAgICAg
IGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5
QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBkZXN0Q29udGV4
dC5kcmF3SW1hZ2UoKmltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50
ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOwotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDog
RG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRl
c3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSgp
LCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghZGVzdENvbnRleHQu
aGFzUGxhdGZvcm1Db250ZXh0KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBubyBwbGF0Zm9y
bUNvbnRleHQsIHdlJ3JlIHVzaW5nIHRocmVhZGVkIHJlbmRlcmluZywgYW5kIGFsbCB0aGUgb3Bl
cmF0aW9ucyBtdXN0IGJlIGRvbmUKLSAgICAgICAgLy8gdGhyb3VnaCB0aGUgR3JhcGhpY3NDb250
ZXh0LgotICAgICAgICBhdXRvIGltYWdlID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLSAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
JmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlC
YWNraW5nU3RvcmUpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBsb2dpY2FsU2l6
ZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMp
OwotfQotCiB2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAg
aWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKaW5kZXggMjRiM2M0ZGM1NmZjZTcxMTZiYjg0
MzkxYWIzMTAzNjM4YTM1NjJmMy4uNmY4NjI3ZTRmMGRiNDAzMTgyZWE0ZmVmMWNlYTBjZmY5MjIw
MmI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0zOSw5ICszOSw2IEBA
IGNsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2Vu
ZCB7CiBwdWJsaWM6CiAgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBjbGlwVG9NYXNr
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKaW5kZXggMWFjMWJhM2U0NmZm
NTQ5NmM4ZDZiMDcyNTBmMTZhOTBlOTBjNmQxYy4uZmI4YTBkYTgyZTc3ODUyMjJkOWY5YTZmODdj
MWI3NDA4YjczMmYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMTMxLDI4ICsxMzEs
NiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlcwogICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbG9naWNhbFNpemUo
KSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwog
fQogCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgcHJlcGFy
ZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0
U2NhbGVkID0gc3JjUmVjdDsKLSAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKHJlc29sdXRpb25TY2Fs
ZSgpKTsKLQotICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKLSAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgYmFja2VuZFNp
emUoKSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0
KTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0byBpbWFn
ZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3Rv
cmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCiB2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCiB7CiAgICAgYXV0byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7CkBAIC0yNDgsMTAgKzIyNiw2IEBAIHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWRTYWZlSW1hZ2VCdWZmZXJGbHVzaGVyPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3Jl
YXRlRmx1c2hlCiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1
c2hlckNHPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JikK
LXsKLX0KLQogYm9vbCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6b3JpZ2luQXRCb3R0b21MZWZ0Q29y
bmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNPcmlnaW5BdEJvdHRvbUxlZnRDb3JuZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaAppbmRleCAxMmJlNDI5Y2Y2MGU2OTQyYTE5YWFmZGRhZTc3MjBhZThh
NTkyY2I0Li5jODcyNDE5NmZmYzAyNjQ5M2VmYmFlOWM2ZDVmZWU2YjA5YzgxNTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmgKQEAgLTQxLDEyICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzT3JpZ2luQXRCb3R0b21MZWZ0Q29ybmVyID0gdHJ1ZTsKIAogcHJvdGVj
dGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOwor
CiAgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNv
bnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJl
c29sdXRpb24pIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIAogICAgIHZvaWQgY2xpcFRvTWFzayhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVycmlkZTsKIAog
ICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CkBA
IC01NiwxMiArNTUsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG9yaWdpbkF0Qm90dG9tTGVm
dENvcm5lcigpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ7Ci0KICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFj
ZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOwot
CiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGlu
ZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDVlMzgwMmVh
YTFhNDhmYTc5MTFhNzY3MjlkOGQ1YjNhNDhkZTc5NGIuLmIxMWNmZDQ1YTkxODM3ZTY3ZTU0MGVj
MGY1ZGE1YTAwN2VhYjA0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cApAQCAtMTYzLDYgKzE2MywxNCBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgZGVzdAogICAgICAgICBp
bnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmZpbmFsaXplRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQpCit7CisgICAgLy8gQWNjZWxlcmF0ZWQgdG8vZnJvbSB1bmFjY2VsZXJhdGVkIGlt
YWdlIGJ1ZmZlcnMgbmVlZCBjb21wbGV4IGNhY2hpbmcuIFdlIHRydXN0IHRoYXQKKyAgICAvLyB0
aGlzIGlzIGEgb25lLW9mZiBkcmF3LCBhbmQgYXMgc3VjaCB3ZSBjbGVhciB0aGUgY2FjaGVzIG9m
IHRoZSBzb3VyY2UgaW1hZ2UgYWZ0ZXIgZWFjaCBkcmF3LgorICAgIGlmIChkZXN0Q29udGV4dC5y
ZW5kZXJpbmdNb2RlKCkgIT0gY29udGV4dCgpLnJlbmRlcmluZ01vZGUoKSkKKyAgICAgICAgaW52
YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjppbnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKSBjb25zdAogewogICAgIC8v
IEZvcmNlIFF1YXJ0ekNvcmUgdG8gaW52YWxpZGF0ZSBpdHMgY2FjaGVkIENHSW1hZ2VSZWYgZm9y
IHRoaXMgSU9TdXJmYWNlLgpAQCAtMTgzLDI2ICsxOTEsNiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCiAgICAg
cmV0dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUoSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1v
dmUobV9zdXJmYWNlKSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgLy8gQWNjZWxlcmF0ZWQgdG8vZnJv
bSB1bmFjY2VsZXJhdGVkIGltYWdlIGJ1ZmZlcnMgbmVlZCBjb21wbGV4IGNhY2hpbmcuIFdlIHRy
dXN0IHRoYXQKLSAgICAvLyB0aGlzIGlzIGEgb25lLW9mZiBkcmF3LCBhbmQgYXMgc3VjaCB3ZSBj
bGVhciB0aGUgY2FjaGVzIG9mIHRoZSBzb3VyY2UgaW1hZ2UgYWZ0ZXIgZWFjaCBkcmF3LgotICAg
IGlmIChkZXN0Q29udGV4dC5yZW5kZXJpbmdNb2RlKCkgIT0gY29udGV4dCgpLnJlbmRlcmluZ01v
ZGUoKSkKLSAgICAgICAgaW52YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCk7Ci19Ci12b2lkIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHBy
ZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7Ci0KLSAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1
dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBiYWNrZW5kU2l6ZSA9IHRoaXMtPmJhY2tlbmRTaXpl
KCk7Ci0gICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCi0gICAgICAg
IGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXplLCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogUmV0YWluUHRyPENHSW1hZ2VSZWY+
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0
cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKIHsKICAgICBpZiAobV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVy
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCmluZGV4IDkxYmIxOTBmMDM2YjYx
ZjYzZTBjOGNhZWQ2YWU3MmU3N2QzNzBkYjcuLjdiMjY4MDIwMDEwODMyZmUyNWZkNDE4MmZhMDUw
YTZkZTgyNGJkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC02Niw5
ICs2Niw2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KICAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZv
cm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKQEAgLTg5LDYgKzg2LDcgQEAgcHJvdGVjdGVkOgogICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5Q0dJbWFnZUZvckVuY29kaW5nKENGU3RyaW5nUmVm
IGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOwogCiAgICAg
dm9pZCBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlv
bkNvbnRleHQpIG92ZXJyaWRlOworICAgIHZvaWQgZmluYWxpemVEcmF3SW50b0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpIG92ZXJyaWRlOwogICAgIHZvaWQgaW52
YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCkgY29uc3Q7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPiBtX3N1cmZhY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDU2
M2UwYmYyNDY0OGYyMWIxZjc2N2YyNjNmYzZjM2U2MzViYzY0NTYuLjMyYzNjYTMwOWM3NTc5MWU1
ZTViZWU1NWU1MzE3NTY3ZjZmNjFhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBA
IC01MCw2ICs1MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgogY2xhc3MgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVy
PEJhY2tlbmRUeXBlPiB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBXZWJD
b3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2luZyBCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdl
QnVmZmVyOjpjYW5NYXBCYWNraW5nU3RvcmU7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6Om1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIHVzaW5nIEJhc2VDb25j
cmV0ZUltYWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGU7CiAKQEAgLTE3NCwxMCArMTc1LDE1IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5nZXREYXRhRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHksIG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6TmF0aXZlSW1h
Z2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6
Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgZmluYWwKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmF0aXZl
SW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IGZpbmFsCiAgICAgewogICAg
ICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgLy8gQ29weSB0aGUgaW1hZ2UgZnJvbSB0aGUg
YmFja2VuZCBpZiBpdCBpcyBhY2Nlc3NpYmxlLgorICAgICAgICBpZiAoY2FuTWFwQmFja2luZ1N0
b3JlKCkpCisgICAgICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvcHlO
YXRpdmVJbWFnZShXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKTsKKwogICAgICAgICBjb25zdF9j
YXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hEcmF3aW5nQ29udGV4dCgp
OwogICAgICAgICBhdXRvIGJpdG1hcCA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5n
ZXRTaGFyZWFibGVCaXRtYXAobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgaWYgKCFiaXRtYXApCkBAIC0xODUs
MTAgKzE5MSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOYXRpdmVJ
bWFnZTo6Y3JlYXRlKGJpdG1hcC0+Y3JlYXRlUGxhdGZvcm1JbWFnZShXZWJDb3JlOjpEb250Q29w
eUJhY2tpbmdTdG9yZSkpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gY29w
eUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0
b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gV2Vi
Q29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgZmluYWwKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkpCiAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIC8v
IENvcHkgdGhlIGltYWdlIGZyb20gdGhlIGJhY2tlbmQgaWYgaXQgaXMgYWNjZXNzaWJsZS4KKyAg
ICAgICAgaWYgKGNhbk1hcEJhY2tpbmdTdG9yZSgpKQorICAgICAgICAgICAgcmV0dXJuIEJhc2VD
b25jcmV0ZUltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKKwogICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBhdXRvIGJp
dG1hcCA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRTaGFyZWFibGVCaXRtYXAo
bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHByZXNlcnZlUmVzb2x1dGlvbik7CiAgICAg
ICAgIGlmICghYml0bWFwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJl
bW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IGVhZTZmNzk1ZWQzZjkyNDY0MmM0ZDg0OWI5
YTk4YTlhNzY5NzU3MjkuLjIwMzE3YzY0ZDBlN2IxYjgwZjYyYzRkMWE3ZWEwM2UyNGRiMTQ1ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNl
QmFja2VuZC5jcHAKQEAgLTExOCwxNiArMTE4LDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
clJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmUK
ICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFj
a2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVyUmVt
b3RlSU9TdXJmYWNlQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJl
bW90ZUlPU3VyZmFjZUJhY2tlbmQuaAppbmRleCAyMGQ4YzYwZTExMzU2ZThiMmUwN2Q1ODliMGQz
OTZmMmYyNDEyNDllLi43YTBmZGRkZGVjZDdhZjA2MjU2YWM1YzExMDEwMGM5Y2I1ZmIxNTY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNr
ZW5kLmgKQEAgLTYxLDggKzYxLDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIGJh
Y2tlbmRTaXplKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdl
PiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSkgY29uc3QgZmluYWw7
CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0
b3JlQ29weSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKLSAgICB2
b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRl
cm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdl
YkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
V2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYg
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdl
QnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVk
SU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNzQxYmUzNmJlNmY1ZmEyNWVmZWQ3ZmVmYTkxMjhk
MmE0NzhkNGY0MS4uY2Q0OWQ1ZWFjMTBiOTdiNjhkODBmMTE2YjQwOTBjNzZhYWQxNjhiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVN
YXBwZWRJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtODMsNiArODMsMTQgQEAgdm9pZCBJbWFnZUJ1
ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQ6OnNldE93bmVyc2hpcElkZW50aXR5
KGNvbnN0IFdlYkMKICAgICBtX3N1cmZhY2UtPnNldE93bmVyc2hpcElkZW50aXR5KHJlc291cmNl
T3duZXIpOwogfQogCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlTWFw
cGVkSU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2Fj
aGVkIGltYWdlIGJlZm9yZSBnZXR0aW5nIGEgbmV3IG9uZSBiZWNhdXNlIEdQVVByb2Nlc3MgbWln
aHQKKyAgICAvLyBoYXZlIGRyYXduIHNvbWV0aGluZyB0byB0aGUgSU9TdXJmYWNlIHNpbmNlIGxh
c3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCisgICAgaW52YWxpZGF0ZUNhY2hlZE5h
dGl2ZUltYWdlKCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VC
dWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9T
dXJmYWNlQmFja2VuZC5oCmluZGV4IGIxNDQyNmU3ZjQyZDdkYTUwNWJmZmFmYWYxNGExNzNhZjIx
MGQ2ZDcuLmFkZjRjOWNjMzE0YmZjNDBkM2FjOTc4MGM4OTJhYWY3MDQxMjgzZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElP
U3VyZmFjZUJhY2tlbmQuaApAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IC8vIEltYWdlQnVmZmVyQmFja2VuZFNoYXJpbmcKICAgICBJbWFnZUJ1ZmZlckJhY2tlbmRTaGFy
aW5nKiB0b0JhY2tlbmRTaGFyaW5nKCkgZmluYWwgeyByZXR1cm4gdGhpczsgfQorCisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2lu
Z1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IGZpbmFsOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459527</attachid>
            <date>2022-05-17 23:15:50 -0700</date>
            <delta_ts>2022-05-17 23:44:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240368-20220517231549.patch</filename>
            <type>text/plain</type>
            <size>29496</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZGU0ZTQzN2FlYTVhNjRlZjZmZWY5ZTU1M2E4NzY4ZDU1ZWIzNjAxLi5i
YjM3MmViMTg3ZjVmMjNkMmRjMGZmMzRiMzY4Y2IxZGU0ODBkZTA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDQgQEAKKzIwMjItMDUtMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBEcmF3aW5nIHRoZSBQREYgc25hcHNob3Qgc2hv
dWxkIHRha2UgcGxhY2UgaW4gV2ViUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwMzY4CisgICAgICAgIHJkYXI6Ly85MTY2MDE1OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBJbWFnZUJ1
ZmZlckJhY2tlbmRzIHNob3VsZCBhY3QgbGlrZSBhIGRyYXdpbmcgc3VyZmFjZSBvbmx5LiBJdCBo
YXMKKyAgICAgICAgYSBHcmFwaGljc0NvbnRleHQuIEl0IGNhbiBnZXQgYW5kIHNldCBwaXhlbHMu
IEFuZCBpdCBjYW4gZ2V0IGEgTmF0aXZlSW1hZ2UKKyAgICAgICAgb3V0IG9mIHRoZSBwaXhlbHMu
IEJ1dCBpdCBzaG91bGQgbmV2ZXIgZHJhdyBpdHNlbGYgdG8gYSBHcmFwaGljc0NvbnRleHQuCisg
ICAgICAgIFRoZSBJbWFnZUJ1ZmZlciBjYW4gYWN0IGxpa2UgYW4gaW1hZ2UuIEl0IGNhbiBkcmF3
IGl0c2VsZiBhcyBhbiBpbWFnZSBvcgorICAgICAgICBhcyBhIHBhdHRlcm4gaW50byBhIEdyYXBo
aWNzQ29udGV4dC4KKworICAgICAgICBTbyBkcmF3KCksIGRyYXdQYXR0ZXJuKCkgYW5kIGRyYXdD
b25zdW1pbmcoKSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kIHN1cGVyIGNsYXNzZXMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVuaWZp
ZWQKKyAgICAgICAgZm9yIGFsbCBwbGF0Zm9ybXMgYW5kIG1vdmVkIHRvIENvbmNyZXRlSW1hZ2VC
dWZmZXIuCisKKyAgICAgICAgQnkgZG9pbmcgdGhhdCwgYSBjYW52YXMgY2FuIGJlIGRyYXduIHRv
IHRoZSBQREYgY29udGV4dCBpbiBXZWJQcm9jZXNzIAorICAgICAgICBldmVuIGlmIHRoZSBHUFVQ
cm9jZXNzIGZvciBET00gcmVuZGVyaW5nIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6cHJlcGFyZVRv
RHJhd0ludG9Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpkcmF3Q29uc3VtaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UuaDoKKwogMjAyMi0wNS0xNyAgS2ltbW8gS2lubnVuZW4gIDxr
a2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZCBjb250ZXh0IHNldHVwIGFuZCB0ZWFyZG93biBmdW5jdGlvbnMgYXJlIHJlZHVuZGFudCBhbmQg
ZXJyb3ItcHJvbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggN2JjNzEyOTI3MDFhYmUxZDQ5OTllMzliNmY1YTMyOGM1
Mjk2NmVkNi4uZDNjNzE0NjlmMjYzZWE4OTllNzBlMzBhMmNjZTQ0NTA5MTQxNmQ5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMi0wNS0xNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlk
QGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIERyYXdpbmcgdGhlIFBERiBzbmFw
c2hvdCBzaG91bGQgdGFrZSBwbGFjZSBpbiBXZWJQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAzNjgKKyAgICAgICAgcmRhcjovLzkxNjYw
MTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZh
Y2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZh
Y2VCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJS
ZW1vdGVJT1N1cmZhY2VCYWNrZW5kOjpkcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VC
dWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZl
SW1hZ2UgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIyLTA1LTE3
ICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBVc2UgbmV3
IGxpYndwZSBBUEkgdG8gc3luY2hyb25pc2UgZGlzcGxheSByZWZyZXNoZXMgZnVsbHkgdG8gdGhl
IHNjcmVlbiByZWZyZXNoIHJhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCA1OWJjNDFmMmNjOWRjOTEyYjVm
ZWFhOWZkOWQ2YzYzZWM3MTU2ZTYyLi5lNjA1ZTE3MDI0ZWJjMzkwZjU4YmZlOTk2MjgzN2ExMGY1
YTM5OTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25j
cmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJSZXN1bHRzLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCkBAIC0xNjksMTcgKzE3MCwyMyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0
UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2Fs
ZShyZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kQ3JlYXRlZCgpKSB7Ci0gICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
Ci0gICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUlt
YWdlKCppbWFnZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlv
bnMpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAgYWRqdXN0ZWRTcmNS
ZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKLSAgICAgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICAgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDMsMTMgKzIxMCwxNyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAg
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgICAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgICAgIEFTU0VSVCgmZGVz
dENvbnRleHQgIT0gJmNvbnRleHQoKSk7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OwotICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICAgICAgYXV0byBiYWNrZW5kU2l6ZSA9IGJh
Y2tlbmQtPmJhY2tlbmRTaXplKCk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0
aW9ucyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNsaXBUb01hc2soR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENy
ZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKaW5kZXggZWQ3MWI1YzY4MWNhYWJlODZjYTkyNWRmZDNl
ODc4NTE0YWYxNmRmZC4uODZlMjRhNjZkODM5YTgxYTY3MDUzODU4ZGY3ODhlMzk0ZTI2YzFlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwCkBAIC02NSwxMSArNjUsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bAogICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVz
b2x1dGlvbik7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBkcmF3KGRlc3RpbmF0aW9uQ29udGV4dCwgZGVz
dGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCBvcHRpb25zKTsKLX0KLQogdm9pZCBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogewogICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKaW5kZXggZDY5ZmNhY2Zj
MGIzMWQyYmIxNmZlZjRmM2NhZmU2ODVjNTQ0M2QyYy4uMTFlZTVjMTY1OTI0MDBkZjUxZmEwNDdk
ZDkwOTU1MzA0MDExY2Q3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTExMSwxMiArMTExLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0KICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gc2lua0ludG9OYXRpdmVJbWFnZSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdD
b25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JikgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cAppbmRleCAzYjdhNzVkYzc4YWY3OTJhMDA1OWZmYzcyNjMwNzE4NjI1YjliMmRlLi5kOGU2NTEw
NDhjNmMzNGM2MDMzYjZhMGQ2ZDk5MmI2NzRhYTU1MTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCkBAIC01MSwzNyArNTEsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Is
CiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcikpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgaWYgKCFkZXN0Q29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSkgewotICAgICAgICAv
LyBJZiB0aGVyZSdzIG5vIHBsYXRmb3JtQ29udGV4dCwgd2UncmUgdXNpbmcgdGhyZWFkZWQgcmVu
ZGVyaW5nLCBhbmQgYWxsIHRoZSBvcGVyYXRpb25zIG11c3QgYmUgZG9uZQotICAgICAgICAvLyB0
aHJvdWdoIHRoZSBHcmFwaGljc0NvbnRleHQuCi0gICAgICAgIGF1dG8gaW1hZ2UgPSBjb3B5SW1h
Z2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENv
cHlCYWNraW5nU3RvcmUpOwotICAgICAgICBkZXN0Q29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JU
aGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0g
ICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0
ZSgpOwotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9w
dGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSgpLCBXZWJDb3JlOjpDYWlybzo6U2hh
ZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGlmICghZGVzdENvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkp
IHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBubyBwbGF0Zm9ybUNvbnRleHQsIHdlJ3JlIHVzaW5n
IHRocmVhZGVkIHJlbmRlcmluZywgYW5kIGFsbCB0aGUgb3BlcmF0aW9ucyBtdXN0IGJlIGRvbmUK
LSAgICAgICAgLy8gdGhyb3VnaCB0aGUgR3JhcGhpY3NDb250ZXh0LgotICAgICAgICBhdXRvIGlt
YWdlID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UtPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBsb2dpY2FsU2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCiB2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmgKaW5kZXggMjRiM2M0ZGM1NmZjZTcxMTZiYjg0MzkxYWIzMTAzNjM4YTM1NjJmMy4u
NmY4NjI3ZTRmMGRiNDAzMTgyZWE0ZmVmMWNlYTBjZmY5MjIwMmI0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0zOSw5ICszOSw2IEBAIGNsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CiBwdWJsaWM6CiAgICAgUmVm
UHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB0cmFuc2Zvcm1U
b0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAKaW5kZXggMWFjMWJhM2U0NmZmNTQ5NmM4ZDZiMDcyNTBmMTZhOTBl
OTBjNmQxYy4uZmI4YTBkYTgyZTc3ODUyMjJkOWY5YTZmODdjMWI3NDA4YjczMmYwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMTMxLDI4ICsxMzEsNiBAQCBSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlcwogICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbG9naWNhbFNpemUoKSwgYmFja2VuZFNpemUsIHJlc29s
dXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi12b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRl
c3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKLSAg
ICBzcmNSZWN0U2NhbGVkLnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGlmIChhdXRv
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29w
eUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZGVzdENvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNyY1Jl
Y3RTY2FsZWQsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNv
bHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotfQotCiB2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAg
YXV0byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
CkBAIC0yNDgsMTAgKzIyNiw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRTYWZlSW1hZ2VCdWZm
ZXJGbHVzaGVyPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlRmx1c2hlCiAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlckNHPihjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpwcmVwYXJl
VG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JikKLXsKLX0KLQogYm9vbCBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6b3JpZ2luQXRCb3R0b21MZWZ0Q29ybmVyKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gaXNPcmlnaW5BdEJvdHRvbUxlZnRDb3JuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAppbmRl
eCAxMmJlNDI5Y2Y2MGU2OTQyYTE5YWFmZGRhZTc3MjBhZThhNTkyY2I0Li5jODcyNDE5NmZmYzAy
NjQ5M2VmYmFlOWM2ZDVmZWU2YjA5YzgxNTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTQx
LDEyICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2lu
QXRCb3R0b21MZWZ0Q29ybmVyID0gdHJ1ZTsKIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdl
QnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCiAgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwogICAgIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwotICAgIAogICAgIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVycmlkZTsKIAogICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NiwxMiArNTUsOCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBib29sIG9yaWdpbkF0Qm90dG9tTGVmdENvcm5lcigpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7
Ci0KICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3Bh
Y2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRv
RHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOwotCiAgICAgdmlydHVhbCBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5h
dGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDMzOWFlYjgzMWRhOGEyMTM0MjE0Yzg3YzE5NzQy
MmE4OTM4MDI0OTQuLjQyNDEzOGE2MDA2MzYwOWU2OWQ0MzMyMDEzM2FjMDNkNTU0YWMyODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTQ5LDE2ICsxNDksNiBA
QCB1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29u
c3QKICAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOwogfQogCi12b2lkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQpCi17Ci0gICAgYXV0byBjdXJyZW50U2VlZCA9IG1fc3VyZmFj
ZS0+c2VlZCgpOwotICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fbGFzdFNlZWRXaGVuRHJhd2luZ0lt
YWdlLCBjdXJyZW50U2VlZCkgPT0gY3VycmVudFNlZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChkZXN0Q29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCkKLSAgICAgICAgaW52YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCk7Ci19Ci0KIHZv
aWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjppbnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1h
Z2UoKSBjb25zdAogewogICAgIC8vIEZvcmNlIFF1YXJ0ekNvcmUgdG8gaW52YWxpZGF0ZSBpdHMg
Y2FjaGVkIENHSW1hZ2VSZWYgZm9yIHRoaXMgSU9TdXJmYWNlLgpAQCAtMTc5LDI2ICsxNjksNiBA
QCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0lu
dG9OYXRpdmVJbWFnZSgpCiAgICAgcmV0dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUoSU9TdXJmYWNl
OjpzaW5rSW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSkpOwogfQogCi12b2lkIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAg
Ly8gQWNjZWxlcmF0ZWQgdG8vZnJvbSB1bmFjY2VsZXJhdGVkIGltYWdlIGJ1ZmZlcnMgbmVlZCBj
b21wbGV4IGNhY2hpbmcuIFdlIHRydXN0IHRoYXQKLSAgICAvLyB0aGlzIGlzIGEgb25lLW9mZiBk
cmF3LCBhbmQgYXMgc3VjaCB3ZSBjbGVhciB0aGUgY2FjaGVzIG9mIHRoZSBzb3VyY2UgaW1hZ2Ug
YWZ0ZXIgZWFjaCBkcmF3LgotICAgIGlmIChkZXN0Q29udGV4dC5yZW5kZXJpbmdNb2RlKCkgIT0g
Y29udGV4dCgpLnJlbmRlcmluZ01vZGUoKSkKLSAgICAgICAgaW52YWxpZGF0ZUNhY2hlZE5hdGl2
ZUltYWdlKCk7Ci19Ci12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7
Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBiYWNrZW5kU2l6
ZSA9IHRoaXMtPmJhY2tlbmRTaXplKCk7Ci0gICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05h
dGl2ZUltYWdlKCkpCi0gICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2Us
IGJhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQog
UmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weUNH
SW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKICAgICBpZiAobV9yZXF1aXJlc0Ry
YXdBZnRlclB1dFBpeGVsQnVmZmVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CmluZGV4IDc0MjA5NGQyZDBlYTczZjM5MGE3ZjJlYTIyOGE1OTU5YTJmNmZhNjMuLmZiOGUxZTIz
NjVlMTk4MTVhYzA4NmMwODQ2YmY2NDEzNjBmZGI0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oCkBAIC02Niw5ICs2Niw2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBzaW5rSW50b05h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7Ci0KICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKQEAgLTg3LDEyICs4
NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSW1hZ2VCdWZmZXJDR0JhY2tlbmQgb3ZlcnJpZGVz
LgogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5Q0dJbWFnZUZvckVuY29kaW5nKENGU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOwog
Ci0gICAgdm9pZCBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQpIG92ZXJyaWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZE5hdGl2
ZUltYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXplQ29udGV4dCgpOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIElPU3VyZmFjZVNlZWQgbV9s
YXN0U2VlZFdoZW5EcmF3aW5nSW1hZ2UgeyAwIH07CiAgICAgbXV0YWJsZSBib29sIG1fcmVxdWly
ZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciB7IGZhbHNlIH07CiAKICAgICBtdXRhYmxlIHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0Q0c+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggZDRjYTM0Nzc4
NGFmMGExOGJkNzRkMWZjMTdiZGM3NjBmMDY3N2JjZS4uNTE2MGY4MzBiMjk3YmJhYzNlMmU2MWIz
YmIyY2NkNmE3ZTZlYmE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgSU9TdXJmYWNlSUQgc3VyZmFjZUlEKCkgY29uc3Q7CiAgICAgc2l6ZV90
IGJ5dGVzUGVyUm93KCkgY29uc3Q7CiAKLSAgICBJT1N1cmZhY2VTZWVkIHNlZWQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBJT1N1cmZhY2VTZWVkIHNlZWQoKSBjb25zdDsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaXNJblVzZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCmluZGV4IDk5NDVlODhkZDQ1ODMyMWEzZWM5M2JjNjFlYTYyMjYwYjEzZTI0ZDEuLjk5
MDNjMTVhMTZmNTJjZTYyZjJjNjU5NTIyM2ViOWJkMzU3NTgxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC01MCw2ICs1MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgogY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb25j
cmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAg
ICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworICAgIHVzaW5nIEJh
c2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjYW5NYXBCYWNraW5nU3RvcmU7CiAgICAgdXNpbmcgQmFz
ZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAg
IHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGU7CiAKQEAgLTE3
NCwxMCArMTc1LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5nZXREYXRhRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHks
IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVD
b3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgZmluYWwKKyAgICBSZWZQdHI8
V2ViQ29yZTo6TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKGNhbk1hcEJh
Y2tpbmdTdG9yZSgpKQorICAgICAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojpjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSk7CisKICAgICAgICAg
Y29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Kj4odGhpcyktPmZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKICAgICAgICAgYXV0byBiaXRtYXAgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS0+Z2V0U2hhcmVhYmxlQml0bWFwKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgIGlmICghYml0bWFwKQpA
QCAtMTg1LDEwICsxOTAsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV2ViQ29yZTo6
TmF0aXZlSW1hZ2U6OmNyZWF0ZShiaXRtYXAtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoV2ViQ29yZTo6
RG9udENvcHlCYWNraW5nU3RvcmUpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2U+IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJh
Y2tpbmdTdG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IGZpbmFsCisgICAgUmVm
UHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3IgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
ICAgICBpZiAoY2FuTWFwQmFja2luZ1N0b3JlKCkpCisgICAgICAgICAgICByZXR1cm4gQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworCiAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSo+KHRoaXMpLT5mbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIGF1dG8gYml0
bWFwID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldFNoYXJlYWJsZUJpdG1hcCht
X3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICAg
ICAgaWYgKCFiaXRtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVt
b3RlSU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggZWFlNmY3OTVlZDNmOTI0NjQyYzRkODQ5Yjlh
OThhOWE3Njk3NTcyOS4uMjAzMTdjNjRkMGU3YjFiODBmNjJjNGQxYTdlYTAzZTI0ZGIxNDU4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9J
bWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kLmNwcApAQCAtMTE4LDE2ICsxMTgsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
UmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZQog
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNr
ZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFj
a2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBTdHJpbmcgSW1hZ2VCdWZmZXJSZW1v
dGVJT1N1cmZhY2VCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgc3RkOjpvcHRpb25h
bDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVt
b3RlSU9TdXJmYWNlQmFja2VuZC5oCmluZGV4IDIwZDhjNjBlMTEzNTZlOGIyZTA3ZDU4OWIwZDM5
NmYyZjI0MTI0OWUuLjdhMGZkZGRkZWNkN2FmMDYyNTZhYzVjMTEwMTAwYzljYjVmYjE1NjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tl
bmQuaApAQCAtNjEsOCArNjEsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNpemUgYmFj
a2VuZFNpemUoKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+
IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBmaW5hbDsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3Rv
cmVDb3B5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOwotICAgIHZv
aWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdl
YkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVy
bihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOwogICAgIFZlY3Rvcjx1aW50
OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBv
dXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBmaW5hbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VC
dWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJ
T1N1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA3NDFiZTM2YmU2ZjVmYTI1ZWZlZDdmZWZhOTEyOGQy
YTQ3OGQ0ZjQxLi44MDgyNzUxZjFkNGUwMGZmMWE3NzZkN2ZmNWNhNGUyNDE3ZDU1OTNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdl
QnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1h
cHBlZElPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNiArODMsMTggQEAgdm9pZCBJbWFnZUJ1
ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQ6OnNldE93bmVyc2hpcElkZW50aXR5
KGNvbnN0IFdlYkMKICAgICBtX3N1cmZhY2UtPnNldE93bmVyc2hpcElkZW50aXR5KHJlc291cmNl
T3duZXIpOwogfQogCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlTWFw
cGVkSU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAoreworICAgIGF1dG8gY3VycmVudFNlZWQgPSBtX3N1cmZhY2UtPnNl
ZWQoKTsKKworICAgIC8vIEludmFsaWRhdGUgdGhlIGNhY2hlZCBpbWFnZSBiZWZvcmUgZ2V0dGlu
ZyBhIG5ldyBvbmUgYmVjYXVzZSBHUFVQcm9jZXNzIG1pZ2h0CisgICAgLy8gaGF2ZSBkcmF3biBz
b21ldGhpbmcgdG8gdGhlIElPU3VyZmFjZSBzaW5jZSBsYXN0IHRpbWUgdGhpcyBmdW5jdGlvbiB3
YXMgY2FsbGVkLgorICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fbGFzdFNlZWRXaGVuQ29weWluZ0lt
YWdlLCBjdXJyZW50U2VlZCkgIT0gY3VycmVudFNlZWQpCisgICAgICAgIGludmFsaWRhdGVDYWNo
ZWROYXRpdmVJbWFnZSgpOworCisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBIQVZFKElPU1VSRkFDRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFw
cGVkSU9TdXJmYWNlQmFja2VuZC5oCmluZGV4IGIxNDQyNmU3ZjQyZDdkYTUwNWJmZmFmYWYxNGEx
NzNhZjIxMGQ2ZDcuLjg3NjcwYzM5MWY5ZWEyOWY1MDU3YTBjY2QxZjFkY2YyYjgxZTZhM2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1h
cHBlZElPU3VyZmFjZUJhY2tlbmQuaApAQCAtMzcsOCArMzcsNiBAQCBjbGFzcyBQcm9jZXNzSWRl
bnRpdHk7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBTaGFyZWFibGVCaXRtYXA7Ci0K
IGNsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZCBmaW5hbCA6
IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQsIHB1YmxpYyBJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGVTaGFyaW5nIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZCk7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5k
KTsKQEAgLTU1LDYgKzUzLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgLy8gSW1hZ2VCdWZm
ZXJCYWNrZW5kU2hhcmluZwogICAgIEltYWdlQnVmZmVyQmFja2VuZFNoYXJpbmcqIHRvQmFja2Vu
ZFNoYXJpbmcoKSBmaW5hbCB7IHJldHVybiB0aGlzOyB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6
TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0g
V2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgZmluYWw7CisKKyAgICBtdXRhYmxlIFdl
YkNvcmU6OklPU3VyZmFjZVNlZWQgbV9sYXN0U2VlZFdoZW5Db3B5aW5nSW1hZ2UgeyAwIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459529</attachid>
            <date>2022-05-17 23:44:10 -0700</date>
            <delta_ts>2022-05-19 11:05:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240368-20220517234410.patch</filename>
            <type>text/plain</type>
            <size>29470</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZGU0ZTQzN2FlYTVhNjRlZjZmZWY5ZTU1M2E4NzY4ZDU1ZWIzNjAxLi5i
YjM3MmViMTg3ZjVmMjNkMmRjMGZmMzRiMzY4Y2IxZGU0ODBkZTA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDQgQEAKKzIwMjItMDUtMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBEcmF3aW5nIHRoZSBQREYgc25hcHNob3Qgc2hv
dWxkIHRha2UgcGxhY2UgaW4gV2ViUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwMzY4CisgICAgICAgIHJkYXI6Ly85MTY2MDE1OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBJbWFnZUJ1
ZmZlckJhY2tlbmRzIHNob3VsZCBhY3QgbGlrZSBhIGRyYXdpbmcgc3VyZmFjZSBvbmx5LiBJdCBo
YXMKKyAgICAgICAgYSBHcmFwaGljc0NvbnRleHQuIEl0IGNhbiBnZXQgYW5kIHNldCBwaXhlbHMu
IEFuZCBpdCBjYW4gZ2V0IGEgTmF0aXZlSW1hZ2UKKyAgICAgICAgb3V0IG9mIHRoZSBwaXhlbHMu
IEJ1dCBpdCBzaG91bGQgbmV2ZXIgZHJhdyBpdHNlbGYgdG8gYSBHcmFwaGljc0NvbnRleHQuCisg
ICAgICAgIFRoZSBJbWFnZUJ1ZmZlciBjYW4gYWN0IGxpa2UgYW4gaW1hZ2UuIEl0IGNhbiBkcmF3
IGl0c2VsZiBhcyBhbiBpbWFnZSBvcgorICAgICAgICBhcyBhIHBhdHRlcm4gaW50byBhIEdyYXBo
aWNzQ29udGV4dC4KKworICAgICAgICBTbyBkcmF3KCksIGRyYXdQYXR0ZXJuKCkgYW5kIGRyYXdD
b25zdW1pbmcoKSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kIHN1cGVyIGNsYXNzZXMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVuaWZp
ZWQKKyAgICAgICAgZm9yIGFsbCBwbGF0Zm9ybXMgYW5kIG1vdmVkIHRvIENvbmNyZXRlSW1hZ2VC
dWZmZXIuCisKKyAgICAgICAgQnkgZG9pbmcgdGhhdCwgYSBjYW52YXMgY2FuIGJlIGRyYXduIHRv
IHRoZSBQREYgY29udGV4dCBpbiBXZWJQcm9jZXNzIAorICAgICAgICBldmVuIGlmIHRoZSBHUFVQ
cm9jZXNzIGZvciBET00gcmVuZGVyaW5nIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6cHJlcGFyZVRv
RHJhd0ludG9Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpkcmF3Q29uc3VtaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UuaDoKKwogMjAyMi0wNS0xNyAgS2ltbW8gS2lubnVuZW4gIDxr
a2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZCBjb250ZXh0IHNldHVwIGFuZCB0ZWFyZG93biBmdW5jdGlvbnMgYXJlIHJlZHVuZGFudCBhbmQg
ZXJyb3ItcHJvbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggN2JjNzEyOTI3MDFhYmUxZDQ5OTllMzliNmY1YTMyOGM1
Mjk2NmVkNi4uZDNjNzE0NjlmMjYzZWE4OTllNzBlMzBhMmNjZTQ0NTA5MTQxNmQ5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMi0wNS0xNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlk
QGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIERyYXdpbmcgdGhlIFBERiBzbmFw
c2hvdCBzaG91bGQgdGFrZSBwbGFjZSBpbiBXZWJQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAzNjgKKyAgICAgICAgcmRhcjovLzkxNjYw
MTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZh
Y2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZh
Y2VCYWNrZW5kOjpkcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJS
ZW1vdGVJT1N1cmZhY2VCYWNrZW5kOjpkcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VC
dWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZl
SW1hZ2UgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIyLTA1LTE3
ICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBVc2UgbmV3
IGxpYndwZSBBUEkgdG8gc3luY2hyb25pc2UgZGlzcGxheSByZWZyZXNoZXMgZnVsbHkgdG8gdGhl
IHNjcmVlbiByZWZyZXNoIHJhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCA1OWJjNDFmMmNjOWRjOTEyYjVm
ZWFhOWZkOWQ2YzYzZWM3MTU2ZTYyLi5lNjA1ZTE3MDI0ZWJjMzkwZjU4YmZlOTk2MjgzN2ExMGY1
YTM5OTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25j
cmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJSZXN1bHRzLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCkBAIC0xNjksMTcgKzE3MCwyMyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0
UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2Fs
ZShyZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kQ3JlYXRlZCgpKSB7Ci0gICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
Ci0gICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUlt
YWdlKCppbWFnZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlv
bnMpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAgYWRqdXN0ZWRTcmNS
ZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKLSAgICAgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICAgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDMsMTMgKzIxMCwxNyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAg
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgICAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgICAgIEFTU0VSVCgmZGVz
dENvbnRleHQgIT0gJmNvbnRleHQoKSk7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OwotICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICAgICAgYXV0byBiYWNrZW5kU2l6ZSA9IGJh
Y2tlbmQtPmJhY2tlbmRTaXplKCk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0
aW9ucyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNsaXBUb01hc2soR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENy
ZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKaW5kZXggZWQ3MWI1YzY4MWNhYWJlODZjYTkyNWRmZDNl
ODc4NTE0YWYxNmRmZC4uODZlMjRhNjZkODM5YTgxYTY3MDUzODU4ZGY3ODhlMzk0ZTI2YzFlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwCkBAIC02NSwxMSArNjUsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bAogICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVz
b2x1dGlvbik7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBkcmF3KGRlc3RpbmF0aW9uQ29udGV4dCwgZGVz
dGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCBvcHRpb25zKTsKLX0KLQogdm9pZCBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogewogICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKaW5kZXggZDY5ZmNhY2Zj
MGIzMWQyYmIxNmZlZjRmM2NhZmU2ODVjNTQ0M2QyYy4uMTFlZTVjMTY1OTI0MDBkZjUxZmEwNDdk
ZDkwOTU1MzA0MDExY2Q3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTExMSwxMiArMTExLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0KICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gc2lua0ludG9OYXRpdmVJbWFnZSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdD
b25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JikgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cAppbmRleCAzYjdhNzVkYzc4YWY3OTJhMDA1OWZmYzcyNjMwNzE4NjI1YjliMmRlLi5kOGU2NTEw
NDhjNmMzNGM2MDMzYjZhMGQ2ZDk5MmI2NzRhYTU1MTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCkBAIC01MSwzNyArNTEsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Is
CiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcikpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgaWYgKCFkZXN0Q29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSkgewotICAgICAgICAv
LyBJZiB0aGVyZSdzIG5vIHBsYXRmb3JtQ29udGV4dCwgd2UncmUgdXNpbmcgdGhyZWFkZWQgcmVu
ZGVyaW5nLCBhbmQgYWxsIHRoZSBvcGVyYXRpb25zIG11c3QgYmUgZG9uZQotICAgICAgICAvLyB0
aHJvdWdoIHRoZSBHcmFwaGljc0NvbnRleHQuCi0gICAgICAgIGF1dG8gaW1hZ2UgPSBjb3B5SW1h
Z2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENv
cHlCYWNraW5nU3RvcmUpOwotICAgICAgICBkZXN0Q29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JU
aGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0g
ICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0
ZSgpOwotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9w
dGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSgpLCBXZWJDb3JlOjpDYWlybzo6U2hh
ZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGlmICghZGVzdENvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkp
IHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBubyBwbGF0Zm9ybUNvbnRleHQsIHdlJ3JlIHVzaW5n
IHRocmVhZGVkIHJlbmRlcmluZywgYW5kIGFsbCB0aGUgb3BlcmF0aW9ucyBtdXN0IGJlIGRvbmUK
LSAgICAgICAgLy8gdGhyb3VnaCB0aGUgR3JhcGhpY3NDb250ZXh0LgotICAgICAgICBhdXRvIGlt
YWdlID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UtPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBsb2dpY2FsU2l6ZSgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCiB2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmgKaW5kZXggMjRiM2M0ZGM1NmZjZTcxMTZiYjg0MzkxYWIzMTAzNjM4YTM1NjJmMy4u
NmY4NjI3ZTRmMGRiNDAzMTgyZWE0ZmVmMWNlYTBjZmY5MjIwMmI0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0zOSw5ICszOSw2IEBAIGNsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CiBwdWJsaWM6CiAgICAgUmVm
UHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB0cmFuc2Zvcm1U
b0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAKaW5kZXggMWFjMWJhM2U0NmZmNTQ5NmM4ZDZiMDcyNTBmMTZhOTBl
OTBjNmQxYy4uZmI4YTBkYTgyZTc3ODUyMjJkOWY5YTZmODdjMWI3NDA4YjczMmYwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMTMxLDI4ICsxMzEsNiBAQCBSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlcwogICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbG9naWNhbFNpemUoKSwgYmFja2VuZFNpemUsIHJlc29s
dXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi12b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRl
c3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKLSAg
ICBzcmNSZWN0U2NhbGVkLnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGlmIChhdXRv
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29w
eUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZGVzdENvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNyY1Jl
Y3RTY2FsZWQsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KGRlc3RDb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNv
bHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotfQotCiB2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAg
YXV0byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
CkBAIC0yNDgsMTAgKzIyNiw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRTYWZlSW1hZ2VCdWZm
ZXJGbHVzaGVyPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlRmx1c2hlCiAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlckNHPihjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpwcmVwYXJl
VG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JikKLXsKLX0KLQogYm9vbCBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6b3JpZ2luQXRCb3R0b21MZWZ0Q29ybmVyKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gaXNPcmlnaW5BdEJvdHRvbUxlZnRDb3JuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAppbmRl
eCAxMmJlNDI5Y2Y2MGU2OTQyYTE5YWFmZGRhZTc3MjBhZThhNTkyY2I0Li5jODcyNDE5NmZmYzAy
NjQ5M2VmYmFlOWM2ZDVmZWU2YjA5YzgxNTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTQx
LDEyICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2lu
QXRCb3R0b21MZWZ0Q29ybmVyID0gdHJ1ZTsKIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdl
QnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCiAgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwogICAgIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwotICAgIAogICAgIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVycmlkZTsKIAogICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NiwxMiArNTUsOCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBib29sIG9yaWdpbkF0Qm90dG9tTGVmdENvcm5lcigpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7
Ci0KICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3Bh
Y2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRv
RHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOwotCiAgICAgdmlydHVhbCBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5h
dGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDMzOWFlYjgzMWRhOGEyMTM0MjE0Yzg3YzE5NzQy
MmE4OTM4MDI0OTQuLjQyNDEzOGE2MDA2MzYwOWU2OWQ0MzMyMDEzM2FjMDNkNTU0YWMyODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTQ5LDE2ICsxNDksNiBA
QCB1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29u
c3QKICAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOwogfQogCi12b2lkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQpCi17Ci0gICAgYXV0byBjdXJyZW50U2VlZCA9IG1fc3VyZmFj
ZS0+c2VlZCgpOwotICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fbGFzdFNlZWRXaGVuRHJhd2luZ0lt
YWdlLCBjdXJyZW50U2VlZCkgPT0gY3VycmVudFNlZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChkZXN0Q29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCkKLSAgICAgICAgaW52YWxpZGF0ZUNhY2hlZE5hdGl2ZUltYWdlKCk7Ci19Ci0KIHZv
aWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjppbnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1h
Z2UoKSBjb25zdAogewogICAgIC8vIEZvcmNlIFF1YXJ0ekNvcmUgdG8gaW52YWxpZGF0ZSBpdHMg
Y2FjaGVkIENHSW1hZ2VSZWYgZm9yIHRoaXMgSU9TdXJmYWNlLgpAQCAtMTc5LDI2ICsxNjksNiBA
QCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0lu
dG9OYXRpdmVJbWFnZSgpCiAgICAgcmV0dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUoSU9TdXJmYWNl
OjpzaW5rSW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSkpOwogfQogCi12b2lkIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAg
Ly8gQWNjZWxlcmF0ZWQgdG8vZnJvbSB1bmFjY2VsZXJhdGVkIGltYWdlIGJ1ZmZlcnMgbmVlZCBj
b21wbGV4IGNhY2hpbmcuIFdlIHRydXN0IHRoYXQKLSAgICAvLyB0aGlzIGlzIGEgb25lLW9mZiBk
cmF3LCBhbmQgYXMgc3VjaCB3ZSBjbGVhciB0aGUgY2FjaGVzIG9mIHRoZSBzb3VyY2UgaW1hZ2Ug
YWZ0ZXIgZWFjaCBkcmF3LgotICAgIGlmIChkZXN0Q29udGV4dC5yZW5kZXJpbmdNb2RlKCkgIT0g
Y29udGV4dCgpLnJlbmRlcmluZ01vZGUoKSkKLSAgICAgICAgaW52YWxpZGF0ZUNhY2hlZE5hdGl2
ZUltYWdlKCk7Ci19Ci12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIHByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChkZXN0Q29udGV4dCk7
Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBiYWNrZW5kU2l6
ZSA9IHRoaXMtPmJhY2tlbmRTaXplKCk7Ci0gICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05h
dGl2ZUltYWdlKCkpCi0gICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2Us
IGJhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQog
UmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weUNH
SW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKICAgICBpZiAobV9yZXF1aXJlc0Ry
YXdBZnRlclB1dFBpeGVsQnVmZmVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CmluZGV4IDc0MjA5NGQyZDBlYTczZjM5MGE3ZjJlYTIyOGE1OTU5YTJmNmZhNjMuLmZiOGUxZTIz
NjVlMTk4MTVhYzA4NmMwODQ2YmY2NDEzNjBmZGI0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oCkBAIC02Niw5ICs2Niw2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBzaW5rSW50b05h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7Ci0KICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKQEAgLTg3LDEyICs4
NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSW1hZ2VCdWZmZXJDR0JhY2tlbmQgb3ZlcnJpZGVz
LgogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5Q0dJbWFnZUZvckVuY29kaW5nKENGU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOwog
Ci0gICAgdm9pZCBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQpIG92ZXJyaWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZE5hdGl2
ZUltYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXplQ29udGV4dCgpOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIElPU3VyZmFjZVNlZWQgbV9s
YXN0U2VlZFdoZW5EcmF3aW5nSW1hZ2UgeyAwIH07CiAgICAgbXV0YWJsZSBib29sIG1fcmVxdWly
ZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciB7IGZhbHNlIH07CiAKICAgICBtdXRhYmxlIHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0Q0c+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggZDRjYTM0Nzc4
NGFmMGExOGJkNzRkMWZjMTdiZGM3NjBmMDY3N2JjZS4uNTE2MGY4MzBiMjk3YmJhYzNlMmU2MWIz
YmIyY2NkNmE3ZTZlYmE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgSU9TdXJmYWNlSUQgc3VyZmFjZUlEKCkgY29uc3Q7CiAgICAgc2l6ZV90
IGJ5dGVzUGVyUm93KCkgY29uc3Q7CiAKLSAgICBJT1N1cmZhY2VTZWVkIHNlZWQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBJT1N1cmZhY2VTZWVkIHNlZWQoKSBjb25zdDsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaXNJblVzZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCmluZGV4IDk5NDVlODhkZDQ1ODMyMWEzZWM5M2JjNjFlYTYyMjYwYjEzZTI0ZDEuLjhh
MmUzNjZjNjRmMjdmZWQyYWQyNjIwMGUzNTVkMzgwNmEwOWQ4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC01MCw2ICs1MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgogY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb25j
cmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAg
ICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworICAgIHVzaW5nIEJh
c2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjYW5NYXBCYWNraW5nU3RvcmU7CiAgICAgdXNpbmcgQmFz
ZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAg
IHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGU7CiAKQEAgLTE3
NCwxMCArMTc1LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5nZXREYXRhRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHks
IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVD
b3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgZmluYWwKKyAgICBSZWZQdHI8
V2ViQ29yZTo6TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKGNhbk1hcEJh
Y2tpbmdTdG9yZSgpKQorICAgICAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojpjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKwogICAgICAgICBjb25zdF9jYXN0PFJl
bW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAg
ICAgICBhdXRvIGJpdG1hcCA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRTaGFy
ZWFibGVCaXRtYXAobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgaWYgKCFiaXRtYXApCkBAIC0xODUsMTAgKzE5
MCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOYXRpdmVJbWFnZTo6
Y3JlYXRlKGJpdG1hcC0+Y3JlYXRlUGxhdGZvcm1JbWFnZShXZWJDb3JlOjpEb250Q29weUJhY2tp
bmdTdG9yZSkpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gY29weUltYWdl
KFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlLCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgZmluYWwKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SW1hZ2U+IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9
IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSkpCiAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIGlmIChjYW5N
YXBCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKwogICAg
ICAgICBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hEcmF3
aW5nQ29udGV4dCgpOwogICAgICAgICBhdXRvIGJpdG1hcCA9IG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LT5nZXRTaGFyZWFibGVCaXRtYXAobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIHByZXNlcnZlUmVzb2x1dGlvbik7CiAgICAgICAgIGlmICghYml0bWFwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuY3BwCmlu
ZGV4IGVhZTZmNzk1ZWQzZjkyNDY0MmM0ZDg0OWI5YTk4YTlhNzY5NzU3MjkuLjIwMzE3YzY0ZDBl
N2IxYjgwZjYyYzRkMWE3ZWEwM2UyNGRiMTQ1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2Nv
Y29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTExOCwxNiArMTE4
LDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmUKICAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVm
ZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuaAppbmRl
eCAyMGQ4YzYwZTExMzU2ZThiMmUwN2Q1ODliMGQzOTZmMmYyNDEyNDllLi43YTBmZGRkZGVjZDdh
ZjA2MjU2YWM1YzExMDEwMGM5Y2I1ZmIxNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTYxLDggKzYxLDYgQEAgcHJp
dmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgZmluYWw7CiAg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6
QmFja2luZ1N0b3JlQ29weSkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdl
PiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSwgV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBmaW5hbDsKICAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJm
YWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2Nv
Y29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXgg
NzQxYmUzNmJlNmY1ZmEyNWVmZWQ3ZmVmYTkxMjhkMmE0NzhkNGY0MS4uODA4Mjc1MWYxZDRlMDBm
ZjFhNzc2ZDdmZjVjYTRlMjQxN2Q1NTkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3Vy
ZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTgzLDYgKzgzLDE4IEBAIHZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZh
Y2VCYWNrZW5kOjpzZXRPd25lcnNoaXBJZGVudGl0eShjb25zdCBXZWJDCiAgICAgbV9zdXJmYWNl
LT5zZXRPd25lcnNoaXBJZGVudGl0eShyZXNvdXJjZU93bmVyKTsKIH0KIAorUmVmUHRyPE5hdGl2
ZUltYWdlPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBh
dXRvIGN1cnJlbnRTZWVkID0gbV9zdXJmYWNlLT5zZWVkKCk7CisKKyAgICAvLyBJbnZhbGlkYXRl
IHRoZSBjYWNoZWQgaW1hZ2UgYmVmb3JlIGdldHRpbmcgYSBuZXcgb25lIGJlY2F1c2UgR1BVUHJv
Y2VzcyBtaWdodAorICAgIC8vIGhhdmUgZHJhd24gc29tZXRoaW5nIHRvIHRoZSBJT1N1cmZhY2Ug
c2luY2UgbGFzdCB0aW1lIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4KKyAgICBpZiAoc3RkOjpl
eGNoYW5nZShtX2xhc3RTZWVkV2hlbkNvcHlpbmdJbWFnZSwgY3VycmVudFNlZWQpICE9IGN1cnJl
bnRTZWVkKQorICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkTmF0aXZlSW1hZ2UoKTsKKworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShjb3B5QmVo
YXZpb3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykgJiYgSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVk
SU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQuaAppbmRl
eCBiMTQ0MjZlN2Y0MmQ3ZGE1MDViZmZhZmFmMTRhMTczYWYyMTBkNmQ3Li44NzY3MGMzOTFmOWVh
MjlmNTA1N2EwY2NkMWYxZGNmMmI4MWU2YTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9T
dXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmgKQEAg
LTM3LDggKzM3LDYgQEAgY2xhc3MgUHJvY2Vzc0lkZW50aXR5OwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgU2hhcmVhYmxlQml0bWFwOwotCiBjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLCBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlU2hhcmlu
ZyB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBl
ZElPU3VyZmFjZUJhY2tlbmQpOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
U2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZCk7CkBAIC01NSw2ICs1MywxMCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIC8vIEltYWdlQnVmZmVyQmFja2VuZFNoYXJpbmcKICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmRTaGFyaW5nKiB0b0JhY2tlbmRTaGFyaW5nKCkgZmluYWwgeyByZXR1cm4g
dGhpczsgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1h
Z2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUp
IGNvbnN0IGZpbmFsOworCisgICAgbXV0YWJsZSBXZWJDb3JlOjpJT1N1cmZhY2VTZWVkIG1fbGFz
dFNlZWRXaGVuQ29weWluZ0ltYWdlIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Cg==
</data>
<flag name="review"
          id="488661"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459604</attachid>
            <date>2022-05-19 17:51:05 -0700</date>
            <delta_ts>2022-05-20 00:17:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240368-20220519175104.patch</filename>
            <type>text/plain</type>
            <size>27218</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSBkMGQwZjE0NmIzZTVlNWFhNGU2MmEzZjZkODExMTlhNjk1MmI3MTAwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IFRodSwgMTkgTWF5IDIwMjIgMTc6NDg6MTAgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIERyYXdpbmcgdGhlIFBERiBzbmFwc2hvdCBzaG91bGQgdGFrZSBwbGFjZSBpbgog
V2ViUHJvY2VzcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwMzY4
IHJkYXI6Ly85MTY2MDE1OQoKUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgoKVGhlIEltYWdlQnVm
ZmVyQmFja2VuZHMgc2hvdWxkIGFjdCBsaWtlIGEgZHJhd2luZyBzdXJmYWNlIG9ubHkuIEl0IGhh
cwphIEdyYXBoaWNzQ29udGV4dC4gSXQgY2FuIGdldCBhbmQgc2V0IHBpeGVscy4gQW5kIGl0IGNh
biBnZXQgYSBOYXRpdmVJbWFnZQpvdXQgb2YgdGhlIHBpeGVscy4gQnV0IGl0IHNob3VsZCBuZXZl
ciBkcmF3IGl0c2VsZiB0byBhIEdyYXBoaWNzQ29udGV4dC4KVGhlIEltYWdlQnVmZmVyIGNhbiBh
Y3QgbGlrZSBhbiBpbWFnZS4gSXQgY2FuIGRyYXcgaXRzZWxmIGFzIGFuIGltYWdlIG9yCmFzIGEg
cGF0dGVybiBpbnRvIGEgR3JhcGhpY3NDb250ZXh0LgoKU28gZHJhdygpLCBkcmF3UGF0dGVybigp
IGFuZCBkcmF3Q29uc3VtaW5nKCkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlCkltYWdlQnVmZmVy
QmFja2VuZCBzdXBlciBjbGFzc2VzIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1bmlm
aWVkCmZvciBhbGwgcGxhdGZvcm1zIGFuZCBtb3ZlZCB0byBDb25jcmV0ZUltYWdlQnVmZmVyLgoK
QnkgZG9pbmcgdGhhdCwgYSBjYW52YXMgY2FuIGJlIGRyYXduIHRvIHRoZSBQREYgY29udGV4dCBp
biBXZWJQcm9jZXNzCmV2ZW4gaWYgdGhlIEdQVVByb2Nlc3MgZm9yIERPTSByZW5kZXJpbmcgaXMg
ZW5hYmxlZC4KLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
ICAgfCAyNiArKysrKysrKysrKy0tLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcCAgfCAgNSAtLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaCAgICB8ICA1ICstLQogLi4uL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcCAgICAgICAgIHwgMzEgLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggIHwgIDMgLS0KIC4uLi9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAgICAgICB8IDI2IC0tLS0tLS0tLS0tLS0tLS0KIC4uLi9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oICAgICAgICB8ICA5ICsrLS0tLQogLi4uL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgICAgICAgIHwgMjggKystLS0tLS0tLS0t
LS0tLS0KIC4uLi9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCB8ICA2
ICstLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCAgICAgICB8ICAy
ICstCiAuLi4vR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAgICAgfCAxMyAr
KysrKystLQogLi4uL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHAgICAgIHwg
MTAgLS0tLS0tCiAuLi4vY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNrZW5kLmgg
fCAgMiAtLQogLi4uZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQuY3BwIHwg
MTQgKysrKysrKystCiAuLi5hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5k
LmggfCAgNiArKy0tCiAxNSBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAxMzEgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGJmNjhkMWFkNjE4ZC4uYjEyOGQ3YmZmMDQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJ
bWFnZUJ1ZmZlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJSZXN1bHRzLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogCkBAIC0xNjksMTcgKzE3MCwyNCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBzcmNS
ZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShyZXNvbHV0
aW9uU2NhbGUoKSk7CisKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpKSB7Ci0gICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAg
ICAgICBiYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgICAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFn
ZSwgYmFja2VuZFNpemUoKSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworICAg
ICAgICAgICAgYmFja2VuZC0+ZmluYWxpemVEcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKLSAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKLSAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwor
ICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZj
b250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAg
ICAgICAgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDMsMTMgKzIxMSwxNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgICAgICBhZGp1c3RlZFNyY1Jl
Y3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgICAgIEFTU0VSVCgmZGVzdENvbnRl
eHQgIT0gJmNvbnRleHQoKSk7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgICAgICAgICAgYXV0byBiYWNrZW5kU2l6ZSA9IGJhY2tlbmQt
PmJhY2tlbmRTaXplKCk7CisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
KmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNsaXBUb01hc2soR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQo
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5jcHAKaW5kZXggYzY4ZDMxOGQzZjM5Li5kMGUzMTM0MjAwYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcApAQCAtNjUsMTEgKzY1LDYgQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2wKICAg
ICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwogfQogCi12b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0
aW9uUmVjdCwgc291cmNlUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKIHsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgY29sb3JTcGFjZSgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCmluZGV4IGNmNzE1YjBhMGNkMS4u
NjU0ODEwOTQyMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTA4LDE1ICsxMDgsMTIgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgeyByZXR1cm4geyB9OyB9
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVEcmF3SW50b0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0JikgeyB9CiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+
IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0g
MDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBzaW5rSW50b05hdGl2ZUlt
YWdlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwCmluZGV4IDNiN2E3NWRjNzhhZi4uZDhlNjUxMDQ4YzZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC01MSwzNyArNTEsNiBAQCBSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IsCiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdl
KGNvcHlCZWhhdmlvcikpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgaWYgKCFkZXN0Q29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSkgewot
ICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHBsYXRmb3JtQ29udGV4dCwgd2UncmUgdXNpbmcgdGhy
ZWFkZWQgcmVuZGVyaW5nLCBhbmQgYWxsIHRoZSBvcGVyYXRpb25zIG11c3QgYmUgZG9uZQotICAg
ICAgICAvLyB0aHJvdWdoIHRoZSBHcmFwaGljc0NvbnRleHQuCi0gICAgICAgIGF1dG8gaW1hZ2Ug
PSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3Jl
IDogRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBkZXN0Q29udGV4dC5kcmF3SW1hZ2Uo
KmltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29u
dGV4dC5zdGF0ZSgpOwotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRl
c3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNr
aW5nU3RvcmUpKQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNS
ZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSgpLCBXZWJDb3JlOjpD
YWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghZGVzdENvbnRleHQuaGFzUGxhdGZvcm1D
b250ZXh0KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBubyBwbGF0Zm9ybUNvbnRleHQsIHdl
J3JlIHVzaW5nIHRocmVhZGVkIHJlbmRlcmluZywgYW5kIGFsbCB0aGUgb3BlcmF0aW9ucyBtdXN0
IGJlIGRvbmUKLSAgICAgICAgLy8gdGhyb3VnaCB0aGUgR3JhcGhpY3NDb250ZXh0LgotICAgICAg
ICBhdXRvIGltYWdlID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAg
aW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBsb2dpY2FsU2l6ZSgpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCiB2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKGF1dG8gaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmgKaW5kZXggMjRiM2M0ZGM1NmZjLi42Zjg2MjdlNGYwZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMzksOSArMzksNiBAQCBjbGFzcyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgewogcHVibGlj
OgogICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQogICAgIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVycmlkZTsKIAogICAgIHZvaWQg
dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCmluZGV4IDFhYzFiYTNlNDZmZi4uZmI4YTBkYTgy
ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0xMzEsMjggKzEzMSw2IEBAIFJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzCiAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBsb2dpY2FsU2l6ZSgpLCBiYWNrZW5k
U2l6ZSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXZvaWQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBwcmVwYXJlVG9EcmF3SW50
b0NvbnRleHQoZGVzdENvbnRleHQpOwotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBz
cmNSZWN0OwotICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0g
ICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAg
ICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6ZSgpLCBkZXN0
UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwotCi0gICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0
LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGlmIChhdXRvIGltYWdlID0gY29weUlt
YWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNsaXBUb01h
c2soR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKIHsKICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKQEAgLTI0OCwxMCArMjI2LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZFNh
ZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVGbHVzaGUK
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUaHJlYWRTYWZlSW1hZ2VCdWZmZXJGbHVzaGVyQ0c+KGNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnByZXBhcmVUb0RyYXdJbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmKQotewotfQotCiBi
b29sIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpvcmlnaW5BdEJvdHRvbUxlZnRDb3JuZXIoKSBjb25z
dAogewogICAgIHJldHVybiBpc09yaWdpbkF0Qm90dG9tTGVmdENvcm5lcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCmluZGV4IDEyYmU0MjljZjYwZS4uYzg3MjQxOTZmZmMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgKQEAgLTQxLDEyICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzT3JpZ2luQXRCb3R0b21MZWZ0Q29ybmVyID0gdHJ1ZTsKIAogcHJvdGVjdGVkOgorICAg
IHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCiAgICAgUmVm
UHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlOwogICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24p
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIAogICAgIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBvdmVycmlkZTsKIAogICAgIFN0cmlu
ZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NiwxMiAr
NTUsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG9yaWdpbkF0Qm90dG9tTGVmdENvcm5lcigp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ7Ci0KICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29u
dGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOwotCiAgICAgdmly
dHVhbCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmlu
Z1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDVlMzgwMmVhYTFhNC4uZGQ5
Y2NiYmY3YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTE1
MywxNiArMTUzLDYgQEAgdW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRl
c1BlclJvdygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnByZXBhcmVUb0RyYXdJbnRvQ29u
dGV4dChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQotewotICAgIGF1dG8gY3VycmVudFNl
ZWQgPSBtX3N1cmZhY2UtPnNlZWQoKTsKLSAgICBpZiAoc3RkOjpleGNoYW5nZShtX2xhc3RTZWVk
V2hlbkRyYXdpbmdJbWFnZSwgY3VycmVudFNlZWQpID09IGN1cnJlbnRTZWVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoZGVzdENvbnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpCi0gICAgICAgIGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFn
ZSgpOwotfQotCiB2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6aW52YWxpZGF0ZUNh
Y2hlZE5hdGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICAvLyBGb3JjZSBRdWFydHpDb3JlIHRvIGlu
dmFsaWRhdGUgaXRzIGNhY2hlZCBDR0ltYWdlUmVmIGZvciB0aGlzIElPU3VyZmFjZS4KQEAgLTE4
MywyNSArMTczLDEzIEBAIFJlZlB0cjxOYXRpdmVJbWFnZT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKICAgICByZXR1cm4gTmF0aXZlSW1hZ2U6OmNy
ZWF0ZShJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKSk7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZmluYWxpemVEcmF3SW50b0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAvLyBB
Y2NlbGVyYXRlZCB0by9mcm9tIHVuYWNjZWxlcmF0ZWQgaW1hZ2UgYnVmZmVycyBuZWVkIGNvbXBs
ZXggY2FjaGluZy4gV2UgdHJ1c3QgdGhhdAorICAgIC8vIEFjY2VsZXJhdGVkIHRvIHVuYWNjZWxl
cmF0ZWQgaW1hZ2UgYnVmZmVycyBuZWVkIGNvbXBsZXggY2FjaGluZy4gV2UgdHJ1c3QgdGhhdAog
ICAgIC8vIHRoaXMgaXMgYSBvbmUtb2ZmIGRyYXcsIGFuZCBhcyBzdWNoIHdlIGNsZWFyIHRoZSBj
YWNoZXMgb2YgdGhlIHNvdXJjZSBpbWFnZSBhZnRlciBlYWNoIGRyYXcuCi0gICAgaWYgKGRlc3RD
b250ZXh0LnJlbmRlcmluZ01vZGUoKSAhPSBjb250ZXh0KCkucmVuZGVyaW5nTW9kZSgpKQorICAg
IGlmIChkZXN0aW5hdGlvbkNvbnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpCiAgICAgICAgIGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpOwog
fQotdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBwcmVwYXJlVG9EcmF3SW50b0NvbnRleHQoZGVzdENvbnRleHQpOwotCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGF1dG8gYmFja2VuZFNpemUgPSB0aGlzLT5i
YWNrZW5kU2l6ZSgpOwotICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgp
KQotICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6
ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19CiAKIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlDR0ltYWdlRm9yRW5j
b2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CmluZGV4IDkxYmIxOTBmMDM2Yi4uYjk2YWRlNjE0NmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaApAQCAtNjYsOSArNjYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gc2lua0ludG9O
YXRpdmVJbWFnZSgpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOwotCiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZm
ZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCkBAIC04OCwxMSAr
ODUsMTAgQEAgcHJvdGVjdGVkOgogICAgIC8vIEltYWdlQnVmZmVyQ0dCYWNrZW5kIG92ZXJyaWRl
cy4KICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0
cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsK
IAotICAgIHZvaWQgcHJlcGFyZVRvRHJhd0ludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0KSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmFsaXplRHJhd0ludG9Db250
ZXh0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KSBvdmVycmlkZTsKICAgICB2
b2lkIGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpIGNvbnN0OwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIElPU3VyZmFjZVNlZWQgbV9sYXN0U2Vl
ZFdoZW5EcmF3aW5nSW1hZ2UgeyAwIH07CiAgICAgbXV0YWJsZSBib29sIG1fcmVxdWlyZXNEcmF3
QWZ0ZXJQdXRQaXhlbEJ1ZmZlciB7IGZhbHNlIH07CiAKICAgICBtdXRhYmxlIHN0ZDo6b3B0aW9u
YWw8R3JhcGhpY3NDb250ZXh0Q0c+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggZDRjYTM0Nzc4NGFmLi41
MTYwZjgzMGIyOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIElPU3VyZmFjZUlEIHN1cmZhY2VJRCgpIGNvbnN0OwogICAgIHNpemVfdCBieXRl
c1BlclJvdygpIGNvbnN0OwogCi0gICAgSU9TdXJmYWNlU2VlZCBzZWVkKCkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgSU9TdXJmYWNlU2VlZCBzZWVkKCkgY29uc3Q7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGlzSW5Vc2UoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aAppbmRleCA5OTQ1ZTg4ZGQ0NTguLjhhMmUzNjZjNjRmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmgKQEAgLTUwLDYgKzUwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+
CiBjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRl
SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+IHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlciA9IFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVz
aW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisgICAgdXNpbmcgQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXI6OmNhbk1hcEJhY2tpbmdTdG9yZTsKICAgICB1c2luZyBCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAgdXNp
bmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZTsKIApAQCAtMTc0LDEw
ICsxNzUsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPmdldERhdGFGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgbV9y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJDb3Jl
OjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkg
PSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBmaW5hbAorICAgIFJlZlB0cjxXZWJD
b3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBpZiAoY2FuTWFwQmFja2lu
Z1N0b3JlKCkpCisgICAgICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNv
cHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworCiAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5mbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAg
IGF1dG8gYml0bWFwID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldFNoYXJlYWJs
ZUJpdG1hcChtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICBpZiAoIWJpdG1hcCkKQEAgLTE4NSwxMCArMTkwLDE0
IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok5hdGl2ZUltYWdlOjpjcmVh
dGUoYml0bWFwLT5jcmVhdGVQbGF0Zm9ybUltYWdlKFdlYkNvcmU6OkRvbnRDb3B5QmFja2luZ1N0
b3JlKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2Vi
Q29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBmaW5hbAorICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZT4gY29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gV2Vi
Q29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKGNhbk1hcEJh
Y2tpbmdTdG9yZSgpKQorICAgICAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworCiAgICAgICAg
IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5mbHVzaERyYXdpbmdD
b250ZXh0KCk7CiAgICAgICAgIGF1dG8gYml0bWFwID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHktPmdldFNoYXJlYWJsZUJpdG1hcChtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICAgICAgaWYgKCFiaXRtYXApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVt
b3RlSU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXgg
ZWFlNmY3OTVlZDNmLi4yMDMxN2M2NGQwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJSZW1vdGVJT1N1cmZhY2VCYWNr
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29h
L0ltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTExOCwxNiArMTE4LDYg
QEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmUKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElt
YWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQogU3RyaW5nIEltYWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZDo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVy
UmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tlbmQuaAppbmRleCAy
MGQ4YzYwZTExMzUuLjdhMGZkZGRkZWNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclJlbW90ZUlPU3VyZmFjZUJhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyUmVtb3RlSU9TdXJmYWNlQmFja2VuZC5oCkBAIC02MSw4ICs2MSw2IEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0IGZpbmFsOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJh
Y2tpbmdTdG9yZUNvcHkpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4g
Y29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHksIFdlYkNvcmU6OlByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOwogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QgZmluYWw7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgZmluYWw7CiAgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFj
ZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2Nv
YS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDc0
MWJlMzZiZTZmNS4uODA4Mjc1MWYxZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJm
YWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODMsNiArODMsMTggQEAgdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFj
ZUJhY2tlbmQ6OnNldE93bmVyc2hpcElkZW50aXR5KGNvbnN0IFdlYkMKICAgICBtX3N1cmZhY2Ut
PnNldE93bmVyc2hpcElkZW50aXR5KHJlc291cmNlT3duZXIpOwogfQogCitSZWZQdHI8TmF0aXZl
SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIGF1
dG8gY3VycmVudFNlZWQgPSBtX3N1cmZhY2UtPnNlZWQoKTsKKworICAgIC8vIEludmFsaWRhdGUg
dGhlIGNhY2hlZCBpbWFnZSBiZWZvcmUgZ2V0dGluZyBhIG5ldyBvbmUgYmVjYXVzZSBHUFVQcm9j
ZXNzIG1pZ2h0CisgICAgLy8gaGF2ZSBkcmF3biBzb21ldGhpbmcgdG8gdGhlIElPU3VyZmFjZSBz
aW5jZSBsYXN0IHRpbWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLgorICAgIGlmIChzdGQ6OmV4
Y2hhbmdlKG1fbGFzdFNlZWRXaGVuQ29weWluZ0ltYWdlLCBjdXJyZW50U2VlZCkgIT0gY3VycmVu
dFNlZWQpCisgICAgICAgIGludmFsaWRhdGVDYWNoZWROYXRpdmVJbWFnZSgpOworCisgICAgcmV0
dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJ
T1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5oCmluZGV4
IGIxNDQyNmU3ZjQyZC4uODc2NzBjMzkxZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9T
dXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmgKQEAg
LTM3LDggKzM3LDYgQEAgY2xhc3MgUHJvY2Vzc0lkZW50aXR5OwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgU2hhcmVhYmxlQml0bWFwOwotCiBjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLCBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlU2hhcmlu
ZyB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBl
ZElPU3VyZmFjZUJhY2tlbmQpOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
U2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZCk7CkBAIC01NSw2ICs1MywxMCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIC8vIEltYWdlQnVmZmVyQmFja2VuZFNoYXJpbmcKICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmRTaGFyaW5nKiB0b0JhY2tlbmRTaGFyaW5nKCkgZmluYWwgeyByZXR1cm4g
dGhpczsgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1h
Z2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUp
IGNvbnN0IGZpbmFsOworCisgICAgbXV0YWJsZSBXZWJDb3JlOjpJT1N1cmZhY2VTZWVkIG1fbGFz
dFNlZWRXaGVuQ29weWluZ0ltYWdlIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0tIAoyLjMyLjAgKEFwcGxlIEdpdC0xMzIpCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>