<?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>89901</bug_id>
          
          <creation_ts>2012-06-25 13:00:14 -0700</creation_ts>
          <short_desc>[chromium] Respect memory needed for RenderSurfaces when reserving contents textures</short_desc>
          <delta_ts>2012-07-04 13:51:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>84308</dependson>
    
    <dependson>89793</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656800</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 13:00:14 -0700</bug_when>
    <thetext>[chromium] Respect memory needed for RenderSurfaces when reserving contents textures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656823</commentid>
    <comment_count>1</comment_count>
      <attachid>149344</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 13:49:20 -0700</bug_when>
    <thetext>Created attachment 149344
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656825</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 13:50:23 -0700</bug_when>
    <thetext>Once we do this, we can allocate RenderSurface textures in LRC freely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656922</commentid>
    <comment_count>3</comment_count>
      <attachid>149344</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-25 15:23:47 -0700</bug_when>
    <thetext>Comment on attachment 149344
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:494
&gt;      // otherwise it will always push us towards the maximum limit.

I think with this change this comment doesn&apos;t apply anymore. With this change, we would actually want the contents limit to push towards the maximum limit (after render surfaces have been subtracted). So we could just compute the render surface usage and set the maximum once at the top here and be done with preferred etc.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:568
&gt; +        reserveRenderSurfaceMemoryBytes(*m_contentsTextureManager.get(), requiredBytes);

Rather than calling this function several times inside here, could we just have another function like ::computeRenderSurfaceMemoryBytes() that is called once before any painting even starts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656930</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-25 15:34:01 -0700</bug_when>
    <thetext>I personally like this. We should still set a limit of render surfaces (minimally 100% of the total limit, but maybe 50% or 33% would make more sense?)  I also like contents using the &quot;remainder&quot; rather than surfaces, since contents will just grow to fill any limit, where as hopefully render surfaces will be pretty reasonable.   If surfaces were using 50% of our total limit it seems the page would be almost completely dead already just rendering all those surfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656933</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-25 15:35:38 -0700</bug_when>
    <thetext>Can we add some histograms about RS usage in the wild? I&apos;d be surprised if we were hitting or even getting close to the RS limits on most pages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656948</commentid>
    <comment_count>6</comment_count>
      <attachid>149344</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 15:51:39 -0700</bug_when>
    <thetext>Comment on attachment 149344
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:494
&gt;&gt;      // otherwise it will always push us towards the maximum limit.
&gt; 
&gt; I think with this change this comment doesn&apos;t apply anymore. With this change, we would actually want the contents limit to push towards the maximum limit (after render surfaces have been subtracted). So we could just compute the render surface usage and set the maximum once at the top here and be done with preferred etc.

Oh was the preferred meant to help for RenderSurfaces? Then ya we could remove it now :)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:568
&gt;&gt; +        reserveRenderSurfaceMemoryBytes(*m_contentsTextureManager.get(), requiredBytes);
&gt; 
&gt; Rather than calling this function several times inside here, could we just have another function like ::computeRenderSurfaceMemoryBytes() that is called once before any painting even starts?

I wanted to only reserve one at a time, as its contents are reserved, so that when we OOM, we allocate surfaces that will have contents, and don&apos;t prevent contents with surfaces that won&apos;t have any contents allocated that draw into them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656950</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 15:53:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I personally like this. We should still set a limit of render surfaces (minimally 100% of the total limit, but maybe 50% or 33% would make more sense?)  I also like contents using the &quot;remainder&quot; rather than surfaces, since contents will just grow to fill any limit, where as hopefully render surfaces will be pretty reasonable.   If surfaces were using 50% of our total limit it seems the page would be almost completely dead already just rendering all those surfaces.

Personally I think 100% is fine, especially since this is reserving space for each surface as it reserves contents that draw into it.

(In reply to comment #5)
&gt; Can we add some histograms about RS usage in the wild? I&apos;d be surprised if we were hitting or even getting close to the RS limits on most pages

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657037</commentid>
    <comment_count>8</comment_count>
      <attachid>149399</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 17:13:13 -0700</bug_when>
    <thetext>Created attachment 149399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657041</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 17:14:21 -0700</bug_when>
    <thetext>Added histograms, and stopped using the preferred limit as per epenner&apos;s suggestion - instead just using the max limit after subtracting render surfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657067</commentid>
    <comment_count>10</comment_count>
      <attachid>149406</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 17:35:29 -0700</bug_when>
    <thetext>Created attachment 149406
Patch

- Little change to the test to clear the rootLayer pointer, as the others are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657076</commentid>
    <comment_count>11</comment_count>
      <attachid>149344</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-25 17:47:57 -0700</bug_when>
    <thetext>Comment on attachment 149344
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:568
&gt;&gt;&gt; +        reserveRenderSurfaceMemoryBytes(*m_contentsTextureManager.get(), requiredBytes);
&gt;&gt; 
&gt;&gt; Rather than calling this function several times inside here, could we just have another function like ::computeRenderSurfaceMemoryBytes() that is called once before any painting even starts?
&gt; 
&gt; I wanted to only reserve one at a time, as its contents are reserved, so that when we OOM, we allocate surfaces that will have contents, and don&apos;t prevent contents with surfaces that won&apos;t have any contents allocated that draw into them.

I see. This is going to be more difficult to support in the model where we request all textures with priorities in advance (rushes to submit patch first ;) ). I&apos;m hoping it will be acceptable to just request all surfaces and subtract that from contents memory. All renders surfaces are visible, so we need them to render the page correctly... So this will only really &quot;help&quot; in the ~50%-100% memory usage range, and by &quot;help&quot; I mean render the page &quot;less incorrect&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657119</commentid>
    <comment_count>12</comment_count>
      <attachid>149406</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-25 18:23:33 -0700</bug_when>
    <thetext>Comment on attachment 149406
Patch

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

&gt; Source/WebCore/ChangeLog:80
&gt; +        Here we stop doing this, and create RenderSurfaces on both threads
&gt; +        under the same conditions, so main thread has surfaces only if the
&gt; +        layers in its current frame demand them. While this may reduce
&gt; +        paint culling within an animating subtree, this seems like an edge
&gt; +        case and knowing the amount of surface memory needed for the frame
&gt; +        is important.

How does that work? You&apos;re not really creating render surfaces in the same conditions, since on the main thread these animations may not have even started yet.  Would it make more sense to reserve as if the animation had started rather than potentially underestimating?

&gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp:82
&gt; +    if (!m_backgroundFilters.isEmpty())
&gt; +        bytes += TextureManager::memoryUseBytes(m_contentRect.size(), backgroundTextureFormat());

Is this also just meant to be an estimate, since m_contentRect is not the size of the background texture?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:579
&gt; +        bool isRootRenderSurface = it.targetRenderSurfaceLayer() != renderSurfaceLayerList[0];

You could just stick the root render surface in allocatedSurfaces...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:581
&gt; +            reserveRenderSurfaceMemoryBytes(*m_contentsTextureManager.get(), occlusionTracker.overdrawMetrics(), target-&gt;requiredTextureBytes());

So the idea is to allocate all render surfaces simultaneously and just cache all surfaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657156</commentid>
    <comment_count>13</comment_count>
      <attachid>149344</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-25 19:05:10 -0700</bug_when>
    <thetext>Comment on attachment 149344
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:568
&gt;&gt;&gt;&gt; +        reserveRenderSurfaceMemoryBytes(*m_contentsTextureManager.get(), requiredBytes);
&gt;&gt;&gt; 
&gt;&gt;&gt; Rather than calling this function several times inside here, could we just have another function like ::computeRenderSurfaceMemoryBytes() that is called once before any painting even starts?
&gt;&gt; 
&gt;&gt; I wanted to only reserve one at a time, as its contents are reserved, so that when we OOM, we allocate surfaces that will have contents, and don&apos;t prevent contents with surfaces that won&apos;t have any contents allocated that draw into them.
&gt; 
&gt; I see. This is going to be more difficult to support in the model where we request all textures with priorities in advance (rushes to submit patch first ;) ). I&apos;m hoping it will be acceptable to just request all surfaces and subtract that from contents memory. All renders surfaces are visible, so we need them to render the page correctly... So this will only really &quot;help&quot; in the ~50%-100% memory usage range, and by &quot;help&quot; I mean render the page &quot;less incorrect&quot;.

And just to be clear I&apos;m joking above and I like this; I&apos;m just not sure whether we should add a lot of code to support custom priorities for each surface once that CL lands. Currently we don&apos;t need layer ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657182</commentid>
    <comment_count>14</comment_count>
      <attachid>149406</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 19:24:19 -0700</bug_when>
    <thetext>Comment on attachment 149406
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:80
&gt;&gt; +        is important.
&gt; 
&gt; How does that work? You&apos;re not really creating render surfaces in the same conditions, since on the main thread these animations may not have even started yet.  Would it make more sense to reserve as if the animation had started rather than potentially underestimating?

Oh crap that&apos;s supposed to be 89793, I uploaded them together *^_^*.

My thinking is that is seems fine to go over the limit a little here and there. If we assume all animations are surfaces we will greatly overestimate surface memory (most animations are not surfaces), and evict contents. Instead, I favoured going over the limit for a bit. The main thread animates too (at a slower rate) and will realize these animating things are a render surface and adjust, if and when it sees that.

&gt;&gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp:82
&gt;&gt; +        bytes += TextureManager::memoryUseBytes(m_contentRect.size(), backgroundTextureFormat());
&gt; 
&gt; Is this also just meant to be an estimate, since m_contentRect is not the size of the background texture?

m_contentRect is the size of the background texture, but not the size of the readback texture. The readback texture is &lt;= the root surface so it&apos;s accounted for.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:579
&gt;&gt; +        bool isRootRenderSurface = it.targetRenderSurfaceLayer() != renderSurfaceLayerList[0];
&gt; 
&gt; You could just stick the root render surface in allocatedSurfaces...

Oh. ya that&apos;s true. I will do that!

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:581
&gt;&gt; +            reserveRenderSurfaceMemoryBytes(*m_contentsTextureManager.get(), occlusionTracker.overdrawMetrics(), target-&gt;requiredTextureBytes());
&gt; 
&gt; So the idea is to allocate all render surfaces simultaneously and just cache all surfaces?

yeh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657240</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 20:54:02 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 149344 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149344&amp;action=review
&gt; And just to be clear I&apos;m joking above and I like this; I&apos;m just not sure whether we should add a lot of code to support custom priorities for each surface once that CL lands. Currently we don&apos;t need layer ordering.

Ah I see. With PTM it seems like it would make sense to just compute the sum total of surfaces at the start. I am just trying to worry about how it might be abused. For any memory limit, I can construct a legitimate webpage that would use arbitrarily close to 100% of the available memory for surfaces, and a small amount for content, without going outside our memory limit. And I think we should be able to display it, since it is within our bounds. So I don&apos;t like limiting surfaces to some arbitrary &lt; 100%. Also if we do that, then which surfaces to drop? Impl side has to agree again suddenly. Right now it has a very clear clue which surfaces to draw (they have non empty quad list, ie at least one contributing texture). We would need to add a flag of some sort to RenderSurface in order to drop/skip the RenderPass when creating quads.

It&apos;s a bit awkward though, I mean, if we reserve all the surface memory we could easily prevent any contents from being drawn. Is that okay? I&apos;ve been assuming it&apos;s not.


Currently PTM puts the cutoff so that no textures above the cutoff fail to be allocated. Then it just grabs more-or-less arbitrary textures to fill in the remaining memory during paint.

What if we decided which textures would be drawn during prioritization instead of during paint. Ie once we run out of memory, we pick an arbitrary set of textures with priority = the cutoff that stay below the limit, and mark them as above (others are below). And then during paint we only allow textures strictly marked as above.

Then, what if we did prioritization such that visible textures drawing to the root surface get visible+0.5. Visible textures drawing to the next surface get visible+0.4. Visible textures drawing to the next visible+0.3, etc.

Theh, when we sort, the visible things will be sorted according to target surface. As we walk down the priority list, at priority visible+0.5, we must reduce available memory by the size of the root render surface. At visible+0.4, we reduce available memory by the next render surface.

If we reach the end of visible priorities, we&apos;ll have reserved space for all the render surfaces. If we do not, we will have reserved space for any surfaces with visible textures that will be available.


I could write this change against the PTM patch, with intent to land it after PRM does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657597</commentid>
    <comment_count>16</comment_count>
      <attachid>149530</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-26 07:37:31 -0700</bug_when>
    <thetext>Created attachment 149530
Patch

- Without 89793 included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657626</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-26 08:41:08 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; What if we decided which textures would be drawn during prioritization instead of during paint. Ie once we run out of memory, we pick an arbitrary set of textures with priority = the cutoff that stay below the limit, and mark them as above (others are below). And then during paint we only allow textures strictly marked as above.

Right.. and occlusion culling throws its wrench in here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658779</commentid>
    <comment_count>18</comment_count>
      <attachid>149783</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-27 12:31:07 -0700</bug_when>
    <thetext>Created attachment 149783
Patch

This CL is now rebased onto the PrioritizedTextureManager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660651</commentid>
    <comment_count>19</comment_count>
      <attachid>150220</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 11:20:21 -0700</bug_when>
    <thetext>Created attachment 150220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660682</commentid>
    <comment_count>20</comment_count>
      <attachid>150220</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 11:41:51 -0700</bug_when>
    <thetext>Comment on attachment 150220
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)

Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.

It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660684</commentid>
    <comment_count>21</comment_count>
      <attachid>150220</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 11:45:07 -0700</bug_when>
    <thetext>Comment on attachment 150220
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt; 
&gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt; 
&gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.

The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660691</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 11:54:57 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 150220 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150220&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt; &gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt; &gt; 
&gt; &gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt; &gt; 
&gt; &gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.
&gt; 
&gt; The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.

I think I understand the end behavior you want. I thought you were going to just not let render surfaces OOM us by not letting them use all of our memory. Given that this is just to provide some user feedback that the page is OOM, I don&apos;t know how optimal this needs to be.

As an alternative, would using a texture format of -1 work? Then we could put in a normal request for the render surface memory rather than a custom bytes value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660696</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 11:59:35 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; (From update of attachment 150220 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150220&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt; &gt; &gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt; &gt; &gt; 
&gt; &gt; &gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt; &gt; &gt; 
&gt; &gt; &gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.
&gt; &gt; 
&gt; &gt; The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.
&gt; 
&gt; I think I understand the end behavior you want. I thought you were going to just not let render surfaces OOM us by not letting them use all of our memory. Given that this is just to provide some user feedback that the page is OOM, I don&apos;t know how optimal this needs to be.
&gt; 
&gt; As an alternative, would using a texture format of -1 work? Then we could put in a normal request for the render surface memory rather than a custom bytes value.

Hmm, since this is already implemented, I&apos;ll leave it up to you and Enne to decide what is best. If we keep it this way, just add a FIXME in prioritizeTextures that notes how we could remove the custom behavior (once everything is on the same thread and surfaces can be requested like other textures).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660700</commentid>
    <comment_count>24</comment_count>
      <attachid>150220</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 12:03:51 -0700</bug_when>
    <thetext>Comment on attachment 150220
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt;&gt;&gt;&gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.
&gt;&gt;&gt; 
&gt;&gt;&gt; The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.
&gt;&gt; 
&gt;&gt; I think I understand the end behavior you want. I thought you were going to just not let render surfaces OOM us by not letting them use all of our memory. Given that this is just to provide some user feedback that the page is OOM, I don&apos;t know how optimal this needs to be.
&gt;&gt; 
&gt;&gt; As an alternative, would using a texture format of -1 work? Then we could put in a normal request for the render surface memory rather than a custom bytes value.
&gt; 
&gt; Hmm, since this is already implemented, I&apos;ll leave it up to you and Enne to decide what is best. If we keep it this way, just add a FIXME in prioritizeTextures that notes how we could remove the custom behavior (once everything is on the same thread and surfaces can be requested like other textures).

I don&apos;t think we can just request them like normal memory until we get rid of requestLate. Once that happens we could though!

If all the root surface texture don&apos;t fit in memory, we&apos;ll prioritize nothing, and then we&apos;ll walk front-to-back requestLate and taking all the memory for textures in child surfaces, and nothing will appear again. See the 3 lines in requestLate for the important bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660704</commentid>
    <comment_count>25</comment_count>
      <attachid>150220</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 12:20:23 -0700</bug_when>
    <thetext>Comment on attachment 150220
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt;&gt;&gt;&gt;&gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think I understand the end behavior you want. I thought you were going to just not let render surfaces OOM us by not letting them use all of our memory. Given that this is just to provide some user feedback that the page is OOM, I don&apos;t know how optimal this needs to be.
&gt;&gt;&gt; 
&gt;&gt;&gt; As an alternative, would using a texture format of -1 work? Then we could put in a normal request for the render surface memory rather than a custom bytes value.
&gt;&gt; 
&gt;&gt; Hmm, since this is already implemented, I&apos;ll leave it up to you and Enne to decide what is best. If we keep it this way, just add a FIXME in prioritizeTextures that notes how we could remove the custom behavior (once everything is on the same thread and surfaces can be requested like other textures).
&gt; 
&gt; I don&apos;t think we can just request them like normal memory until we get rid of requestLate. Once that happens we could though!
&gt; 
&gt; If all the root surface texture don&apos;t fit in memory, we&apos;ll prioritize nothing, and then we&apos;ll walk front-to-back requestLate and taking all the memory for textures in child surfaces, and nothing will appear again. See the 3 lines in requestLate for the important bit.

Okay, so because we paint from front-to-back, requestLate will allow the other memory instead of the root render surface memory like you want. Is that correct?

We can fix that by only allowing requestLate to succeed when the textures are equal to the cutoff priority (rather than letting any texture succeed). I mean to add that before actually. Would that help? Request late is meant to disambiguate rather than providing a totally different priority order (it just didn&apos;t matter when &quot;visible&quot; was the only priority we needed disambiguate).

I would also love to just remove requestLate. It&apos;s probably will perform very poorly as it can result in cascading cache misses like the old LRU. Android clearly doesn&apos;t need it since we don&apos;t even have occlusions.. Not sure how to decide if we can remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660705</commentid>
    <comment_count>26</comment_count>
      <attachid>150220</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 12:23:41 -0700</bug_when>
    <thetext>Comment on attachment 150220
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I think I understand the end behavior you want. I thought you were going to just not let render surfaces OOM us by not letting them use all of our memory. Given that this is just to provide some user feedback that the page is OOM, I don&apos;t know how optimal this needs to be.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; As an alternative, would using a texture format of -1 work? Then we could put in a normal request for the render surface memory rather than a custom bytes value.
&gt;&gt;&gt; 
&gt;&gt;&gt; Hmm, since this is already implemented, I&apos;ll leave it up to you and Enne to decide what is best. If we keep it this way, just add a FIXME in prioritizeTextures that notes how we could remove the custom behavior (once everything is on the same thread and surfaces can be requested like other textures).
&gt;&gt; 
&gt;&gt; I don&apos;t think we can just request them like normal memory until we get rid of requestLate. Once that happens we could though!
&gt;&gt; 
&gt;&gt; If all the root surface texture don&apos;t fit in memory, we&apos;ll prioritize nothing, and then we&apos;ll walk front-to-back requestLate and taking all the memory for textures in child surfaces, and nothing will appear again. See the 3 lines in requestLate for the important bit.
&gt; 
&gt; Okay, so because we paint from front-to-back, requestLate will allow the other memory instead of the root render surface memory like you want. Is that correct?
&gt; 
&gt; We can fix that by only allowing requestLate to succeed when the textures are equal to the cutoff priority (rather than letting any texture succeed). I mean to add that before actually. Would that help? Request late is meant to disambiguate rather than providing a totally different priority order (it just didn&apos;t matter when &quot;visible&quot; was the only priority we needed disambiguate).
&gt; 
&gt; I would also love to just remove requestLate. It&apos;s probably will perform very poorly as it can result in cascading cache misses like the old LRU. Android clearly doesn&apos;t need it since we don&apos;t even have occlusions.. Not sure how to decide if we can remove it.

Oh, hm. Well I think we definitely can&apos;t remove it for now, until we have occlusion information in the prioritization step. Or we will just not use available memory for visible textures that we could have.

But yes, making it only allocate things equal to the cutoff...I can&apos;t think of any reason why that wouldn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660713</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 12:38:10 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 150220 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150220&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:59
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; +void CCPrioritizedTextureManager::prioritizeTextures(size_t rootRenderSurfaceMemoryBytes, size_t childRenderSurfacesMemoryBytes)
&gt; &gt;&gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Could we possibly just change the limit instead of passing this custom information in here? Ideally this class could be generic with the exception of the priority calculator. What&apos;s wrong with just making render surfaces universally higher priority and just making sure there is some memory left for the root render surface contents.
&gt; &gt;&gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt;&gt; It looks like once these are on the same thread we could actually just request the render surfaces like any other memory. Possibly as stop-gap we could add a custom format that never gets allocated. Then we could just add a big texture request for all the other render surfaces, which would get prioritized with everything else.
&gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; The reason I pass in the render surface limit is it gets applied after the visible textures in the root render surface. This is to handle OOM the way we talked about - visible things in the root render surface will still appear. Otherwise, if we just decrease the limit, and surfaces OOM us, we display nothing at all.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; I think I understand the end behavior you want. I thought you were going to just not let render surfaces OOM us by not letting them use all of our memory. Given that this is just to provide some user feedback that the page is OOM, I don&apos;t know how optimal this needs to be.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; As an alternative, would using a texture format of -1 work? Then we could put in a normal request for the render surface memory rather than a custom bytes value.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Hmm, since this is already implemented, I&apos;ll leave it up to you and Enne to decide what is best. If we keep it this way, just add a FIXME in prioritizeTextures that notes how we could remove the custom behavior (once everything is on the same thread and surfaces can be requested like other textures).
&gt; &gt;&gt; 
&gt; &gt;&gt; I don&apos;t think we can just request them like normal memory until we get rid of requestLate. Once that happens we could though!
&gt; &gt;&gt; 
&gt; &gt;&gt; If all the root surface texture don&apos;t fit in memory, we&apos;ll prioritize nothing, and then we&apos;ll walk front-to-back requestLate and taking all the memory for textures in child surfaces, and nothing will appear again. See the 3 lines in requestLate for the important bit.
&gt; &gt; 
&gt; &gt; Okay, so because we paint from front-to-back, requestLate will allow the other memory instead of the root render surface memory like you want. Is that correct?
&gt; &gt; 
&gt; &gt; We can fix that by only allowing requestLate to succeed when the textures are equal to the cutoff priority (rather than letting any texture succeed). I mean to add that before actually. Would that help? Request late is meant to disambiguate rather than providing a totally different priority order (it just didn&apos;t matter when &quot;visible&quot; was the only priority we needed disambiguate).
&gt; &gt; 
&gt; &gt; I would also love to just remove requestLate. It&apos;s probably will perform very poorly as it can result in cascading cache misses like the old LRU. Android clearly doesn&apos;t need it since we don&apos;t even have occlusions.. Not sure how to decide if we can remove it.
&gt; 
&gt; Oh, hm. Well I think we definitely can&apos;t remove it for now, until we have occlusion information in the prioritization step. Or we will just not use available memory for visible textures that we could have.
&gt; 
&gt; But yes, making it only allocate things equal to the cutoff...I can&apos;t think of any reason why that wouldn&apos;t work.

Actually, thinking about it more, requestLate might not be that bad after all. The cascading cache misses in the LRU came from an attempt recycling inside of protectTexture(). Since we defer recycling now, it shouldn&apos;t be a problem.  Nonetheless, it would be good to get rid of requestLate. If you have some thoughts on figuring out how to persistent occlusions (for the prioritize step) I&apos;d love to hear it. That would be pretty great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660741</commentid>
    <comment_count>28</comment_count>
      <attachid>150246</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 13:25:18 -0700</bug_when>
    <thetext>Created attachment 150246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660749</commentid>
    <comment_count>29</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 13:33:05 -0700</bug_when>
    <thetext>Simplied the patch a bit. The requestLate() can now only request things == the priority cutoff. This makes less non-obvious code yay.

I convinced myself root surface will always be 0 bytes under ubercomp. (The root surface is always axis aligned, opaque etc. The host compositor might use a surface for drawing the quads, but it will choose that and own the memory for it.)

Discussed with Eric some and we decided to go with the custom RenderSurface request approach as it is here. When we make this a more global resource manager, we&apos;ll have placeholder requests and surfaces can fit into that model. Added a FIXME to this effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660767</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 13:59:57 -0700</bug_when>
    <thetext>Since we are removing the preferred limit (yay!) I&apos;m okay with adding some custom logic for render surfaces for now.

However, I think to remove the preferred limit safely we need to fix this code:

void LayerRendererChromium::decideRenderPassAllocationsForFrame(const CCRenderPassList&amp; renderPassesInDrawOrder)
{
    // FIXME: Get this memory limit from GPU Memory Manager
    size_t contentsMemoryUseBytes = m_contentsTextureAllocator-&gt;currentMemoryUseBytes();
    size_t maxLimitBytes = TextureManager::highLimitBytes(viewportSize());
    size_t memoryLimitBytes = maxLimitBytes - contentsMemoryUseBytes &gt; 0u ? maxLimitBytes - contentsMemoryUseBytes : 0u;

    m_implTextureManager-&gt;setMaxMemoryLimitBytes(memoryLimitBytes);
}

I added back the preferred limit to be 3/4 of max in the PTM so that this limit will never be zero (it would happily go to zero before I think!). The PTM is much more likely to make it go to zero as it will more likely use all available memory up to it&apos;s limit. Should we just set this limit to the limit we calculated on the main thread * some bonus multiplier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660770</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 14:04:57 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Since we are removing the preferred limit (yay!) I&apos;m okay with adding some custom logic for render surfaces for now.
&gt; 
&gt; However, I think to remove the preferred limit safely we need to fix this code:
&gt; 
&gt; void LayerRendererChromium::decideRenderPassAllocationsForFrame(const CCRenderPassList&amp; renderPassesInDrawOrder)
&gt; {
&gt;     // FIXME: Get this memory limit from GPU Memory Manager
&gt;     size_t contentsMemoryUseBytes = m_contentsTextureAllocator-&gt;currentMemoryUseBytes();
&gt;     size_t maxLimitBytes = TextureManager::highLimitBytes(viewportSize());
&gt;     size_t memoryLimitBytes = maxLimitBytes - contentsMemoryUseBytes &gt; 0u ? maxLimitBytes - contentsMemoryUseBytes : 0u;
&gt; 
&gt;     m_implTextureManager-&gt;setMaxMemoryLimitBytes(memoryLimitBytes);
&gt; }
&gt; 
&gt; I added back the preferred limit to be 3/4 of max in the PTM so that this limit will never be zero (it would happily go to zero before I think!). The PTM is much more likely to make it go to zero as it will more likely use all available memory up to it&apos;s limit. Should we just set this limit to the limit we calculated on the main thread * some bonus multiplier?

I guess to fit with this CL, we would want to set it to max - &quot;contents in root surface&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660777</commentid>
    <comment_count>32</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 14:08:45 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Since we are removing the preferred limit (yay!) I&apos;m okay with adding some custom logic for render surfaces for now.
&gt; 
&gt; However, I think to remove the preferred limit safely we need to fix this code:
&gt; 
&gt; void LayerRendererChromium::decideRenderPassAllocationsForFrame(const CCRenderPassList&amp; renderPassesInDrawOrder)
&gt; {
&gt;     // FIXME: Get this memory limit from GPU Memory Manager
&gt;     size_t contentsMemoryUseBytes = m_contentsTextureAllocator-&gt;currentMemoryUseBytes();
&gt;     size_t maxLimitBytes = TextureManager::highLimitBytes(viewportSize());
&gt;     size_t memoryLimitBytes = maxLimitBytes - contentsMemoryUseBytes &gt; 0u ? maxLimitBytes - contentsMemoryUseBytes : 0u;
&gt; 
&gt;     m_implTextureManager-&gt;setMaxMemoryLimitBytes(memoryLimitBytes);
&gt; }
&gt; 
&gt; I added back the preferred limit to be 3/4 of max in the PTM so that this limit will never be zero (it would happily go to zero before I think!). The PTM is much more likely to make it go to zero as it will more likely use all available memory up to it&apos;s limit. Should we just set this limit to the limit we calculated on the main thread * some bonus multiplier?

That limit is kinda meaningless atm. We don&apos;t respect it at all during drawing, it just sets a limit that we drop down to at the end of the frame. At any rate, this CL as it is should strictly improve the current situation, by letting us keep more surfaces across frames.

I think we want to set this to maxint though basically. (I have another CL in progress to completely remove the implTextureManager mess for RenderSurfaces so it&apos;ll take care of that also.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660791</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-29 14:39:06 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #30)
&gt; &gt; Since we are removing the preferred limit (yay!) I&apos;m okay with adding some custom logic for render surfaces for now.
&gt; &gt; 
&gt; &gt; However, I think to remove the preferred limit safely we need to fix this code:
&gt; &gt; 
&gt; &gt; void LayerRendererChromium::decideRenderPassAllocationsForFrame(const CCRenderPassList&amp; renderPassesInDrawOrder)
&gt; &gt; {
&gt; &gt;     // FIXME: Get this memory limit from GPU Memory Manager
&gt; &gt;     size_t contentsMemoryUseBytes = m_contentsTextureAllocator-&gt;currentMemoryUseBytes();
&gt; &gt;     size_t maxLimitBytes = TextureManager::highLimitBytes(viewportSize());
&gt; &gt;     size_t memoryLimitBytes = maxLimitBytes - contentsMemoryUseBytes &gt; 0u ? maxLimitBytes - contentsMemoryUseBytes : 0u;
&gt; &gt; 
&gt; &gt;     m_implTextureManager-&gt;setMaxMemoryLimitBytes(memoryLimitBytes);
&gt; &gt; }
&gt; &gt; 
&gt; &gt; I added back the preferred limit to be 3/4 of max in the PTM so that this limit will never be zero (it would happily go to zero before I think!). The PTM is much more likely to make it go to zero as it will more likely use all available memory up to it&apos;s limit. Should we just set this limit to the limit we calculated on the main thread * some bonus multiplier?
&gt; 
&gt; That limit is kinda meaningless atm. We don&apos;t respect it at all during drawing, it just sets a limit that we drop down to at the end of the frame. At any rate, this CL as it is should strictly improve the current situation, by letting us keep more surfaces across frames.
&gt; 
&gt; I think we want to set this to maxint though basically. (I have another CL in progress to completely remove the implTextureManager mess for RenderSurfaces so it&apos;ll take care of that also.)

I think zero is a special case where anything that needs a render surfaces will disappear (but maybe I&apos;m misunderstanding). If it&apos;s irrelevant, why don&apos;t we just set it to be 1000MB until we can fix that code. Or if I&apos;m wrong then just ignore me ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660846</commentid>
    <comment_count>34</comment_count>
      <attachid>150246</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 16:07:16 -0700</bug_when>
    <thetext>Comment on attachment 150246
Patch

Attachment 150246 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13114520</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660885</commentid>
    <comment_count>35</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-29 17:31:28 -0700</bug_when>
    <thetext>Yep when theres not enough space for surfaces then we also dont prioritize/allocate any textures that draw into surfaces. So then we wont need to allocate the surfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661705</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-07-02 13:58:39 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Yep when theres not enough space for surfaces then we also dont prioritize/allocate any textures that draw into surfaces. So then we wont need to allocate the surfaces.

Okay, so instead of perferred limit we now have render surface memory which will also prevent us from passing 0 to implTextureManager.  SG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662942</commentid>
    <comment_count>37</comment_count>
      <attachid>150794</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-04 07:52:30 -0700</bug_when>
    <thetext>Created attachment 150794
Patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662949</commentid>
    <comment_count>38</comment_count>
      <attachid>150794</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 07:58:03 -0700</bug_when>
    <thetext>Comment on attachment 150794
Patch

Attachment 150794 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13129840</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662972</commentid>
    <comment_count>39</comment_count>
      <attachid>150801</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-04 08:21:02 -0700</bug_when>
    <thetext>Created attachment 150801
Patch

fix uninit errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663076</commentid>
    <comment_count>40</comment_count>
      <attachid>150801</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-04 11:20:19 -0700</bug_when>
    <thetext>Comment on attachment 150801
Patch

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

Am I right that this current patch will only render the root (and its UI) if it has too many render surfaces to render? That seems like really poor OOM behavior.  I felt a lot more comfortable when this patch was reserving render surfaces incrementally.  I agree with jamesr that RS usage in the wild is probably pretty low on average, but I need a little bit of convincing to feel like we&apos;re not going to break some small number of existing sites that use them heavily.

Have you run this patch on sites that generate a lot of render surfaces (or have previously hit texture limits and caused us bugs) to make sure they still render the same with and without this patch that reserves all render surfaces simultaneously? For example, http://www.apple.com/iphone/ and http://www.kraftrecipes.com/recipes/sandwich/index.aspx and http://acko.net/blog/this-is-your-brain-on-css/.

&gt; Source/WebCore/ChangeLog:19
&gt; +        Since surface memory can no longer be taken by contents, we remove the
&gt; +        preferred memory limit from the texture manager.

I love that this can go away.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:531
&gt; +    for (size_t i = 1; i &lt; updateList.size(); ++i) {

Can you add a comment for why this starts at 1?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:162
&gt; +    if (CCPriorityCalculator::priorityIsLower(texture-&gt;requestPriority(), m_priorityCutoff))
&gt; +        return false;
&gt; +
&gt;      size_t newMemoryBytes = m_memoryAboveCutoffBytes + texture-&gt;memorySizeBytes();
&gt; -    if (newMemoryBytes &gt; m_maxMemoryLimitBytes)
&gt; +    if (newMemoryBytes &gt; m_memoryAvailableBytes)
&gt;          return false;

What&apos;s wrong with letting other textures do a requestLate? For example, say you had a scrollable non-root content layer whose prepainted textures didn&apos;t make the priority cutoff, but due to occlusion, there was room for prepainting.  Would we not want to give them memory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663080</commentid>
    <comment_count>41</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-04 11:43:35 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 150801 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150801&amp;action=review
&gt; 
&gt; Am I right that this current patch will only render the root (and its UI) if it has too many render surfaces to render? That seems like really poor OOM behavior.  I felt a lot more comfortable when this patch was reserving render surfaces incrementally.  I agree with jamesr that RS usage in the wild is probably pretty low on average, but I need a little bit of convincing to feel like we&apos;re not going to break some small number of existing sites that use them heavily.

It will only render the root render surface (which isn&apos;t the same as the root layer). In order to reach this situation we have:
a) a very low memory limit
b) contents in the root surface taking up a lot of memory, or
c) ridiculous render surface usage.

I expect that displaying the root surface will be enough to tell that the page is attempting to display, and probably enough to use it.

&gt; Have you run this patch on sites that generate a lot of render surfaces (or have previously hit texture limits and caused us bugs) to make sure they still render the same with and without this patch that reserves all render surfaces simultaneously? For example, http://www.apple.com/iphone/ and http://www.kraftrecipes.com/recipes/sandwich/index.aspx and http://acko.net/blog/this-is-your-brain-on-css/.

The pages all seem to function the same with/out the patch though FWIW. I don&apos;t actually know any website that would up all the contents budget with surfaces.

Iphone uses a couple surfaces, but doesn&apos;t OOM us. The other 2 don&apos;t seem to use any surfaces. They have OOMed us in the past with layers that draw into the root surface. If they did use a render surface, then all layers drawing into it would disappear first, now. Previously, it would be the back-most layer to disappear first. And we might allocate all the contents memory to surfaces which then were too large to allocate and show nothing.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:531
&gt; &gt; +    for (size_t i = 1; i &lt; updateList.size(); ++i) {
&gt; 
&gt; Can you add a comment for why this starts at 1?

Yup! (It&apos;s skipping the root surface.)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:162
&gt; &gt; +    if (CCPriorityCalculator::priorityIsLower(texture-&gt;requestPriority(), m_priorityCutoff))
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt;      size_t newMemoryBytes = m_memoryAboveCutoffBytes + texture-&gt;memorySizeBytes();
&gt; &gt; -    if (newMemoryBytes &gt; m_maxMemoryLimitBytes)
&gt; &gt; +    if (newMemoryBytes &gt; m_memoryAvailableBytes)
&gt; &gt;          return false;
&gt; 
&gt; What&apos;s wrong with letting other textures do a requestLate? For example, say you had a scrollable non-root content layer whose prepainted textures didn&apos;t make the priority cutoff, but due to occlusion, there was room for prepainting.  Would we not want to give them memory?

Because requestLate() does not happen in priority order. The goal is the following:

If a contents texture is allocated, we also have space for all of its target textures up to the root. If we don&apos;t have space for surface textures, then we should not allocate any contents that will draw into non-root surfaces. This way we can allocate all surfaces that have contents drawing into them in LRC, we don&apos;t need to keep around extra state for which surfaces are to be allocated.

If requestLate() happened in priority order, or even in surface dependency order, we could do something with it. But as it is, it happens in front-to-back order (requirement for occlusion). We&apos;d need to do a &quot;request space for surfaces on demand&quot; approach.

I went with this because I feel the on-demand case is just overkill for what we need. It would complicate up the texture manager, requiring it to know/use the layer/surface tree structure in some way. This method allows it to know/use a single integer. This is the trade off as I am seeing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663081</commentid>
    <comment_count>42</comment_count>
      <attachid>150828</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-04 11:48:27 -0700</bug_when>
    <thetext>Created attachment 150828
Patch

- added comment to for loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663107</commentid>
    <comment_count>43</comment_count>
      <attachid>150828</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-04 12:46:28 -0700</bug_when>
    <thetext>Comment on attachment 150828
Patch

Thanks for testing on those pages.  They&apos;ve OOMed us in the past (when we had lower limits) and have had anecdotally had a lot of RS usage.  If they don&apos;t really have much at all, then all the better.

Re: root surface vs. root layer.  Ah, quite right.  I misread that.  Just rendering the root surface is an entirely different thing.  That makes sense that you wouldn&apos;t want to reserve anything but the root surface in that case.  I am totally swayed by arguments about simplicity here.

Re: requestLate.  Sure, it doesn&apos;t happen in priority order and I buy that for render surface OOM, you wouldn&apos;t want anything else.  But for content OOM + occlusion, maybe you would, even if you found out that you could at the wrong time to make an optimal choice? Maybe that&apos;s just too much complication.  In the future, I&apos;m hoping impl-side painting will simplify this because we can have SkPicture and occlusion information before we allocate or prioritize textures.

R=me.  Let&apos;s see how this goes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663111</commentid>
    <comment_count>44</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-04 12:48:43 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 150828 [details])
&gt; Thanks for testing on those pages.  They&apos;ve OOMed us in the past (when we had lower limits) and have had anecdotally had a lot of RS usage.  If they don&apos;t really have much at all, then all the better.
&gt; 
&gt; Re: root surface vs. root layer.  Ah, quite right.  I misread that.  Just rendering the root surface is an entirely different thing.  That makes sense that you wouldn&apos;t want to reserve anything but the root surface in that case.  I am totally swayed by arguments about simplicity here.
&gt; 
&gt; Re: requestLate.  Sure, it doesn&apos;t happen in priority order and I buy that for render surface OOM, you wouldn&apos;t want anything else.  But for content OOM + occlusion, maybe you would, even if you found out that you could at the wrong time to make an optimal choice? Maybe that&apos;s just too much complication.  In the future, I&apos;m hoping impl-side painting will simplify this because we can have SkPicture and occlusion information before we allocate or prioritize textures.

Yah, that. I&apos;m expecting us to improve the prioritization a lot with occlusion, and we can remove requestLate entirely at that point.

&gt; R=me.  Let&apos;s see how this goes.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663148</commentid>
    <comment_count>45</comment_count>
      <attachid>150828</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 13:51:12 -0700</bug_when>
    <thetext>Comment on attachment 150828
Patch

Clearing flags on attachment: 150828

Committed r121870: &lt;http://trac.webkit.org/changeset/121870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663149</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 13:51:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149344</attachid>
            <date>2012-06-25 13:49:20 -0700</date>
            <delta_ts>2012-06-25 19:05:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120625164920.patch</filename>
            <type>text/plain</type>
            <size>20122</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI3NDM1YjlmZmM1MjQ4
NzFjZmVlMjA1MWRkM2NkZDliZDQwZDVlNC4uZGZhNmNiYjk2NjY2NGI1ODE2ODljMjU3NzUwNjdi
MWRkZDY0NTYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA2LTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuCisKKyAgICAgICAgSW4gdGhl
IGNvbnRleHQgb2YgdWJlcmNvbXAsIGVhY2ggbmVzdGVkIGNvbXBvc2l0b3Igd2lsbCB1c2UgbGVz
cyBtZW1vcnkKKyAgICAgICAgZm9yIGNvbnRlbnRzIGVuc3VyaW5nIHRoYXQgdGhlIHJvb3QgY29t
cG9zaXRvciBoYXMgc3BhY2UgZm9yIHN1cmZhY2VzCisgICAgICAgIGNhdXNlZCBieSB0aGF0IG5l
c3RlZCBjb21wb3NpdG9yLgorCisgICAgICAgIGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpIGFuZCBi
YWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpIG1ldGhvZHMgYWRkZWQgdG8KKyAgICAgICAgYm90aCBD
Q1JlbmRlclN1cmZhY2UgYW5kIFJlbmRlclN1cmZhY2VDaHJvbWl1bSB0byBpbmRpY2F0ZSB0aGVz
ZSBzaG91bGQKKyAgICAgICAgYmUga2VwdCBpbiBzeW5jLiBUaGV5IGFyZSB1c2VkIGluIENDUmVu
ZGVyU3VyZmFjZSBmb3IgYWN0dWFsIHRleHR1cmUKKyAgICAgICAgb3BlcmF0aW9ucywgYW5kIGlu
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSB0byBkZXRlcm1pbmUgdGhlIG1lbW9yeSB0aGF0CisgICAg
ICAgIHdvdWxkIGJlIHVzZWQgYnkgdGhlIHN1cmZhY2UncyB0ZXh0dXJlcy4KKworICAgICAgICBX
ZSBub3cgc2V0IHRoZSBtZW1vcnkgbGltaXQgZm9yIGNvbnRlbnRzIG9uIGV2ZXJ5IGZyYW1lLCBz
byBzaW1wbGlmeQorICAgICAgICBsb2dpYyBpbiB0aGUgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcikg
bWV0aG9kIGFzIGl0J3MgbW9yZSBjb21wbGV4IHRoYW4KKyAgICAgICAgaXQgbmVlZHMgdG8gYmUg
bm93LgorCisgICAgICAgIFRlc3Q6IENDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RT
dXJmYWNlTWVtb3J5VXNlCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpyZXF1aXJlZFRleHR1cmVCeXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6Y29udGVudHNUZXh0
dXJlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6YmFj
a2dyb3VuZFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoUmVuZGVyU3VyZmFjZUNocm9taXVtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6cmVzZXJ2ZVJlbmRlclN1cmZhY2VNZW1vcnlCeXRlcyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc1ZhbGlkQ29udGVudHNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6aGFzQ2FjaGVkQ29udGVudHNU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tn
cm91bmRUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y29u
dGVudHNUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6
YmFja2dyb3VuZFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKwog
MjAxMi0wNi0yMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIENyZWF0ZSByZW5kZXIgc3VyZmFjZXMgb24gbWFpbiB0aHJlYWQgb25seSBm
b3IgdGhlIGN1cnJlbnQgZnJhbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGExZGJm
ZTU0M2ExYzhkZjA5NzM4N2E0NGU5MzAyMGYwMjNhMjBlNS4uNTEwMTVhYTNlY2IzZWYwNTk3ZWMx
YzFhY2JiNWVlZDBlZDkyMWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAxMi0wNi0yNSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIFJlc3BlY3QgbWVtb3J5IG5lZWRlZCBmb3IgUmVuZGVyU3Vy
ZmFjZXMgd2hlbiByZXNlcnZpbmcgY29udGVudHMgdGV4dHVyZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTAxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNl
TWVtb3J5VXNlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbnRlbnRzUmVz
cGVjdFN1cmZhY2VNZW1vcnlVc2U6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RT
dXJmYWNlTWVtb3J5VXNlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbnRl
bnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlOjpkaWRDb21t
aXQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3Vy
ZmFjZU1lbW9yeVVzZTo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdENvbnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2U6OmFmdGVy
VGVzdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCiAyMDEyLTA2
LTIyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gQ3JlYXRlIHJlbmRlciBzdXJmYWNlcyBvbiBtYWluIHRocmVhZCBvbmx5IGZvciB0aGUg
Y3VycmVudCBmcmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKaW5kZXgg
YTVjNGM2MDgyNDU2OWUxNjc3OGUxMjkyYTFlMzUyY2Q2OWNhOGM3ZC4uOWI5NGMwNWE5Yzk2ZWRj
NzQ3NDQwOTJhOWU4YmJiZTI2MjU3ZTRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTc0
LDYgKzc1LDE0IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogUmVuZGVyU3VyZmFjZUNocm9taXVt
Ojp0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QKICAgICByZXR1cm4gcGFyZW50LT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCk7CiB9CiAKK3NpemVfdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnJlcXVp
cmVkVGV4dHVyZUJ5dGVzKCkgY29uc3QKK3sKKyAgICBzaXplX3QgYnl0ZXMgPSBUZXh0dXJlTWFu
YWdlcjo6bWVtb3J5VXNlQnl0ZXMobV9jb250ZW50UmVjdC5zaXplKCksIGNvbnRlbnRzVGV4dHVy
ZUZvcm1hdCgpKTsKKyAgICBpZiAoIW1fYmFja2dyb3VuZEZpbHRlcnMuaXNFbXB0eSgpKQorICAg
ICAgICBieXRlcyArPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV9jb250ZW50UmVj
dC5zaXplKCksIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkpOworICAgIHJldHVybiBieXRlczsK
K30KKwogYm9vbCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Omhhc1JlcGxpY2EoKSBjb25zdAogewog
ICAgIHJldHVybiBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVy
U3VyZmFjZUNocm9taXVtLmgKaW5kZXggMGU3ZDRlMzhjNTZjMWVjY2Q5NmY1Y2JhZmQ3NGY5ZGU1
ZjNkODdkOS4uN2VhNmMwMzQ2OGQxNWE2NDFiZjQ1MjBiZDhhMmE1MjYyYjRjMmE2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
IDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oPgpAQCAtMTEwLDYgKzExMSwxMSBAQCBwdWJsaWM6CiAKICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdDsKIAorICAg
IEdDM0RlbnVtIGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOyB9CisgICAgR0MzRGVudW0gYmFja2dyb3VuZFRleHR1cmVGb3JtYXQo
KSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsgfQorCisgICAgc2l6ZV90
IHJlcXVpcmVkVGV4dHVyZUJ5dGVzKCkgY29uc3Q7CisKICAgICBib29sIGhhc1JlcGxpY2EoKSBj
b25zdDsKIAogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKaW5kZXggN2QxNGNmNWRhM2E1YzMyYmU1ZjMwNDY1YTJhZThmZDhmNDBlM2NmYy4u
M2ZhYzRjZjk1NzRhNWIxNmIyYWM5NzQzNjY5NmYxM2RhZThiY2M5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCkBAIC00MzksNyArNDM5LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKQogfQogCiAKLXZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90
IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcykKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVM
YXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90IG1lbW9yeUFsbG9jYXRpb25M
aW1pdEJ5dGVzKQogewogICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCk7CiAg
ICAgQVNTRVJUKGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CkBAIC00NTAsNyArNDUwLDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiB1cGRh
dGVyLCBzaXplX3QgY29udGVudHNNZW0KICAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldE1l
bW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CisgICAg
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyht
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICB1cGRhdGVMYXllcnMocm9vdExheWVy
KCksIHVwZGF0ZXIpOwogfQpAQCAtNDg5LDIxICs0ODksMTcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIENDVGV4dHVyZVVwZGF0
ZXImIHUKICAgICByZXNlcnZlVGV4dHVyZXModXBkYXRlTGlzdCk7CiAKICAgICBwYWludExheWVy
Q29udGVudHModXBkYXRlTGlzdCwgUGFpbnRWaXNpYmxlLCB1cGRhdGVyKTsKLSAgICBpZiAoIW1f
dHJpZ2dlcklkbGVQYWludHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBwcmVmZXJy
ZWRMaW1pdEJ5dGVzID0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5wcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0Qnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVy
ZU1hbmFnZXItPm1heE1lbW9yeUxpbWl0Qnl0ZXMoKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQocHJlZmVycmVkTGltaXRCeXRlcyk7Ci0gICAgaWYg
KG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgPj0gcHJl
ZmVycmVkTGltaXRCeXRlcykKLSAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWRsZSBwYWludGlu
ZyBzaG91bGQgZmFpbCB3aGVuIHdlIGhpdCB0aGUgcHJlZmVycmVkIG1lbW9yeSBsaW1pdCwKICAg
ICAvLyBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcHVzaCB1cyB0b3dhcmRzIHRoZSBtYXhpbXVt
IGxpbWl0LgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRC
eXRlcyhwcmVmZXJyZWRMaW1pdEJ5dGVzKTsKLSAgICAvLyBUaGUgc2Vjb25kIChpZGxlKSBwYWlu
dCB3aWxsIGJlIGEgbm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBhaW50aW5nIGFscmVhZHkgb2NjdXJl
ZCBhYm92ZS4KLSAgICBwYWludExheWVyQ29udGVudHModXBkYXRlTGlzdCwgUGFpbnRJZGxlLCB1
cGRhdGVyKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0
Qnl0ZXMobWF4TGltaXRCeXRlcyk7CisgICAgc2l6ZV90IGlkbGVNYXhDb250ZW50Qnl0ZXMgPSBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoKTsKKyAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoaWRsZU1h
eENvbnRlbnRCeXRlcyk7CisKKyAgICBzaXplX3QgY3VycmVudENvbnRlbnRCeXRlcyA9IG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7CisgICAgaWYgKG1f
dHJpZ2dlcklkbGVQYWludHMgJiYgY3VycmVudENvbnRlbnRCeXRlcyA8IGlkbGVNYXhDb250ZW50
Qnl0ZXMpIHsKKyAgICAgICAgLy8gVGhlIHNlY29uZCAoaWRsZSkgcGFpbnQgd2lsbCBiZSBhIG5v
LW9wIGluIGxheWVycyB3aGVyZSBwYWludGluZyBhbHJlYWR5IG9jY3VyZWQgYWJvdmUuCisgICAg
ICAgIHBhaW50TGF5ZXJDb250ZW50cyh1cGRhdGVMaXN0LCBQYWludElkbGUsIHVwZGF0ZXIpOwor
ICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXBkYXRlTGlzdC5zaXplKCk7ICsr
aSkKICAgICAgICAgdXBkYXRlTGlzdFtpXS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CkBAIC01NDgs
MTEgKzU0NCwzMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrc0ZvclJlbmRlclN1
cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheQogICAgICAgICB1cGRhdGUocmVw
bGljYU1hc2tMYXllciwgcGFpbnRUeXBlLCB1cGRhdGVyLCAwKTsKIH0KIAorc3RhdGljIGlubGlu
ZSB2b2lkIHJlc2VydmVSZW5kZXJTdXJmYWNlTWVtb3J5Qnl0ZXMoVGV4dHVyZU1hbmFnZXImIHRl
eHR1cmVNYW5hZ2VyLCBzaXplX3QgcmVxdWlyZWRCeXRlcykKK3sKKyAgICBzaXplX3QgbWF4Q29u
dGVudEJ5dGVzID0gdGV4dHVyZU1hbmFnZXIubWF4TWVtb3J5TGltaXRCeXRlcygpOworICAgIHNp
emVfdCBjdXJyZW50Q29udGVudEJ5dGVzID0gdGV4dHVyZU1hbmFnZXIuY3VycmVudE1lbW9yeVVz
ZUJ5dGVzKCk7CisKKyAgICBzaXplX3QgYXZhaWxhYmxlQ29udGVudEJ5dGVzID0gbWF4Q29udGVu
dEJ5dGVzIC0gY3VycmVudENvbnRlbnRCeXRlczsKKyAgICBzaXplX3QgcmVzZXJ2ZUJ5dGVzID0g
cmVxdWlyZWRCeXRlcyA8PSBhdmFpbGFibGVDb250ZW50Qnl0ZXMgPyByZXF1aXJlZEJ5dGVzIDog
YXZhaWxhYmxlQ29udGVudEJ5dGVzOworICAgIHRleHR1cmVNYW5hZ2VyLnNldE1heE1lbW9yeUxp
bWl0Qnl0ZXMobWF4Q29udGVudEJ5dGVzIC0gcmVzZXJ2ZUJ5dGVzKTsKK30KKwogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIFBhaW50VHlwZSBwYWludFR5cGUsIENDVGV4dHVyZVVwZGF0ZXImIHVw
ZGF0ZXIpCiB7CiAgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0aW5nIG9j
Y2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgogICAg
IHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zOjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKIAorICAgIEhhc2hTZXQ8UmVu
ZGVyU3VyZmFjZUNocm9taXVtKj4gYWxsb2NhdGVkU3VyZmFjZXM7CisgICAgYm9vbCB0cmFja1Jl
bmRlclN1cmZhY2VNZW1vcnkgPSBwYWludFR5cGUgPT0gUGFpbnRWaXNpYmxlOworICAgIGlmICh0
cmFja1JlbmRlclN1cmZhY2VNZW1vcnkpIHsKKyAgICAgICAgLy8gU2F2ZSBvbmUgdmlld3BvcnQg
Zm9yIHRoZSByb290IHJlbmRlciBzdXJmYWNlLCBpZiBpdCBoYXMgYQorICAgICAgICAvLyB0ZXh0
dXJlLCBvciBmb3IgYW55IHJlYWRiYWNrcyByZXF1aXJlZCB0byBkcmF3IHRoZSBmcmFtZS4KKyAg
ICAgICAgc2l6ZV90IHJlcXVpcmVkQnl0ZXMgPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0
ZXMobV9kZXZpY2VWaWV3cG9ydFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpOworICAgICAg
ICByZXNlcnZlUmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVzKCptX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIuZ2V0KCksIHJlcXVpcmVkQnl0ZXMpOworICAgIH0KKwogICAgIGJvb2wgcmVjb3JkTWV0cmlj
c0ZvckZyYW1lID0gdHJ1ZTsgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3
aGVuIGFib3V0OnRyYWNpbmcgaXMgb2ZmLgogICAgIENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNp
b25UcmFja2VyKEludFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpLCByZWNv
cmRNZXRyaWNzRm9yRnJhbWUpOwogICAgIG9jY2x1c2lvblRyYWNrZXIuc2V0TWluaW11bVRyYWNr
aW5nU2l6ZShDQ09jY2x1c2lvblRyYWNrZXI6OnByZWZlcnJlZE1pbmltdW1UcmFja2luZ1NpemUo
KSk7CkBAIC01NjEsNiArNTc2LDEzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgZm9y
IChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJl
bmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgb2NjbHVz
aW9uVHJhY2tlci5lbnRlckxheWVyKGl0KTsKIAorICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0qIHRhcmdldCA9IGl0LnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgIGJvb2wgaXNSb290UmVuZGVyU3VyZmFjZSA9IGl0LnRhcmdldFJlbmRlclN1
cmZhY2VMYXllcigpICE9IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF07CisgICAgICAgIGlmICh0
cmFja1JlbmRlclN1cmZhY2VNZW1vcnkgJiYgIWlzUm9vdFJlbmRlclN1cmZhY2UgJiYgIWFsbG9j
YXRlZFN1cmZhY2VzLmNvbnRhaW5zKHRhcmdldCkpIHsKKyAgICAgICAgICAgIHJlc2VydmVSZW5k
ZXJTdXJmYWNlTWVtb3J5Qnl0ZXMoKm1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSwgdGFy
Z2V0LT5yZXF1aXJlZFRleHR1cmVCeXRlcygpKTsKKyAgICAgICAgICAgIGFsbG9jYXRlZFN1cmZh
Y2VzLmFkZCh0YXJnZXQpOworICAgICAgICB9CisKICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNU
YXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kcmF3T3BhY2l0eSgpIHx8IGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5
SXNBbmltYXRpbmcoKSk7CiAgICAgICAgICAgICBwYWludE1hc2tzRm9yUmVuZGVyU3VyZmFjZSgq
aXQsIHBhaW50VHlwZSwgdXBkYXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4
IDZmNjk0NmUzMWM3YTMzYWJhZGY3OGQ2NTY1MGUwYjkzNTI2NjY1NGYuLjI1OGM5ZTY1MGIzM2Vh
NjgxMjg4M2Q3OGMwNzBkMDA3OTY5MzQwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
CkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhY3F1aXJlTGF5
ZXJUZXh0dXJlcygpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2Ugc2hvdWxkIGFib3J0IHRo
aXMgZnJhbWUgZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuCiAgICAgYm9vbCBpbml0aWFs
aXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllcnMoQ0NUZXh0
dXJlVXBkYXRlciYsIHNpemVfdCBjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpOworICAgIHZvaWQg
dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImLCBzaXplX3QgbWVtb3J5QWxsb2NhdGlvbkxp
bWl0Qnl0ZXMpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVy
biBtX2NsaWVudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCAxY2Rh
ZDIyZTQ2OGMxMjRkMjhiMWU4ZDRiY2ZlZGZjZmFmYTE3NTljLi41MWM3NzRlYmE0OTYwMTY5MzUx
OWQ3ZmZlY2I5Zjk2NzAxYWE1N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAK
QEAgLTEwMyw3ICsxMDMsNyBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRz
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZQogICAgIGlmIChtX2Nv
bnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNl
cnZlKG1fY29udGVudFJlY3Quc2l6ZSgpLCBjb250ZW50c1RleHR1cmVGb3JtYXQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE4LDEyICsxMTgsMTIg
QEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUoKQogCiBib29s
IENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRDb250ZW50c1RleHR1cmUoKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZl
ZCgpICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYm
IG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUtPmlz
VmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpKTsKIH0K
IAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5p
c1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cisg
ICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlk
KG1fY29udGVudFJlY3Quc2l6ZSgpLCBjb250ZW50c1RleHR1cmVGb3JtYXQoKSk7CiB9CiAKIGJv
b2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlcmVyKQpAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgQ0NSZW5k
ZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlCiAgICAgaWYgKG1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUtPnJl
c2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAg
ICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCks
IGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggY2RkN2E3YjU5
ZWEzMWQxY2ZjNTIxMTA1MzJmZWU3OGUyOGU4ZDc4YS4uZTdjYzU1NDM2YWQ1ZGJkZDU2ZmIyYjg4
MDliZDc3Mzk3YWFiMmMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTEyNSw2
ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgTWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlLmdldCgpOyB9CiAgICAgTWFuYWdlZFRl
eHR1cmUqIGJhY2tncm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kVGV4
dHVyZS5nZXQoKTsgfQogCisgICAgR0MzRGVudW0gY29udGVudHNUZXh0dXJlRm9ybWF0KCkgY29u
c3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7IH0KKyAgICBHQzNEZW51bSBiYWNr
Z3JvdW5kVGV4dHVyZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOyB9CisKICAgICBpbnQgb3duaW5nTGF5ZXJJZCgpIGNvbnN0OwogICAgIENDUmVuZGVyU3Vy
ZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBkMjc3Mzc5
MGViZjU0NzlmNmQwMzJhOGVmMjliYmEwNTdjZjM5YjZiLi41OTZkNzYzNzliY2E1ZmMyZTIzNWFk
MjQ4NzZmNGQyMzYyMjg3NmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJBbmltYXRpb25JZFZlbmRvci5oIgogI2luY2x1ZGUgIkNDT2NjbHVzaW9uVHJhY2tlclRlc3RD
b21tb24uaCIKICNpbmNsdWRlICJDQ1RocmVhZGVkVGVzdC5oIgorI2luY2x1ZGUgIkNDVGlsZWRM
YXllclRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgImNjL0NDR3JhcGhp
Y3NDb250ZXh0LmgiCkBAIC0yMjY5LDQgKzIyNzAsMTAwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVuVGVzdCh0cnVl
KTsKIH0KIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdENvbnRlbnRzUmVzcGVjdFN1cmZhY2VN
ZW1vcnlVc2UgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdENvbnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2UoKQorICAgICAg
ICA6IG1fcm9vdExheWVyKExheWVyQ2hyb21pdW06OmNyZWF0ZSgpKQorICAgICAgICAsIG1fY2hp
bGRMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX2RlbGVnYXRlKSkKKyAgICAg
ICAgLCBtX3JlbmRlclN1cmZhY2VMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZt
X2RlbGVnYXRlKSkKKyAgICAgICAgLCBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVyKENvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGUoJm1fZGVsZWdhdGUpKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1p
dFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXQoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpIHsK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgLy8gcmVuZGVyU3VyZmFjZUxheWVyIHdpbGwg
YmUgcGFpbnRlZCBiZWZvcmUgY2hpbGRMYXllciwgYW5kIHdpbGwgdGFrZSBtZW1vcnkgYmVmb3Jl
IGl0LgorICAgICAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7Cisg
ICAgICAgICAgICBtX2NoaWxkTGF5ZXItPmFkZENoaWxkKG1fcmVuZGVyU3VyZmFjZUxheWVyKTsK
KyAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLT5hZGRDaGlsZChtX3JlbmRlclN1cmZh
Y2VDaGlsZExheWVyKTsKKworICAgICAgICAgICAgbV9jaGlsZExheWVyLT5zZXRJc0RyYXdhYmxl
KHRydWUpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXItPnNldElzRHJhd2FibGUo
dHJ1ZSk7CisgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVyLT5zZXRJc0RyYXdh
YmxlKHRydWUpOworCisgICAgICAgICAgICBtX3Jvb3RMYXllci0+c2V0Qm91bmRzKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICAgICAgICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKKyAgICAgICAgICAgIG1fY2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICAgICAgICAgIG1fY2hpbGRMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllci0+c2V0
T3BhY2l0eSgwLjUpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICBtX3JlbmRlclN1
cmZhY2VDaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICAg
ICAgbV9yZW5kZXJTdXJmYWNlQ2hpbGRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgw
LCAwKSk7CisKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKG1fcm9v
dExheWVyKTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKElu
dFNpemUoMTAwLCAxMDApKTsKKworICAgICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWlu
VGhyZWFkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGhvc3RJbXBsLT5zb3VyY2VGcmFtZU51
bWJlcigpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIC8vIE1lbW9yeSB1c2FnZSBm
b3IgdGhlIHJlbmRlciBzdXJmYWNlIGNoaWxkIGlzIDEwMCoxMDAqNC4KKyAgICAgICAgICAgIC8v
IE1lbW9yeSB1c2FnZSBmb3IgdGhlIHJlbmRlciBzdXJmYWNlIGxheWVyIGlzIDEwMCoxMDAqNC4K
KyAgICAgICAgICAgIC8vIE1lbW9yeSB1c2FnZSBmb3IgdGhlIHJlbmRlciBzdXJmYWNlIGludGVy
bWVkaWF0ZSB0ZXh0dXJlIGlzIDEwMCoxMDAqNC4KKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxk
IGhhdmUgbWVtb3J5IGZvciB0aGUgcmVuZGVyIHN1cmZhY2UgYW5kIGl0cyBsYXllcnMsCisgICAg
ICAgICAgICAvLyBidXQgdGhlIGNoaWxkTGF5ZXIgd2lsbCBub3QgZml0LgorICAgICAgICAgICAg
aG9zdEltcGwtPnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKDEwMCoxMDAqNCozKTsKKyAg
ICAgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGNvbnN0IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKiBjaGlsZExheWVySW1wbCA9IHN0YXRpY19jYXN0PGNvbnN0IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKj4oaG9zdEltcGwtPnJvb3RMYXllcigpLT5jaGlsZHJlbigpWzBdLmdldCgpKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXJJ
bXBsID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmFrZUNDVGlsZWRMYXllckltcGwqPihjaGlsZExheWVy
SW1wbC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CisgICAgICAgICAgICBjb25zdCBGYWtlQ0NUaWxl
ZExheWVySW1wbCogcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXJJbXBsID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRmFrZUNDVGlsZWRMYXllckltcGwqPihyZW5kZXJTdXJmYWNlTGF5ZXJJbXBsLT5jaGlsZHJl
bigpWzBdLmdldCgpKTsKKworICAgICAgICAgICAgLy8gVGhlIGNoaWxkIGxheWVyIHdvbid0IGZp
dCBpbiBtZW1vcnkgc28gc2hvdWxkIG5vdCBoYXZlIGFueSB0aWxlcy4KKyAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShjaGlsZExheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKworICAgICAgICAg
ICAgLy8gVGhlIHN1cmZhY2UgbGF5ZXIgYW5kIGl0cyBjaGlsZCBzaG91bGQgaGF2ZSB0aWxlcy4K
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbmRlclN1cmZhY2VMYXllckltcGwtPmhhc1RpbGVB
dCgwLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW5kZXJTdXJmYWNlQ2hpbGRMYXll
ckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CisKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVy
VGVzdCgpCisgICAgeworICAgICAgICAvLyBDbGVhciBSZWZQdHJzIHNvIENDTGF5ZXJUcmVlSG9z
dCBkaWVzLgorICAgICAgICBtX2NoaWxkTGF5ZXIuY2xlYXIoKTsKKyAgICAgICAgbV9yZW5kZXJT
dXJmYWNlTGF5ZXIuY2xlYXIoKTsKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlQ2hpbGRMYXllci5j
bGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUg
bV9kZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290TGF5ZXI7CisgICAg
UmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPENv
bnRlbnRMYXllckNocm9taXVtPiBtX3JlbmRlclN1cmZhY2VMYXllcjsKKyAgICBSZWZQdHI8Q29u
dGVudExheWVyQ2hyb21pdW0+IG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXI7Cit9OworCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0VGVzdENvbnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2UsIHJ1
bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149399</attachid>
            <date>2012-06-25 17:13:13 -0700</date>
            <delta_ts>2012-06-25 17:35:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120625201312.patch</filename>
            <type>text/plain</type>
            <size>26991</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI3NDM1YjlmZmM1MjQ4
NzFjZmVlMjA1MWRkM2NkZDliZDQwZDVlNC4uMDc5M2JiYjUyNGE4NjQ0NDQ0YWFjYjA5ODAzNDQw
OWZmMTEwYjQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA2LTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSBhbmQgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSBtZXRob2Rz
IGFkZGVkIHRvCisgICAgICAgIGJvdGggQ0NSZW5kZXJTdXJmYWNlIGFuZCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0gdG8gaW5kaWNhdGUgdGhlc2Ugc2hvdWxkCisgICAgICAgIGJlIGtlcHQgaW4gc3lu
Yy4gVGhleSBhcmUgdXNlZCBpbiBDQ1JlbmRlclN1cmZhY2UgZm9yIGFjdHVhbCB0ZXh0dXJlCisg
ICAgICAgIG9wZXJhdGlvbnMsIGFuZCBpbiBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gdG8gZGV0ZXJt
aW5lIHRoZSBtZW1vcnkgdGhhdAorICAgICAgICB3b3VsZCBiZSB1c2VkIGJ5IHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMuCisKKyAgICAgICAgV2Ugbm93IHNldCB0aGUgbWVtb3J5IGxpbWl0IGZvciBj
b250ZW50cyBvbiBldmVyeSBmcmFtZSwgc28gc2ltcGxpZnkKKyAgICAgICAgbG9naWMgaW4gdGhl
IHVwZGF0ZUxheWVycyhyb290TGF5ZXIpIG1ldGhvZCBhcyBpdCdzIG1vcmUgY29tcGxleCB0aGFu
CisgICAgICAgIGl0IG5lZWRzIHRvIGJlIG5vdy4KKworICAgICAgICBUZXN0OiBDQ0xheWVyVHJl
ZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZQorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVxdWlyZWRUZXh0dXJlQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJm
YWNlQ2hyb21pdW06OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTdXJmYWNlQ2hyb21pdW06OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAg
KFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc2VydmVSZW5kZXJT
dXJmYWNlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T3ZlcmRyYXdNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDT3ZlcmRyYXdNZXRyaWNz
OjpDQ092ZXJkcmF3TWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVNZW1vcnlCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6cmVjb3JkTWV0cmljc0ludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oOgorICAgICAgICAoQ0NPdmVyZHJhd01ldHJp
Y3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250
ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxp
ZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhh
c0NhY2hlZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclN1cmZhY2U6OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1JlbmRlclN1cmZhY2U6OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKENDUmVu
ZGVyU3VyZmFjZSk6CisKIDIwMTItMDYtMjIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgcmVuZGVyIHN1cmZhY2VzIG9uIG1h
aW4gdGhyZWFkIG9ubHkgZm9yIHRoZSBjdXJyZW50IGZyYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGRhMWRiZmU1NDNhMWM4ZGYwOTczODdhNDRlOTMwMjBmMDIzYTIwZTUuLjUxMDE1
YWEzZWNiM2VmMDU5N2VjMWMxYWNiYjVlZWQwZWQ5MjFkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDYtMjUgIERhbmEgSmFuc2VucyAgPGRhbmFr
akBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZXNwZWN0IG1lbW9yeSBuZWVk
ZWQgZm9yIFJlbmRlclN1cmZhY2VzIHdoZW4gcmVzZXJ2aW5nIGNvbnRlbnRzIHRleHR1cmVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTkwMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVu
dHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlOjpDQ0xheWVyVHJlZUhvc3RUZXN0
Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlOjpiZWdpblRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1l
bW9yeVVzZTo6ZGlkQ29tbWl0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENv
bnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2U6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNl
TWVtb3J5VXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VEVT
VF9GKToKKwogMjAxMi0wNi0yMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSByZW5kZXIgc3VyZmFjZXMgb24gbWFpbiB0aHJl
YWQgb25seSBmb3IgdGhlIGN1cnJlbnQgZnJhbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwCmluZGV4IGE1YzRjNjA4MjQ1NjllMTY3NzhlMTI5MmExZTM1MmNkNjljYThjN2Qu
LjliOTRjMDVhOWM5NmVkYzc0NzQ0MDkyYTllOGJiYmUyNjI1N2U0ZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAi
RmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CkBAIC03NCw2ICs3NSwxNCBAQCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIFJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6dGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHBhcmVudC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOwogfQogCitzaXplX3QgUmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpyZXF1aXJlZFRleHR1cmVCeXRlcygpIGNvbnN0Cit7CisgICAgc2l6ZV90IGJ5
dGVzID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKG1fY29udGVudFJlY3Quc2l6ZSgp
LCBjb250ZW50c1RleHR1cmVGb3JtYXQoKSk7CisgICAgaWYgKCFtX2JhY2tncm91bmRGaWx0ZXJz
LmlzRW1wdHkoKSkKKyAgICAgICAgYnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5
dGVzKG1fY29udGVudFJlY3Quc2l6ZSgpLCBiYWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpKTsKKyAg
ICByZXR1cm4gYnl0ZXM7Cit9CisKIGJvb2wgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpoYXNSZXBs
aWNhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDBlN2Q0ZTM4YzU2YzFlY2Nk
OTZmNWNiYWZkNzRmOWRlNWYzZDg3ZDkuLjdlYTZjMDM0NjhkMTVhNjQxYmY0NTIwYmQ4YTJhNTI2
MmI0YzJhNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0zMCw2ICsz
MCw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KQEAgLTExMCw2ICsxMTEsMTEgQEAg
cHVibGljOgogCiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNl
KCkgY29uc3Q7CiAKKyAgICBHQzNEZW51bSBjb250ZW50c1RleHR1cmVGb3JtYXQoKSBjb25zdCB7
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsgfQorICAgIEdDM0RlbnVtIGJhY2tncm91
bmRUZXh0dXJlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
IH0KKworICAgIHNpemVfdCByZXF1aXJlZFRleHR1cmVCeXRlcygpIGNvbnN0OworCiAgICAgYm9v
bCBoYXNSZXBsaWNhKCkgY29uc3Q7CiAKICAgICBib29sIGhhc01hc2soKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdkMTRjZjVkYTNhNWMzMmJlNWYzMDQ2NWEy
YWU4ZmQ4ZjQwZTNjZmMuLmYzYmE2Y2VjNDg4MWY0ODg0NjBkMDRiYjI2YWFkMGNmYzM5NDBhYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNDM5LDcgKzQzOSw3IEBAIGJv
b2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkKIH0K
IAogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXIm
IHVwZGF0ZXIsIHNpemVfdCBjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNpemVfdCBt
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcykKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVy
SW5pdGlhbGl6ZWQpOwogICAgIEFTU0VSVChjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpOwpAQCAt
NDUwLDcgKzQ1MCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0
dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtCiAgICAgaWYgKHZpZXdwb3J0
U2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5zZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhjb250ZW50c01lbW9yeUxp
bWl0Qnl0ZXMpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5QWxsb2Nh
dGlvbkxpbWl0Qnl0ZXMobWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMpOwogCiAgICAgdXBkYXRl
TGF5ZXJzKHJvb3RMYXllcigpLCB1cGRhdGVyKTsKIH0KQEAgLTQ4OSwyMSArNDg5LDEzIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
LCBDQ1RleHR1cmVVcGRhdGVyJiB1CiAgICAgcmVzZXJ2ZVRleHR1cmVzKHVwZGF0ZUxpc3QpOwog
CiAgICAgcGFpbnRMYXllckNvbnRlbnRzKHVwZGF0ZUxpc3QsIFBhaW50VmlzaWJsZSwgdXBkYXRl
cik7Ci0gICAgaWYgKCFtX3RyaWdnZXJJZGxlUGFpbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzaXplX3QgcHJlZmVycmVkTGltaXRCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
cHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygpOwotICAgIHNpemVfdCBtYXhMaW1pdEJ5dGVzID0g
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCk7Ci0gICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHByZWZlcnJlZExpbWl0
Qnl0ZXMpOwotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlV
c2VCeXRlcygpID49IHByZWZlcnJlZExpbWl0Qnl0ZXMpCi0gICAgICAgIHJldHVybjsKIAotICAg
IC8vIElkbGUgcGFpbnRpbmcgc2hvdWxkIGZhaWwgd2hlbiB3ZSBoaXQgdGhlIHByZWZlcnJlZCBt
ZW1vcnkgbGltaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYWx3YXlzIHB1c2ggdXMgdG93
YXJkcyB0aGUgbWF4aW11bSBsaW1pdC4KLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVycmVkTGltaXRCeXRlcyk7Ci0gICAgLy8gVGhlIHNl
Y29uZCAoaWRsZSkgcGFpbnQgd2lsbCBiZSBhIG5vLW9wIGluIGxheWVycyB3aGVyZSBwYWludGlu
ZyBhbHJlYWR5IG9jY3VyZWQgYWJvdmUuCi0gICAgcGFpbnRMYXllckNvbnRlbnRzKHVwZGF0ZUxp
c3QsIFBhaW50SWRsZSwgdXBkYXRlcik7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0Qnl0ZXMpOworICAgIHNpemVfdCBtYXhDb250
ZW50Qnl0ZXNBZnRlclJlbmRlclN1cmZhY2VzID0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5t
YXhNZW1vcnlMaW1pdEJ5dGVzKCk7CisgICAgc2l6ZV90IGN1cnJlbnRDb250ZW50Qnl0ZXMgPSBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpOworICAgIGlm
IChtX3RyaWdnZXJJZGxlUGFpbnRzICYmIGN1cnJlbnRDb250ZW50Qnl0ZXMgPCBtYXhDb250ZW50
Qnl0ZXNBZnRlclJlbmRlclN1cmZhY2VzKSB7CisgICAgICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUp
IHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBv
Y2N1cmVkIGFib3ZlLgorICAgICAgICBwYWludExheWVyQ29udGVudHModXBkYXRlTGlzdCwgUGFp
bnRJZGxlLCB1cGRhdGVyKTsKKyAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVw
ZGF0ZUxpc3Quc2l6ZSgpOyArK2kpCiAgICAgICAgIHVwZGF0ZUxpc3RbaV0tPmNsZWFyUmVuZGVy
U3VyZmFjZSgpOwpAQCAtNTQ4LDE5ICs1NDAsNDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50TWFza3NGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXkK
ICAgICAgICAgdXBkYXRlKHJlcGxpY2FNYXNrTGF5ZXIsIHBhaW50VHlwZSwgdXBkYXRlciwgMCk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNlcnZlUmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVz
KFRleHR1cmVNYW5hZ2VyJiB0ZXh0dXJlTWFuYWdlciwgQ0NPdmVyZHJhd01ldHJpY3MmIG92ZXJk
cmF3TWV0cmljcywgc2l6ZV90IHJlcXVpcmVkQnl0ZXMpCit7CisgICAgc2l6ZV90IG1heENvbnRl
bnRCeXRlcyA9IHRleHR1cmVNYW5hZ2VyLm1heE1lbW9yeUxpbWl0Qnl0ZXMoKTsKKyAgICBzaXpl
X3QgY3VycmVudENvbnRlbnRCeXRlcyA9IHRleHR1cmVNYW5hZ2VyLmN1cnJlbnRNZW1vcnlVc2VC
eXRlcygpOworCisgICAgc2l6ZV90IGF2YWlsYWJsZUNvbnRlbnRCeXRlcyA9IG1heENvbnRlbnRC
eXRlcyAtIGN1cnJlbnRDb250ZW50Qnl0ZXM7CisgICAgc2l6ZV90IHJlc2VydmVCeXRlcyA9IHJl
cXVpcmVkQnl0ZXMgPD0gYXZhaWxhYmxlQ29udGVudEJ5dGVzID8gcmVxdWlyZWRCeXRlcyA6IGF2
YWlsYWJsZUNvbnRlbnRCeXRlczsKKyAgICB0ZXh0dXJlTWFuYWdlci5zZXRNYXhNZW1vcnlMaW1p
dEJ5dGVzKG1heENvbnRlbnRCeXRlcyAtIHJlc2VydmVCeXRlcyk7CisKKyAgICBvdmVyZHJhd01l
dHJpY3MuZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyhyZXNlcnZlQnl0ZXMp
OworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSwgQ0NU
ZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKIHsKICAgICAvLyBVc2UgRnJvbnRUb0JhY2sgdG8gYWxs
b3cgZm9yIHRlc3Rpbmcgb2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcgZHVyaW5nIHRo
ZSB0cmVlIHdhbGsuCiAgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOwog
CisgICAgSGFzaFNldDxSZW5kZXJTdXJmYWNlQ2hyb21pdW0qPiBhbGxvY2F0ZWRTdXJmYWNlczsK
KyAgICBib29sIHRyYWNrUmVuZGVyU3VyZmFjZU1lbW9yeSA9IHBhaW50VHlwZSA9PSBQYWludFZp
c2libGU7CisKICAgICBib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSA9IHRydWU7IC8vIEZJWE1F
OiBJbiB0aGUgZnV0dXJlLCBkaXNhYmxlIHRoaXMgd2hlbiBhYm91dDp0cmFjaW5nIGlzIG9mZi4K
ICAgICBDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KEludFBvaW50
KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSwgcmVjb3JkTWV0cmljc0ZvckZyYW1lKTsKICAgICBv
Y2NsdXNpb25UcmFja2VyLnNldE1pbmltdW1UcmFja2luZ1NpemUoQ0NPY2NsdXNpb25UcmFja2Vy
OjpwcmVmZXJyZWRNaW5pbXVtVHJhY2tpbmdTaXplKCkpOwogCisgICAgaWYgKHRyYWNrUmVuZGVy
U3VyZmFjZU1lbW9yeSkgeworICAgICAgICAvLyBTYXZlIG9uZSB2aWV3cG9ydCBmb3IgdGhlIHJv
b3QgcmVuZGVyIHN1cmZhY2UsIGlmIGl0IGhhcyBhCisgICAgICAgIC8vIHRleHR1cmUsIG9yIGZv
ciBhbnkgcmVhZGJhY2tzIHJlcXVpcmVkIHRvIGRyYXcgdGhlIGZyYW1lLgorICAgICAgICBzaXpl
X3QgcmVxdWlyZWRCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhtX2Rldmlj
ZVZpZXdwb3J0U2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQik7CisgICAgICAgIHJlc2VydmVS
ZW5kZXJTdXJmYWNlTWVtb3J5Qnl0ZXMoKm1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSwg
b2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKSwgcmVxdWlyZWRCeXRlcyk7CisgICAg
fQorCiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpl
bmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlw
ZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIuZW50ZXJMYXll
cihpdCk7CiAKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXQgPSBpdC50YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBib29sIGlz
Um9vdFJlbmRlclN1cmZhY2UgPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0WzBdOworICAgICAgICBpZiAodHJhY2tSZW5kZXJTdXJmYWNlTWVt
b3J5ICYmICFpc1Jvb3RSZW5kZXJTdXJmYWNlICYmICFhbGxvY2F0ZWRTdXJmYWNlcy5jb250YWlu
cyh0YXJnZXQpKSB7CisgICAgICAgICAgICByZXNlcnZlUmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVz
KCptX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuZ2V0KCksIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRy
YXdNZXRyaWNzKCksIHRhcmdldC0+cmVxdWlyZWRUZXh0dXJlQnl0ZXMoKSk7CisgICAgICAgICAg
ICBhbGxvY2F0ZWRTdXJmYWNlcy5hZGQodGFyZ2V0KTsKKyAgICAgICAgfQorCiAgICAgICAgIGlm
IChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSB8fCBpdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkpOwogICAgICAgICAgICAgcGFpbnRNYXNrc0Zv
clJlbmRlclN1cmZhY2UoKml0LCBwYWludFR5cGUsIHVwZGF0ZXIpOwpAQCAtNTcyLDYgKzU5Myw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIubGVh
dmVMYXllcihpdCk7CiAgICAgfQogCisgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJp
Y3MoKS5kaWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAgICBvY2NsdXNpb25UcmFja2VyLm92
ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKaW5kZXggNmY2OTQ2ZTMxYzdhMzNhYmFkZjc4ZDY1NjUwZTBiOTM1MjY2NjU0
Zi4uMjU4YzllNjUwYjMzZWE2ODEyODgzZDc4YzA3MGQwMDc5NjkzNDA3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGFjcXVpcmVMYXllclRleHR1cmVzKCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3
ZSBzaG91bGQgYWJvcnQgdGhpcyBmcmFtZSBkdWUgdG8gaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4K
ICAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKTsKLSAgICB2b2lkIHVw
ZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRC
eXRlcyk7CisgICAgdm9pZCB1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYsIHNpemVfdCBt
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQq
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdN
ZXRyaWNzLmNwcAppbmRleCA3YjU3Yzg5YjEyMjEwZDFlNjc2NmU0N2M1OGZjNmU5YjU0NmU3MzE2
Li43NjI5MjQ0OTFlMTZhN2Q1MzhkZTg4NjI5ZmZiNzQ3NjA4ZDM2Mjk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0
cmljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwCkBAIC00Niw2ICs0Niw4IEBAIENDT3ZlcmRyYXdNZXRy
aWNzOjpDQ092ZXJkcmF3TWV0cmljcyhib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSkKICAgICAs
IG1fcGl4ZWxzVXBsb2FkZWRPcGFxdWUoMCkKICAgICAsIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1
Y2VudCgwKQogICAgICwgbV90aWxlc0N1bGxlZEZvclVwbG9hZCgwKQorICAgICwgbV9jb250ZW50
c1RleHR1cmVVc2VCeXRlcygwKQorICAgICwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVz
KDApCiAgICAgLCBtX3BpeGVsc0RyYXduT3BhcXVlKDApCiAgICAgLCBtX3BpeGVsc0RyYXduVHJh
bnNsdWNlbnQoMCkKICAgICAsIG1fcGl4ZWxzQ3VsbGVkRm9yRHJhd2luZygwKQpAQCAtOTIsNiAr
OTQsMjIgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXBsb2FkKGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmcKICAgICBtX3BpeGVsc1VwbG9hZGVkVHJh
bnNsdWNlbnQgKz0gdXBsb2FkQXJlYSAtIHVwbG9hZE9wYXF1ZUFyZWE7CiB9CiAKK3ZvaWQgQ0NP
dmVyZHJhd01ldHJpY3M6OmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCBj
b250ZW50c1RleHR1cmVVc2VCeXRlcykKK3sKKyAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZy
YW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzICs9
IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzOworfQorCit2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpk
aWRVc2VSZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCByZW5kZXJTdXJmYWNl
VXNlQnl0ZXMpCit7CisgICAgaWYgKCFtX3JlY29yZE1ldHJpY3NGb3JGcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzICs9IHJlbmRlclN1
cmZhY2VVc2VCeXRlczsKK30KKwogdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkQ3VsbEZvckRy
YXdpbmcoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBj
b25zdCBJbnRSZWN0JiBiZWZvcmVDdWxsUmVjdCwgY29uc3QgSW50UmVjdCYgYWZ0ZXJDdWxsUmVj
dCkKIHsKICAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZyYW1lKQpAQCAtMTM0LDYgKzE1Miw4
IEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRlcm5hbChNZXRyaWNz
VHlwZSBtZXRyaWNzVHlwZSwgY29uc3QgTGF5CiAgICAgZmxvYXQgbm9ybWFsaXphdGlvbiA9IDEw
MDAuZiAvIChsYXllclRyZWVIb3N0LT52aWV3cG9ydFNpemUoKS53aWR0aCgpICogbGF5ZXJUcmVl
SG9zdC0+dmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwogICAgIC8vIFRoaXMgZ2l2ZXMgYXBwcm94
aW1hdGVseSAxMDB4IHRoZSBwZXJjZW50YWdlIG9mIHRpbGVzIHRvIGZpbGwgdGhlIHZpZXdwb3J0
IG9uY2UsIGlmIGFsbCB0aWxlcyB3ZXJlIDI1NngyNTYuCiAgICAgZmxvYXQgdGlsZU5vcm1hbGl6
YXRpb24gPSAxMDAwMC5mIC8gKGxheWVyVHJlZUhvc3QtPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkg
LyAyNTYuZiAqIGxheWVyVHJlZUhvc3QtPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpIC8gMjU2LmYp
OworICAgIC8vIFRoaXMgZ2l2ZXMgYXBwcm94aW1hdGVseSAxMHggdGhlIHBlcmNlbnRhZ2Ugb2Yg
Ynl0ZXMgdG8gZmlsbCB0aGUgdmlld3BvcnQgb25jZSwgYXNzdW1pbmcgNCBieXRlcyBwZXIgcGl4
ZWwuCisgICAgZmxvYXQgYnl0ZU5vcm1hbGl6YXRpb24gPSBub3JtYWxpemF0aW9uIC8gNDsKIAog
ICAgIHN3aXRjaCAobWV0cmljc1R5cGUpIHsKICAgICBjYXNlIERyYXdpbmdUb1NjcmVlbjoKQEAg
LTE1MSw2ICsxNzEsMTAgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0lu
dGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBMYXkKICAgICAgICAgV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5w
aXhlbENvdW50T3BhcXVlX1VwbG9hZCIsIHN0YXRpY19jYXN0PGludD4obm9ybWFsaXphdGlvbiAq
IG1fcGl4ZWxzVXBsb2FkZWRPcGFxdWUpLCAxMDAsIDEwMDAwMDAsIDUwKTsKICAgICAgICAgV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVy
NC5waXhlbENvdW50VHJhbnNsdWNlbnRfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pihub3JtYWxp
emF0aW9uICogbV9waXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50KSwgMTAwLCAxMDAwMDAwLCA1MCk7
CiAgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291
bnRzKCJSZW5kZXJlcjQudGlsZUNvdW50Q3VsbGVkX1VwbG9hZCIsIHN0YXRpY19jYXN0PGludD4o
dGlsZU5vcm1hbGl6YXRpb24gKiBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkKSwgMTAwLCAxMDAwMDAw
MCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1
c3RvbUNvdW50cygiUmVuZGVyZXI0LnJlbmRlclN1cmZhY2VUZXh0dXJlQnl0ZXNfVmlld3BvcnRT
Y2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVOb3JtYWxpemF0aW9uICogbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZVVzZUJ5dGVzKSwgMTAsIDEwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5yZW5k
ZXJTdXJmYWNlVGV4dHVyZUJ5dGVzX1Vuc2NhbGVkIiwgc3RhdGljX2Nhc3Q8aW50PihtX3JlbmRl
clN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMgLyAxMDAwKSwgMTAwMCwgMTAwMDAwMDAwLCA1MCk7Cisg
ICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRz
KCJSZW5kZXJlcjQuY29udGVudHNUZXh0dXJlQnl0ZXNfVmlld3BvcnRTY2FsZWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KGJ5dGVOb3JtYWxpemF0aW9uICogbV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyks
IDEwLCAxMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuY29udGVudHNUZXh0dXJlQnl0ZXNfVW5z
Y2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMgLyAxMDAw
KSwgMTAwMCwgMTAwMDAwMDAwLCA1MCk7CiAKICAgICAgICAgewogICAgICAgICAgICAgVFJBQ0Vf
Q09VTlRFUl9JRDEoIndlYmtpdCIsICJVcGxvYWRUaWxlc0N1bGxlZCIsIGxheWVyVHJlZUhvc3Qs
IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQpOwpAQCAtMTYwLDYgKzE4NCwxMCBAQCB2b2lkIENDT3Zl
cmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmljc1R5
cGUsIGNvbnN0IExheQogICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50
IHNjb3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UMiBhYm92ZS4KICAgICAgICAgICAgIFRSQUNFX0VW
RU5UMSgid2Via2l0IiwgIkNDT3ZlcmRyYXdQYWludE1ldHJpY3MiLCAiUGl4ZWxzUGFpbnRlZCIs
IG1fcGl4ZWxzUGFpbnRlZCk7CiAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgLy8g
VGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UcyBh
Ym92ZS4KKyAgICAgICAgICAgIFRSQUNFX0VWRU5UMigiY2MiLCAiQ0NPdmVyZHJhd1BhaW50TWV0
cmljcyIsICJDb250ZW50c1RleHR1cmVCeXRlcyIsIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMs
ICJSZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzIiwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5
dGVzKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0
cmljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
dmVyZHJhd01ldHJpY3MuaAppbmRleCA3MTVmNWUxNTFiYmFkZGExNzk3NmM3ZTM5ZmUzNzEzNzdi
ZGY4ZTMzLi5mMGRhYjBlOTNjOTVlYTU1NGQ4MGE3MjQzYjJkOTg1NTkxNjk1N2Q2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJk
cmF3TWV0cmljcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZEN1bGxUaWxlRm9yVXBsb2FkKCk7CiAgICAgLy8gUmVjb3JkcyBwaXhlbHMgdGhh
dCB3ZXJlIHVwbG9hZGVkIHRvIHRleHR1cmUgbWVtb3J5LgogICAgIHZvaWQgZGlkVXBsb2FkKGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBj
b25zdCBJbnRSZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKKyAg
ICAvLyBSZWNvcmQgY29udGVudHMgdGV4dHVyZShzKSBiZWhpbmQgcHJlc2VudCB1c2luZyB0aGUg
Z2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorICAgIHZvaWQgZGlkVXNlQ29udGVudHNUZXh0dXJlTWVt
b3J5Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAvLyBSZWNvcmQg
UmVuZGVyU3VyZmFjZSB0ZXh0dXJlKHMpIGJlaW5nIHByZXNlbnQgdXNpbmcgdGhlIGdpdmVuIG51
bWJlciBvZiBieXRlcy4KKyAgICB2b2lkIGRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5
Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRlcyk7CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFyZSB1c2VkIGZvciBzYXZpbmcgbWV0cmljcyBkdXJpbmcgZHJhdy4KIApAQCAtOTMsNiAr
OTcsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQ7
CiAgICAgLy8gQ291bnQgb2YgdGlsZXMgdGhhdCB3ZXJlIGludmFsaWRhdGVkIGJ1dCBub3QgdXBs
b2FkZWQuCiAgICAgaW50IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQ7CisgICAgLy8gQ291bnQgdGhl
IG51bWJlciBvZiBieXRlcyBpbiBjb250ZW50cyB0ZXh0dXJlcy4KKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlczsKKyAgICAvLyBDb3VudCB0aGUgbnVtYmVy
IG9mIGJ5dGVzIGluIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCisgICAgdW5zaWduZWQgbG9uZyBs
b25nIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlczsKIAogICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDFjZGFkMjJlNDY4YzEyNGQyOGIxZThkNGJjZmVkZmNm
YWZhMTc1OWMuLjUxYzc3NGViYTQ5NjAxNjkzNTE5ZDdmZmVjYjlmOTY3MDFhYTU3ZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgQ0NS
ZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlCiAgICAgaWYgKG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVz
ZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIGNv
bnRlbnRzVGV4dHVyZUZvcm1hdCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTgsMTIgKzExOCwxMiBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6cmVs
ZWFzZUNvbnRlbnRzVGV4dHVyZSgpCiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENv
bnRlbnRzVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYm
IG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUtPmlz
VmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAg
ICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2
ZWQoKSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwg
Y29udGVudHNUZXh0dXJlRm9ybWF0KCkpOwogfQogCiBib29sIENDUmVuZGVyU3VyZmFjZTo6aGFz
Q2FjaGVkQ29udGVudHNUZXh0dXJlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZW50c1Rl
eHR1cmUgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUg
JiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIGNvbnRl
bnRzVGV4dHVyZUZvcm1hdCgpKTsKIH0KIAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVC
YWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCkBA
IC0xMzYsNyArMTM2LDcgQEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVCYWNrZ3JvdW5k
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGUKICAgICBpZiAobV9iYWNr
Z3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+
cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaAppbmRleCBjZGQ3YTdiNTllYTMxZDFjZmM1MjExMDUzMmZlZTc4ZTI4ZThk
NzhhLi5lN2NjNTU0MzZhZDVkYmRkNTZmYjJiODgwOWJkNzczOTdhYWIyYzMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtMTI1LDYgKzEyNSw5IEBAIHB1YmxpYzoKICAgICBNYW5h
Z2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Rl
eHR1cmUuZ2V0KCk7IH0KICAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dyb3VuZFRleHR1cmUoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9CiAKKyAgICBHQzNEZW51
bSBjb250ZW50c1RleHR1cmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsgfQorICAgIEdDM0RlbnVtIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkgY29uc3Qg
eyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7IH0KKwogICAgIGludCBvd25pbmdMYXll
cklkKCkgY29uc3Q7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCmluZGV4IGQyNzczNzkwZWJmNTQ3OWY2ZDAzMmE4ZWYyOWJiYTA1N2Nm
MzliNmIuLjU5NmQ3NjM3OWJjYTVmYzJlMjM1YWQyNDg3NmY0ZDIzNjIyODc2ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCiAjaW5j
bHVkZSAiQ0NPY2NsdXNpb25UcmFja2VyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNDVGhyZWFk
ZWRUZXN0LmgiCisjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUg
IkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKQEAgLTIyNjksNCArMjI3
MCwxMDAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNw
ZWN0U3VyZmFjZU1lbW9yeVVzZSgpCisgICAgICAgIDogbV9yb290TGF5ZXIoTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9jaGlsZExheWVyKENvbnRlbnRMYXllckNocm9taXVt
OjpjcmVhdGUoJm1fZGVsZWdhdGUpKQorICAgICAgICAsIG1fcmVuZGVyU3VyZmFjZUxheWVyKENv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fZGVsZWdhdGUpKQorICAgICAgICAsIG1fcmVu
ZGVyU3VyZmFjZUNoaWxkTGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9kZWxl
Z2F0ZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAg
IHsKKyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbGF5
ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAvLyByZW5kZXJTdXJmYWNlTGF5ZXIgd2lsbCBiZSBwYWludGVkIGJlZm9yZSBjaGlsZExheWVy
LCBhbmQgd2lsbCB0YWtlIG1lbW9yeSBiZWZvcmUgaXQuCisgICAgICAgICAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKKyAgICAgICAgICAgIG1fY2hpbGRMYXllci0+YWRk
Q2hpbGQobV9yZW5kZXJTdXJmYWNlTGF5ZXIpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNl
TGF5ZXItPmFkZENoaWxkKG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXIpOworCisgICAgICAgICAg
ICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgICAgICBtX3JlbmRl
clN1cmZhY2VMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgICAgIG1fcmVuZGVy
U3VyZmFjZUNoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisKKyAgICAgICAgICAgIG1f
cm9vdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICAgICAgbV9y
b290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAg
ICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgICAgICAgICBt
X3JlbmRlclN1cmZhY2VMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAg
ICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKKyAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXItPnNldEJvdW5kcyhJ
bnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKworICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRSb290TGF5ZXIobV9yb290TGF5ZXIpOworICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgICAg
ICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoaG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpIHsKKyAgICAgICAgY2FzZSAwOgor
ICAgICAgICAgICAgLy8gTWVtb3J5IHVzYWdlIGZvciB0aGUgcmVuZGVyIHN1cmZhY2UgY2hpbGQg
aXMgMTAwKjEwMCo0LgorICAgICAgICAgICAgLy8gTWVtb3J5IHVzYWdlIGZvciB0aGUgcmVuZGVy
IHN1cmZhY2UgbGF5ZXIgaXMgMTAwKjEwMCo0LgorICAgICAgICAgICAgLy8gTWVtb3J5IHVzYWdl
IGZvciB0aGUgcmVuZGVyIHN1cmZhY2UgaW50ZXJtZWRpYXRlIHRleHR1cmUgaXMgMTAwKjEwMCo0
LgorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBtZW1vcnkgZm9yIHRoZSByZW5kZXIg
c3VyZmFjZSBhbmQgaXRzIGxheWVycywKKyAgICAgICAgICAgIC8vIGJ1dCB0aGUgY2hpbGRMYXll
ciB3aWxsIG5vdCBmaXQuCisgICAgICAgICAgICBob3N0SW1wbC0+c2V0TWVtb3J5QWxsb2NhdGlv
bkxpbWl0Qnl0ZXMoMTAwKjEwMCo0KjMpOworICAgICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0
VG9NYWluVGhyZWFkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAg
ICAgICAgICAgY29uc3QgRmFrZUNDVGlsZWRMYXllckltcGwqIGNoaWxkTGF5ZXJJbXBsID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgRmFrZUNDVGlsZWRMYXllckltcGwqPihob3N0SW1wbC0+cm9vdExheWVy
KCktPmNoaWxkcmVuKClbMF0uZ2V0KCkpOworICAgICAgICAgICAgY29uc3QgRmFrZUNDVGlsZWRM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllckltcGwgPSBzdGF0aWNfY2FzdDxjb25zdCBGYWtl
Q0NUaWxlZExheWVySW1wbCo+KGNoaWxkTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLmdldCgpKTsK
KyAgICAgICAgICAgIGNvbnN0IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlQ2hp
bGRMYXllckltcGwgPSBzdGF0aWNfY2FzdDxjb25zdCBGYWtlQ0NUaWxlZExheWVySW1wbCo+KHJl
bmRlclN1cmZhY2VMYXllckltcGwtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOworCisgICAgICAgICAg
ICAvLyBUaGUgY2hpbGQgbGF5ZXIgd29uJ3QgZml0IGluIG1lbW9yeSBzbyBzaG91bGQgbm90IGhh
dmUgYW55IHRpbGVzLgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkTGF5ZXJJbXBsLT5o
YXNUaWxlQXQoMCwgMCkpOworCisgICAgICAgICAgICAvLyBUaGUgc3VyZmFjZSBsYXllciBhbmQg
aXRzIGNoaWxkIHNob3VsZCBoYXZlIHRpbGVzLgorICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVu
ZGVyU3VyZmFjZUxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHJlbmRlclN1cmZhY2VDaGlsZExheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKwor
ICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIENs
ZWFyIFJlZlB0cnMgc28gQ0NMYXllclRyZWVIb3N0IGRpZXMuCisgICAgICAgIG1fY2hpbGRMYXll
ci5jbGVhcigpOworICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllci5jbGVhcigpOworICAgICAg
ICBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVyLmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSBtX2RlbGVnYXRlOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+
IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IG1fcmVuZGVy
U3VyZmFjZUxheWVyOworICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gbV9yZW5kZXJT
dXJmYWNlQ2hpbGRMYXllcjsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVu
dHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVz
dCh0cnVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149406</attachid>
            <date>2012-06-25 17:35:29 -0700</date>
            <delta_ts>2012-06-26 07:37:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120625203528.patch</filename>
            <type>text/plain</type>
            <size>33386</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY3Yzc0MDlkZWY4N2Ew
MmRkNTZkNWUzODc4NDgwZjU0MDExZmI1OS4uMDc5M2JiYjUyNGE4NjQ0NDQ0YWFjYjA5ODAzNDQw
OWZmMTEwYjQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA2LTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSBhbmQgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSBtZXRob2Rz
IGFkZGVkIHRvCisgICAgICAgIGJvdGggQ0NSZW5kZXJTdXJmYWNlIGFuZCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0gdG8gaW5kaWNhdGUgdGhlc2Ugc2hvdWxkCisgICAgICAgIGJlIGtlcHQgaW4gc3lu
Yy4gVGhleSBhcmUgdXNlZCBpbiBDQ1JlbmRlclN1cmZhY2UgZm9yIGFjdHVhbCB0ZXh0dXJlCisg
ICAgICAgIG9wZXJhdGlvbnMsIGFuZCBpbiBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gdG8gZGV0ZXJt
aW5lIHRoZSBtZW1vcnkgdGhhdAorICAgICAgICB3b3VsZCBiZSB1c2VkIGJ5IHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMuCisKKyAgICAgICAgV2Ugbm93IHNldCB0aGUgbWVtb3J5IGxpbWl0IGZvciBj
b250ZW50cyBvbiBldmVyeSBmcmFtZSwgc28gc2ltcGxpZnkKKyAgICAgICAgbG9naWMgaW4gdGhl
IHVwZGF0ZUxheWVycyhyb290TGF5ZXIpIG1ldGhvZCBhcyBpdCdzIG1vcmUgY29tcGxleCB0aGFu
CisgICAgICAgIGl0IG5lZWRzIHRvIGJlIG5vdy4KKworICAgICAgICBUZXN0OiBDQ0xheWVyVHJl
ZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZQorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVxdWlyZWRUZXh0dXJlQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJm
YWNlQ2hyb21pdW06OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTdXJmYWNlQ2hyb21pdW06OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAg
KFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc2VydmVSZW5kZXJT
dXJmYWNlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T3ZlcmRyYXdNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDT3ZlcmRyYXdNZXRyaWNz
OjpDQ092ZXJkcmF3TWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVNZW1vcnlCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6cmVjb3JkTWV0cmljc0ludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oOgorICAgICAgICAoQ0NPdmVyZHJhd01ldHJp
Y3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250
ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxp
ZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhh
c0NhY2hlZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclN1cmZhY2U6OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1JlbmRlclN1cmZhY2U6OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKENDUmVu
ZGVyU3VyZmFjZSk6CisKKzIwMTItMDYtMjIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgcmVuZGVyIHN1cmZhY2VzIG9uIG1h
aW4gdGhyZWFkIG9ubHkgZm9yIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTc5MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHkgd2Ugd291bGQgY3JlYXRlIHJl
bmRlciBzdXJmYWNlcyBmb3IgYW5pbWF0aW5nIGxheWVycworICAgICAgICBpbiB0aGUgbWFpbiB0
aHJlYWQgc2luY2UgdGhlc2UgbGF5ZXJzIG1pZ2h0IGhhdmUgYSBzdXJmYWNlIG9uIGltcGwsCisg
ICAgICAgIGluIG9yZGVyIHRvIGFzc2lzdCBjdWxsaW5nLiBUaGlzIG1ha2VzIGl0IHZlcnkgZGlm
ZmljdWx0IHRvIGVzdGltYXRlCisgICAgICAgIGhvdyBtdWNoIHRleHR1cmUgbWVtb3J5IGlzIG5l
ZWRlZCBmb3IgUmVuZGVyU3VyZmFjZXMgb24gdGhlIG1haW4KKyAgICAgICAgdGhyZWFkLCBpbiBv
cmRlciB0byBrZWVwIGNvbnRlbnRzK3N1cmZhY2UgbWVtb3J5IGJlbG93IG91ciBsaW1pdC4KKwor
ICAgICAgICBIZXJlIHdlIHN0b3AgZG9pbmcgdGhpcywgYW5kIGNyZWF0ZSBSZW5kZXJTdXJmYWNl
cyBvbiBib3RoIHRocmVhZHMKKyAgICAgICAgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucywgc28g
bWFpbiB0aHJlYWQgaGFzIHN1cmZhY2VzIG9ubHkgaWYgdGhlCisgICAgICAgIGxheWVycyBpbiBp
dHMgY3VycmVudCBmcmFtZSBkZW1hbmQgdGhlbS4gV2hpbGUgdGhpcyBtYXkgcmVkdWNlCisgICAg
ICAgIHBhaW50IGN1bGxpbmcgd2l0aGluIGFuIGFuaW1hdGluZyBzdWJ0cmVlLCB0aGlzIHNlZW1z
IGxpa2UgYW4gZWRnZQorICAgICAgICBjYXNlIGFuZCBrbm93aW5nIHRoZSBhbW91bnQgb2Ygc3Vy
ZmFjZSBtZW1vcnkgbmVlZGVkIGZvciB0aGUgZnJhbWUKKyAgICAgICAgaXMgaW1wb3J0YW50Lgor
CisgICAgICAgIEFuaW1hdGlvbiB0ZXN0cyBpbiBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0IHVz
ZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UKKyAgICAgICAgbGF5ZXJzIGdvdCBzdXJmYWNlcywgc28g
bm93IG5vIGxvbmdlciBkby4gQ3JlYXRpb24gb2Ygc3VyZmFjZXMgdW5kZXIKKyAgICAgICAgb3Ro
ZXIgY29uZGl0aW9ucyBpcyBjb3ZlcmVkIGJ5IG90aGVyIENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YnRyZWVTaG91bGRSZW5kZXJU
b1NlcGFyYXRlU3VyZmFjZSk6CisKIDIwMTItMDYtMjUgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55
YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtTaGFkb3ddIEV4ZWN1dGluZyBJdGFsaWMgYW5k
IEluc2VydFVub3JkZXJlZExpc3QgaW4gU2hhZG93IERPTSBjYXVzZXMgYSBjcmFzaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA3YThjZTZmMmU1ODFkNjgyYWZlOGEyZGJlZmI2MTQ1ZjEx
ZjU5YmYxLi41MTAxNWFhM2VjYjNlZjA1OTdlYzFjMWFjYmI1ZWVkMGVkOTIxZGVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA2LTI1ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVzcGVj
dCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250ZW50
cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoQ0NMYXllclRyZWVI
b3N0VGVzdENvbnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2UpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZTo6Q0NMYXll
clRyZWVIb3N0VGVzdENvbnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2UpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZTo6
YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbnRlbnRzUmVz
cGVjdFN1cmZhY2VNZW1vcnlVc2U6OmRpZENvbW1pdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlOjpjb21taXRDb21wbGV0
ZU9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNS
ZXNwZWN0U3VyZmFjZU1lbW9yeVVzZTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURik6CisgICAg
ICAgIChXVEY6OlRFU1RfRik6CisKKzIwMTItMDYtMjIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgcmVuZGVyIHN1cmZhY2Vz
IG9uIG1haW4gdGhyZWFkIG9ubHkgZm9yIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHA6CisKIDIwMTItMDYtMjUgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUgaW4gV2ViS2l0OjpNYWlu
VGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHAKaW5kZXggYTVjNGM2MDgyNDU2OWUxNjc3OGUxMjkyYTFlMzUyY2Q2OWNhOGM3ZC4uOWI5
NGMwNWE5Yzk2ZWRjNzQ3NDQwOTJhOWU4YmJiZTI2MjU3ZTRlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJGaWx0
ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KQEAgLTc0LDYgKzc1LDE0IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogUmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjp0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QKICAgICByZXR1cm4gcGFy
ZW50LT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CiB9CiAKK3NpemVfdCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW06OnJlcXVpcmVkVGV4dHVyZUJ5dGVzKCkgY29uc3QKK3sKKyAgICBzaXplX3QgYnl0ZXMg
PSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV9jb250ZW50UmVjdC5zaXplKCksIGNv
bnRlbnRzVGV4dHVyZUZvcm1hdCgpKTsKKyAgICBpZiAoIW1fYmFja2dyb3VuZEZpbHRlcnMuaXNF
bXB0eSgpKQorICAgICAgICBieXRlcyArPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMo
bV9jb250ZW50UmVjdC5zaXplKCksIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkpOworICAgIHJl
dHVybiBieXRlczsKK30KKwogYm9vbCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Omhhc1JlcGxpY2Eo
KSBjb25zdAogewogICAgIHJldHVybiBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMGU3ZDRlMzhjNTZjMWVjY2Q5NmY1
Y2JhZmQ3NGY5ZGU1ZjNkODdkOS4uN2VhNmMwMzQ2OGQxNWE2NDFiZjQ1MjBiZDhhMmE1MjYyYjRj
MmE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTMwLDYgKzMwLDcg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgpAQCAtMTEwLDYgKzExMSwxMSBAQCBwdWJs
aWM6CiAKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBj
b25zdDsKIAorICAgIEdDM0RlbnVtIGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOyB9CisgICAgR0MzRGVudW0gYmFja2dyb3VuZFRl
eHR1cmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsgfQor
CisgICAgc2l6ZV90IHJlcXVpcmVkVGV4dHVyZUJ5dGVzKCkgY29uc3Q7CisKICAgICBib29sIGhh
c1JlcGxpY2EoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggN2QxNGNmNWRhM2E1YzMyYmU1ZjMwNDY1YTJhZThm
ZDhmNDBlM2NmYy4uZjNiYTZjZWM0ODgxZjQ4ODQ2MGQwNGJiMjZhYWQwY2ZjMzk0MGFhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC00MzksNyArNDM5LDcgQEAgYm9vbCBD
Q0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKQogfQogCiAK
LXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBk
YXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcykKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90IG1lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzKQogewogICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXJJbml0
aWFsaXplZCk7CiAgICAgQVNTRVJUKGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CkBAIC00NTAs
NyArNDUwLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhDQ1RleHR1cmVV
cGRhdGVyJiB1cGRhdGVyLCBzaXplX3QgY29udGVudHNNZW0KICAgICBpZiAodmlld3BvcnRTaXpl
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKGNvbnRlbnRzTWVtb3J5TGltaXRC
eXRlcyk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlBbGxvY2F0aW9u
TGltaXRCeXRlcyhtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICB1cGRhdGVMYXll
cnMocm9vdExheWVyKCksIHVwZGF0ZXIpOwogfQpAQCAtNDg5LDIxICs0ODksMTMgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIEND
VGV4dHVyZVVwZGF0ZXImIHUKICAgICByZXNlcnZlVGV4dHVyZXModXBkYXRlTGlzdCk7CiAKICAg
ICBwYWludExheWVyQ29udGVudHModXBkYXRlTGlzdCwgUGFpbnRWaXNpYmxlLCB1cGRhdGVyKTsK
LSAgICBpZiAoIW1fdHJpZ2dlcklkbGVQYWludHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNp
emVfdCBwcmVmZXJyZWRMaW1pdEJ5dGVzID0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5wcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0Qnl0ZXMgPSBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXItPm1heE1lbW9yeUxpbWl0Qnl0ZXMoKTsKLSAgICBtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQocHJlZmVycmVkTGltaXRCeXRl
cyk7Ci0gICAgaWYgKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5
dGVzKCkgPj0gcHJlZmVycmVkTGltaXRCeXRlcykKLSAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
SWRsZSBwYWludGluZyBzaG91bGQgZmFpbCB3aGVuIHdlIGhpdCB0aGUgcHJlZmVycmVkIG1lbW9y
eSBsaW1pdCwKLSAgICAvLyBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcHVzaCB1cyB0b3dhcmRz
IHRoZSBtYXhpbXVtIGxpbWl0LgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWF4
TWVtb3J5TGltaXRCeXRlcyhwcmVmZXJyZWRMaW1pdEJ5dGVzKTsKLSAgICAvLyBUaGUgc2Vjb25k
IChpZGxlKSBwYWludCB3aWxsIGJlIGEgbm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBhaW50aW5nIGFs
cmVhZHkgb2NjdXJlZCBhYm92ZS4KLSAgICBwYWludExheWVyQ29udGVudHModXBkYXRlTGlzdCwg
UGFpbnRJZGxlLCB1cGRhdGVyKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldE1h
eE1lbW9yeUxpbWl0Qnl0ZXMobWF4TGltaXRCeXRlcyk7CisgICAgc2l6ZV90IG1heENvbnRlbnRC
eXRlc0FmdGVyUmVuZGVyU3VyZmFjZXMgPSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPm1heE1l
bW9yeUxpbWl0Qnl0ZXMoKTsKKyAgICBzaXplX3QgY3VycmVudENvbnRlbnRCeXRlcyA9IG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7CisgICAgaWYgKG1f
dHJpZ2dlcklkbGVQYWludHMgJiYgY3VycmVudENvbnRlbnRCeXRlcyA8IG1heENvbnRlbnRCeXRl
c0FmdGVyUmVuZGVyU3VyZmFjZXMpIHsKKyAgICAgICAgLy8gVGhlIHNlY29uZCAoaWRsZSkgcGFp
bnQgd2lsbCBiZSBhIG5vLW9wIGluIGxheWVycyB3aGVyZSBwYWludGluZyBhbHJlYWR5IG9jY3Vy
ZWQgYWJvdmUuCisgICAgICAgIHBhaW50TGF5ZXJDb250ZW50cyh1cGRhdGVMaXN0LCBQYWludElk
bGUsIHVwZGF0ZXIpOworICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXBkYXRl
TGlzdC5zaXplKCk7ICsraSkKICAgICAgICAgdXBkYXRlTGlzdFtpXS0+Y2xlYXJSZW5kZXJTdXJm
YWNlKCk7CkBAIC01NDgsMTkgKzU0MCw0OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRN
YXNrc0ZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheQogICAg
ICAgICB1cGRhdGUocmVwbGljYU1hc2tMYXllciwgcGFpbnRUeXBlLCB1cGRhdGVyLCAwKTsKIH0K
IAorc3RhdGljIGlubGluZSB2b2lkIHJlc2VydmVSZW5kZXJTdXJmYWNlTWVtb3J5Qnl0ZXMoVGV4
dHVyZU1hbmFnZXImIHRleHR1cmVNYW5hZ2VyLCBDQ092ZXJkcmF3TWV0cmljcyYgb3ZlcmRyYXdN
ZXRyaWNzLCBzaXplX3QgcmVxdWlyZWRCeXRlcykKK3sKKyAgICBzaXplX3QgbWF4Q29udGVudEJ5
dGVzID0gdGV4dHVyZU1hbmFnZXIubWF4TWVtb3J5TGltaXRCeXRlcygpOworICAgIHNpemVfdCBj
dXJyZW50Q29udGVudEJ5dGVzID0gdGV4dHVyZU1hbmFnZXIuY3VycmVudE1lbW9yeVVzZUJ5dGVz
KCk7CisKKyAgICBzaXplX3QgYXZhaWxhYmxlQ29udGVudEJ5dGVzID0gbWF4Q29udGVudEJ5dGVz
IC0gY3VycmVudENvbnRlbnRCeXRlczsKKyAgICBzaXplX3QgcmVzZXJ2ZUJ5dGVzID0gcmVxdWly
ZWRCeXRlcyA8PSBhdmFpbGFibGVDb250ZW50Qnl0ZXMgPyByZXF1aXJlZEJ5dGVzIDogYXZhaWxh
YmxlQ29udGVudEJ5dGVzOworICAgIHRleHR1cmVNYW5hZ2VyLnNldE1heE1lbW9yeUxpbWl0Qnl0
ZXMobWF4Q29udGVudEJ5dGVzIC0gcmVzZXJ2ZUJ5dGVzKTsKKworICAgIG92ZXJkcmF3TWV0cmlj
cy5kaWRVc2VSZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9yeUJ5dGVzKHJlc2VydmVCeXRlcyk7Cit9
CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBlLCBDQ1RleHR1
cmVVcGRhdGVyJiB1cGRhdGVyKQogewogICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBm
b3IgdGVzdGluZyBvY2NsdXNpb24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRy
ZWUgd2Fsay4KICAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXll
ckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CiAKKyAg
ICBIYXNoU2V0PFJlbmRlclN1cmZhY2VDaHJvbWl1bSo+IGFsbG9jYXRlZFN1cmZhY2VzOworICAg
IGJvb2wgdHJhY2tSZW5kZXJTdXJmYWNlTWVtb3J5ID0gcGFpbnRUeXBlID09IFBhaW50VmlzaWJs
ZTsKKwogICAgIGJvb2wgcmVjb3JkTWV0cmljc0ZvckZyYW1lID0gdHJ1ZTsgLy8gRklYTUU6IElu
IHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3aGVuIGFib3V0OnRyYWNpbmcgaXMgb2ZmLgogICAg
IENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb25UcmFja2VyKEludFJlY3QoSW50UG9pbnQoKSwg
ZGV2aWNlVmlld3BvcnRTaXplKCkpLCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpOwogICAgIG9jY2x1
c2lvblRyYWNrZXIuc2V0TWluaW11bVRyYWNraW5nU2l6ZShDQ09jY2x1c2lvblRyYWNrZXI6OnBy
ZWZlcnJlZE1pbmltdW1UcmFja2luZ1NpemUoKSk7CiAKKyAgICBpZiAodHJhY2tSZW5kZXJTdXJm
YWNlTWVtb3J5KSB7CisgICAgICAgIC8vIFNhdmUgb25lIHZpZXdwb3J0IGZvciB0aGUgcm9vdCBy
ZW5kZXIgc3VyZmFjZSwgaWYgaXQgaGFzIGEKKyAgICAgICAgLy8gdGV4dHVyZSwgb3IgZm9yIGFu
eSByZWFkYmFja3MgcmVxdWlyZWQgdG8gZHJhdyB0aGUgZnJhbWUuCisgICAgICAgIHNpemVfdCBy
ZXF1aXJlZEJ5dGVzID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKG1fZGV2aWNlVmll
d3BvcnRTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCKTsKKyAgICAgICAgcmVzZXJ2ZVJlbmRl
clN1cmZhY2VNZW1vcnlCeXRlcygqbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLmdldCgpLCBvY2Ns
dXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLCByZXF1aXJlZEJ5dGVzKTsKKyAgICB9CisK
ICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0
ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5lbnRlckxheWVyKGl0
KTsKIAorICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldCA9IGl0LnRhcmdldFJl
bmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIGJvb2wgaXNSb290
UmVuZGVyU3VyZmFjZSA9IGl0LnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpICE9IHJlbmRlclN1
cmZhY2VMYXllckxpc3RbMF07CisgICAgICAgIGlmICh0cmFja1JlbmRlclN1cmZhY2VNZW1vcnkg
JiYgIWlzUm9vdFJlbmRlclN1cmZhY2UgJiYgIWFsbG9jYXRlZFN1cmZhY2VzLmNvbnRhaW5zKHRh
cmdldCkpIHsKKyAgICAgICAgICAgIHJlc2VydmVSZW5kZXJTdXJmYWNlTWVtb3J5Qnl0ZXMoKm1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSwgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01l
dHJpY3MoKSwgdGFyZ2V0LT5yZXF1aXJlZFRleHR1cmVCeXRlcygpKTsKKyAgICAgICAgICAgIGFs
bG9jYXRlZFN1cmZhY2VzLmFkZCh0YXJnZXQpOworICAgICAgICB9CisKICAgICAgICAgaWYgKGl0
LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChp
dC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpIHx8IGl0LT5yZW5kZXJTdXJmYWNlKCkt
PmRyYXdPcGFjaXR5SXNBbmltYXRpbmcoKSk7CiAgICAgICAgICAgICBwYWludE1hc2tzRm9yUmVu
ZGVyU3VyZmFjZSgqaXQsIHBhaW50VHlwZSwgdXBkYXRlcik7CkBAIC01NzIsNiArNTkzLDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5sZWF2ZUxh
eWVyKGl0KTsKICAgICB9CiAKKyAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygp
LmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwogICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRy
YXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaAppbmRleCA2ZjY5NDZlMzFjN2EzM2FiYWRmNzhkNjU2NTBlMGI5MzUyNjY2NTRmLi4y
NThjOWU2NTBiMzNlYTY4MTI4ODNkNzhjMDcwZDAwNzk2OTM0MDcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaApAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgYWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdlIHNo
b3VsZCBhYm9ydCB0aGlzIGZyYW1lIGR1ZSB0byBpbml0aWFsaXphdGlvbiBmYWlsdXJlLgogICAg
IGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRl
TGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImLCBzaXplX3QgY29udGVudHNNZW1vcnlMaW1pdEJ5dGVz
KTsKKyAgICB2b2lkIHVwZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiwgc2l6ZV90IG1lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKaW5kZXggYzU5NzA3YTRiMjQzYjU4M2IwNDUzYmMyNDliMzFmNjFiOTE3
NjY1Yy4uNTFhZTA0ODAyMjU2ZmE3ZDc4MTE5YzE4MmRjOGIxODVhOTkxMjkzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0xODgsMTkgKzE4OCw2IEBA
IHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtKQogICAgICAgICAgICAmJiBtLm00NCgpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgbGF5ZXJPcGFjaXR5SXNPcGFxdWUoQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIHJldHVy
biBsYXllci0+b3BhY2l0eSgpID09IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBsYXllck9w
YWNpdHlJc09wYXF1ZShMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICAvLyBJZiB0aGUgb3Bh
Y2l0eSBpcyBiZWluZyBhbmltYXRlZCB0aGVuIHRoZSBvcGFjaXR5IG9uIHRoZSBtYWluIHRocmVh
ZCBpcyB1bnJlbGlhYmxlCi0gICAgLy8gKHNpbmNlIHRoZSBpbXBsIHRocmVhZCBtYXkgYmUgdXNp
bmcgYSBkaWZmZXJlbnQgb3BhY2l0eSksIHNvIGl0IHNob3VsZCBub3QgYmUgdHJ1c3RlZC4KLSAg
ICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgb3BhcXVlLgot
ICAgIHJldHVybiBsYXllci0+b3BhY2l0eSgpID09IDEgJiYgIWxheWVyLT5vcGFjaXR5SXNBbmlt
YXRpbmcoKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93
bihDQ0xheWVySW1wbCopCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMDMsMTYgKzI5MCwxMSBA
QCBzdGF0aWMgYm9vbCBzdWJ0cmVlU2hvdWxkUmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJU
eXBlKiBsYXllciwgYm9vbCBheGlzQWxpZwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8v
IElmIHRoZSBsYXllciBjbGlwcyBpdHMgZGVzY2VuZGFudHMgYnV0IGl0IGlzIG5vdCBheGlzLWFs
aWduZWQgd2l0aCByZXNwZWN0IHRvIGl0cyBwYXJlbnQuCi0gICAgLy8gT24gdGhlIG1haW4gdGhy
ZWFkLCB3aGVuIHRoZSB0cmFuc2Zvcm0gaXMgYmVpbmcgYW5pbWF0ZWQsIGl0IGlzIHRyZWF0ZWQg
YXMgdW5rbm93biBhbmQgd2UKLSAgICAvLyBhbHdheXMgZXJyb3Igb24gdGhlIHNpZGUgb2YgbWFr
aW5nIGEgcmVuZGVyIHN1cmZhY2UsIHRvIGxldCB1cyBjb25zaWRlciBkZXNjZW5kZW50cyBhcwot
ICAgIC8vIG5vdCBhbmltYXRpbmcgcmVsYXRpdmUgdG8gdGhlaXIgdGFyZ2V0IHRvIGFpZCBjdWxs
aW5nLgotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpICYmICghYXhpc0FsaWduZWRXaXRo
UmVzcGVjdFRvUGFyZW50IHx8ICF0cmFuc2Zvcm1Ub1BhcmVudElzS25vd24obGF5ZXIpKSAmJiBk
ZXNjZW5kYW50RHJhd3NDb250ZW50KQorICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpICYm
ICFheGlzQWxpZ25lZFdpdGhSZXNwZWN0VG9QYXJlbnQgJiYgZGVzY2VuZGFudERyYXdzQ29udGVu
dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiB0aGUgbGF5ZXIgaGFzIG9wYWNp
dHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0gc3R5bGUu
Ci0gICAgLy8gT24gdGhlIG1haW4gdGhyZWFkLCB3aGVuIG9wYWNpdHkgaXMgYmVpbmcgYW5pbWF0
ZWQsIGl0IGlzIHRyZWF0ZWQgYXMgbmVpdGhlciAxCi0gICAgLy8gbm9yIDAuCi0gICAgaWYgKCFs
YXllck9wYWNpdHlJc09wYXF1ZShsYXllcikgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmIGRl
c2NlbmRhbnREcmF3c0NvbnRlbnQpCisgICAgaWYgKGxheWVyLT5vcGFjaXR5KCkgIT0gMSAmJiAh
bGF5ZXItPnByZXNlcnZlczNEKCkgJiYgZGVzY2VuZGFudERyYXdzQ29udGVudCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3
TWV0cmljcy5jcHAKaW5kZXggN2I1N2M4OWIxMjIxMGQxZTY3NjZlNDdjNThmYzZlOWI1NDZlNzMx
Ni4uNzYyOTI0NDkxZTE2YTdkNTM4ZGU4ODYyOWZmYjc0NzYwOGQzNjI5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01l
dHJpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcApAQCAtNDYsNiArNDYsOCBAQCBDQ092ZXJkcmF3TWV0
cmljczo6Q0NPdmVyZHJhd01ldHJpY3MoYm9vbCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpCiAgICAg
LCBtX3BpeGVsc1VwbG9hZGVkT3BhcXVlKDApCiAgICAgLCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNs
dWNlbnQoMCkKICAgICAsIG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQoMCkKKyAgICAsIG1fY29udGVu
dHNUZXh0dXJlVXNlQnl0ZXMoMCkKKyAgICAsIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRl
cygwKQogICAgICwgbV9waXhlbHNEcmF3bk9wYXF1ZSgwKQogICAgICwgbV9waXhlbHNEcmF3blRy
YW5zbHVjZW50KDApCiAgICAgLCBtX3BpeGVsc0N1bGxlZEZvckRyYXdpbmcoMCkKQEAgLTkyLDYg
Kzk0LDIyIEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZFVwbG9hZChjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnCiAgICAgbV9waXhlbHNVcGxvYWRlZFRy
YW5zbHVjZW50ICs9IHVwbG9hZEFyZWEgLSB1cGxvYWRPcGFxdWVBcmVhOwogfQogCit2b2lkIEND
T3ZlcmRyYXdNZXRyaWNzOjpkaWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyhzaXplX3Qg
Y29udGVudHNUZXh0dXJlVXNlQnl0ZXMpCit7CisgICAgaWYgKCFtX3JlY29yZE1ldHJpY3NGb3JG
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyAr
PSBjb250ZW50c1RleHR1cmVVc2VCeXRlczsKK30KKwordm9pZCBDQ092ZXJkcmF3TWV0cmljczo6
ZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyhzaXplX3QgcmVuZGVyU3VyZmFj
ZVVzZUJ5dGVzKQoreworICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlcyArPSByZW5kZXJT
dXJmYWNlVXNlQnl0ZXM7Cit9CisKIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZEN1bGxGb3JE
cmF3aW5nKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCwg
Y29uc3QgSW50UmVjdCYgYmVmb3JlQ3VsbFJlY3QsIGNvbnN0IEludFJlY3QmIGFmdGVyQ3VsbFJl
Y3QpCiB7CiAgICAgaWYgKCFtX3JlY29yZE1ldHJpY3NGb3JGcmFtZSkKQEAgLTEzNCw2ICsxNTIs
OCBAQCB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmlj
c1R5cGUgbWV0cmljc1R5cGUsIGNvbnN0IExheQogICAgIGZsb2F0IG5vcm1hbGl6YXRpb24gPSAx
MDAwLmYgLyAobGF5ZXJUcmVlSG9zdC0+dmlld3BvcnRTaXplKCkud2lkdGgoKSAqIGxheWVyVHJl
ZUhvc3QtPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKTsKICAgICAvLyBUaGlzIGdpdmVzIGFwcHJv
eGltYXRlbHkgMTAweCB0aGUgcGVyY2VudGFnZSBvZiB0aWxlcyB0byBmaWxsIHRoZSB2aWV3cG9y
dCBvbmNlLCBpZiBhbGwgdGlsZXMgd2VyZSAyNTZ4MjU2LgogICAgIGZsb2F0IHRpbGVOb3JtYWxp
emF0aW9uID0gMTAwMDAuZiAvIChsYXllclRyZWVIb3N0LT52aWV3cG9ydFNpemUoKS53aWR0aCgp
IC8gMjU2LmYgKiBsYXllclRyZWVIb3N0LT52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSAvIDI1Ni5m
KTsKKyAgICAvLyBUaGlzIGdpdmVzIGFwcHJveGltYXRlbHkgMTB4IHRoZSBwZXJjZW50YWdlIG9m
IGJ5dGVzIHRvIGZpbGwgdGhlIHZpZXdwb3J0IG9uY2UsIGFzc3VtaW5nIDQgYnl0ZXMgcGVyIHBp
eGVsLgorICAgIGZsb2F0IGJ5dGVOb3JtYWxpemF0aW9uID0gbm9ybWFsaXphdGlvbiAvIDQ7CiAK
ICAgICBzd2l0Y2ggKG1ldHJpY3NUeXBlKSB7CiAgICAgY2FzZSBEcmF3aW5nVG9TY3JlZW46CkBA
IC0xNTEsNiArMTcxLDEwIEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJ
bnRlcm5hbChNZXRyaWNzVHlwZSBtZXRyaWNzVHlwZSwgY29uc3QgTGF5CiAgICAgICAgIFdlYktp
dDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQu
cGl4ZWxDb3VudE9wYXF1ZV9VcGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG5vcm1hbGl6YXRpb24g
KiBtX3BpeGVsc1VwbG9hZGVkT3BhcXVlKSwgMTAwLCAxMDAwMDAwLCA1MCk7CiAgICAgICAgIFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJl
cjQucGl4ZWxDb3VudFRyYW5zbHVjZW50X1VwbG9hZCIsIHN0YXRpY19jYXN0PGludD4obm9ybWFs
aXphdGlvbiAqIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCksIDEwMCwgMTAwMDAwMCwgNTAp
OwogICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNv
dW50cygiUmVuZGVyZXI0LnRpbGVDb3VudEN1bGxlZF9VcGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+
KHRpbGVOb3JtYWxpemF0aW9uICogbV90aWxlc0N1bGxlZEZvclVwbG9hZCksIDEwMCwgMTAwMDAw
MDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1D
dXN0b21Db3VudHMoIlJlbmRlcmVyNC5yZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzX1ZpZXdwb3J0
U2NhbGVkIiwgc3RhdGljX2Nhc3Q8aW50PihieXRlTm9ybWFsaXphdGlvbiAqIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVVc2VCeXRlcyksIDEwLCAxMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQucmVu
ZGVyU3VyZmFjZVRleHR1cmVCeXRlc19VbnNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4obV9yZW5k
ZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzIC8gMTAwMCksIDEwMDAsIDEwMDAwMDAwMCwgNTApOwor
ICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50
cygiUmVuZGVyZXI0LmNvbnRlbnRzVGV4dHVyZUJ5dGVzX1ZpZXdwb3J0U2NhbGVkIiwgc3RhdGlj
X2Nhc3Q8aW50PihieXRlTm9ybWFsaXphdGlvbiAqIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMp
LCAxMCwgMTAwMDAwMCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
Pmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LmNvbnRlbnRzVGV4dHVyZUJ5dGVzX1Vu
c2NhbGVkIiwgc3RhdGljX2Nhc3Q8aW50PihtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzIC8gMTAw
MCksIDEwMDAsIDEwMDAwMDAwMCwgNTApOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIFRSQUNF
X0NPVU5URVJfSUQxKCJ3ZWJraXQiLCAiVXBsb2FkVGlsZXNDdWxsZWQiLCBsYXllclRyZWVIb3N0
LCBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkKTsKQEAgLTE2MCw2ICsxODQsMTAgQEAgdm9pZCBDQ092
ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NU
eXBlLCBjb25zdCBMYXkKICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBpbiBhIGRpZmZlcmVu
dCBzY29wZSB0aGFuIHRoZSBUUkFDRV9FVkVOVDIgYWJvdmUuCiAgICAgICAgICAgICBUUkFDRV9F
VkVOVDEoIndlYmtpdCIsICJDQ092ZXJkcmF3UGFpbnRNZXRyaWNzIiwgIlBpeGVsc1BhaW50ZWQi
LCBtX3BpeGVsc1BhaW50ZWQpOwogICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgbXVzdCBiZSBpbiBhIGRpZmZlcmVudCBzY29wZSB0aGFuIHRoZSBUUkFDRV9FVkVOVHMg
YWJvdmUuCisgICAgICAgICAgICBUUkFDRV9FVkVOVDIoImNjIiwgIkNDT3ZlcmRyYXdQYWludE1l
dHJpY3MiLCAiQ29udGVudHNUZXh0dXJlQnl0ZXMiLCBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVz
LCAiUmVuZGVyU3VyZmFjZVRleHR1cmVCeXRlcyIsIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VC
eXRlcyk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01l
dHJpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T3ZlcmRyYXdNZXRyaWNzLmgKaW5kZXggNzE1ZjVlMTUxYmJhZGRhMTc5NzZjN2UzOWZlMzcxMzc3
YmRmOGUzMy4uZjBkYWIwZTkzYzk1ZWE1NTRkODBhNzI0M2IyZDk4NTU5MTY5NTdkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVy
ZHJhd01ldHJpY3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oCkBAIC00OSw2ICs0OSwxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRDdWxsVGlsZUZvclVwbG9hZCgpOwogICAgIC8vIFJlY29yZHMgcGl4ZWxzIHRo
YXQgd2VyZSB1cGxvYWRlZCB0byB0ZXh0dXJlIG1lbW9yeS4KICAgICB2b2lkIGRpZFVwbG9hZChj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCwg
Y29uc3QgSW50UmVjdCYgdXBsb2FkUmVjdCwgY29uc3QgSW50UmVjdCYgb3BhcXVlUmVjdCk7Cisg
ICAgLy8gUmVjb3JkIGNvbnRlbnRzIHRleHR1cmUocykgYmVoaW5kIHByZXNlbnQgdXNpbmcgdGhl
IGdpdmVuIG51bWJlciBvZiBieXRlcy4KKyAgICB2b2lkIGRpZFVzZUNvbnRlbnRzVGV4dHVyZU1l
bW9yeUJ5dGVzKHNpemVfdCBjb250ZW50c1RleHR1cmVVc2VCeXRlcyk7CisgICAgLy8gUmVjb3Jk
IFJlbmRlclN1cmZhY2UgdGV4dHVyZShzKSBiZWluZyBwcmVzZW50IHVzaW5nIHRoZSBnaXZlbiBu
dW1iZXIgb2YgYnl0ZXMuCisgICAgdm9pZCBkaWRVc2VSZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9y
eUJ5dGVzKHNpemVfdCByZW5kZXJTdXJmYWNlVXNlQnl0ZXMpOwogCiAgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgdXNlZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAKQEAgLTkzLDYg
Kzk3LDEwIEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9waXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50
OwogICAgIC8vIENvdW50IG9mIHRpbGVzIHRoYXQgd2VyZSBpbnZhbGlkYXRlZCBidXQgbm90IHVw
bG9hZGVkLgogICAgIGludCBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkOworICAgIC8vIENvdW50IHRo
ZSBudW1iZXIgb2YgYnl0ZXMgaW4gY29udGVudHMgdGV4dHVyZXMuCisgICAgdW5zaWduZWQgbG9u
ZyBsb25nIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXM7CisgICAgLy8gQ291bnQgdGhlIG51bWJl
ciBvZiBieXRlcyBpbiBSZW5kZXJTdXJmYWNlIHRleHR1cmVzLgorICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXM7CiAKICAgICAvLyBUaGVzZSB2YWx1
ZXMgYXJlIHVzZWQgZm9yIHNhdmluZyBtZXRyaWNzIGR1cmluZyBkcmF3LgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCAxY2RhZDIyZTQ2OGMxMjRkMjhiMWU4ZDRiY2ZlZGZj
ZmFmYTE3NTljLi41MWM3NzRlYmE0OTYwMTY5MzUxOWQ3ZmZlY2I5Zjk2NzAxYWE1N2Y5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29sIEND
UmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZQogICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJl
c2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAg
ICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1fY29udGVudFJlY3Quc2l6ZSgpLCBj
b250ZW50c1RleHR1cmVGb3JtYXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTE4LDEyICsxMTgsMTIgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJl
bGVhc2VDb250ZW50c1RleHR1cmUoKQogCiBib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRD
b250ZW50c1RleHR1cmUoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAm
JiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYmIG1fY29udGVudHNUZXh0dXJlLT5p
c1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cisg
ICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2Vy
dmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCks
IGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpKTsKIH0KIAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhh
c0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGVudHNU
ZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgp
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJl
ICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSk7CiB9CiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJl
QmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQpA
QCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3Vu
ZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlCiAgICAgaWYgKG1fYmFj
a2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUt
PnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmgKaW5kZXggY2RkN2E3YjU5ZWEzMWQxY2ZjNTIxMTA1MzJmZWU3OGUyOGU4
ZDc4YS4uZTdjYzU1NDM2YWQ1ZGJkZDU2ZmIyYjg4MDliZDc3Mzk3YWFiMmMzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgTWFu
YWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNU
ZXh0dXJlLmdldCgpOyB9CiAgICAgTWFuYWdlZFRleHR1cmUqIGJhY2tncm91bmRUZXh0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKTsgfQogCisgICAgR0MzRGVu
dW0gY29udGVudHNUZXh0dXJlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE7IH0KKyAgICBHQzNEZW51bSBiYWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOyB9CisKICAgICBpbnQgb3duaW5nTGF5
ZXJJZCgpIGNvbnN0OwogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCA3ODQ0OGE1MTdhMWUyNzYxMjczZjY1
MmQ1OWY2ZTU0YTFhYTczODZhLi40M2U1YjVhN2E1YTdkN2Y3YjkwZjI3MWM2YzBmYmZhNWE0YTIx
Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTIxODMsNyArMjE4MywxMSBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUFuaW1hdGlvbnNGb3JSZW5kZXJTdXJmYWNl
SGllcmFyY2h5KQogICAgIGNoaWxkT2ZSUzEtPmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJTMSk7CiAg
ICAgY2hpbGRPZlJTMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9mUlMyKTsKIAotICAgIC8vIEluIGNv
bWJpbmF0aW9uIHdpdGggZGVzY2VuZGFudERyYXdzQ29udGVudCwgb3BhY2l0eSAhPSAxIGZvcmNl
cyB0aGUgbGF5ZXIgdG8gaGF2ZSBhIG5ldyByZW5kZXJTdXJmYWNlLgorICAgIC8vIE1ha2Ugb3Vy
IHJlbmRlciBzdXJmYWNlcy4KKyAgICByZW5kZXJTdXJmYWNlMS0+c2V0Rm9yY2VSZW5kZXJTdXJm
YWNlKHRydWUpOworICAgIHJlbmRlclN1cmZhY2UyLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1
ZSk7CisKKyAgICAvLyBQdXQgYW4gYW5pbWF0ZWQgb3BhY2l0eSBvbiB0aGUgcmVuZGVyIHN1cmZh
Y2UuCiAgICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIoKnJlbmRlclN1cmZhY2Ux
LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSwgMTAsIDEsIDAsIGZhbHNlKTsKIAogICAgIC8v
IEFsc28gcHV0IGFuIGFuaW1hdGVkIG9wYWNpdHkgb24gYSBsYXllciB3aXRob3V0IGRlc2NlbmRh
bnRzLgpAQCAtMjE5NCw5ICsyMTk4LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlBbmltYXRpb25zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybTsKICAgICBzdWJsYXllclRyYW5zZm9y
bS5zY2FsZTNkKDEwLjAsIDEuMCwgMS4wKTsKIAotICAgIC8vIEluIGNvbWJpbmF0aW9uIHdpdGgg
ZGVzY2VuZGFudERyYXdzQ29udGVudCBhbmQgbWFza3NUb0JvdW5kcywgYW4gYW5pbWF0ZWQgdHJh
bnNmb3JtIGZvcmNlcyB0aGUgbGF5ZXIgdG8gaGF2ZSBhIG5ldyByZW5kZXJTdXJmYWNlLgorICAg
IC8vIFB1dCBhIHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIHJlbmRlciBzdXJmYWNlLgogICAg
IGFkZEFuaW1hdGVkVHJhbnNmb3JtVG9Db250cm9sbGVyKCpyZW5kZXJTdXJmYWNlMi0+bGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCksIDEwLCAzMCwgMCk7Ci0gICAgcmVuZGVyU3VyZmFjZTItPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAKICAgICAvLyBBbHNvIHB1dCB0cmFuc2Zvcm0gYW5pbWF0
aW9ucyBvbiBncmFuZENoaWxkT2ZSb290LCBhbmQgZ3JhbmRDaGlsZE9mUlMyCiAgICAgYWRkQW5p
bWF0ZWRUcmFuc2Zvcm1Ub0NvbnRyb2xsZXIoKmdyYW5kQ2hpbGRPZlJvb3QtPmxheWVyQW5pbWF0
aW9uQ29udHJvbGxlcigpLCAxMCwgMzAsIDApOwpAQCAtMjc5Myw5ICsyNzk2LDExIEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aEFuaW1h
dGluZ1RyYW5zZm9ybXMpCiAgICAgYmFja2ZhY2VNYXRyaXgucm90YXRlM2QoMCwgMSwgMCwgMTgw
KTsKICAgICBiYWNrZmFjZU1hdHJpeC50cmFuc2xhdGUoLTUwLCAtNTApOwogCi0gICAgLy8gSGF2
aW5nIGEgZGVzY2VuZGFudCB0aGF0IGRyYXdzLCBtYXNrc1RvQm91bmRzLCBhbmQgYW5pbWF0aW5n
IHRyYW5zZm9ybXMsIHdpbGwgbWFrZSB0aGUgYW5pbWF0aW5nU3VyZmFjZSBvd24gYSByZW5kZXIg
c3VyZmFjZS4KKyAgICAvLyBNYWtlIG91ciByZW5kZXIgc3VyZmFjZS4KKyAgICBhbmltYXRpbmdT
dXJmYWNlLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICAvLyBBbmltYXRlIHRo
ZSB0cmFuc2Zvcm0gb24gdGhlIHJlbmRlciBzdXJmYWNlLgogICAgIGFkZEFuaW1hdGVkVHJhbnNm
b3JtVG9Db250cm9sbGVyKCphbmltYXRpbmdTdXJmYWNlLT5sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSwgMTAsIDMwLCAwKTsKLSAgICBhbmltYXRpbmdTdXJmYWNlLT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOwogICAgIC8vIFRoaXMgaXMganVzdCBhbiBhbmltYXRpbmcgbGF5ZXIsIG5vdCBhIHN1
cmZhY2UuCiAgICAgYWRkQW5pbWF0ZWRUcmFuc2Zvcm1Ub0NvbnRyb2xsZXIoKmFuaW1hdGluZ0No
aWxkLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSwgMTAsIDMwLCAwKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5k
ZXggZDI3NzM3OTBlYmY1NDc5ZjZkMDMyYThlZjI5YmJhMDU3Y2YzOWI2Yi4uMDlmMTY5ZGRhOTIz
MzQ1NWJkYTU0ZjY0YmIxYTE4M2IyNDQ1ZTRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKICNpbmNsdWRlICJDQ09jY2x1c2lvblRy
YWNrZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ0NUaHJlYWRlZFRlc3QuaCIKKyNpbmNsdWRl
ICJDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJj
Yy9DQ0dyYXBoaWNzQ29udGV4dC5oIgpAQCAtMjI2OSw0ICsyMjcwLDEwMSBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1
blRlc3QodHJ1ZSk7CiB9CiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3Bl
Y3RTdXJmYWNlTWVtb3J5VXNlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGlj
OgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNl
KCkKKyAgICAgICAgOiBtX3Jvb3RMYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoKSkKKyAgICAg
ICAgLCBtX2NoaWxkTGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9kZWxlZ2F0
ZSkpCisgICAgICAgICwgbV9yZW5kZXJTdXJmYWNlTGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbV9kZWxlZ2F0ZSkpCisgICAgICAgICwgbV9yZW5kZXJTdXJmYWNlQ2hpbGRMYXll
cihDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX2RlbGVnYXRlKSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBwb3N0U2V0
TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q29tbWl0KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9sYXllclRyZWVIb3N0LT5mcmFtZU51
bWJlcigpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIC8vIHJlbmRlclN1cmZhY2VM
YXllciB3aWxsIGJlIHBhaW50ZWQgYmVmb3JlIGNoaWxkTGF5ZXIsIGFuZCB3aWxsIHRha2UgbWVt
b3J5IGJlZm9yZSBpdC4KKyAgICAgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX2NoaWxk
TGF5ZXIpOworICAgICAgICAgICAgbV9jaGlsZExheWVyLT5hZGRDaGlsZChtX3JlbmRlclN1cmZh
Y2VMYXllcik7CisgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllci0+YWRkQ2hpbGQobV9y
ZW5kZXJTdXJmYWNlQ2hpbGRMYXllcik7CisKKyAgICAgICAgICAgIG1fY2hpbGRMYXllci0+c2V0
SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRJ
c0RyYXdhYmxlKHRydWUpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNlQ2hpbGRMYXllci0+
c2V0SXNEcmF3YWJsZSh0cnVlKTsKKworICAgICAgICAgICAgbV9yb290TGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgICAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJv
dW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNl
TGF5ZXItPnNldE9wYWNpdHkoMC41KTsKKyAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVy
LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJm
YWNlTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICAgICAg
bV9yZW5kZXJTdXJmYWNlQ2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworCisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RM
YXllcihtX3Jvb3RMYXllcik7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdw
b3J0U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisKKyAgICAgICAgICAgIHBvc3RTZXROZWVkc0Nv
bW1pdFRvTWFpblRocmVhZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChob3N0SW1wbC0+c291
cmNlRnJhbWVOdW1iZXIoKSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAvLyBNZW1v
cnkgdXNhZ2UgZm9yIHRoZSByZW5kZXIgc3VyZmFjZSBjaGlsZCBpcyAxMDAqMTAwKjQuCisgICAg
ICAgICAgICAvLyBNZW1vcnkgdXNhZ2UgZm9yIHRoZSByZW5kZXIgc3VyZmFjZSBsYXllciBpcyAx
MDAqMTAwKjQuCisgICAgICAgICAgICAvLyBNZW1vcnkgdXNhZ2UgZm9yIHRoZSByZW5kZXIgc3Vy
ZmFjZSBpbnRlcm1lZGlhdGUgdGV4dHVyZSBpcyAxMDAqMTAwKjQuCisgICAgICAgICAgICAvLyBU
aGlzIHNob3VsZCBoYXZlIG1lbW9yeSBmb3IgdGhlIHJlbmRlciBzdXJmYWNlIGFuZCBpdHMgbGF5
ZXJzLAorICAgICAgICAgICAgLy8gYnV0IHRoZSBjaGlsZExheWVyIHdpbGwgbm90IGZpdC4KKyAg
ICAgICAgICAgIGhvc3RJbXBsLT5zZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygxMDAqMTAw
KjQqMyk7CisgICAgICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjb25zdCBGYWtl
Q0NUaWxlZExheWVySW1wbCogY2hpbGRMYXllckltcGwgPSBzdGF0aWNfY2FzdDxjb25zdCBGYWtl
Q0NUaWxlZExheWVySW1wbCo+KGhvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5n
ZXQoKSk7CisgICAgICAgICAgICBjb25zdCBGYWtlQ0NUaWxlZExheWVySW1wbCogcmVuZGVyU3Vy
ZmFjZUxheWVySW1wbCA9IHN0YXRpY19jYXN0PGNvbnN0IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKj4o
Y2hpbGRMYXllckltcGwtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOworICAgICAgICAgICAgY29uc3Qg
RmFrZUNDVGlsZWRMYXllckltcGwqIHJlbmRlclN1cmZhY2VDaGlsZExheWVySW1wbCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKj4ocmVuZGVyU3VyZmFjZUxheWVySW1w
bC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBjaGlsZCBsYXll
ciB3b24ndCBmaXQgaW4gbWVtb3J5IHNvIHNob3VsZCBub3QgaGF2ZSBhbnkgdGlsZXMuCisgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRMYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CisK
KyAgICAgICAgICAgIC8vIFRoZSBzdXJmYWNlIGxheWVyIGFuZCBpdHMgY2hpbGQgc2hvdWxkIGhh
dmUgdGlsZXMuCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW5kZXJTdXJmYWNlTGF5ZXJJbXBs
LT5oYXNUaWxlQXQoMCwgMCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVuZGVyU3VyZmFj
ZUNoaWxkTGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworCisgICAgICAgICAgICBlbmRUZXN0
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgUmVmUHRycyBzbyBDQ0xh
eWVyVHJlZUhvc3QgZGllcy4KKyAgICAgICAgbV9yb290TGF5ZXIuY2xlYXIoKTsKKyAgICAgICAg
bV9jaGlsZExheWVyLmNsZWFyKCk7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLmNsZWFy
KCk7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXIuY2xlYXIoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIG1fZGVsZWdhdGU7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdExheWVyOworICAgIFJlZlB0cjxDb250ZW50TGF5
ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOworICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1
bT4gbV9yZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVt
PiBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVyOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlLCBydW5NdWx0aVRocmVhZCkKK3sK
KyAgICBydW5UZXN0KHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149530</attachid>
            <date>2012-06-26 07:37:31 -0700</date>
            <delta_ts>2012-06-27 12:31:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120626103731.patch</filename>
            <type>text/plain</type>
            <size>27021</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI3NDM1YjlmZmM1MjQ4
NzFjZmVlMjA1MWRkM2NkZDliZDQwZDVlNC4uMDc5M2JiYjUyNGE4NjQ0NDQ0YWFjYjA5ODAzNDQw
OWZmMTEwYjQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA2LTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSBhbmQgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSBtZXRob2Rz
IGFkZGVkIHRvCisgICAgICAgIGJvdGggQ0NSZW5kZXJTdXJmYWNlIGFuZCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0gdG8gaW5kaWNhdGUgdGhlc2Ugc2hvdWxkCisgICAgICAgIGJlIGtlcHQgaW4gc3lu
Yy4gVGhleSBhcmUgdXNlZCBpbiBDQ1JlbmRlclN1cmZhY2UgZm9yIGFjdHVhbCB0ZXh0dXJlCisg
ICAgICAgIG9wZXJhdGlvbnMsIGFuZCBpbiBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gdG8gZGV0ZXJt
aW5lIHRoZSBtZW1vcnkgdGhhdAorICAgICAgICB3b3VsZCBiZSB1c2VkIGJ5IHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMuCisKKyAgICAgICAgV2Ugbm93IHNldCB0aGUgbWVtb3J5IGxpbWl0IGZvciBj
b250ZW50cyBvbiBldmVyeSBmcmFtZSwgc28gc2ltcGxpZnkKKyAgICAgICAgbG9naWMgaW4gdGhl
IHVwZGF0ZUxheWVycyhyb290TGF5ZXIpIG1ldGhvZCBhcyBpdCdzIG1vcmUgY29tcGxleCB0aGFu
CisgICAgICAgIGl0IG5lZWRzIHRvIGJlIG5vdy4KKworICAgICAgICBUZXN0OiBDQ0xheWVyVHJl
ZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZQorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVxdWlyZWRUZXh0dXJlQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJm
YWNlQ2hyb21pdW06OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTdXJmYWNlQ2hyb21pdW06OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAg
KFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc2VydmVSZW5kZXJT
dXJmYWNlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T3ZlcmRyYXdNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDT3ZlcmRyYXdNZXRyaWNz
OjpDQ092ZXJkcmF3TWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVNZW1vcnlCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6cmVjb3JkTWV0cmljc0ludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oOgorICAgICAgICAoQ0NPdmVyZHJhd01ldHJp
Y3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250
ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxp
ZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhh
c0NhY2hlZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclN1cmZhY2U6OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1JlbmRlclN1cmZhY2U6OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKENDUmVu
ZGVyU3VyZmFjZSk6CisKIDIwMTItMDYtMjIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgcmVuZGVyIHN1cmZhY2VzIG9uIG1h
aW4gdGhyZWFkIG9ubHkgZm9yIHRoZSBjdXJyZW50IGZyYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGRhMWRiZmU1NDNhMWM4ZGYwOTczODdhNDRlOTMwMjBmMDIzYTIwZTUuLjUxMDE1
YWEzZWNiM2VmMDU5N2VjMWMxYWNiYjVlZWQwZWQ5MjFkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDYtMjUgIERhbmEgSmFuc2VucyAgPGRhbmFr
akBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZXNwZWN0IG1lbW9yeSBuZWVk
ZWQgZm9yIFJlbmRlclN1cmZhY2VzIHdoZW4gcmVzZXJ2aW5nIGNvbnRlbnRzIHRleHR1cmVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTkwMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVu
dHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlOjpDQ0xheWVyVHJlZUhvc3RUZXN0
Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNlTWVtb3J5VXNlOjpiZWdpblRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1l
bW9yeVVzZTo6ZGlkQ29tbWl0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENv
bnRlbnRzUmVzcGVjdFN1cmZhY2VNZW1vcnlVc2U6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb250ZW50c1Jlc3BlY3RTdXJmYWNl
TWVtb3J5VXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VEVT
VF9GKToKKwogMjAxMi0wNi0yMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSByZW5kZXIgc3VyZmFjZXMgb24gbWFpbiB0aHJl
YWQgb25seSBmb3IgdGhlIGN1cnJlbnQgZnJhbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwCmluZGV4IGE1YzRjNjA4MjQ1NjllMTY3NzhlMTI5MmExZTM1MmNkNjljYThjN2Qu
LjliOTRjMDVhOWM5NmVkYzc0NzQ0MDkyYTllOGJiYmUyNjI1N2U0ZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAi
RmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CkBAIC03NCw2ICs3NSwxNCBAQCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIFJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6dGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHBhcmVudC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOwogfQogCitzaXplX3QgUmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpyZXF1aXJlZFRleHR1cmVCeXRlcygpIGNvbnN0Cit7CisgICAgc2l6ZV90IGJ5
dGVzID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKG1fY29udGVudFJlY3Quc2l6ZSgp
LCBjb250ZW50c1RleHR1cmVGb3JtYXQoKSk7CisgICAgaWYgKCFtX2JhY2tncm91bmRGaWx0ZXJz
LmlzRW1wdHkoKSkKKyAgICAgICAgYnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5
dGVzKG1fY29udGVudFJlY3Quc2l6ZSgpLCBiYWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpKTsKKyAg
ICByZXR1cm4gYnl0ZXM7Cit9CisKIGJvb2wgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpoYXNSZXBs
aWNhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDBlN2Q0ZTM4YzU2YzFlY2Nk
OTZmNWNiYWZkNzRmOWRlNWYzZDg3ZDkuLjdlYTZjMDM0NjhkMTVhNjQxYmY0NTIwYmQ4YTJhNTI2
MmI0YzJhNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0zMCw2ICsz
MCw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KQEAgLTExMCw2ICsxMTEsMTEgQEAg
cHVibGljOgogCiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNl
KCkgY29uc3Q7CiAKKyAgICBHQzNEZW51bSBjb250ZW50c1RleHR1cmVGb3JtYXQoKSBjb25zdCB7
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsgfQorICAgIEdDM0RlbnVtIGJhY2tncm91
bmRUZXh0dXJlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
IH0KKworICAgIHNpemVfdCByZXF1aXJlZFRleHR1cmVCeXRlcygpIGNvbnN0OworCiAgICAgYm9v
bCBoYXNSZXBsaWNhKCkgY29uc3Q7CiAKICAgICBib29sIGhhc01hc2soKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdkMTRjZjVkYTNhNWMzMmJlNWYzMDQ2NWEy
YWU4ZmQ4ZjQwZTNjZmMuLmYzYmE2Y2VjNDg4MWY0ODg0NjBkMDRiYjI2YWFkMGNmYzM5NDBhYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNDM5LDcgKzQzOSw3IEBAIGJv
b2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkKIH0K
IAogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXIm
IHVwZGF0ZXIsIHNpemVfdCBjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNpemVfdCBt
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcykKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVy
SW5pdGlhbGl6ZWQpOwogICAgIEFTU0VSVChjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpOwpAQCAt
NDUwLDcgKzQ1MCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0
dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtCiAgICAgaWYgKHZpZXdwb3J0
U2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5zZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhjb250ZW50c01lbW9yeUxp
bWl0Qnl0ZXMpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5QWxsb2Nh
dGlvbkxpbWl0Qnl0ZXMobWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMpOwogCiAgICAgdXBkYXRl
TGF5ZXJzKHJvb3RMYXllcigpLCB1cGRhdGVyKTsKIH0KQEAgLTQ4OSwyMSArNDg5LDEzIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
LCBDQ1RleHR1cmVVcGRhdGVyJiB1CiAgICAgcmVzZXJ2ZVRleHR1cmVzKHVwZGF0ZUxpc3QpOwog
CiAgICAgcGFpbnRMYXllckNvbnRlbnRzKHVwZGF0ZUxpc3QsIFBhaW50VmlzaWJsZSwgdXBkYXRl
cik7Ci0gICAgaWYgKCFtX3RyaWdnZXJJZGxlUGFpbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzaXplX3QgcHJlZmVycmVkTGltaXRCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
cHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygpOwotICAgIHNpemVfdCBtYXhMaW1pdEJ5dGVzID0g
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCk7Ci0gICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHByZWZlcnJlZExpbWl0
Qnl0ZXMpOwotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlV
c2VCeXRlcygpID49IHByZWZlcnJlZExpbWl0Qnl0ZXMpCi0gICAgICAgIHJldHVybjsKIAotICAg
IC8vIElkbGUgcGFpbnRpbmcgc2hvdWxkIGZhaWwgd2hlbiB3ZSBoaXQgdGhlIHByZWZlcnJlZCBt
ZW1vcnkgbGltaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYWx3YXlzIHB1c2ggdXMgdG93
YXJkcyB0aGUgbWF4aW11bSBsaW1pdC4KLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVycmVkTGltaXRCeXRlcyk7Ci0gICAgLy8gVGhlIHNl
Y29uZCAoaWRsZSkgcGFpbnQgd2lsbCBiZSBhIG5vLW9wIGluIGxheWVycyB3aGVyZSBwYWludGlu
ZyBhbHJlYWR5IG9jY3VyZWQgYWJvdmUuCi0gICAgcGFpbnRMYXllckNvbnRlbnRzKHVwZGF0ZUxp
c3QsIFBhaW50SWRsZSwgdXBkYXRlcik7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0Qnl0ZXMpOworICAgIHNpemVfdCBtYXhDb250
ZW50Qnl0ZXNBZnRlclJlbmRlclN1cmZhY2VzID0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5t
YXhNZW1vcnlMaW1pdEJ5dGVzKCk7CisgICAgc2l6ZV90IGN1cnJlbnRDb250ZW50Qnl0ZXMgPSBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpOworICAgIGlm
IChtX3RyaWdnZXJJZGxlUGFpbnRzICYmIGN1cnJlbnRDb250ZW50Qnl0ZXMgPCBtYXhDb250ZW50
Qnl0ZXNBZnRlclJlbmRlclN1cmZhY2VzKSB7CisgICAgICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUp
IHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBv
Y2N1cmVkIGFib3ZlLgorICAgICAgICBwYWludExheWVyQ29udGVudHModXBkYXRlTGlzdCwgUGFp
bnRJZGxlLCB1cGRhdGVyKTsKKyAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVw
ZGF0ZUxpc3Quc2l6ZSgpOyArK2kpCiAgICAgICAgIHVwZGF0ZUxpc3RbaV0tPmNsZWFyUmVuZGVy
U3VyZmFjZSgpOwpAQCAtNTQ4LDE5ICs1NDAsNDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50TWFza3NGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXkK
ICAgICAgICAgdXBkYXRlKHJlcGxpY2FNYXNrTGF5ZXIsIHBhaW50VHlwZSwgdXBkYXRlciwgMCk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNlcnZlUmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVz
KFRleHR1cmVNYW5hZ2VyJiB0ZXh0dXJlTWFuYWdlciwgQ0NPdmVyZHJhd01ldHJpY3MmIG92ZXJk
cmF3TWV0cmljcywgc2l6ZV90IHJlcXVpcmVkQnl0ZXMpCit7CisgICAgc2l6ZV90IG1heENvbnRl
bnRCeXRlcyA9IHRleHR1cmVNYW5hZ2VyLm1heE1lbW9yeUxpbWl0Qnl0ZXMoKTsKKyAgICBzaXpl
X3QgY3VycmVudENvbnRlbnRCeXRlcyA9IHRleHR1cmVNYW5hZ2VyLmN1cnJlbnRNZW1vcnlVc2VC
eXRlcygpOworCisgICAgc2l6ZV90IGF2YWlsYWJsZUNvbnRlbnRCeXRlcyA9IG1heENvbnRlbnRC
eXRlcyAtIGN1cnJlbnRDb250ZW50Qnl0ZXM7CisgICAgc2l6ZV90IHJlc2VydmVCeXRlcyA9IHJl
cXVpcmVkQnl0ZXMgPD0gYXZhaWxhYmxlQ29udGVudEJ5dGVzID8gcmVxdWlyZWRCeXRlcyA6IGF2
YWlsYWJsZUNvbnRlbnRCeXRlczsKKyAgICB0ZXh0dXJlTWFuYWdlci5zZXRNYXhNZW1vcnlMaW1p
dEJ5dGVzKG1heENvbnRlbnRCeXRlcyAtIHJlc2VydmVCeXRlcyk7CisKKyAgICBvdmVyZHJhd01l
dHJpY3MuZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyhyZXNlcnZlQnl0ZXMp
OworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSwgQ0NU
ZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKIHsKICAgICAvLyBVc2UgRnJvbnRUb0JhY2sgdG8gYWxs
b3cgZm9yIHRlc3Rpbmcgb2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcgZHVyaW5nIHRo
ZSB0cmVlIHdhbGsuCiAgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOwog
CisgICAgSGFzaFNldDxSZW5kZXJTdXJmYWNlQ2hyb21pdW0qPiBhbGxvY2F0ZWRTdXJmYWNlczsK
KyAgICBib29sIHRyYWNrUmVuZGVyU3VyZmFjZU1lbW9yeSA9IHBhaW50VHlwZSA9PSBQYWludFZp
c2libGU7CisKICAgICBib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSA9IHRydWU7IC8vIEZJWE1F
OiBJbiB0aGUgZnV0dXJlLCBkaXNhYmxlIHRoaXMgd2hlbiBhYm91dDp0cmFjaW5nIGlzIG9mZi4K
ICAgICBDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KEludFBvaW50
KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSwgcmVjb3JkTWV0cmljc0ZvckZyYW1lKTsKICAgICBv
Y2NsdXNpb25UcmFja2VyLnNldE1pbmltdW1UcmFja2luZ1NpemUoQ0NPY2NsdXNpb25UcmFja2Vy
OjpwcmVmZXJyZWRNaW5pbXVtVHJhY2tpbmdTaXplKCkpOwogCisgICAgaWYgKHRyYWNrUmVuZGVy
U3VyZmFjZU1lbW9yeSkgeworICAgICAgICAvLyBTYXZlIG9uZSB2aWV3cG9ydCBmb3IgdGhlIHJv
b3QgcmVuZGVyIHN1cmZhY2UsIGlmIGl0IGhhcyBhCisgICAgICAgIC8vIHRleHR1cmUsIG9yIGZv
ciBhbnkgcmVhZGJhY2tzIHJlcXVpcmVkIHRvIGRyYXcgdGhlIGZyYW1lLgorICAgICAgICBzaXpl
X3QgcmVxdWlyZWRCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhtX2Rldmlj
ZVZpZXdwb3J0U2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQik7CisgICAgICAgIHJlc2VydmVS
ZW5kZXJTdXJmYWNlTWVtb3J5Qnl0ZXMoKm1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSwg
b2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKSwgcmVxdWlyZWRCeXRlcyk7CisgICAg
fQorCiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpl
bmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlw
ZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIuZW50ZXJMYXll
cihpdCk7CiAKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXQgPSBpdC50YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBib29sIGlz
Um9vdFJlbmRlclN1cmZhY2UgPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0WzBdOworICAgICAgICBpZiAodHJhY2tSZW5kZXJTdXJmYWNlTWVt
b3J5ICYmICFpc1Jvb3RSZW5kZXJTdXJmYWNlICYmICFhbGxvY2F0ZWRTdXJmYWNlcy5jb250YWlu
cyh0YXJnZXQpKSB7CisgICAgICAgICAgICByZXNlcnZlUmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVz
KCptX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuZ2V0KCksIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRy
YXdNZXRyaWNzKCksIHRhcmdldC0+cmVxdWlyZWRUZXh0dXJlQnl0ZXMoKSk7CisgICAgICAgICAg
ICBhbGxvY2F0ZWRTdXJmYWNlcy5hZGQodGFyZ2V0KTsKKyAgICAgICAgfQorCiAgICAgICAgIGlm
IChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSB8fCBpdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkpOwogICAgICAgICAgICAgcGFpbnRNYXNrc0Zv
clJlbmRlclN1cmZhY2UoKml0LCBwYWludFR5cGUsIHVwZGF0ZXIpOwpAQCAtNTcyLDYgKzU5Myw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIubGVh
dmVMYXllcihpdCk7CiAgICAgfQogCisgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJp
Y3MoKS5kaWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAgICBvY2NsdXNpb25UcmFja2VyLm92
ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKaW5kZXggNmY2OTQ2ZTMxYzdhMzNhYmFkZjc4ZDY1NjUwZTBiOTM1MjY2NjU0
Zi4uMjU4YzllNjUwYjMzZWE2ODEyODgzZDc4YzA3MGQwMDc5NjkzNDA3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGFjcXVpcmVMYXllclRleHR1cmVzKCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3
ZSBzaG91bGQgYWJvcnQgdGhpcyBmcmFtZSBkdWUgdG8gaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4K
ICAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKTsKLSAgICB2b2lkIHVw
ZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRC
eXRlcyk7CisgICAgdm9pZCB1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYsIHNpemVfdCBt
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQq
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdN
ZXRyaWNzLmNwcAppbmRleCA3YjU3Yzg5YjEyMjEwZDFlNjc2NmU0N2M1OGZjNmU5YjU0NmU3MzE2
Li43NjI5MjQ0OTFlMTZhN2Q1MzhkZTg4NjI5ZmZiNzQ3NjA4ZDM2Mjk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0
cmljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwCkBAIC00Niw2ICs0Niw4IEBAIENDT3ZlcmRyYXdNZXRy
aWNzOjpDQ092ZXJkcmF3TWV0cmljcyhib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSkKICAgICAs
IG1fcGl4ZWxzVXBsb2FkZWRPcGFxdWUoMCkKICAgICAsIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1
Y2VudCgwKQogICAgICwgbV90aWxlc0N1bGxlZEZvclVwbG9hZCgwKQorICAgICwgbV9jb250ZW50
c1RleHR1cmVVc2VCeXRlcygwKQorICAgICwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVz
KDApCiAgICAgLCBtX3BpeGVsc0RyYXduT3BhcXVlKDApCiAgICAgLCBtX3BpeGVsc0RyYXduVHJh
bnNsdWNlbnQoMCkKICAgICAsIG1fcGl4ZWxzQ3VsbGVkRm9yRHJhd2luZygwKQpAQCAtOTIsNiAr
OTQsMjIgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXBsb2FkKGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmcKICAgICBtX3BpeGVsc1VwbG9hZGVkVHJh
bnNsdWNlbnQgKz0gdXBsb2FkQXJlYSAtIHVwbG9hZE9wYXF1ZUFyZWE7CiB9CiAKK3ZvaWQgQ0NP
dmVyZHJhd01ldHJpY3M6OmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCBj
b250ZW50c1RleHR1cmVVc2VCeXRlcykKK3sKKyAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZy
YW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzICs9
IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzOworfQorCit2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpk
aWRVc2VSZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCByZW5kZXJTdXJmYWNl
VXNlQnl0ZXMpCit7CisgICAgaWYgKCFtX3JlY29yZE1ldHJpY3NGb3JGcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzICs9IHJlbmRlclN1
cmZhY2VVc2VCeXRlczsKK30KKwogdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkQ3VsbEZvckRy
YXdpbmcoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBj
b25zdCBJbnRSZWN0JiBiZWZvcmVDdWxsUmVjdCwgY29uc3QgSW50UmVjdCYgYWZ0ZXJDdWxsUmVj
dCkKIHsKICAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZyYW1lKQpAQCAtMTM0LDYgKzE1Miw4
IEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRlcm5hbChNZXRyaWNz
VHlwZSBtZXRyaWNzVHlwZSwgY29uc3QgTGF5CiAgICAgZmxvYXQgbm9ybWFsaXphdGlvbiA9IDEw
MDAuZiAvIChsYXllclRyZWVIb3N0LT52aWV3cG9ydFNpemUoKS53aWR0aCgpICogbGF5ZXJUcmVl
SG9zdC0+dmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwogICAgIC8vIFRoaXMgZ2l2ZXMgYXBwcm94
aW1hdGVseSAxMDB4IHRoZSBwZXJjZW50YWdlIG9mIHRpbGVzIHRvIGZpbGwgdGhlIHZpZXdwb3J0
IG9uY2UsIGlmIGFsbCB0aWxlcyB3ZXJlIDI1NngyNTYuCiAgICAgZmxvYXQgdGlsZU5vcm1hbGl6
YXRpb24gPSAxMDAwMC5mIC8gKGxheWVyVHJlZUhvc3QtPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkg
LyAyNTYuZiAqIGxheWVyVHJlZUhvc3QtPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpIC8gMjU2LmYp
OworICAgIC8vIFRoaXMgZ2l2ZXMgYXBwcm94aW1hdGVseSAxMHggdGhlIHBlcmNlbnRhZ2Ugb2Yg
Ynl0ZXMgdG8gZmlsbCB0aGUgdmlld3BvcnQgb25jZSwgYXNzdW1pbmcgNCBieXRlcyBwZXIgcGl4
ZWwuCisgICAgZmxvYXQgYnl0ZU5vcm1hbGl6YXRpb24gPSBub3JtYWxpemF0aW9uIC8gNDsKIAog
ICAgIHN3aXRjaCAobWV0cmljc1R5cGUpIHsKICAgICBjYXNlIERyYXdpbmdUb1NjcmVlbjoKQEAg
LTE1MSw2ICsxNzEsMTAgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0lu
dGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBMYXkKICAgICAgICAgV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5w
aXhlbENvdW50T3BhcXVlX1VwbG9hZCIsIHN0YXRpY19jYXN0PGludD4obm9ybWFsaXphdGlvbiAq
IG1fcGl4ZWxzVXBsb2FkZWRPcGFxdWUpLCAxMDAsIDEwMDAwMDAsIDUwKTsKICAgICAgICAgV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVy
NC5waXhlbENvdW50VHJhbnNsdWNlbnRfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pihub3JtYWxp
emF0aW9uICogbV9waXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50KSwgMTAwLCAxMDAwMDAwLCA1MCk7
CiAgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291
bnRzKCJSZW5kZXJlcjQudGlsZUNvdW50Q3VsbGVkX1VwbG9hZCIsIHN0YXRpY19jYXN0PGludD4o
dGlsZU5vcm1hbGl6YXRpb24gKiBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkKSwgMTAwLCAxMDAwMDAw
MCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1
c3RvbUNvdW50cygiUmVuZGVyZXI0LnJlbmRlclN1cmZhY2VUZXh0dXJlQnl0ZXNfVmlld3BvcnRT
Y2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVOb3JtYWxpemF0aW9uICogbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZVVzZUJ5dGVzKSwgMTAsIDEwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5yZW5k
ZXJTdXJmYWNlVGV4dHVyZUJ5dGVzX1Vuc2NhbGVkIiwgc3RhdGljX2Nhc3Q8aW50PihtX3JlbmRl
clN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMgLyAxMDAwKSwgMTAwMCwgMTAwMDAwMDAwLCA1MCk7Cisg
ICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRz
KCJSZW5kZXJlcjQuY29udGVudHNUZXh0dXJlQnl0ZXNfVmlld3BvcnRTY2FsZWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KGJ5dGVOb3JtYWxpemF0aW9uICogbV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyks
IDEwLCAxMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuY29udGVudHNUZXh0dXJlQnl0ZXNfVW5z
Y2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMgLyAxMDAw
KSwgMTAwMCwgMTAwMDAwMDAwLCA1MCk7CiAKICAgICAgICAgewogICAgICAgICAgICAgVFJBQ0Vf
Q09VTlRFUl9JRDEoIndlYmtpdCIsICJVcGxvYWRUaWxlc0N1bGxlZCIsIGxheWVyVHJlZUhvc3Qs
IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQpOwpAQCAtMTYwLDYgKzE4NCwxMCBAQCB2b2lkIENDT3Zl
cmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmljc1R5
cGUsIGNvbnN0IExheQogICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50
IHNjb3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UMiBhYm92ZS4KICAgICAgICAgICAgIFRSQUNFX0VW
RU5UMSgid2Via2l0IiwgIkNDT3ZlcmRyYXdQYWludE1ldHJpY3MiLCAiUGl4ZWxzUGFpbnRlZCIs
IG1fcGl4ZWxzUGFpbnRlZCk7CiAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgLy8g
VGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UcyBh
Ym92ZS4KKyAgICAgICAgICAgIFRSQUNFX0VWRU5UMigiY2MiLCAiQ0NPdmVyZHJhd1BhaW50TWV0
cmljcyIsICJDb250ZW50c1RleHR1cmVCeXRlcyIsIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMs
ICJSZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzIiwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5
dGVzKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0
cmljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
dmVyZHJhd01ldHJpY3MuaAppbmRleCA3MTVmNWUxNTFiYmFkZGExNzk3NmM3ZTM5ZmUzNzEzNzdi
ZGY4ZTMzLi5mMGRhYjBlOTNjOTVlYTU1NGQ4MGE3MjQzYjJkOTg1NTkxNjk1N2Q2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJk
cmF3TWV0cmljcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZEN1bGxUaWxlRm9yVXBsb2FkKCk7CiAgICAgLy8gUmVjb3JkcyBwaXhlbHMgdGhh
dCB3ZXJlIHVwbG9hZGVkIHRvIHRleHR1cmUgbWVtb3J5LgogICAgIHZvaWQgZGlkVXBsb2FkKGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBj
b25zdCBJbnRSZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKKyAg
ICAvLyBSZWNvcmQgY29udGVudHMgdGV4dHVyZShzKSBiZWhpbmQgcHJlc2VudCB1c2luZyB0aGUg
Z2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorICAgIHZvaWQgZGlkVXNlQ29udGVudHNUZXh0dXJlTWVt
b3J5Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAvLyBSZWNvcmQg
UmVuZGVyU3VyZmFjZSB0ZXh0dXJlKHMpIGJlaW5nIHByZXNlbnQgdXNpbmcgdGhlIGdpdmVuIG51
bWJlciBvZiBieXRlcy4KKyAgICB2b2lkIGRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5
Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRlcyk7CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFyZSB1c2VkIGZvciBzYXZpbmcgbWV0cmljcyBkdXJpbmcgZHJhdy4KIApAQCAtOTMsNiAr
OTcsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQ7
CiAgICAgLy8gQ291bnQgb2YgdGlsZXMgdGhhdCB3ZXJlIGludmFsaWRhdGVkIGJ1dCBub3QgdXBs
b2FkZWQuCiAgICAgaW50IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQ7CisgICAgLy8gQ291bnQgdGhl
IG51bWJlciBvZiBieXRlcyBpbiBjb250ZW50cyB0ZXh0dXJlcy4KKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlczsKKyAgICAvLyBDb3VudCB0aGUgbnVtYmVy
IG9mIGJ5dGVzIGluIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCisgICAgdW5zaWduZWQgbG9uZyBs
b25nIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlczsKIAogICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDFjZGFkMjJlNDY4YzEyNGQyOGIxZThkNGJjZmVkZmNm
YWZhMTc1OWMuLjUxYzc3NGViYTQ5NjAxNjkzNTE5ZDdmZmVjYjlmOTY3MDFhYTU3ZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgQ0NS
ZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlCiAgICAgaWYgKG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVz
ZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIGNv
bnRlbnRzVGV4dHVyZUZvcm1hdCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTgsMTIgKzExOCwxMiBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6cmVs
ZWFzZUNvbnRlbnRzVGV4dHVyZSgpCiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENv
bnRlbnRzVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYm
IG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUtPmlz
VmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAg
ICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2
ZWQoKSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwg
Y29udGVudHNUZXh0dXJlRm9ybWF0KCkpOwogfQogCiBib29sIENDUmVuZGVyU3VyZmFjZTo6aGFz
Q2FjaGVkQ29udGVudHNUZXh0dXJlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZW50c1Rl
eHR1cmUgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUg
JiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIGNvbnRl
bnRzVGV4dHVyZUZvcm1hdCgpKTsKIH0KIAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVC
YWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCkBA
IC0xMzYsNyArMTM2LDcgQEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVCYWNrZ3JvdW5k
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGUKICAgICBpZiAobV9iYWNr
Z3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+
cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaAppbmRleCBjZGQ3YTdiNTllYTMxZDFjZmM1MjExMDUzMmZlZTc4ZTI4ZThk
NzhhLi5lN2NjNTU0MzZhZDVkYmRkNTZmYjJiODgwOWJkNzczOTdhYWIyYzMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtMTI1LDYgKzEyNSw5IEBAIHB1YmxpYzoKICAgICBNYW5h
Z2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Rl
eHR1cmUuZ2V0KCk7IH0KICAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dyb3VuZFRleHR1cmUoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9CiAKKyAgICBHQzNEZW51
bSBjb250ZW50c1RleHR1cmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsgfQorICAgIEdDM0RlbnVtIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkgY29uc3Qg
eyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7IH0KKwogICAgIGludCBvd25pbmdMYXll
cklkKCkgY29uc3Q7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCmluZGV4IGQyNzczNzkwZWJmNTQ3OWY2ZDAzMmE4ZWYyOWJiYTA1N2Nm
MzliNmIuLjA5ZjE2OWRkYTkyMzM0NTViZGE1NGY2NGJiMWExODNiMjQ0NWU0ZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCiAjaW5j
bHVkZSAiQ0NPY2NsdXNpb25UcmFja2VyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNDVGhyZWFk
ZWRUZXN0LmgiCisjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUg
IkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKQEAgLTIyNjksNCArMjI3
MCwxMDEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNw
ZWN0U3VyZmFjZU1lbW9yeVVzZSgpCisgICAgICAgIDogbV9yb290TGF5ZXIoTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9jaGlsZExheWVyKENvbnRlbnRMYXllckNocm9taXVt
OjpjcmVhdGUoJm1fZGVsZWdhdGUpKQorICAgICAgICAsIG1fcmVuZGVyU3VyZmFjZUxheWVyKENv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fZGVsZWdhdGUpKQorICAgICAgICAsIG1fcmVu
ZGVyU3VyZmFjZUNoaWxkTGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9kZWxl
Z2F0ZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAg
IHsKKyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbGF5
ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAvLyByZW5kZXJTdXJmYWNlTGF5ZXIgd2lsbCBiZSBwYWludGVkIGJlZm9yZSBjaGlsZExheWVy
LCBhbmQgd2lsbCB0YWtlIG1lbW9yeSBiZWZvcmUgaXQuCisgICAgICAgICAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKKyAgICAgICAgICAgIG1fY2hpbGRMYXllci0+YWRk
Q2hpbGQobV9yZW5kZXJTdXJmYWNlTGF5ZXIpOworICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNl
TGF5ZXItPmFkZENoaWxkKG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXIpOworCisgICAgICAgICAg
ICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgICAgICBtX3JlbmRl
clN1cmZhY2VMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgICAgIG1fcmVuZGVy
U3VyZmFjZUNoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisKKyAgICAgICAgICAgIG1f
cm9vdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICAgICAgbV9y
b290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAg
ICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgICAgICAgICBt
X3JlbmRlclN1cmZhY2VMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAg
ICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKKyAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUNoaWxkTGF5ZXItPnNldEJvdW5kcyhJ
bnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKworICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRSb290TGF5ZXIobV9yb290TGF5ZXIpOworICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgICAg
ICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoaG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpIHsKKyAgICAgICAgY2FzZSAwOgor
ICAgICAgICAgICAgLy8gTWVtb3J5IHVzYWdlIGZvciB0aGUgcmVuZGVyIHN1cmZhY2UgY2hpbGQg
aXMgMTAwKjEwMCo0LgorICAgICAgICAgICAgLy8gTWVtb3J5IHVzYWdlIGZvciB0aGUgcmVuZGVy
IHN1cmZhY2UgbGF5ZXIgaXMgMTAwKjEwMCo0LgorICAgICAgICAgICAgLy8gTWVtb3J5IHVzYWdl
IGZvciB0aGUgcmVuZGVyIHN1cmZhY2UgaW50ZXJtZWRpYXRlIHRleHR1cmUgaXMgMTAwKjEwMCo0
LgorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBtZW1vcnkgZm9yIHRoZSByZW5kZXIg
c3VyZmFjZSBhbmQgaXRzIGxheWVycywKKyAgICAgICAgICAgIC8vIGJ1dCB0aGUgY2hpbGRMYXll
ciB3aWxsIG5vdCBmaXQuCisgICAgICAgICAgICBob3N0SW1wbC0+c2V0TWVtb3J5QWxsb2NhdGlv
bkxpbWl0Qnl0ZXMoMTAwKjEwMCo0KjMpOworICAgICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0
VG9NYWluVGhyZWFkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAg
ICAgICAgICAgY29uc3QgRmFrZUNDVGlsZWRMYXllckltcGwqIGNoaWxkTGF5ZXJJbXBsID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgRmFrZUNDVGlsZWRMYXllckltcGwqPihob3N0SW1wbC0+cm9vdExheWVy
KCktPmNoaWxkcmVuKClbMF0uZ2V0KCkpOworICAgICAgICAgICAgY29uc3QgRmFrZUNDVGlsZWRM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllckltcGwgPSBzdGF0aWNfY2FzdDxjb25zdCBGYWtl
Q0NUaWxlZExheWVySW1wbCo+KGNoaWxkTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLmdldCgpKTsK
KyAgICAgICAgICAgIGNvbnN0IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlQ2hp
bGRMYXllckltcGwgPSBzdGF0aWNfY2FzdDxjb25zdCBGYWtlQ0NUaWxlZExheWVySW1wbCo+KHJl
bmRlclN1cmZhY2VMYXllckltcGwtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOworCisgICAgICAgICAg
ICAvLyBUaGUgY2hpbGQgbGF5ZXIgd29uJ3QgZml0IGluIG1lbW9yeSBzbyBzaG91bGQgbm90IGhh
dmUgYW55IHRpbGVzLgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkTGF5ZXJJbXBsLT5o
YXNUaWxlQXQoMCwgMCkpOworCisgICAgICAgICAgICAvLyBUaGUgc3VyZmFjZSBsYXllciBhbmQg
aXRzIGNoaWxkIHNob3VsZCBoYXZlIHRpbGVzLgorICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVu
ZGVyU3VyZmFjZUxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHJlbmRlclN1cmZhY2VDaGlsZExheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKwor
ICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIENs
ZWFyIFJlZlB0cnMgc28gQ0NMYXllclRyZWVIb3N0IGRpZXMuCisgICAgICAgIG1fcm9vdExheWVy
LmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGRMYXllci5jbGVhcigpOworICAgICAgICBtX3JlbmRl
clN1cmZhY2VMYXllci5jbGVhcigpOworICAgICAgICBtX3JlbmRlclN1cmZhY2VDaGlsZExheWVy
LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0
ZSBtX2RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAg
ICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+IG1fcmVuZGVyU3VyZmFjZUxheWVyOworICAgIFJlZlB0cjxD
b250ZW50TGF5ZXJDaHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlQ2hpbGRMYXllcjsKK307CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0Q29udGVudHNSZXNwZWN0U3VyZmFjZU1lbW9yeVVzZSwg
cnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdCh0cnVlKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149783</attachid>
            <date>2012-06-27 12:31:07 -0700</date>
            <delta_ts>2012-06-29 11:20:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120627153107.patch</filename>
            <type>text/plain</type>
            <size>115681</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRjMDlkYzRlM2I2Yzg1
MmQ4YWVmZjBiZjI5YWYzYTI2ZjYyNGIyNy4uMDA1NzM0ZTI1ODIxYTA3MzFjNjUxN2EzNTY1M2Y0
ZmI4NDc2OGEwMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTA2LTI2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSBhbmQgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSBtZXRob2Rz
IGFkZGVkIHRvCisgICAgICAgIGJvdGggQ0NSZW5kZXJTdXJmYWNlIGFuZCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0gdG8gaW5kaWNhdGUgdGhlc2Ugc2hvdWxkCisgICAgICAgIGJlIGtlcHQgaW4gc3lu
Yy4gVGhleSBhcmUgdXNlZCBpbiBDQ1JlbmRlclN1cmZhY2UgZm9yIGFjdHVhbCB0ZXh0dXJlCisg
ICAgICAgIG9wZXJhdGlvbnMsIGFuZCBpbiBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gdG8gZGV0ZXJt
aW5lIHRoZSBtZW1vcnkgdGhhdAorICAgICAgICB3b3VsZCBiZSB1c2VkIGJ5IHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMuCisKKyAgICAgICAgU2luY2Ugc3VyZmFjZSBtZW1vcnkgY2FuIG5vIGxvbmdl
ciBiZSB0YWtlbiBieSBjb250ZW50cywgd2UgcmVtb3ZlIHRoZQorICAgICAgICBwcmVmZXJyZWQg
bWVtb3J5IGxpbWl0IGZyb20gdGhlIHRleHR1cmUgbWFuYWdlci4KKworICAgICAgICBUZXN0czog
VGlsZWRMYXllckNocm9taXVtVGVzdC5kb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJm
YWNlQ2FudEJlQWxsb2NhdGVkCisgICAgICAgICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZVRl
c3QucmVuZGVyU3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFN1cmZhY2UK
KyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5yb290UmVuZGVyU3VyZmFj
ZVJlZHVjZXNNZW1vcnlBdmFpbGFibGUKKyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdC5yZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZUZvclJlcXVlc3RMYXRl
CisgICAgICAgICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qud2hlblJvb3RSZW5kZXJT
dXJmYWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90QXZhaWxhYmxlCisgICAgICAgICAgICAg
ICBDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qud2hlbkNoaWxkUmVuZGVyU3VyZmFjZU5vdEF2YWls
YWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVxdWlyZWRUZXh0dXJlQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNo
cm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmljczo6Q0NPdmVyZHJhd01ldHJpY3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJhd01ldHJpY3M6OmRpZFVzZUNvbnRlbnRzVGV4
dHVyZU1lbW9yeUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NPdmVyZHJhd01ldHJpY3M6OmRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRl
cm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJh
d01ldHJpY3MuaDoKKyAgICAgICAgKENDT3ZlcmRyYXdNZXRyaWNzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVk
dWNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0eUNhbGN1bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0
b3I6OnVpUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6
OnZpc2libGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJpb3JpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21WaXNpYmls
aXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5
Q2FsY3VsYXRvci5oOgorICAgICAgICAoQ0NQcmlvcml0eUNhbGN1bGF0b3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250ZW50c1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc0NhY2hlZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVCYWNr
Z3JvdW5kVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNv
bnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6
OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisK
IDIwMTItMDYtMjYgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQWRkaW5nIFByaW9yaXRpemVkVGV4dHVyZSBhbmQgcmVwbGFjaW5nIENvbnRl
bnRzVGV4dHVyZU1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDcxYWQ4MDFi
MjdlZDVjN2U5NDE3MDA5NGIxM2RjODVlMDJiOGMxYS4uZTA5NDQxZmZiMzY5MzI0NWM4ZDM0ODY5
NzIzOTY0NGRkZGE1OGQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MCBAQAorMjAxMi0wNi0yNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIFJlc3BlY3QgbWVtb3J5IG5lZWRlZCBmb3IgUmVuZGVyU3VyZmFj
ZXMgd2hlbiByZXNlcnZpbmcgY29udGVudHMgdGV4dHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRl
c3QuY3BwOgorICAgICAgICAoV1RGOjpDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Q6OmNyZWF0ZU1h
bmFnZXIpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRM
YXllclRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxlZExheWVy
Q2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAgICAgICAgKFdlYktpdFRlc3RzKToK
KyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6CisgICAgICAgIChGYWtl
VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1U
ZXN0LmNwcDoKKwogMjAxMi0wNi0yNiAgRXJpYyBQZW5uZXIgIDxlcGVubmVyQGdvb2dsZS5jb20+
CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGRpbmcgUHJpb3JpdGl6ZWRUZXh0dXJlIGFuZCByZXBs
YWNpbmcgQ29udGVudHNUZXh0dXJlTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKaW5kZXggYTVjNGM2MDgyNDU2OWUxNjc3OGUxMjkyYTFlMzUyY2Q2OWNhOGM3ZC4u
OWI5NGMwNWE5Yzk2ZWRjNzQ3NDQwOTJhOWU4YmJiZTI2MjU3ZTRlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJG
aWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUg
PHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTc0LDYgKzc1LDE0IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogUmVuZGVy
U3VyZmFjZUNocm9taXVtOjp0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QKICAgICByZXR1cm4g
cGFyZW50LT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CiB9CiAKK3NpemVfdCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OnJlcXVpcmVkVGV4dHVyZUJ5dGVzKCkgY29uc3QKK3sKKyAgICBzaXplX3QgYnl0
ZXMgPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV9jb250ZW50UmVjdC5zaXplKCks
IGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpKTsKKyAgICBpZiAoIW1fYmFja2dyb3VuZEZpbHRlcnMu
aXNFbXB0eSgpKQorICAgICAgICBieXRlcyArPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0
ZXMobV9jb250ZW50UmVjdC5zaXplKCksIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkpOworICAg
IHJldHVybiBieXRlczsKK30KKwogYm9vbCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Omhhc1JlcGxp
Y2EoKSBjb25zdAogewogICAgIHJldHVybiBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMGU3ZDRlMzhjNTZjMWVjY2Q5
NmY1Y2JhZmQ3NGY5ZGU1ZjNkODdkOS4uN2VhNmMwMzQ2OGQxNWE2NDFiZjQ1MjBiZDhhMmE1MjYy
YjRjMmE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTMwLDYgKzMw
LDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUg
PHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgpAQCAtMTEwLDYgKzExMSwxMSBAQCBw
dWJsaWM6CiAKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2Uo
KSBjb25zdDsKIAorICAgIEdDM0RlbnVtIGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOyB9CisgICAgR0MzRGVudW0gYmFja2dyb3Vu
ZFRleHR1cmVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsg
fQorCisgICAgc2l6ZV90IHJlcXVpcmVkVGV4dHVyZUJ5dGVzKCkgY29uc3Q7CisKICAgICBib29s
IGhhc1JlcGxpY2EoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcAppbmRleCBjM2JjYTI3NTY2Nzg0MzJkNGNm
ZWIyNWNmMDhhNjIwZWM1YTkyYWZlLi4wZmM3NWRkY2I1NjA0MTIyOWJkY2JmZWM3OWVhZDEwMzFj
MDNlM2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcApAQCAtMjQ5
LDE0ICsyNDksMTUgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJp
b3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYpCiAKICAgICBjcmVhdGVUZXh0dXJl
VXBkYXRlcklmTmVlZGVkKCk7CiAKKyAgICBib29sIGRyYXdzVG9Sb290U3VyZmFjZSA9ICF0YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKICAgICBpZiAobV9iYWNr
Z3JvdW5kKSB7CiAgICAgICAgIG1fYmFja2dyb3VuZC0+dGV4dHVyZSgpLT5zZXREaW1lbnNpb25z
KGNvbnRlbnRCb3VuZHMoKSwgbV90ZXh0dXJlRm9ybWF0KTsKLSAgICAgICAgbV9iYWNrZ3JvdW5k
LT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQ
cmlvcml0eSgpKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQ
cmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eShkcmF3c1RvUm9vdFN1cmZh
Y2UpKTsKICAgICB9CiAgICAgaWYgKG1fdGh1bWIpIHsKICAgICAgICAgSW50U2l6ZSB0aHVtYlNp
emUgPSB0aGVtZSgpLT50aHVtYlJlY3QobV9zY3JvbGxiYXIuZ2V0KCkpLnNpemUoKTsKICAgICAg
ICAgbV90aHVtYi0+dGV4dHVyZSgpLT5zZXREaW1lbnNpb25zKHRodW1iU2l6ZSwgbV90ZXh0dXJl
Rm9ybWF0KTsKLSAgICAgICAgbV90aHVtYi0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHko
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoKSk7CisgICAgICAgIG1fdGh1bWItPnRl
eHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9y
aXR5KGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggMGE0ZjliYTM3MzI5ZWE1MDZlMjBmMTA3MjRkOTA1ZjU1ODE3MTY1
Yy4uYjc2YzVjNTJhZjllM2UzMmYwMWVlY2UzZjg5OGVhMjhmYzU0ZWM0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC01MTYsNiArNTE2LDcgQEAgdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9y
JiBwcmlvcmkKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlDYWxjLCBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCkKIHsKICAgICBJbnRSZWN0IHByZXBhaW50UmVjdCA9IGlkbGVQYWlu
dFJlY3QodmlzaWJsZVJlY3QpOworICAgIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlID0gIXRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOwogCiAgICAgLy8gUmVzZXQg
b2xkIHBhcnRpYWxVcGRhdGUgZmxhZ3MuCiAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRl
ciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpCkBAIC01NTUsNyArNTU2LDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0
IENDUHJpb3JpdHlDYWxjdWxhdG9yJgogCiAgICAgICAgICAgICAgICAgdGlsZS0+ZGlydHlSZWN0
ID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSk7CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZSogYmFja0J1ZmZlciA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAg
ICAgICAgICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0
eUNhbGMucHJpb3JpdHlGcm9tVmlzaWJpbGl0eSh0cnVlKSk7CisgICAgICAgICAgICAgICAgYmFj
a0J1ZmZlci0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9y
aXR5RnJvbVZpc2liaWxpdHkodHJ1ZSwgZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgICAgICAg
ICAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiBmcm9udEJ1ZmZlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpjcmVhdGUoYmFja0J1ZmZlci0+dGV4dHVyZSgpLT50ZXh0dXJlTWFuYWdl
cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUo
KS0+c2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRl
eHR1cmUoKS0+Zm9ybWF0KCkpOwpAQCAtNTc1LDkgKzU3Niw5IEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvciYKICAgICAgICAgLy8gNTEyIHBpeGVscyBvZiBwcmUtcGFpbnRpbmcuIExhdGVyIHdlIGNh
biBqdXN0IHBhc3MgYW4gYW5pbWF0aW5nIGZsYWcgZXRjLiB0byB0aGUKICAgICAgICAgLy8gY2Fs
Y3VsYXRvciBhbmQgaXQgY2FuIHRha2UgY2FyZSBvZiB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBz
dGlsbCBuZWVkIGl0LgogICAgICAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpICYmICFwcmVw
YWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+
c2V0UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSg1MTIp
KTsKKyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0
eShwcmlvcml0eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyLCBkcmF3c1RvUm9vdFN1cmZh
Y2UpKTsKICAgICAgICAgZWxzZSBpZiAoIXZpc2libGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUNh
bGMucHJpb3JpdHlGcm9tRGlzdGFuY2UodmlzaWJsZVJlY3QsIHRpbGVSZWN0KSk7CisgICAgICAg
ICAgICB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlD
YWxjLnByaW9yaXR5RnJvbURpc3RhbmNlKHZpc2libGVSZWN0LCB0aWxlUmVjdCwgZHJhd3NUb1Jv
b3RTdXJmYWNlKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApp
bmRleCA3OTg4MjRkMGM5MTJkMGE3NDAzN2JkNDc3ZjFiNDRmOTM5YmYzMWFiLi42YmJhMWZiMzkz
YjYxYjJhM2I3MTFmMDMzZDBkYzY2N2FkMWRiN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoKQogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIHBh
cnRpYWwgdXBkYXRlIGNhcGFiaWxpdHkuCiAgICAgbV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVy
ZVVwZGF0ZXMgPSBtaW4obV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMsIG1fcHJv
eHktPm1heFBhcnRpYWxUZXh0dXJlVXBkYXRlcygpKTsKIAotICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDAsIDAsIG1fcHJv
eHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoMCwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXpl
KTsKIAogICAgIG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkID0gdHJ1ZTsKIApAQCAtNDM5LDcg
KzQzOSw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcklm
TmVlZGVkKCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBk
YXRlciYgdXBkYXRlciwgc2l6ZV90IG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKQogewogICAg
IEFTU0VSVChtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCk7Ci0gICAgQVNTRVJUKGNvbnRlbnRz
TWVtb3J5TGltaXRCeXRlcyk7CisgICAgQVNTRVJUKG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVz
KTsKIAogICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0Nyw3ICs0
NDcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIsIHNpemVfdCBtZW1vcnlBbGxvYwogICAgIGlmICh2aWV3cG9ydFNpemUoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+c2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMobWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0
ZXMpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRl
cyhtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICB1cGRhdGVMYXllcnMocm9vdExh
eWVyKCksIHVwZGF0ZXIpOwogfQpAQCAtNDgzLDEyICs0ODMsMjQgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIENDVGV4dHVyZVVw
ZGF0ZXImIHUKICAgICAvLyBSZXNldCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJlcXVlc3RzLgog
ICAgIG1fcGFydGlhbFRleHR1cmVVcGRhdGVSZXF1ZXN0cyA9IDA7CiAKKyAgICBzaXplX3Qgcm9v
dFJlbmRlclN1cmZhY2VCeXRlcyA9IDA7CisgICAgc2l6ZV90IGNoaWxkUmVuZGVyU3VyZmFjZXNC
eXRlcyA9IDA7CisgICAgYm9vbCBiYWNrZ3JvdW5kRmlsdGVyUHJlc2VudCA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgdXBkYXRlTGlzdC5zaXplKCk7ICsraSkgeworICAgICAg
ICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSB1cGRhdGVMaXN0W2ldLmdldCgp
OworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgY2hpbGRSZW5kZXJTdXJmYWNl
c0J5dGVzICs9IHJlbmRlclN1cmZhY2UtPnJlcXVpcmVkVGV4dHVyZUJ5dGVzKCk7CisgICAgICAg
IGJhY2tncm91bmRGaWx0ZXJQcmVzZW50IHw9ICFyZW5kZXJTdXJmYWNlLT5iYWNrZ3JvdW5kRmls
dGVycygpLmlzRW1wdHkoKTsKKyAgICB9CisgICAgaWYgKCFyb290UmVuZGVyU3VyZmFjZUJ5dGVz
ICYmIGJhY2tncm91bmRGaWx0ZXJQcmVzZW50KQorICAgICAgICBjaGlsZFJlbmRlclN1cmZhY2Vz
Qnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKG1fZGV2aWNlVmlld3BvcnRT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCKTsKKwogICAgIC8vIFdlIGRvbid0IG5lZWQgYSBm
dWxsIHBhaW50IGxvb3Agb3IgYW55IHBhcnRpY3VsYXIgdHJhdmVyc2FsIG9yZGVyCiAgICAgLy8g
aGVyZSwgYnV0IGN1cnJlbnRseSBwYWludGluZyBlbmRzIHVwIHNldHRpbmcgdGhlIHZpc2libGUg
cmVjdHMKICAgICAvLyBmb3IgbWFza3MgYW5kIHJlcGxpY2FzLCB3aGljaCBpcyBuZWVkZWQgdG8g
c2V0IHByaW9yaXRpZXMuCiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9y
aXRpZXMoKTsKICAgICBwYWludExheWVyQ29udGVudHModXBkYXRlTGlzdCwgUHJpb3JpdGl6ZVBh
aW50VGV4dHVyZXMsIHVwZGF0ZXIpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMocm9vdFJlbmRlclN1cmZhY2VCeXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5
dGVzKTsKIAogICAgIHBhaW50TGF5ZXJDb250ZW50cyh1cGRhdGVMaXN0LCBQYWludFZpc2libGUs
IHVwZGF0ZXIpOwogICAgIGlmICghbV90cmlnZ2VySWRsZVBhaW50cykKQEAgLTU1OCw2ICs1NzAs
OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICBvY2NsdXNpb25UcmFja2VyLmxl
YXZlTGF5ZXIoaXQpOwogICAgIH0KIAorICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRy
aWNzKCkuZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMobV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworICAgIG9jY2x1c2lvblRyYWNrZXIu
b3ZlcmRyYXdNZXRyaWNzKCkuZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyht
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSk7
CiAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRyaWNzKHRo
aXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAKaW5kZXggMGNjMmZh
NWVjNjE2YTAwNDc3ODI2MTU4OTYwYmQwMTc4ODdlM2RkOC4uYjJjZWY2YWFlMDE5ODA2NWQ2MWQ2
Yjg5NmM1NTgyYWU0YTAzODU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNw
cApAQCAtNDYsNiArNDYsOCBAQCBDQ092ZXJkcmF3TWV0cmljczo6Q0NPdmVyZHJhd01ldHJpY3Mo
Ym9vbCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpCiAgICAgLCBtX3BpeGVsc1VwbG9hZGVkT3BhcXVl
KDApCiAgICAgLCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoMCkKICAgICAsIG1fdGlsZXND
dWxsZWRGb3JVcGxvYWQoMCkKKyAgICAsIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMoMCkKKyAg
ICAsIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlcygwKQogICAgICwgbV9waXhlbHNEcmF3
bk9wYXF1ZSgwKQogICAgICwgbV9waXhlbHNEcmF3blRyYW5zbHVjZW50KDApCiAgICAgLCBtX3Bp
eGVsc0N1bGxlZEZvckRyYXdpbmcoMCkKQEAgLTkyLDYgKzk0LDIyIEBAIHZvaWQgQ0NPdmVyZHJh
d01ldHJpY3M6OmRpZFVwbG9hZChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtVG9UYXJnCiAgICAgbV9waXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50ICs9IHVwbG9hZEFyZWEg
LSB1cGxvYWRPcGFxdWVBcmVhOwogfQogCit2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRVc2VD
b250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyhzaXplX3QgY29udGVudHNUZXh0dXJlVXNlQnl0ZXMp
Cit7CisgICAgaWYgKCFtX3JlY29yZE1ldHJpY3NGb3JGcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyArPSBjb250ZW50c1RleHR1cmVVc2VCeXRl
czsKK30KKwordm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1
cmVNZW1vcnlCeXRlcyhzaXplX3QgcmVuZGVyU3VyZmFjZVVzZUJ5dGVzKQoreworICAgIGlmICgh
bV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVVc2VCeXRlcyArPSByZW5kZXJTdXJmYWNlVXNlQnl0ZXM7Cit9CisKIHZv
aWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZEN1bGxGb3JEcmF3aW5nKGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCwgY29uc3QgSW50UmVjdCYgYmVmb3JlQ3Vs
bFJlY3QsIGNvbnN0IEludFJlY3QmIGFmdGVyQ3VsbFJlY3QpCiB7CiAgICAgaWYgKCFtX3JlY29y
ZE1ldHJpY3NGb3JGcmFtZSkKQEAgLTEzNCw2ICsxNTIsOCBAQCB2b2lkIENDT3ZlcmRyYXdNZXRy
aWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmljc1R5cGUsIGNvbnN0
IExheQogICAgIGZsb2F0IG5vcm1hbGl6YXRpb24gPSAxMDAwLmYgLyAobGF5ZXJUcmVlSG9zdC0+
ZGV2aWNlVmlld3BvcnRTaXplKCkud2lkdGgoKSAqIGxheWVyVHJlZUhvc3QtPmRldmljZVZpZXdw
b3J0U2l6ZSgpLmhlaWdodCgpKTsKICAgICAvLyBUaGlzIGdpdmVzIGFwcHJveGltYXRlbHkgMTAw
eCB0aGUgcGVyY2VudGFnZSBvZiB0aWxlcyB0byBmaWxsIHRoZSB2aWV3cG9ydCBvbmNlLCBpZiBh
bGwgdGlsZXMgd2VyZSAyNTZ4MjU2LgogICAgIGZsb2F0IHRpbGVOb3JtYWxpemF0aW9uID0gMTAw
MDAuZiAvIChsYXllclRyZWVIb3N0LT5kZXZpY2VWaWV3cG9ydFNpemUoKS53aWR0aCgpIC8gMjU2
LmYgKiBsYXllclRyZWVIb3N0LT5kZXZpY2VWaWV3cG9ydFNpemUoKS5oZWlnaHQoKSAvIDI1Ni5m
KTsKKyAgICAvLyBUaGlzIGdpdmVzIGFwcHJveGltYXRlbHkgMTB4IHRoZSBwZXJjZW50YWdlIG9m
IGJ5dGVzIHRvIGZpbGwgdGhlIHZpZXdwb3J0IG9uY2UsIGFzc3VtaW5nIDQgYnl0ZXMgcGVyIHBp
eGVsLgorICAgIGZsb2F0IGJ5dGVOb3JtYWxpemF0aW9uID0gbm9ybWFsaXphdGlvbiAvIDQ7CiAK
ICAgICBzd2l0Y2ggKG1ldHJpY3NUeXBlKSB7CiAgICAgY2FzZSBEcmF3aW5nVG9TY3JlZW46CkBA
IC0xNTEsNiArMTcxLDEwIEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJ
bnRlcm5hbChNZXRyaWNzVHlwZSBtZXRyaWNzVHlwZSwgY29uc3QgTGF5CiAgICAgICAgIFdlYktp
dDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQu
cGl4ZWxDb3VudE9wYXF1ZV9VcGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG5vcm1hbGl6YXRpb24g
KiBtX3BpeGVsc1VwbG9hZGVkT3BhcXVlKSwgMTAwLCAxMDAwMDAwLCA1MCk7CiAgICAgICAgIFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJl
cjQucGl4ZWxDb3VudFRyYW5zbHVjZW50X1VwbG9hZCIsIHN0YXRpY19jYXN0PGludD4obm9ybWFs
aXphdGlvbiAqIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCksIDEwMCwgMTAwMDAwMCwgNTAp
OwogICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNv
dW50cygiUmVuZGVyZXI0LnRpbGVDb3VudEN1bGxlZF9VcGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+
KHRpbGVOb3JtYWxpemF0aW9uICogbV90aWxlc0N1bGxlZEZvclVwbG9hZCksIDEwMCwgMTAwMDAw
MDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1D
dXN0b21Db3VudHMoIlJlbmRlcmVyNC5yZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzX1ZpZXdwb3J0
U2NhbGVkIiwgc3RhdGljX2Nhc3Q8aW50PihieXRlTm9ybWFsaXphdGlvbiAqIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVVc2VCeXRlcyksIDEwLCAxMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQucmVu
ZGVyU3VyZmFjZVRleHR1cmVCeXRlc19VbnNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4obV9yZW5k
ZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzIC8gMTAwMCksIDEwMDAsIDEwMDAwMDAwMCwgNTApOwor
ICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50
cygiUmVuZGVyZXI0LmNvbnRlbnRzVGV4dHVyZUJ5dGVzX1ZpZXdwb3J0U2NhbGVkIiwgc3RhdGlj
X2Nhc3Q8aW50PihieXRlTm9ybWFsaXphdGlvbiAqIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMp
LCAxMCwgMTAwMDAwMCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
Pmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LmNvbnRlbnRzVGV4dHVyZUJ5dGVzX1Vu
c2NhbGVkIiwgc3RhdGljX2Nhc3Q8aW50PihtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzIC8gMTAw
MCksIDEwMDAsIDEwMDAwMDAwMCwgNTApOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIFRSQUNF
X0NPVU5URVJfSUQxKCJjYyIsICJVcGxvYWRUaWxlc0N1bGxlZCIsIGxheWVyVHJlZUhvc3QsIG1f
dGlsZXNDdWxsZWRGb3JVcGxvYWQpOwpAQCAtMTYwLDYgKzE4NCwxMCBAQCB2b2lkIENDT3ZlcmRy
YXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmljc1R5cGUs
IGNvbnN0IExheQogICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50IHNj
b3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UMiBhYm92ZS4KICAgICAgICAgICAgIFRSQUNFX0VWRU5U
MSgiY2MiLCAiQ0NPdmVyZHJhd1BhaW50TWV0cmljcyIsICJQaXhlbHNQYWludGVkIiwgbV9waXhl
bHNQYWludGVkKTsKICAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIG11
c3QgYmUgaW4gYSBkaWZmZXJlbnQgc2NvcGUgdGhhbiB0aGUgVFJBQ0VfRVZFTlRzIGFib3ZlLgor
ICAgICAgICAgICAgVFJBQ0VfRVZFTlQyKCJjYyIsICJDQ092ZXJkcmF3UGFpbnRNZXRyaWNzIiwg
IkNvbnRlbnRzVGV4dHVyZUJ5dGVzIiwgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlcywgIlJlbmRl
clN1cmZhY2VUZXh0dXJlQnl0ZXMiLCBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMpOwor
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3
TWV0cmljcy5oCmluZGV4IDcxNWY1ZTE1MWJiYWRkYTE3OTc2YzdlMzlmZTM3MTM3N2JkZjhlMzMu
LmYwZGFiMGU5M2M5NWVhNTU0ZDgwYTcyNDNiMmQ5ODU1OTE2OTU3ZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRy
aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NPdmVyZHJhd01ldHJpY3MuaApAQCAtNDksNiArNDksMTAgQEAgcHVibGljOgogICAgIHZvaWQg
ZGlkQ3VsbFRpbGVGb3JVcGxvYWQoKTsKICAgICAvLyBSZWNvcmRzIHBpeGVscyB0aGF0IHdlcmUg
dXBsb2FkZWQgdG8gdGV4dHVyZSBtZW1vcnkuCiAgICAgdm9pZCBkaWRVcGxvYWQoY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQsIGNvbnN0IElu
dFJlY3QmIHVwbG9hZFJlY3QsIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3QpOworICAgIC8vIFJl
Y29yZCBjb250ZW50cyB0ZXh0dXJlKHMpIGJlaGluZCBwcmVzZW50IHVzaW5nIHRoZSBnaXZlbiBu
dW1iZXIgb2YgYnl0ZXMuCisgICAgdm9pZCBkaWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRl
cyhzaXplX3QgY29udGVudHNUZXh0dXJlVXNlQnl0ZXMpOworICAgIC8vIFJlY29yZCBSZW5kZXJT
dXJmYWNlIHRleHR1cmUocykgYmVpbmcgcHJlc2VudCB1c2luZyB0aGUgZ2l2ZW4gbnVtYmVyIG9m
IGJ5dGVzLgorICAgIHZvaWQgZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyhz
aXplX3QgcmVuZGVyU3VyZmFjZVVzZUJ5dGVzKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IHVzZWQgZm9yIHNhdmluZyBtZXRyaWNzIGR1cmluZyBkcmF3LgogCkBAIC05Myw2ICs5NywxMCBA
QCBwcml2YXRlOgogICAgIGZsb2F0IG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudDsKICAgICAv
LyBDb3VudCBvZiB0aWxlcyB0aGF0IHdlcmUgaW52YWxpZGF0ZWQgYnV0IG5vdCB1cGxvYWRlZC4K
ICAgICBpbnQgbV90aWxlc0N1bGxlZEZvclVwbG9hZDsKKyAgICAvLyBDb3VudCB0aGUgbnVtYmVy
IG9mIGJ5dGVzIGluIGNvbnRlbnRzIHRleHR1cmVzLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBt
X2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzOworICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgYnl0
ZXMgaW4gUmVuZGVyU3VyZmFjZSB0ZXh0dXJlcy4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzOwogCiAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1
c2VkIGZvciBzYXZpbmcgbWV0cmljcyBkdXJpbmcgZHJhdy4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYjc3NDIyZjhkMzBlYjUz
YWQ1MGIxN2I3NGQ4YjliZWQ5M2E3NTA3ZC4uNmZlODk5Njg5OTFmNmUwMjQ0NTQxYzg0NjFkY2M1
MTE1MWNkMWM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIuY3BwCkBAIC0zNSwxNCArMzUsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90
IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKK0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBt
YXhNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX21heFRleHR1
cmVTaXplKG1heFRleHR1cmVTaXplKQogICAgICwgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzKG1heE1l
bW9yeUxpbWl0Qnl0ZXMpCi0gICAgLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVy
cmVkTWVtb3J5TGltaXRCeXRlcykKLSAgICAsIG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoQ0NQ
cmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eSgpKQotICAgICwgbV9wcmlvcml0eUN1
dG9mZihDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKICAgICAsIG1fbWVt
b3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcygwKQorICAgICwg
bV9tZW1vcnlBdmFpbGFibGVCeXRlcygwKQogewogfQogCkBAIC01NywyMCArNTUsNyBAQCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6On5DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoKQog
ICAgICAgICBkZXN0cm95QmFja2luZygqbV9iYWNraW5ncy5iZWdpbigpLCAwKTsKIH0KIAotdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5
dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQotewotICAgIHNldE1heE1lbW9yeUxpbWl0Qnl0
ZXMobWVtb3J5TGltaXRCeXRlcyk7Ci0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICAgIC8vIE9u
IGFuZHJvaWQsIHdlIGFyZSBzZXR0aW5nIHRoZSBwcmVmZXJyZWQgbWVtb3J5IGxpbWl0IHRvIDMv
NCBvZiBvdXIKLSAgICAvLyBtYXhpbXVtIGFsbG9jYXRpb24sIGJlY2F1c2Ugd2Ugd291bGQgbGlr
ZSB0byBzdGF5IHNpZ25pZmljYW50bHkgYmVsb3cKLSAgICAvLyB0aGUgYWJzb2x1dGUgbWVtb3J5
IGxpbWl0IHdoZW5ldmVyIHdlIGNhbi4KLSAgICBzZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVz
KG1lbW9yeUxpbWl0Qnl0ZXMgLyA0ICogMyk7Ci0jZWxzZQotICAgIHNldFByZWZlcnJlZE1lbW9y
eUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCit2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKHNpemVfdCByb290UmVuZGVy
U3VyZmFjZU1lbW9yeUJ5dGVzLCBzaXplX3QgY2hpbGRSZW5kZXJTdXJmYWNlc01lbW9yeUJ5dGVz
KQogewogI2lmbmRlZiBOREVCVUcKICAgICBhc3NlcnRJbnZhcmlhbnRzKCk7CkBAIC04OSwyMSAr
NzQsMzUgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0
dXJlcygpCiAgICAgICAgIHNvcnRlZFRleHR1cmVzLmFwcGVuZCgqaXQpOwogICAgIHN0ZDo6c29y
dChzb3J0ZWRUZXh0dXJlcy5iZWdpbigpLCBzb3J0ZWRUZXh0dXJlcy5lbmQoKSwgY29tcGFyZVRl
eHR1cmVzKTsKIAorICAgIGlmIChyb290UmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVzID4gbV9tYXhN
ZW1vcnlMaW1pdEJ5dGVzKQorICAgICAgICBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzID0gMDsKKyAg
ICBlbHNlCisgICAgICAgIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgPSBtX21heE1lbW9yeUxpbWl0
Qnl0ZXMgLSByb290UmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVzOworCiAgICAgbV9wcmlvcml0eUN1
dG9mZiA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOworICAgIGJvb2wg
cmVzZXJ2ZWRDaGlsZFJlbmRlclN1cmZhY2VzID0gZmFsc2U7CiAgICAgc2l6ZV90IG1lbW9yeUJ5
dGVzID0gMDsKICAgICBmb3IgKFRleHR1cmVWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkVGV4
dHVyZXMuYmVnaW4oKTsgaXQgIT0gc29ydGVkVGV4dHVyZXMuZW5kKCk7ICsraXQpIHsKICAgICAg
ICAgaWYgKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6
bG93ZXN0UHJpb3JpdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzaXplX3QgbmV3
TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMoKTsKLSAg
ICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbWF4TWVtb3J5TGltaXRCeXRlcygpKSB7Ci0gICAg
ICAgICAgICBtX3ByaW9yaXR5Q3V0b2ZmID0gKCppdCktPnJlcXVlc3RQcmlvcml0eSgpOwotICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCFyZXNlcnZlZENoaWxkUmVuZGVyU3VyZmFj
ZXMgJiYgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcigoKml0KS0+cmVxdWVz
dFByaW9yaXR5KCksIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJpb3JpdHko
KSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdNZW1vcnlCeXRlcyA9IG1lbW9yeUJ5dGVzICsg
Y2hpbGRSZW5kZXJTdXJmYWNlc01lbW9yeUJ5dGVzOworICAgICAgICAgICAgaWYgKG5ld01lbW9y
eUJ5dGVzID4gbV9tZW1vcnlBdmFpbGFibGVCeXRlcykgeworICAgICAgICAgICAgICAgIG1fcHJp
b3JpdHlDdXRvZmYgPSAoKml0KS0+cmVxdWVzdFByaW9yaXR5KCk7CisgICAgICAgICAgICAgICAg
bV9tZW1vcnlBdmFpbGFibGVCeXRlcyA9IG1lbW9yeUJ5dGVzOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9tZW1vcnlBdmFpbGFibGVCeXRlcyAt
PSBjaGlsZFJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXM7CisgICAgICAgICAgICByZXNlcnZlZENo
aWxkUmVuZGVyU3VyZmFjZXMgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChuZXdNZW1v
cnlCeXRlcyA+IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoKQotICAgICAgICAgICAgICAgICAg
ICAmJiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKCgqaXQpLT5yZXF1ZXN0
UHJpb3JpdHkoKSwgbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoKSkpIHsKKworICAgICAgICBzaXpl
X3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMo
KTsKKyAgICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbV9tZW1vcnlBdmFpbGFibGVCeXRlcykg
ewogICAgICAgICAgICAgbV9wcmlvcml0eUN1dG9mZiA9ICgqaXQpLT5yZXF1ZXN0UHJpb3JpdHko
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgbWVtb3J5Qnl0ZXMg
PSBuZXdNZW1vcnlCeXRlczsKICAgICB9CiAKQEAgLTExNyw3ICsxMTYsNyBAQCB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAgICAgaWYg
KGlzQWJvdmVQcmlvcml0eUN1dG9mZikKICAgICAgICAgICAgIG1fbWVtb3J5QWJvdmVDdXRvZmZC
eXRlcyArPSAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7CiAgICAgfQotICAgIEFTU0VSVChtX21l
bW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPD0gbWF4TWVtb3J5TGltaXRCeXRlcygpKTsKKyAgICBBU1NF
UlQobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzIDw9IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMpOwog
CiAgICAgLy8gUHV0IGJhY2tpbmdzIGluIGV2aWN0aW9uL3JlY3ljbGluZyBvcmRlci4KICAgICBm
b3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBt
X2JhY2tpbmdzLmVuZCgpOyArK2l0KQpAQCAtMTU0LDggKzE1MywxMyBAQCBib29sIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRl
eHR1cmUpCiAgICAgaWYgKHRleHR1cmUtPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAorICAgIGJvb2wgb25seUFsbG93VGV4dHVyZXNEcmF3blRvUm9vdFN1
cmZhY2UgPSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0hpZ2hlcihtX3ByaW9yaXR5
Q3V0b2ZmLCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KCkpOwor
ICAgIGJvb2wgaXNEcmF3blRvUm9vdFN1cmZhY2UgPSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJp
b3JpdHlJc0hpZ2hlcih0ZXh0dXJlLT5yZXF1ZXN0UHJpb3JpdHkoKSwgQ0NQcmlvcml0eUNhbGN1
bGF0b3I6OnJlbmRlclN1cmZhY2VQcmlvcml0eSgpKTsKKyAgICBpZiAob25seUFsbG93VGV4dHVy
ZXNEcmF3blRvUm9vdFN1cmZhY2UgJiYgIWlzRHJhd25Ub1Jvb3RTdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBzaXplX3QgbmV3TWVtb3J5Qnl0ZXMgPSBtX21lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMgKyB0ZXh0dXJlLT5tZW1vcnlTaXplQnl0ZXMoKTsKLSAgICBpZiAobmV3TWVt
b3J5Qnl0ZXMgPiBtX21heE1lbW9yeUxpbWl0Qnl0ZXMpCisgICAgaWYgKG5ld01lbW9yeUJ5dGVz
ID4gbV9tZW1vcnlBdmFpbGFibGVCeXRlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
bV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7CkBAIC0xODgsOCArMTky
LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4
dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKIAogICAgIC8vIE90aGVyd2lzZSByZWR1Y2Ug
bWVtb3J5IGFuZCBqdXN0IGFsbG9jYXRlIGEgbmV3IGJhY2tpbmcgdGV4dXJlcy4KICAgICBpZiAo
IWJhY2tpbmcpIHsKLSAgICAgICAgc2l6ZV90IGxpbWl0ID0gc3RkOjptYXgobV9tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMpIC0gdGV4dHVyZS0+bWVt
b3J5U2l6ZUJ5dGVzKCk7Ci0gICAgICAgIHJlZHVjZU1lbW9yeShsaW1pdCwgYWxsb2NhdG9yKTsK
KyAgICAgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLSB0ZXh0dXJlLT5t
ZW1vcnlTaXplQnl0ZXMoKSwgYWxsb2NhdG9yKTsKICAgICAgICAgYmFja2luZyA9IGNyZWF0ZUJh
Y2tpbmcodGV4dHVyZS0+c2l6ZSgpLCB0ZXh0dXJlLT5mb3JtYXQoKSwgYWxsb2NhdG9yKTsKICAg
ICB9CiAKQEAgLTIxNyw4ICsyMjAsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBUZXh0dXJlQWxsb2NhdAogCiB2b2lk
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvcikKIHsKLSAgICBzaXplX3QgbGltaXQgPSBzdGQ6Om1heChtX21lbW9yeUFi
b3ZlQ3V0b2ZmQnl0ZXMsIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyk7Ci0gICAgcmVkdWNl
TWVtb3J5KGxpbWl0LCBhbGxvY2F0b3IpOworICAgIHJlZHVjZU1lbW9yeShtX21lbW9yeUF2YWls
YWJsZUJ5dGVzLCBhbGxvY2F0b3IpOwogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y2xlYXJBbGxNZW1vcnkoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAppbmRleCA0ODVjMjU4
ZjY0NTBjZjAzNTU4MzA2ZWNiODZhZjA4ZDMwMGE4NTJkLi43OWQ3Zjg1YmJhYmRhZmY5MzAwMmRk
YWNjZWRiNjFhZTFhODA2ZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXIuaApAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjsKIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShzaXpl
X3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMs
IGludCBtYXhUZXh0dXJlU2l6ZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1h
eFRleHR1cmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIobWF4TWVtb3J5TGltaXRCeXRlcywgcHJlZmVycmVkTWVtb3J5
TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIobWF4TWVtb3J5TGltaXRCeXRlcywgbWF4VGV4
dHVyZVNpemUpKTsKICAgICB9CiAgICAgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZShJbnRTaXplIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKICAgICB7CkBAIC01
NiwyMSArNTYsMTIgQEAgcHVibGljOgogICAgIC8vIG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWVtb3J5
QWJvdmVDdXRvZmZCeXRlcygpIHNob3VsZCBhbHdheXMgYmUgdHJ1ZS4KICAgICBzaXplX3QgbWVt
b3J5VXNlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5dGVzOyB9CiAgICAgc2l6
ZV90IG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXM7IH0KKyAgICBzaXplX3QgbWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4TWVtb3J5TGltaXRCeXRlcyAtIG1fbWVtb3J5QXZhaWxhYmxl
Qnl0ZXM7IH0KIAotICAgIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoc2l6ZV90
KTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgcHJlZmVycmVkL21h
eCBsaW1pdHMgYW5kIGxldCBHcHVNZW1vcnlNYW5hZ2VyCi0gICAgLy8ganVzdCBhZGp1c3QgdGhl
IG1heCBsaW1pdCBiYXNlZCBvbiBoaW50cyB3ZSBjYW4gcHJvdmlkZSBmcm9tIHRoaXMgY2xhc3Mu
Ci0gICAgLy8gSWRlYWxseSBpdCB3aWxsIGJlIGFkanVzdGVkIHJlbGF0aXZlbHkgcmFyZWx5IHN1
Y2ggdGhhdCByZWN5Y2xpbmcgaXMgbWF4aW1pemVkLgogICAgIHZvaWQgc2V0TWF4TWVtb3J5TGlt
aXRCeXRlcyhzaXplX3QgYnl0ZXMpIHsgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzID0gYnl0ZXM7IH0K
ICAgICBzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWVt
b3J5TGltaXRCeXRlczsgfQotICAgIHZvaWQgc2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhz
aXplX3QgYnl0ZXMpIHsgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzID0gYnl0ZXM7IH0KLSAg
ICBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
ZmVycmVkTWVtb3J5TGltaXRCeXRlczsgfQotCi0gICAgdm9pZCBzZXRNYXhNZW1vcnlQcmlvcml0
eUN1dG9mZihzaXplX3QgY3V0b2ZmKSB7IG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYgPSBjdXRv
ZmY7IH0KLSAgICB1bnNpZ25lZCBtYXhNZW1vcnlQcmlvcml0eUN1dG9mZigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmY7IH0KIAotICAgIHZvaWQgcHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgdm9pZCBwcmlvcml0aXplVGV4dHVyZXMoc2l6ZV90IHJvb3RSZW5kZXJT
dXJmYWNlTWVtb3J5Qnl0ZXMsIHNpemVfdCBjaGlsZFJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXMp
OwogICAgIHZvaWQgY2xlYXJQcmlvcml0aWVzKCk7CiAKICAgICBib29sIHJlcXVlc3RMYXRlKEND
UHJpb3JpdGl6ZWRUZXh0dXJlKik7CkBAIC0xMDcsNyArOTgsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEs
IHByaW9yaXR5Qik7CiAgICAgfQogCi0gICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNp
emVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRl
cywgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIo
c2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICB2
b2lkIHJlZHVjZU1lbW9yeShzaXplX3QgbGltaXQsIFRleHR1cmVBbGxvY2F0b3IqKTsKIApAQCAt
MTE5LDExICsxMTAsMTAgQEAgcHJpdmF0ZToKIAogICAgIGludCBtX21heFRleHR1cmVTaXplOwog
ICAgIHNpemVfdCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7Ci0gICAgc2l6ZV90IG1fcHJlZmVycmVk
TWVtb3J5TGltaXRCeXRlczsKLSAgICB1bnNpZ25lZCBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2Zm
OwogICAgIHVuc2lnbmVkIG1fcHJpb3JpdHlDdXRvZmY7CiAgICAgc2l6ZV90IG1fbWVtb3J5VXNl
Qnl0ZXM7CiAgICAgc2l6ZV90IG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlczsKKyAgICBzaXplX3Qg
bV9tZW1vcnlBdmFpbGFibGVCeXRlczsKIAogICAgIHR5cGVkZWYgSGFzaFNldDxDQ1ByaW9yaXRp
emVkVGV4dHVyZSo+IFRleHR1cmVTZXQ7CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZyo+IEJhY2tpbmdTZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXR5Q2FsY3VsYXRvci5jcHAKaW5kZXggODUwMTBhMTA3MGI4MTVjMjNmZDhmNTBkMzA2YjM2
MTA2ZmUwNmI0ZS4uOTAwODQwNDNkOTcxOTg0MGE5ZWNiMjM0NThjZTc1ZmIzMDEyOTYxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0eUNhbGN1bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcApAQCAtMzMsMTUgKzMzLDIx
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIHN0YXRp
YwotaW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KCkKK2ludCBDQ1ByaW9yaXR5
Q2FsY3VsYXRvcjo6dWlQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSkKIHsKLSAgICBy
ZXR1cm4gLTE7CisgICAgcmV0dXJuIGRyYXdzVG9Sb290U3VyZmFjZSA/IC0xIDogMjsKIH0KIAog
Ly8gc3RhdGljCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eSgpCitp
bnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290
U3VyZmFjZSkKIHsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZHJhd3NUb1Jvb3RTdXJmYWNl
ID8gMCA6IDM7Cit9CisKKy8vIHN0YXRpYworaW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5k
ZXJTdXJmYWNlUHJpb3JpdHkoKQoreworICAgIHJldHVybiAxOwogfQogCiAvLyBzdGF0aWMKQEAg
LTY1LDE5ICs3MSwyNCBAQCB1bnNpZ25lZCBtYW5oYXR0YW5EaXN0YW5jZShjb25zdCBJbnRSZWN0
JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogfQogfQogCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6
OnByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJ
bnRSZWN0JiB0ZXh0dXJlUmVjdCkgY29uc3QKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJp
b3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRleHR1cmVSZWN0LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gdmlzaWJsZVByaW9yaXR5KCkgKyBtYW5oYXR0YW5EaXN0YW5jZSh2aXNpYmxlUmVjdCwg
dGV4dHVyZVJlY3QpOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gbWFuaGF0dGFuRGlzdGFuY2Uo
dmlzaWJsZVJlY3QsIHRleHR1cmVSZWN0KTsKKyAgICBpZiAoIWRpc3RhbmNlKQorICAgICAgICBy
ZXR1cm4gdmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgcmV0dXJuIHZp
c2libGVQcmlvcml0eShmYWxzZSkgKyBkaXN0YW5jZTsKIH0KIAotaW50IENDUHJpb3JpdHlDYWxj
dWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZSh1bnNpZ25lZCBwaXhlbHMpIGNvbnN0CitpbnQg
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVs
cywgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHZpc2libGVQ
cmlvcml0eSgpICsgcGl4ZWxzOworICAgIGlmICghcGl4ZWxzKQorICAgICAgICByZXR1cm4gdmlz
aWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgcmV0dXJuIHZpc2libGVQcmlv
cml0eShmYWxzZSkgKyBwaXhlbHM7CiB9CiAKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJp
b3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUpIGNvbnN0CitpbnQgQ0NQcmlvcml0eUNh
bGN1bGF0b3I6OnByaW9yaXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlLCBib29sIGRyYXdz
VG9Sb290U3VyZmFjZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdmlzaWJsZSA/IHZpc2libGVQcmlv
cml0eSgpIDogbG93ZXN0UHJpb3JpdHkoKTsKKyAgICByZXR1cm4gdmlzaWJsZSA/IHZpc2libGVQ
cmlvcml0eShkcmF3c1RvUm9vdFN1cmZhY2UpIDogbG93ZXN0UHJpb3JpdHkoKTsKIH0KIAogfSAv
LyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuaAppbmRleCBmNGZl
YWZlOWI4NGNmMzMzNDg3NDY3MWYyMTcwMTczZjU1MWEyNTAyLi42OGEyMjViZTBiOWVmMzI2NWYw
Zjg5OGE2MmZkYzU4ZGNjZWZiN2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxh
dG9yLmgKQEAgLTM0LDEyICszNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEND
UHJpb3JpdHlDYWxjdWxhdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW50IHVpUHJpb3JpdHko
KTsKLSAgICBzdGF0aWMgaW50IHZpc2libGVQcmlvcml0eSgpOworICAgIHN0YXRpYyBpbnQgdWlQ
cmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgc3RhdGljIGludCB2aXNpYmxl
UHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpOworICAgIHN0YXRpYyBpbnQgcmVuZGVy
U3VyZmFjZVByaW9yaXR5KCk7CiAgICAgc3RhdGljIGludCBsaW5nZXJpbmdQcmlvcml0eShpbnQg
cHJldmlvdXNQcmlvcml0eSk7Ci0gICAgaW50IHByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVjdCkgY29uc3Q7Ci0g
ICAgaW50IHByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscykgY29uc3Q7Ci0gICAg
aW50IHByaW9yaXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlKSBjb25zdDsKKyAgICBpbnQg
cHJpb3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRleHR1cmVSZWN0LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7CisgICAg
aW50IHByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscywgYm9vbCBkcmF3c1RvUm9v
dFN1cmZhY2UpIGNvbnN0OworICAgIGludCBwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlz
aWJsZSwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0OwogCiAgICAgc3RhdGljIGlubGlu
ZSBpbnQgaGlnaGVzdFByaW9yaXR5KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptaW4oKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgaW50IGxvd2VzdFByaW9yaXR5KCkgeyByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAKaW5kZXggMWNkYWQyMmU0NjhjMTI0ZDI4YjFlOGQ0YmNmZWRmY2ZhZmExNzU5
Yy4uNTFjNzc0ZWJhNDk2MDE2OTM1MTlkN2ZmZWNiOWY5NjcwMWFhNTdmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgYm9vbCBDQ1JlbmRlclN1
cmZhY2U6OnByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmUKICAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1f
Y29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgaWYgKCFt
X2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgY29udGVudHNU
ZXh0dXJlRm9ybWF0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTExOCwxMiArMTE4LDEyIEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29u
dGVudHNUZXh0dXJlKCkKIAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc1ZhbGlkQ29udGVudHNU
ZXh0dXJlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUgJiYgbV9jb250
ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZCht
X2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgIHJldHVy
biBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYm
IG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBjb250ZW50
c1RleHR1cmVGb3JtYXQoKSk7CiB9CiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNDYWNoZWRD
b250ZW50c1RleHR1cmUoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAm
JiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpOworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2Nv
bnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgY29udGVudHNUZXh0
dXJlRm9ybWF0KCkpOwogfQogCiBib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tncm91
bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKQEAgLTEzNiw3
ICsxMzYsNyBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tncm91bmRUZXh0dXJl
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZQogICAgIGlmIChtX2JhY2tncm91bmRU
ZXh0dXJlLT5pc1Jlc2VydmVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFt
X2JhY2tncm91bmRUZXh0dXJlLT5yZXNlcnZlKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpCisgICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlLT5yZXNlcnZl
KG1fY29udGVudFJlY3Quc2l6ZSgpLCBiYWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCmluZGV4IGNkZDdhN2I1OWVhMzFkMWNmYzUyMTEwNTMyZmVlNzhlMjhlOGQ3OGEuLmU3
Y2M1NTQzNmFkNWRiZGQ1NmZiMmI4ODA5YmQ3NzM5N2FhYjJjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgIE1hbmFnZWRUZXh0
dXJlKiBjb250ZW50c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZS5n
ZXQoKTsgfQogICAgIE1hbmFnZWRUZXh0dXJlKiBiYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZFRleHR1cmUuZ2V0KCk7IH0KIAorICAgIEdDM0RlbnVtIGNvbnRl
bnRzVGV4dHVyZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OyB9CisgICAgR0MzRGVudW0gYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSBjb25zdCB7IHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsgfQorCiAgICAgaW50IG93bmluZ0xheWVySWQoKSBj
b25zdDsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRp
emVkVGV4dHVyZVRlc3QuY3BwCmluZGV4IGMyNjNjZTljZGJmN2E3N2U4YmJjN2ExYmI0NzU2Y2M3
YjBkZjYyZDEuLmFhMDNiMzhjOGMzZDY1YjkwYWExNzdmNDEyM2EyNzA5YjZjNWE2MzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlVGVzdC5jcHAKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
VGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZv
cm1hdCkgKiB0ZXh0dXJlQ291bnQ7CiAgICAgfQogCi0gICAgUGFzc093blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IGNyZWF0ZU1hbmFnZXIoc2l6ZV90IG1heFRleHR1cmVzLCBzaXpl
X3QgcHJlZmVycmVkVGV4dHVyZXMpCisgICAgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IGNyZWF0ZU1hbmFnZXIoc2l6ZV90IG1heFRleHR1cmVzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHRleHR1cmVzTWVt
b3J5U2l6ZShtYXhUZXh0dXJlcyksIHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJl
cyksIDEwMjQpOworICAgICAgICByZXR1cm4gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUodGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgMTAyNCk7CiAgICAgfQogCiAg
ICAgYm9vbCB2YWxpZGF0ZVRleHR1cmUoT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiYgdGV4
dHVyZSwgYm9vbCByZXF1ZXN0TGF0ZSkKQEAgLTgyLDk4ICs4MiwxMCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgY29uc3QgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0OwogfTsKIAotVEVTVF9GKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVJblByZWZlcnJlZExpbWl0KQotewotICAg
IGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJl
ZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1
cmVzKTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW3ByZWZlcnJl
ZFRleHR1cmVzXTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVy
ZXM7ICsraSkKLSAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4
dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwotCi0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgLy8gTG93ZXN0IHByaW9yaXR5IHRleHR1
cmVzIHNob3VsZG4ndCBiZSBhdmFpbGFibGUuCi0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4
dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzFdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbMl0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJl
ZmVycmVkVGV4dHVyZXM7ICsraSkKLSAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlv
cml0eSgxMDApOwotCi0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwot
Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwot
ICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1sxXSwgZmFsc2UpKTsKLSAg
ICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMl0sIGZhbHNlKSk7Ci0gICAg
RVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwotCi0gICAg
RVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIHRleHR1cmVN
YW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwotICAgIEVYUEVDVF9MRSh0ZXh0dXJl
TWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0
b2ZmQnl0ZXMoKSk7Ci0KLSAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2Nh
dG9yKCkpOwotfQotCi1URVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4
dHVyZUV4Y2VlZGluZ1ByZWZlcnJlZExpbWl0KQotewotICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0
dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0
ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKLSAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKLSAgICAgICAgdGV4dHVyZXNbaV0gPSB0
ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3Jt
YXQpOwotCi0gICAgLy8gU2V0IGRlY3JlYXNpbmcgcHJpb3JpdGllcwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKLSAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJl
cXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7Ci0KLSAgICAvLyBPbmx5IGxvd2VyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4K
LSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7Ci0g
ICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwotICAg
IEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZhbHNlKSk7Ci0gICAg
RVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKLSAgICBF
WFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwgdGV4dHVyZU1h
bmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNUX0xFKHRleHR1cmVN
YW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRv
ZmZCeXRlcygpKTsKLQotICAgIC8vIFNldCBpbmNyZWFzaW5nIHByaW9yaXRpZXMKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ld
LT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOwotCi0gICAgLy8gT25seSB1cHBlciBoYWxmIHNob3VsZCBiZSBhdmFp
bGFibGUuCi0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFs
c2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxz
ZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2Up
KTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7
Ci0gICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwotICAgIEVYUEVDVF9MRSh0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFi
b3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0KLSAgICAvLyBNYWtlIGFsbCB0ZXh0dXJlcyBpbXBvcnRhbnQg
KGFib3ZlIG1heC1tZW1vcnkgcHJpb3JpdHkgY3V0b2ZmKQotICAgIHRleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJp
b3JpdHkoKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0g
ICAgLy8gQWxsIHRleHR1cmVzIHNob3VsZCBiZSBhdmFpbGFibGUKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpIHsKLSAgICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSk7Ci0gICAgICAgRVhQRUNUX1RSVUUodGV4dHVy
ZXNbaV0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKLSAgICB9Ci0KLSAgICBFWFBFQ1RfRVEodGV4
dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VC
eXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAg
IHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7Ci19Ci0KLQogVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhM
aW1pdCkKIHsKICAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OwotICAgIGNvbnN0IHNp
emVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDQ7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzLCBw
cmVmZXJyZWRUZXh0dXJlcyk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzKTsKIAogICAgIC8v
IENyZWF0ZSB0ZXh0dXJlcyBmb3IgZG91YmxlIG91ciBtZW1vcnkgbGltaXQuCiAgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlcyoyXTsKQEAgLTE4Miwy
NCArOTQsMjIgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1
cmVFeGNlZWRpbmdNYXhMaW1pdCkKICAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdl
ci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwogCiAgICAg
Ly8gU2V0IGRlY3JlYXNpbmcgcHJpb3JpdGllcwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhN
ZW1vcnlQcmlvcml0eUN1dG9mZihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzKjI7ICsraSkKICAgICAgICAgdGV4
dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKIAogICAgIC8vIE9ubHkgbG93
ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAs
IDApOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2Up
KTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s4XSwgZmFsc2UpKTsK
ICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzE1XSwgZmFsc2UpKTsK
IAogICAgIC8vIFNldCBpbmNyZWFzaW5nIHByaW9yaXRpZXMKLSAgICB0ZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlcyoyOyArK2kpCiAgICAg
ICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CiAKICAgICAvLyBP
bmx5IHVwcGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwLCAwKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBd
LCBmYWxzZSkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10s
IGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzhdLCBm
YWxzZSkpOwpAQCAtMjE0LDEyICsxMjQsOSBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogVEVTVF9GKENDUHJpb3JpdGl6
ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogewogICAgIGNvbnN0IHNpemVfdCBt
YXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsK
LSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKKyAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1h
bmFnZXIobWF4VGV4dHVyZXMpOwogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4
dHVyZXNbbWF4VGV4dHVyZXNdOwogCi0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeVBy
aW9yaXR5Q3V0b2ZmKENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpKTsKLQog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgdGV4
dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBt
X3RleHR1cmVGb3JtYXQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7
ICsraSkKQEAgLTIyNyw3ICsxMzQsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0
LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDggdGV4dHVy
ZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01l
bW9yeVNpemUoOCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
KyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgdmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzW2ldLCBmYWxzZSk7CiAgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9y
eShhbGxvY2F0b3IoKSk7CkBAIC0yMzcsNyArMTQ0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0
byA1IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMo
dGV4dHVyZXNNZW1vcnlTaXplKDUpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVY
UEVDVF9FUSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDUpOwogICAg
IHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkoYWxsb2NhdG9yKCkpOwpAQCAtMjQ3LDcgKzE1
NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0
cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gNCB0ZXh0dXJlcwogICAgIHRleHR1cmVNYW5h
Z2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFsaWRhdGVUZXh0dXJlKHRleHR1
cmVzW2ldLCBmYWxzZSksIGkgPCA0KTsKICAgICB0ZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5
KGFsbG9jYXRvcigpKTsKQEAgLTI1OCwyMyArMTY1LDIyIEBAIFRFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xl
YXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwogfQogCi0KIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0ZVRleHR1cmVzKQogewotICAgIGNv
bnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRl
eHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVz
KTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW3ByZWZlcnJlZFRl
eHR1cmVzXTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IG1vcmVUZXh0dXJlc1tw
cmVmZXJyZWRUZXh0dXJlc107CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gNDsKKyAg
ICBjb25zdCBzaXplX3QgbnVtVGV4dHVyZXMgPSA0OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJl
cyk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1tudW1UZXh0dXJl
c107CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiBtb3JlVGV4dHVyZXNbbnVtVGV4
dHVyZXNdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVmZXJyZWRUZXh0dXJlczsg
KytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJlczsgKytpKSB7CiAg
ICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0
dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKICAgICAgICAgbW9yZVRleHR1cmVzW2ldID0gdGV4
dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0
KTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRleHR1cmVz
OyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJlczsgKytpKQogICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDIwMCArIGkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgLy8gQWxsb2NhdGUgdGV4dHVyZXMgd2hpY2gg
YXJlIGN1cnJlbnRseSBoaWdoIHByaW9yaXR5LgogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4
dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKQEAgLTI4Nyw5ICsxOTMsOSBAQCBURVNUX0YoQ0NQ
cmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRhdGVUZXh0dXJl
cykKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlc1syXS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwog
ICAgIEVYUEVDVF9UUlVFKHRleHR1cmVzWzNdLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRleHR1cmVzOyArK2kpCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJlczsgKytpKQogICAgICAgICBtb3JlVGV4dHVy
ZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwLCAwKTsKIAogICAgIC8vIFRleHR1cmVzIGFyZSBub3cgYmVsb3cgY3V0b2ZmLgogICAg
IEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CkBAIC0z
MjEsMTIgKzIyNyw5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVN
YW5hZ2VyUGFydGlhbFVwZGF0ZVRleHR1cmVzKQogVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdCwgdGV4dHVyZU1hbmFnZXJQcmlvcml0aWVzQXJlRXF1YWwpCiB7CiAgICAgY29uc3Qgc2l6
ZV90IG1heFRleHR1cmVzID0gMTY7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVz
ID0gODsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKKyAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNy
ZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOwogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOwogCi0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1l
bW9yeVByaW9yaXR5Q3V0b2ZmKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICB0ZXh0
dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1f
dGV4dHVyZUZvcm1hdCk7CiAKQEAgLTMzOCw3ICsyNDEsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIAogICAgIC8v
IFNldCBtYXggbGltaXQgdG8gOCB0ZXh0dXJlcwogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhN
ZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg4KSk7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoMCwgMCk7CiAKICAgICAvLyBUaGUgdHdvIGhpZ2ggcHJpb3JpdHkgdGV4dHVyZXMg
c2hvdWxkIGJlIGF2YWlsYWJsZSwgb3RoZXJzIHNob3VsZCBub3QuCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAyOyArK2kpCkBAIC0zNjIsMTQgKzI2NSwxNCBAQCBURVNUX0YoQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIAogVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJEZXN0cm95ZWRGaXJz
dCkKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IGNyZWF0ZU1hbmFnZXIoMSwgMSk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKDEpOwogICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVU
ZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAKICAgICAvLyBUZXh0dXJl
IGlzIGluaXRpYWxseSBpbnZhbGlkLCBidXQgaXQgd2lsbCBiZWNvbWUgYXZhaWxhYmxlLgogICAg
IEVYUEVDVF9GQUxTRSh0ZXh0dXJlLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CiAKICAgICB0ZXh0
dXJlLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygw
LCAwKTsKIAogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlLCBmYWxzZSkp
OwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4dHVyZSgpKTsK
QEAgLTM4NCwxNSArMjg3LDE1IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRl
eHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiAKIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlck9uZSA9IGNyZWF0ZU1hbmFnZXIoMSwg
MSk7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXJUd28gPSBjcmVhdGVNYW5hZ2VyKDEsIDEpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyT25lID0gY3JlYXRlTWFuYWdlcigxKTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlclR3byA9IGNy
ZWF0ZU1hbmFnZXIoMSk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJl
ID0gdGV4dHVyZU1hbmFnZXJPbmUtPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0
dXJlRm9ybWF0KTsKIAogICAgIC8vIFRleHR1cmUgaXMgaW5pdGlhbGx5IGludmFsaWQsIGJ1dCBp
dCB3aWxsIGJlY29tZSBhdmFpbGFibGUuCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUtPmhhdmVC
YWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0eSgxMDAp
OwotICAgIHRleHR1cmVNYW5hZ2VyT25lLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0
dXJlTWFuYWdlck9uZS0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgRVhQRUNUX1RS
VUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4
dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtNDA4LDcgKzMxMSw3IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikK
IAogICAgIHRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKHRleHR1cmVNYW5hZ2VyVHdvLmdldCgp
KTsKIAotICAgIHRleHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0
ZXh0dXJlTWFuYWdlclR3by0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgRVhQRUNU
X1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUo
dGV4dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtNDE2LDQgKzMxOSwyMDAg
QEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5h
Z2VyKQogCiAgICAgdGV4dHVyZU1hbmFnZXJUd28tPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigp
KTsKIH0KKworVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNS
ZWR1Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFN1cmZhY2UpCit7CisgICAgY29uc3Qgc2l6
ZV90IG1heFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworCisgICAg
Ly8gSGFsZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5IG5vbi1yb290IHN1cmZhY2VzLgorICAg
IGNvbnN0IHNpemVfdCByb290UmVuZGVyU3VyZmFjZUJ5dGVzID0gMDsKKyAgICBjb25zdCBzaXpl
X3QgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzID0gdGV4dHVyZXNNZW1vcnlTaXplKDQpOworCisg
ICAgLy8gQ3JlYXRlIHRleHR1cmVzIHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1pdC4KKyAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNb
aV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1
cmVGb3JtYXQpOworCisgICAgLy8gU2V0IGRlY3JlYXNpbmcgbm9uLXZpc2libGUgcHJpb3JpdGll
cyBvdXRzaWRlIHJvb3Qgc3VyZmFjZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRl
eHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAw
ICsgaSk7CisKKyAgICAvLyBPbmx5IGxvd2VyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KKyAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKHJvb3RSZW5kZXJTdXJmYWNlQnl0
ZXMsIGNoaWxkUmVuZGVyU3VyZmFjZXNCeXRlcyk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4
dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7CisKKyAgICAvLyBTZXQgaW5jcmVhc2luZyBub24tdmlz
aWJsZSBwcmlvcml0aWVzIG91dHNpZGUgcm9vdCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVl
c3RQcmlvcml0eSgxMDAgLSBpKTsKKworICAgIC8vIE9ubHkgdXBwZXIgaGFsZiBzaG91bGQgYmUg
YXZhaWxhYmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocm9vdFJl
bmRlclN1cmZhY2VCeXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOworICAgIEVYUEVDVF9G
QUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7CisgICAgRVhQRUNUX1RS
VUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOworICAgIEVYUEVDVF9UUlVF
KHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKKworICAgIEVYUEVDVF9FUSh0
ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5
dGVzKCkpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5h
Z2VyLT5tZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKCkpOworICAgIEVYUEVDVF9MRSh0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMoKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxs
b2NhdG9yKCkpOworfQorCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByb290UmVu
ZGVyU3VyZmFjZVJlZHVjZXNNZW1vcnlBdmFpbGFibGUpCit7CisgICAgY29uc3Qgc2l6ZV90IG1h
eFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworCisgICAgLy8gSGFs
ZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5IG5vbi1yb290IHN1cmZhY2VzLgorICAgIGNvbnN0
IHNpemVfdCByb290UmVuZGVyU3VyZmFjZUJ5dGVzID0gdGV4dHVyZXNNZW1vcnlTaXplKDQpOwor
ICAgIGNvbnN0IHNpemVfdCBjaGlsZFJlbmRlclN1cmZhY2VzQnl0ZXMgPSAwOworCisgICAgLy8g
Q3JlYXRlIHRleHR1cmVzIHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1pdC4KKyAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0
ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3Jt
YXQpOworCisgICAgLy8gU2V0IHByaW9yaXR5IGFzIHZpc2libGUgaW4gdGhlIHJvb3Qgc3VyZmFj
ZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZp
c2libGVQcmlvcml0eSh0cnVlKSk7CisKKyAgICAvLyBPbmx5IHRoZSBmaXJzdCBmb3VyIHJlcXVl
c3RlZCBzaG91bGQgYmUgYXZhaWxhYmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMocm9vdFJlbmRlclN1cmZhY2VCeXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVz
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCB0cnVlKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IG1heFRleHR1cmVzOyBpICs9IDIpCisgICAgICAgIEVYUEVD
VF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIHRydWUpKTsKKworICAgIC8vIFNl
dCBpbmNyZWFzaW5nIG5vbi12aXNpYmxlIHByaW9yaXRpZXMgb3V0c2lkZSByb290IHN1cmZhY2Uu
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0
ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCAtIGkpOworCisgICAgLy8gT25seSB1
cHBlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcyhyb290UmVuZGVyU3VyZmFjZUJ5dGVzLCBjaGlsZFJlbmRlclN1cmZhY2Vz
Qnl0ZXMpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZh
bHNlKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFs
c2UpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZhbHNl
KSk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkp
OworCisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXIt
Pm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5
U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSk7
CisgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJl
TWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKworICAgIHRleHR1cmVNYW5hZ2Vy
LT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7Cit9CisKK1RFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVz
dExhdGUpCit7CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFn
ZXIobWF4VGV4dHVyZXMpOworCisgICAgLy8gSGFsZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5
IG5vbi1yb290IHN1cmZhY2VzLgorICAgIGNvbnN0IHNpemVfdCByb290UmVuZGVyU3VyZmFjZUJ5
dGVzID0gMDsKKyAgICBjb25zdCBzaXplX3QgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzID0gdGV4
dHVyZXNNZW1vcnlTaXplKDQpOworCisgICAgLy8gQ3JlYXRlIHRleHR1cmVzIHRvIGZpbGwgb3Vy
IG1lbW9yeSBsaW1pdC4KKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVz
W21heFRleHR1cmVzXTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7
ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVy
ZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOworCisgICAgLy8gU2V0IGVxdWFsIHBy
aW9yaXRpZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQor
ICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7CisKKyAgICAvLyBU
aGUgZmlyc3QgZm91ciB0byBiZSByZXF1ZXN0ZWQgbGF0ZSB3aWxsIGJlIGF2YWlsYWJsZS4KKyAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKHJvb3RSZW5kZXJTdXJmYWNlQnl0
ZXMsIGNoaWxkUmVuZGVyU3VyZmFjZXNCeXRlcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbaV0sIGZhbHNlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
eFRleHR1cmVzOyBpICs9IDIpCisgICAgICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1tpXSwgdHJ1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtYXhUZXh0
dXJlczsgaSArPSAyKQorICAgICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1
cmVzW2ldLCB0cnVlKSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEo
dGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVyU3Vy
ZmFjZXNCeXRlcygpKTsKKyAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5
dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworCisgICAg
dGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKK30KKworVEVTVF9G
KENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgd2hlblJvb3RSZW5kZXJTdXJmYWNlTm90QXZhaWxh
YmxlVGV4dHVyZXNBbHNvTm90QXZhaWxhYmxlKQoreworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0
dXJlcyA9IDg7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzKTsKKworICAgIC8vIEhhbGYgb2Yg
dGhlIG1lbW9yeSBpcyB0YWtlbiBieSBub24tcm9vdCBzdXJmYWNlcy4KKyAgICBjb25zdCBzaXpl
X3Qgcm9vdFJlbmRlclN1cmZhY2VCeXRlcyA9IHRleHR1cmVzTWVtb3J5U2l6ZSgxMCk7CisgICAg
Y29uc3Qgc2l6ZV90IGNoaWxkUmVuZGVyU3VyZmFjZXNCeXRlcyA9IDA7CisKKyAgICAvLyBDcmVh
dGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1
cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7
CisKKyAgICAvLyBTZXQgdGV4dHVyZXMgYXMgaGlnaGVzdCBwcmlvcml0eS4KKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5z
ZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OmhpZ2hlc3RQcmlvcml0eSgp
KTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocm9vdFJlbmRlclN1
cmZhY2VCeXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzKTsKKworICAgIC8vIFVuYWJsZSB0
byByZXF1ZXN0TGF0ZSBhbnkgdGV4dHVyZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXhUZXh0dXJlczsgKytpKQorICAgICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRl
eHR1cmVzW2ldLCB0cnVlKSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDAp
LCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKyAgICBFWFBFQ1Rf
RVEodGV4dHVyZXNNZW1vcnlTaXplKDgpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVy
U3VyZmFjZXNCeXRlcygpKTsKKyAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVz
ZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworCisg
ICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKK30KKworVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgd2hlbkNoaWxkUmVuZGVyU3VyZmFjZU5vdEF2
YWlsYWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZSkKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4
VGV4dHVyZXMgPSA4OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAgICAvLyBIYWxm
IG9mIHRoZSBtZW1vcnkgaXMgdGFrZW4gYnkgbm9uLXJvb3Qgc3VyZmFjZXMuCisgICAgY29uc3Qg
c2l6ZV90IHJvb3RSZW5kZXJTdXJmYWNlQnl0ZXMgPSAwOworICAgIGNvbnN0IHNpemVfdCBjaGls
ZFJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0ZXh0dXJlc01lbW9yeVNpemUoNCk7CisKKyAgICAvLyBD
cmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRl
eHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1h
dCk7CisKKyAgICAvLyBTZXQgNiB2aXNpYmxlIHRleHR1cmVzIGluIHRoZSByb290IHN1cmZhY2Us
IGFuZCAyIGluIGEgY2hpbGQgc3VyZmFjZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDY7
ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5
Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KHRydWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
NjsgaSA8IDg7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eShD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KGZhbHNlKSk7CisKKyAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKHJvb3RSZW5kZXJTdXJmYWNlQnl0ZXMsIGNo
aWxkUmVuZGVyU3VyZmFjZXNCeXRlcyk7CisKKyAgICAvLyBVbmFibGUgdG8gcmVxdWVzdExhdGUg
dGV4dHVyZXMgaW4gdGhlIGNoaWxkIHN1cmZhY2UuCisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRl
VGV4dHVyZSh0ZXh0dXJlc1s2XSwgdHJ1ZSkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRl
eHR1cmUodGV4dHVyZXNbN10sIHRydWUpKTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSB0ZXh0dXJl
cyBhcmUgdmFsaWQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA2OyArK2kpCisgICAgICAg
IEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKKworICAg
IEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNiksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlB
Ym92ZUN1dG9mZkJ5dGVzKCkpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoMiks
IHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKCkpOworICAgIEVY
UEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXIt
Pm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJB
bGxNZW1vcnkoYWxsb2NhdG9yKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAK
aW5kZXggYjc1NGQ0ZDY3MzBiMjY5YzQyZWQwOGUwODg5MzRkZTM0MWIxZjlkYS4uYjg4OGZjMzIx
ZTYzOWE3ZGIyNTA1NzFiM2NjM2FkZjRlMjAxY2E5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwCkBAIC0xMjEs
NiArMTIxLDI1IEBAIHZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVy
ZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2NjbHVzaW9uCiAgICAgdXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIHZpc2libGVMYXllclJlY3QoKSwgb2NjbHVzaW9uKTsKIH0KIAordm9pZCBGYWtl
VGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5
Q2FsY3VsYXRvciYgY2FsY3VsYXRvcikKK3sKKyAgICAvLyBFbnN1cmUgdGhlcmUgaXMgYWx3YXlz
IGEgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGF2YWlsYWJsZS4gSWYgbm9uZSBoYXMgYmVlbgorICAg
IC8vIHNldCAodGhlIGxheWVyIGlzIGFuIG9ycGhhbiBmb3IgdGhlIHRlc3QpLCB0aGVuIGp1c3Qg
c2V0IGEgc3VyZmFjZSBvbiBpdHNlbGYuCisgICAgYm9vbCBtaXNzaW5nVGFyZ2V0UmVuZGVyU3Vy
ZmFjZSA9ICF0YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisKKyAgICBpZiAobWlzc2luZ1RhcmdldFJl
bmRlclN1cmZhY2UpIHsKKyAgICAgICAgY3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAgICBz
ZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UoKSk7CisgICAgfQorCisgICAgVGls
ZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyhjYWxjdWxhdG9yKTsKKworICAg
IGlmIChtaXNzaW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSkgeworICAgICAgICBjbGVhclJlbmRlclN1
cmZhY2UoKTsKKyAgICAgICAgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKTsKKyAgICB9Cit9CisK
IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kczo6RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVk
Qm91bmRzKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIpCiAgICAg
OiBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaAppbmRl
eCA1ODZhYzhmZDIxZjQ4MzQwOTNlNTRhMTUxYmUxZjU0YzYxNzNhZDZmLi40ZWZlODIzNzBmNTM0
ZmZjMTFmN2FlZWRjODgwOWVmMzVmNTgxNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaApAQCAtMTI1LDYgKzEyNSw4
IEBAIHB1YmxpYzoKICAgICAvLyBVcGRhdGVzIHRoZSB2aXNpYmxlTGF5ZXJSZWN0KCkuCiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZShXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgV2Vi
Q29yZTo6Q0NPY2NsdXNpb25UcmFja2VyKikgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3Im
KSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdGV4dHVy
ZU1hbmFnZXI7IH0KICAgICBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciogZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKSB7IHJldHVybiBtX2Zha2VUZXh0dXJlVXBkYXRlci5nZXQoKTsgfQogICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVSZWN0KCkgeyByZXR1cm4gbV91cGRhdGVSZWN0OyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcAppbmRleCBhZDJmYWE2ZTQ3MjM5MWZiNzdjMDJjOWU2N2U2Yzc5OTQ4M2ExN2Mx
Li4xNWMwODlkNGEwMDY0NDUyM2ZlM2VmYWYwODVlMzk4MTU0MTJjNjQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKQEAgLTkxLDE3ICs5MSwxOCBAQCBwdWJsaWM6CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgcHVzaERpcnR5VGlsZXMpCiB7CiAgICAgQ0NQcmlvcml0eUNhbGN1bGF0b3IgcHJpb3Jp
dHlDYWxjdWxhdG9yOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAx
MDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAg
ICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZh
bGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICBsYXllci0+dXBk
YXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKICAgICB1
cGRhdGVUZXh0dXJlcygpOwpAQCAtMTI1LDcgKzEyNiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogewogICAgIENDUHJpb3JpdHlDYWxjdWxhdG9yIHBy
aW9yaXR5Q2FsY3VsYXRvcjsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTEzNyw4ICsxMzgsOCBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKICAgICBs
YXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAg
bGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKIAotICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJl
Y3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRv
cik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKIAogICAg
IGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCks
ICZvY2NsdWRlZCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKQEAgLTE3MSwxNyArMTcyLDE4IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQog
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxlcykKIHsKLSAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAy
NCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBp
bnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVj
dCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5S
ZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsK
QEAgLTE5NCw3ICsxOTYsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERl
bGV0ZWRUaWxlcykKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7CiAgICAg
dGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KCZhbGxvY2F0b3IpOwogICAgIHRleHR1cmVN
YW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyg0KjEwMjQqMTAyNCk7CiAKICAg
ICAvLyBUaGlzIHNob3VsZCBkcm9wIHRoZSB0aWxlcyBvbiB0aGUgaW1wbCB0aHJlYWQuCiAgICAg
bGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAgLTIwNCw4ICsyMDUs
OCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxlcykKICAg
ICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCiAgICAgLy8gVGhp
cyBzaG91bGQgcmVjcmVhdGUgYW5kIHVwZGF0ZSB0aGUgZGVsZXRlZCB0ZXh0dXJlcy4KLSAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0
b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAg
bGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwg
MCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOwpAQCAtMjE3LDcgKzIxOCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMjMyLDggKzIz
Myw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMp
CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwogICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMjQ4LDggKzI0
OSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMp
CiAKICAgICAvLyBGb3IgdGhlIG5leHQgZm91ciB1cGRhdGVzLCB3ZSBzaG91bGQgZGV0ZWN0IHdl
IHN0aWxsIG5lZWQgaWRsZSBwYWludGluZy4KICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkr
KykgewotICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoMCwgMCk7CiAKICAgICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNp
YmxlUmVjdCwgMCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2
aXNpYmxlUmVjdCkpOwpAQCAtMjc2LDcgKzI3Nyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiB7CiAgICAgLy8gU3RhcnQgd2l0aCAy
bWIgb2YgbWVtb3J5LCBidXQgdGhlIHRlc3QgaXMgZ29pbmcgdG8gdHJ5IHRvIHVzZSBqdXN0IG1v
cmUgdGhhbiAxbWIsIHNvIHdlIHJlZHVjZSB0byAxbWIgbGF0ZXIuCi0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSgyKjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMioxMDI0KjEwMjQsIDEwMjQpOwogICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXJJbXBsMShhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsK
QEAgLTMwMCw5ICszMDEsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRp
bGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAgICAgbGF5ZXIxLT5pbnZhbGlkYXRlUmVjdChsYXll
clJlY3QpOwogCiAgICAgLy8gUGFpbnQgYSBzaW5nbGUgdGlsZSBpbiBsYXllcjIgc28gdGhhdCBp
dCB3aWxsIGlkbGUgcGFpbnQuCi0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyMlJlY3QpOwotICAgIGxheWVyMS0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllclJlY3QpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllcjItPnNldFRleHR1
cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgbGF5ZXIxLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXIxLT51cGRhdGVMYXllclJlY3QodXBkYXRl
ciwgbGF5ZXJSZWN0LCAwKTsKICAgICBsYXllcjItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCk7CiAKQEAgLTMxNiwxMiArMzE3LDExIEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkK
IAogICAgIC8vIFJlZHVjZSBvdXIgbWVtb3J5IGxpbWl0cyB0byAxbWIuCiAgICAgdGV4dHVyZU1h
bmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoMTAyNCAqIDEwMjQpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDEwMjQgKiAxMDI0KTsKIAogICAg
IC8vIE5vdyBpZGxlIHBhaW50IGxheWVyMi4gV2UgYXJlIGdvaW5nIHRvIHJ1biBvdXQgb2YgbWVt
b3J5IHRob3VnaCEKLSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgbGF5ZXIyUmVjdCk7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyUmVjdCk7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9y
aXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0
aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygwLCAwKTsKICAgICBsYXllcjItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCk7CiAgICAgbGF5ZXIyLT5pZGxlVXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIGxheWVyMlJlY3QsIDApOwogCkBAIC0zNDAsOSArMzQwLDkgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogICAg
IEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMikpOwogCiAgICAgLy8gTm93
IGlmIGxheWVyMiBiZWNvbWVzIGZ1bGx5IHZpc2libGUsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHBh
aW50IGl0IGFuZCBwdXNoIHZhbGlkIHRleHR1cmVzLgotICAgIGxheWVyMi0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllcjJSZWN0KTsKLSAgICBsYXll
cjEtPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5ZXJS
ZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5
ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVy
MS0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyMi0+dXBkYXRlTGF5
ZXJSZWN0KHVwZGF0ZXIsIGxheWVyMlJlY3QsIDApOwogICAgIGxheWVyMS0+dXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIGxheWVyUmVjdCwgMCk7CiAKQEAgLTM2MCw3ICszNjAsNyBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAK
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRp
bGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMzc0LDggKzM3NCw4IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogCi0gICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksICZvY2Ns
dWRlZCk7CiAgICAgbGF5ZXItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCksICZvY2NsdWRlZCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKQEAgLTM4
Nyw3ICszODcsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWlu
dGVkT2NjbHVkZWRUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hU
aWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0zOTcsMTAg
KzM5NywxMSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2Vk
RGlydHlEdXJpbmdQYWludCkKICAgICAvLyBub3QgcHJldmVudCB0aGUgdGlsZSBmcm9tIGJlaW5n
IHB1c2hlZC4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAgICBs
YXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOworICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0
KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIuZ2V0KCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXll
clJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogICAgIHVwZGF0ZVRl
eHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsK
QEAgLTQxMiw3ICs0MTMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRp
bGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCox
MDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCox
MDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKQEAgLTQyMCwxNCArNDIxLDE2IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5
RHVyaW5nUGFpbnRPbk5leHRMYXllcikKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAg
ICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXIxLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllcjEtPmlu
dmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKIAogICAgIGxheWVyMi0+c2V0
Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAgICBsYXllcjItPnNldFZpc2libGVMYXllclJl
Y3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyMi0+aW52YWxpZGF0ZVJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsK
LSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRv
ciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5
Q2FsY3VsYXRvcik7CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNh
bGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7
CiAKICAgICBsYXllcjEtPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSwgMCk7CiAKQEAgLTQ0OCw3ICs0NTEsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERp
cnR5RHVyaW5nUGFpbnRPblByZXZpb3VzTGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwpAQCAtNDYzLDkgKzQ2Niw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPblByZXZpb3VzTGF5
CiAgICAgbGF5ZXIyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsKICAgICBsYXllcjItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsK
IAotICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJp
b3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIx
LT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVyMi0+
c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgLy8gSW52YWxpZGF0ZSBhIHRp
bGUgb24gbGF5ZXIyCiAgICAgbGF5ZXIxLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRS
ZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwgNTApLCBsYXllcjIuZ2V0KCkpOwpA
QCAtNDkyLDcgKzQ5NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFp
bnRPdXRPZk1lbW9yeSkKICAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkgdGhl
IHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJzdCBpZGxl
IHBhaW50LgogICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAxMDA7IC8vIDEgdGlsZXMs
IDQgYnl0ZXMgcGVyIHBpeGVsLgogCi0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShtZW1vcnlMaW1pdCwgbWVtb3J5TGltaXQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUobWVtb3J5TGltaXQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC01MDIsOCArNTA1LDggQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAg
IGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKICAgICBsYXllci0+aW52
YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlz
aWJsZVJlY3QsIDApOwogCiAgICAgLy8gSWRsZS1wYWludGluZyBzaG91bGQgc2VlIG5vIG1vcmUg
cHJpb3JpdHkgdGlsZXMgZm9yIHBhaW50aW5nLgpAQCAtNTE1LDggKzUxOCw4IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKICAgICAvLyBXZSBz
aG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxh
eWVySW1wbC0+aGFzVGlsZUF0KDEsIDEpKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZp
c2libGVSZWN0LCAwKTsKICAgICBsYXllci0+aWRsZVVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2
aXNpYmxlUmVjdCwgMCk7CiAKQEAgLTUyNiw3ICs1MjksNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTUzOCw4ICs1NDEsOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiAg
ICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoY29udGVudFJlY3QpOwogICAgIGxheWVyLT5p
bnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBj
b250ZW50UmVjdCwgMCk7CiAKICAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4K
QEAgLTU2Nyw3ICs1NzAsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBh
aW50WmVyb1NpemVkTGF5ZXIpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnRaZXJvU2l6ZWRBbmltYXRpbmdMYXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTU4Miw4ICs1ODUsOCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkQW5pbWF0aW5nTGF5ZXIp
CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoY29udGVudFJlY3QpOwogICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVy
LCBjb250ZW50UmVjdCwgMCk7CiAKICAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxl
cy4KQEAgLTYxNCw3ICs2MTcsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRs
ZVBhaW50Tm9uVmlzaWJsZUxheWVycykKICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMTAwLCAx
MDApOwogICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJv
dW5kcyk7CiAKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAw
MCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAy
NCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MCkpKTsKQEAgLTYyNiw4ICs2MjksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
aWRsZVBhaW50Tm9uVmlzaWJsZUxheWVycykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dCh2aXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsK
IAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIHZpc2libGVSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXll
ci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKIAogICAgIC8vIE5v
bi12aXNpYmxlIGxheWVycyBkb24ndCBuZWVkIGlkbGUgcGFpbnQuCkBAIC02NTksNyArNjYyLDcg
QEAgc3RhdGljIHZvaWQgdGVzdEhhdmVPdXRlclRpbGVzKEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBs
YXllckltcGwsIGludCB3aWR0aCwgaW50IGgKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4MDAwKjgwMDAqOCwgODAwMCo4MDAwKjQsIDEwMjQpOwor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoODAwMCo4MDAwKjgsIDEwMjQpOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCiAgICAgaW50IHRpbGVX
aWR0aCA9IEZha2VUaWxlZExheWVyQ2hyb21pdW06OnRpbGVTaXplKCkud2lkdGgoKTsKQEAgLTY4
Myw4ICs2ODYsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9u
VmlzaWJsZUFuaW1hdGluZ0xheWVycykKICAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KHZpc2libGVSZWN0KTsKICAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChj
b250ZW50UmVjdCk7CiAKLSAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgICAgICAgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKIAogICAgICAgICAgICAgLy8gSWYg
aWRsZVBhaW50UmVjdCBnaXZlcyBiYWNrIGEgbm9uLWVtcHR5IHJlc3VsdCB0aGVuIHdlIHNob3Vs
ZCBwYWludCBpdC4gT3RoZXJ3aXNlLAogICAgICAgICAgICAgLy8gd2Ugc2hvdWQgcGFpbnQgbm90
aGluZy4KQEAgLTcwMCwxNiArNzAzLDE2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgICAgICAgICAgdGVzdEhh
dmVPdXRlclRpbGVzKGxheWVySW1wbC5nZXQoKSwgd2lkdGhbaV0sIGhlaWdodFtqXSwgMCk7CiAK
ICAgICAgICAgICAgIC8vIFNldCBwcmlvcml0aWVzIGFuZCByZWNyZWF0ZSB0aWxlcy4KLSAgICAg
ICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlv
cml0eUNhbGN1bGF0b3IpOworICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygwLCAwKTsKIAogICAgICAgICAgICAgLy8gTm9ybWFsbHkgd2UgZG9uJ3QgYWxsb3cg
bm9uLXZpc2libGUgbGF5ZXJzIHRvIHByZS1wYWludCwgYnV0IGlmIHRoZXkgYXJlIGFuaW1hdGlu
ZyB0aGVuIHdlIHNob3VsZC4KICAgICAgICAgICAgIEVYUEVDVF9FUShzaG91bGRQcmVwYWludCwg
bGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CiAKICAgICAgICAgICAgIC8vIElm
IHRoZSBsYXllciBpcyB0byBiZSBwcmVwYWludGVkIGF0IGFsbCwgdGhlbiBhZnRlciBmb3VyIHVw
ZGF0ZXMgd2Ugc2hvdWxkIGhhdmUgdGhlIG91dGVyIHJvdy9jb2x1bW5zIHBhaW50ZWQuCiAgICAg
ICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7ICsraykgewotICAgICAgICAgICAgICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2li
bGVSZWN0KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwLCAwKTsKIAogICAgICAgICAgICAgICAgIGxheWVyLT51cGRhdGVMYXllclJl
Y3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgICAgICAgICAgICAgIGxheWVyLT5pZGxl
VXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKQEAgLTcyMSw4ICs3MjQs
OCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFu
aW1hdGluZ0xheWVycykKICAgICAgICAgICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBpZGxlIHBh
aW50IHBhc3QgdGhlIG91dGVybW9zdCB0aWxlcy4KICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShs
YXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKICAgICAgICAgICAgIGZvciAoaW50
IGsgPSAwOyBrIDwgNDsgKytrKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgICAg
ICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAgICAg
ICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICAgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDAp
OwogCiAgICAgICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNp
YmxlUmVjdCwgMCk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPmlkbGVVcGRhdGVMYXllclJlY3Qo
dXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwpAQCAtNzM2LDcgKzczOSw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQog
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQog
ewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAy
NCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxl
ZExheWVySW1wbCgwKSkpOwpAQCAtNzQ4LDkgKzc1MSwxMCBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogCiAgICAgLy8gVGhlIHRpbGUgc2l6
ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGls
ZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
KyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51
cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogICAg
IHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5nZXQoKSwgJmZha2VBbGxvY2F0b3IsICZmYWtlQ29w
aWVyLCAmZmFrZVVwbG9hZGVyLCAxMDAwKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOwpAQCAtNzg1LDcgKzc4OSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiAg
ICAgLy8gVGhlIHVwZGF0ZVJlY3QgKHRoYXQgaW5kaWNhdGVzIHdoYXQgd2FzIGFjdHVhbGx5IHBh
aW50ZWQpIHNob3VsZCBiZSBpbgogICAgIC8vIGxheWVyIHNwYWNlLCBub3QgdGhlIGNvbnRlbnQg
c3BhY2UuCiAKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyV2l0aFNjYWxl
ZEJvdW5kcz4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91
bmRzKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IGxheWVyQm91bmRzKDAs
IDAsIDMwMCwgMjAwKTsKQEAgLTc5OSwxNSArODAzLDE1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiAg
ICAgLy8gSG93ZXZlciwgaXQgc2hvdWxkIHN0aWxsIGJlIGluIGxheWVyIHNwYWNlLCBub3QgY29u
dGVudCBzcGFjZS4KICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CiAK
LSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXll
ci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRCb3VuZHMsIDApOwogICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMDAsIDMwMCAqIDAuOCksIGxheWVyLT51
cGRhdGVSZWN0KCkpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAvLyBBZnRlciB0aGUg
dGlsZXMgYXJlIHVwZGF0ZWQgb25jZSwgYW5vdGhlciBpbnZhbGlkYXRlIG9ubHkgbmVlZHMgdG8g
dXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50
Qm91bmRzKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRCb3Vu
ZHMsIDApOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdChsYXllckJvdW5kcyks
IGxheWVyLT51cGRhdGVSZWN0KCkpOwpAQCAtODE2LDI5ICs4MjAsMzAgQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNj
YWxlZCkKICAgICAvLyBQYXJ0aWFsIHJlLXBhaW50IHNob3VsZCBhbHNvIGJlIHJlcHJlc2VudGVk
IGJ5IHRoZSB1cGRhdGVSZWN0IGluIGxheWVyIHNwYWNlLCBub3QgY29udGVudCBzcGFjZS4KICAg
ICBJbnRSZWN0IHBhcnRpYWxEYW1hZ2UoMzAsIDEwMCwgMTAsIDEwKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZVJlY3QocGFydGlhbERhbWFnZSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBj
b250ZW50Qm91bmRzLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoNDUs
IDgwLCAxNSwgOCksIGxheWVyLT51cGRhdGVSZWN0KCkpOwogfQogCiBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2Vz
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIq
MTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgLy8gQ3JlYXRlIGEgbGF5ZXIgd2l0aCBvbmUgdGls
ZS4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAKICAgICAvLyBJ
bnZhbGlkYXRlIHRoZSBlbnRpcmUgbGF5ZXIuCiAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheSgp
OwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxh
eWVyLT5sYXN0TmVlZHNEaXNwbGF5UmVjdCgpKTsKIAogICAgIC8vIFB1c2ggdGhlIHRpbGVzIHRv
IHRoZSBpbXBsIHNpZGUgYW5kIGNoZWNrIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUuCi0gICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50
UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAg
IGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCks
IDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKQEAgLTg1MCwxMSArODU1LDEyIEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMp
CiAgICAgLy8gQ2hhbmdlIHRoZSBjb250ZW50cyBzY2FsZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNv
bnRlbnQgcmVjdGFuZ2xlIHJlcXVpcmluZyBwYWludGluZwogICAgIC8vIGlzIG5vdCBzY2FsZWQu
CiAgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUoMik7CisgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLT5sYXN0TmVlZHNEaXNwbGF5UmVj
dCgpKTsKIAogICAgIC8vIFRoZSBpbXBsIHNpZGUgc2hvdWxkIGdldCAyeDIgdGlsZXMgbm93Lgot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3Is
IEludFJlY3QoMCwgMCwgMjAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2Fs
Y3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsK
ICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMjAwLCAy
MDApLCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC04ODgsMTUgKzg5NCwxNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogCiAgICAgLy8gV2UgaGF2ZSBl
bm91Z2ggbWVtb3J5IGZvciBvbmx5IG9uZSBvZiB0aGUgdHdvIGxheWVycy4KICAgICBpbnQgbWVt
b3J5TGltaXQgPSA0ICogMzAwICogMzAwOyAvLyA0IGJ5dGVzIHBlciBwaXhlbC4KLSAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCwgbWVt
b3J5TGltaXQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5TGlt
aXQsIG1lbW9yeUxpbWl0KTsKIAogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBy
b290TGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBjaGlsZExh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKICAgICByb290TGF5ZXItPmFkZENoaWxkKGNoaWxkTGF5ZXIpOwogCiAgICAgcm9v
dExheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgcm9vdExheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKICAgICByb290TGF5ZXItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoMTUwLCAxNTApKTsKICAgICBjaGlsZExheWVyLT5zZXRCb3VuZHMoY29udGVudEJv
dW5kcyk7CisgICAgY2hpbGRMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7
CiAgICAgY2hpbGRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxNTAsIDE1MCkpOwogICAg
IHJvb3RMYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogICAgIGNoaWxkTGF5ZXIt
PmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKQEAgLTkwNCw5ICs5MTIsOSBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIGNjTGF5ZXJU
cmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAgY2NMYXllclRyZWVIb3N0LT5z
ZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgzMDAsIDMwMCkpOwogCi0gICAgY2hpbGRMYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7
Ci0gICAgcm9vdExheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgY2hpbGRMYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICByb290TGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2Fs
Y3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsK
ICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBtZW1vcnlMaW1pdCk7
CiAKICAgICAvLyBXZSdsbCBza2lwIHRoZSByb290IGxheWVyLgpAQCAtOTIxLDggKzkyOSw4IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAg
Ly8gRHJvcCB0ZXh0dXJlIHByaW9yaXRpZXMgb24gdGhlIGNoaWxkLgogICAgIHRleHR1cmVNYW5h
Z2VyLT5jbGVhclByaW9yaXRpZXMoKTsKIAotICAgIHJvb3RMYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHJvb3RMYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJz
KHVwZGF0ZXIsIG1lbW9yeUxpbWl0KTsKICAgICBFWFBFQ1RfRkFMU0Uocm9vdExheWVyLT5za2lw
c0RyYXcoKSk7CiAKQEAgLTkzMywxNCArOTQxLDE1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCByZXNpemVUb1NtYWxsZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg2MCoxMDI0KjEwMjQsIDYwKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNo
cm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKElu
dFNpemUoNzAwLCA3MDApKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0
KDAsIDAsIDcwMCwgNzAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwg
MCwgNzAwLCA3MDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIElu
dFJlY3QoMCwgMCwgNzAwLCA3MDApLCAwKTsKIAogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6
ZSgyMDAsIDIwMCkpOwpAQCAtOTQ5LDE2ICs5NTgsMTcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHJlc2l6ZVRvU21hbGxlcikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIGh1Z2VMYXllclVwZGF0ZUNyYXNoKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNjAqMTAyNCoxMDI0LCA2MCoxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAgaW50IHNpemUgPSAxIDw8
IDMwOwogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZShzaXplLCBzaXplKSk7CisgICAgbGF5
ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwogICAgIGxh
eWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIHNpemUsIHNpemUpKTsKIAogICAgIC8v
IEVuc3VyZSBubyBjcmFzaCBmb3IgYm91bmRzIHdoZXJlIHNpemUgKiBzaXplIHdvdWxkIG92ZXJm
bG93IGFuIGludC4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3Jp
dHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0
KDAsIDAsIDcwMCwgNzAwKSwgMCk7CiB9CiAKQEAgLTk3NCwxMiArOTg0LDExIEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgmZmFr
ZUNDTGF5ZXJUcmVlSG9zdENsaWVudCwgc2V0dGluZ3MpOwogICAgIEFTU0VSVF9UUlVFKGNjTGF5
ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJJZk5lZWRlZCgpKTsKIAotICAgIC8v
IENyZWF0ZSBvbmUgNTAwIHggMzAwIHRpbGVkIGxheWVyLgorICAgIC8vIENyZWF0ZSBvbmUgMzAw
IHggMjAwIHRpbGVkIGxheWVyIHdpdGggMyB4IDIgdGlsZXMuCiAgICAgSW50U2l6ZSBjb250ZW50
Qm91bmRzKDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIGNvbnRlbnRCb3VuZHMpOwogCi0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg2MCoxMDI0KjEwMjQsIDYwKjEwMjQqMTAyNCwgMTAyNCk7Ci0gICAgUmVmUHRyPEZha2VUaWxl
ZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21p
dW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVy
VHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOwogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoY29udGVudEJvdW5kcyk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTUw
LCAxNTApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CkBA
IC0xMDgyLDYgKzEwOTEsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlh
bFVwZGF0ZXMpCiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsK
IAorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFs
bE1lbW9yeSgmYWxsb2NhdG9yKTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigw
KTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0
b3I6OnNodXRkb3duKCk7CkBAIC0xMDg5LDcgKzEwOTksNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAgLy8gVGhlIHRp
bGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0
d28gdGlsZXMuCkBAIC0xMDk3LDE1ICsxMTA3LDE1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxp
ZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAs
IDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVM
YXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogICAgIEVYUEVD
VF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3Vu
dCgpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdp
dGhPY2NsdXNpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsK
IApAQCAtMTExOCw4ICsxMTI4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRp
bGVzUGFpbnRlZFdpdGhPY2NsdXNpb24pCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxp
ZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAs
IDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVM
YXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAg
ICAgRVhQRUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVw
YXJlUmVjdENvdW50KCkpOwogCkBAIC0xMTUyLDcgKzExNjIsNyBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKIAogVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlD
b25zdHJhaW50cykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwog
CkBAIC0xMTY2LDggKzExNzYsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGls
ZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNjApKTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCi0gICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCA2MDAsIDM2MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDM2MCksICZvY2Ns
dWRlZCk7CiAgICAgRVhQRUNUX0VRKDI0LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMTgxLDggKzExOTEsOCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2li
bGl0eUNvbnN0cmFpbnRzKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDIwMCwg
MjAwLCAzMDAsIDE1MCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3Qo
MCwgMCwgNjAwLCAzNTApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAw
LCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlv
cml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCAzNTApKTsKLSAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJl
Y3QoMCwgMCwgNjAwLCAzNTApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApAQCAt
MTE5Niw4ICsxMjA2LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFp
bnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKICAgICBvY2NsdWRlZC5z
ZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAxNTApKTsKICAgICBsYXllci0+c2V0
VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgMzQwKSk7CiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYw
MCwgMzQwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0
ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzQwKSwgJm9jY2x1ZGVkKTsK
ICAgICBFWFBFQ1RfRVEoMjQtNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnBy
ZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTEyMDksNyArMTIxOSw3IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29u
c3RyYWludHMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc05vdFBhaW50
ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIg
b2NjbHVkZWQ7CiAKQEAgLTEyMjEsOCArMTIzMSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogICAgIG9jY2x1ZGVk
LnNldE9jY2x1c2lvbihJbnRSZWN0KDIwMCwgMjAwLCAzMDAsIDEwMCkpOwogICAgIGxheWVyLT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+
aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwg
NjAwLCA2MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBk
YXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQp
OwogICAgIEVYUEVDVF9FUSgzNi0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
cHJlcGFyZVJlY3RDb3VudCgpKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTI0NCw3ICsx
MjU0LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdp
dGhvdXRJbnZhbGlkYXRpb24pCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxl
c1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNmb3JtcykKIHsKLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMjYxLDggKzEyNzEsOCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9y
bXMpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMTAwLCAxMDAsIDE1MCwgNTAp
KTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxh
eWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAs
IDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVj
dCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2LTMsIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0x
MjczLDcgKzEyODMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKIHsKLSAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAy
NCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMjg5LDggKzEyOTksOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFu
ZFNjYWxpbmcpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMw
MCwgMTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVj
dCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQpOwogICAgIC8vIFRoZSBjb250ZW50
IGlzIGhhbGYgdGhlIHNpemUgb2YgdGhlIGxheWVyIChzbyB0aGUgbnVtYmVyIG9mIHRpbGVzIGlz
IGZld2VyKS4KICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBjb250ZW50IGlzIDMwMHgzMDAsIGFu
ZCBzaW5jZSB0aGUgdGlsZSBzaXplIGlzIDEwMCwgdGhlCkBAIC0xMzA5LDggKzEzMTksOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFu
ZFNjYWxpbmcpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMw
MCwgMjAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVj
dCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSg5LTEs
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwog
CkBAIC0xMzI5LDggKzEzMzksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGls
ZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVz
aW9uKEludFJlY3QoMTAwLCAxMDAsIDE1MCwgMTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwg
MCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7Cisg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+
dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVk
ZWQpOwogICAgIEVYUEVDVF9FUSg5LTEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMzQxLDcgKzEzNTEsNyBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJl
Z2lvbikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0x
MzU4LDggKzEzNjgsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNv
bnRlbnRPcGFxdWVSZWdpb24pCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJs
ZUJvdW5kcyk7CiAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCi0gICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5k
cyk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICAvLyBJZiB0aGUgbGF5ZXIg
ZG9lc24ndCBwYWludCBvcGFxdWUgY29udGVudCwgdGhlbiB0aGUgdmlzaWJsZUNvbnRlbnRPcGFx
dWVSZWdpb24gc2hvdWxkIGJlIGVtcHR5LgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKQEAgLTE0NDIsNyArMTQ1Miw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJl
Z2lvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRy
aWNzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTE0
NTksOCArMTQ2OSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWlu
dGVkTWV0cmljcykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRz
KTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50Qm91bmRzKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKIAogICAgIC8vIEludmFsaWRhdGVzIGFuZCBwYWlu
dHMgdGhlIHdob2xlIGxheWVyLgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKQEAgLTE0OTMsNCArMTUwMywxNTggQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogICAg
IEVYUEVDVF9FUSgwLCBvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS50aWxlc0N1bGxlZEZvclVw
bG9hZCgpKTsKIH0KIAorVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRBbGxvY2F0
ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2F0ZWQpCit7CisgICAgLy8gSW5p
dGlhbGl6ZSB3aXRob3V0IHRocmVhZGluZyBzdXBwb3J0LgorICAgIFdlYktpdDo6V2ViQ29tcG9z
aXRvcjo6aW5pdGlhbGl6ZSgwKTsKKworICAgIC8vIFRpbGUgc2l6ZSBpcyAxMDB4MTAwLgorICAg
IEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMzAwLCAyMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0
KDAsIDAsIDMwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkMlJlY3QoMCwgMTAwLCAzMDAsIDEw
MCk7CisKKyAgICBDQ0xheWVyVHJlZVNldHRpbmdzIHNldHRpbmdzOworICAgIEZha2VDQ0xheWVy
VHJlZUhvc3RDbGllbnQgZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudDsKKyAgICBPd25QdHI8Q0NM
YXllclRyZWVIb3N0PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgm
ZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCwgc2V0dGluZ3MpOworICAgIEFTU0VSVF9UUlVFKGNj
TGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJJZk5lZWRlZCgpKTsKKworICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiByb290ID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc3VyZmFjZSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBjaGlsZCA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVu
dHNUZXh0dXJlTWFuYWdlcigpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGNoaWxkMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKGNjTGF5ZXJUcmVl
SG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKSk7CisKKyAgICByb290LT5zZXRCb3VuZHMo
cm9vdFJlY3Quc2l6ZSgpKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkp
OworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3Qocm9vdFJlY3QpOworICAgIHJvb3QtPmFk
ZENoaWxkKHN1cmZhY2UpOworCisgICAgc3VyZmFjZS0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRy
dWUpOworICAgIHN1cmZhY2UtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7CisgICAgc3Vy
ZmFjZS0+c2V0T3BhY2l0eSgwLjUpOworICAgIHN1cmZhY2UtPmFkZENoaWxkKGNoaWxkKTsKKyAg
ICBzdXJmYWNlLT5hZGRDaGlsZChjaGlsZDIpOworCisgICAgY2hpbGQtPnNldEJvdW5kcyhjaGls
ZFJlY3Quc2l6ZSgpKTsKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsK
KyAgICBjaGlsZC0+c2V0UG9zaXRpb24oY2hpbGRSZWN0LmxvY2F0aW9uKCkpOworICAgIGNoaWxk
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNoaWxkUmVjdCk7CisKKyAgICBjaGlsZDItPnNldEJvdW5k
cyhjaGlsZDJSZWN0LnNpemUoKSk7CisgICAgY2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KCkpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oY2hpbGQyUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBjaGlsZDItPnNldFZpc2libGVMYXllclJlY3QoY2hpbGQyUmVjdCk7CisKKyAgICBjY0xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnNl
dFZpZXdwb3J0U2l6ZShyb290UmVjdC5zaXplKCkpOworCisgICAgLy8gV2l0aCBhIGh1Z2UgbWVt
b3J5IGxpbWl0LCBhbGwgbGF5ZXJzIHNob3VsZCB1cGRhdGUgYW5kIHB1c2ggdGhlaXIgdGV4dHVy
ZXMuCisgICAgcm9vdC0+aW52YWxpZGF0ZVJlY3Qocm9vdFJlY3QpOworICAgIGNoaWxkLT5pbnZh
bGlkYXRlUmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkMi0+aW52YWxpZGF0ZVJlY3QoY2hpbGQy
UmVjdCk7CisgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgeworICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7
CisgICAgICAgIEVYUEVDVF9FUSg2LCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51
cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDMsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDMsIGNoaWxk
Mi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRSh1cGRhdGVyLmhhc01vcmVVcGRhdGVzKCkpOworCisgICAgICAgIHJvb3QtPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgY2hp
bGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAg
ICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7
CisKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiByb290SW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwocm9vdC0+aWQoKSkpKTsKKyAgICAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKGNoaWxkLT5pZCgpKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxk
Mi0+aWQoKSkpKTsKKyAgICAgICAgcm9vdC0+cHVzaFByb3BlcnRpZXNUbyhyb290SW1wbC5nZXQo
KSk7CisgICAgICAgIGNoaWxkLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkSW1wbC5nZXQoKSk7Cisg
ICAgICAgIGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgMjsgKytqKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHJvb3RJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgaikpOworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoY2hpbGQySW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDAp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRl
KCk7CisKKyAgICAvLyBXaXRoIGEgbWVtb3J5IGxpbWl0IHRoYXQgaW5jbHVkZXMgb25seSB0aGUg
cm9vdCBsYXllciAoM3gyIHRpbGVzKSBhbmQgaGFsZiB0aGUgc3VyZmFjZSB0aGF0CisgICAgLy8g
dGhlIGNoaWxkIGxheWVycyBkcmF3IGludG8sIHRoZSBjaGlsZCBsYXllcnMgd2lsbCBub3QgYmUg
YWxsb2NhdGVkLiBJZiB0aGUgc3VyZmFjZSBpc24ndAorICAgIC8vIGFjY291bnRlZCBmb3IsIHRo
ZW4gb25lIG9mIHRoZSBjaGlsZHJlbiB3b3VsZCBmaXQgd2l0aGluIHRoZSBtZW1vcnkgbGltaXQu
CisgICAgcm9vdC0+aW52YWxpZGF0ZVJlY3Qocm9vdFJlY3QpOworICAgIGNoaWxkLT5pbnZhbGlk
YXRlUmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkMi0+aW52YWxpZGF0ZVJlY3QoY2hpbGQyUmVj
dCk7CisgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgKDMgKiAyICsg
MyAqIDEpICogKDEwMCAqIDEwMCkgKiA0KTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDYsIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQtPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQyLT5m
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CisKKyAgICAgICAgcm9vdC0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGlsZC0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBj
aGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKwor
ICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOworICAgICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoY2hpbGQtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5p
ZCgpKSkpOworICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsK
KyAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKKyAgICAg
ICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocm9v
dEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RkFMU0UoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKGNoaWxkMkltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgp
OworCisgICAgLy8gV2l0aCBhIG1lbW9yeSBsaW1pdCB0aGF0IGluY2x1ZGVzIG9ubHkgaGFsZiB0
aGUgcm9vdCBsYXllciwgbm8gY29udGVudHMgd2lsbCBiZQorICAgIC8vIGFsbG9jYXRlZC4gSWYg
cmVuZGVyIHN1cmZhY2UgbWVtb3J5IHdhc24ndCBhY2NvdW50ZWQgZm9yLCB0aGVyZSBpcyBlbm91
Z2ggc3BhY2UKKyAgICAvLyBmb3Igb25lIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMsIGJ1dCB0aGV5
IGRyYXcgaW50byBhIHN1cmZhY2UgdGhhdCBjYW4ndCBiZQorICAgIC8vIGFsbG9jYXRlZC4KKyAg
ICByb290LT5pbnZhbGlkYXRlUmVjdChyb290UmVjdCk7CisgICAgY2hpbGQtPmludmFsaWRhdGVS
ZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQyLT5pbnZhbGlkYXRlUmVjdChjaGlsZDJSZWN0KTsK
KyAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCAoMyAqIDEpICogKDEw
MCAqIDEwMCkgKiA0KTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOworICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICAgICAgRVhQRUNU
X0VRKDAsIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVw
ZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0
ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CisKKyAgICAgICAgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGlsZDItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKworICAgICAgICBPd25Q
dHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxl
ZExheWVySW1wbChyb290LT5pZCgpKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQt
PmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQySW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5pZCgpKSkpOworICAg
ICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsKKyAgICAgICAgY2hp
bGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQyLT5w
dXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCAyOyArK2opCisgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHJvb3RJbXBsLT5oYXNU
ZXh0dXJlSWRGb3JUaWxlQXQoaSwgaikpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxk
SW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRShjaGlsZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAgICB9
CisgICAgfQorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgIGNj
TGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFsbE1lbW9yeSgm
YWxsb2NhdG9yKTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKyAgICBj
Y0xheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150220</attachid>
            <date>2012-06-29 11:20:21 -0700</date>
            <delta_ts>2012-06-29 13:25:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120629142020.patch</filename>
            <type>text/plain</type>
            <size>120208</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJhNDVlODU2YjkzYzZh
YzVjOTk2MTZiMjcyOTY2OTUwODY3MGVmNy4uMWY3MWY0Njk0NGNjNjU0ODA1M2QxMDkyZjJhYzU3
MDk2M2Y1NzA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA2LTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSBhbmQgYmFja2dyb3VuZFRleHR1cmVGb3JtYXQoKSBtZXRob2Rz
IGFkZGVkIHRvCisgICAgICAgIGJvdGggQ0NSZW5kZXJTdXJmYWNlIGFuZCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0gdG8gaW5kaWNhdGUgdGhlc2Ugc2hvdWxkCisgICAgICAgIGJlIGtlcHQgaW4gc3lu
Yy4gVGhleSBhcmUgdXNlZCBpbiBDQ1JlbmRlclN1cmZhY2UgZm9yIGFjdHVhbCB0ZXh0dXJlCisg
ICAgICAgIG9wZXJhdGlvbnMsIGFuZCBpbiBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gdG8gZGV0ZXJt
aW5lIHRoZSBtZW1vcnkgdGhhdAorICAgICAgICB3b3VsZCBiZSB1c2VkIGJ5IHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMuCisKKyAgICAgICAgU2luY2Ugc3VyZmFjZSBtZW1vcnkgY2FuIG5vIGxvbmdl
ciBiZSB0YWtlbiBieSBjb250ZW50cywgd2UgcmVtb3ZlIHRoZQorICAgICAgICBwcmVmZXJyZWQg
bWVtb3J5IGxpbWl0IGZyb20gdGhlIHRleHR1cmUgbWFuYWdlci4KKworICAgICAgICBUZXN0czog
VGlsZWRMYXllckNocm9taXVtVGVzdC5kb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJm
YWNlQ2FudEJlQWxsb2NhdGVkCisgICAgICAgICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZVRl
c3QucmVuZGVyU3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFN1cmZhY2UK
KyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5yb290UmVuZGVyU3VyZmFj
ZVJlZHVjZXNNZW1vcnlBdmFpbGFibGUKKyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdC5yZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZUZvclJlcXVlc3RMYXRl
CisgICAgICAgICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qud2hlblJvb3RSZW5kZXJT
dXJmYWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90QXZhaWxhYmxlCisgICAgICAgICAgICAg
ICBDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qud2hlbkNoaWxkUmVuZGVyU3VyZmFjZU5vdEF2YWls
YWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVxdWlyZWRUZXh0dXJlQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OmNvbnRlbnRzVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OmJhY2tncm91bmRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNo
cm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnByaW9yaXRpemVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NP
dmVyZHJhd01ldHJpY3M6OkNDT3ZlcmRyYXdNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
T3ZlcmRyYXdNZXRyaWNzOjpkaWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDT3ZlcmRyYXdNZXRyaWNzOjpkaWRV
c2VSZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9yeUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
T3ZlcmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmg6CisgICAgICAgIChD
Q092ZXJkcmF3TWV0cmljcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6
ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6cmVxdWVzdExhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6Om1lbW9y
eUZvclJlbmRlclN1cmZhY2VzQnl0ZXMpOgorICAgICAgICAoQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXR5Q2FsY3VsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRv
cjo6dWlQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6
dmlzaWJsZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZhY2VQcmlvcml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbVZpc2liaWxp
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlD
YWxjdWxhdG9yLmg6CisgICAgICAgIChDQ1ByaW9yaXR5Q2FsY3VsYXRvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc1ZhbGlkQ29udGVudHNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6aGFzQ2FjaGVkQ29udGVudHNU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tn
cm91bmRUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y29u
dGVudHNUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6
YmFja2dyb3VuZFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKwog
MjAxMi0wNi0yOSAgRXJpYyBQZW5uZXIgIDxlcGVubmVyQGdvb2dsZS5jb20+CiAKICAgICAgICAg
W2Nocm9taXVtXSBBZGRpbmcgUHJpb3JpdGl6ZWRUZXh0dXJlIGFuZCByZXBsYWNpbmcgQ29udGVu
dHNUZXh0dXJlTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmZWE5ZTkzY2E0
ZjQyNmM0YTkyNzYxMDIzOGM5MDZjZmZkNjdiNGI4Li4xYzU5NGQyZmQ2NDI1YTEzNzU4ZDZlYmQ3
YzgxYzQ2M2Y0Mzg5N2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDEyLTA2LTI5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gUmVzcGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNl
cyB3aGVuIHJlc2VydmluZyBjb250ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVz
dC5jcHA6CisgICAgICAgIChXVEY6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdDo6Y3JlYXRlTWFu
YWdlcik6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgIChXVEYpOgorICAgICAgICAq
IHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAgICAgICAg
KFdlYktpdFRlc3RzKToKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6
CisgICAgICAgIChGYWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKiB0ZXN0cy9UaWxl
ZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wNi0yOSAgRXJpYyBQZW5uZXIgIDxlcGVu
bmVyQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGRpbmcgUHJpb3JpdGl6ZWRU
ZXh0dXJlIGFuZCByZXBsYWNpbmcgQ29udGVudHNUZXh0dXJlTWFuYWdlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKaW5kZXggNTE3NjE0NTNkODMzYWY2NTgxMjYyZmZiNmJh
MzNhZWY4Nzc2MTA1NC4uOWQzOWRlMTU1YWFlMTE4ZjZlNDM2NmVlNWM4OTg4MGYyYjc2ZGNhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJjYy9DQ01h
dGhVdGlsLmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNzMsNiArNzQsMTQgQEAgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKiBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnRhcmdldFJlbmRlclN1cmZhY2Uo
KSBjb25zdAogICAgIHJldHVybiBwYXJlbnQtPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKIH0KIAor
c2l6ZV90IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVxdWlyZWRUZXh0dXJlQnl0ZXMoKSBjb25z
dAoreworICAgIHNpemVfdCBieXRlcyA9IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyht
X2NvbnRlbnRSZWN0LnNpemUoKSwgY29udGVudHNUZXh0dXJlRm9ybWF0KCkpOworICAgIGlmICgh
bV9iYWNrZ3JvdW5kRmlsdGVycy5pc0VtcHR5KCkpCisgICAgICAgIGJ5dGVzICs9IFRleHR1cmVN
YW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhtX2NvbnRlbnRSZWN0LnNpemUoKSwgYmFja2dyb3VuZFRl
eHR1cmVGb3JtYXQoKSk7CisgICAgcmV0dXJuIGJ5dGVzOworfQorCiBib29sIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6aGFzUmVwbGljYSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3duaW5nTGF5
ZXItPnJlcGxpY2FMYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAppbmRl
eCAwZTdkNGUzOGM1NmMxZWNjZDk2ZjVjYmFmZDc0ZjlkZTVmM2Q4N2Q5Li43ZWE2YzAzNDY4ZDE1
YTY0MWJmNDUyMGJkOGEyYTUyNjJiNGMyYTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaApAQCAtMzAsNiArMzAsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVy
YXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CkBA
IC0xMTAsNiArMTExLDExIEBAIHB1YmxpYzoKIAogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSog
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0OwogCisgICAgR0MzRGVudW0gY29udGVudHNUZXh0
dXJlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7IH0KKyAg
ICBHQzNEZW51bSBiYWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOyB9CisKKyAgICBzaXplX3QgcmVxdWlyZWRUZXh0dXJlQnl0ZXMo
KSBjb25zdDsKKwogICAgIGJvb2wgaGFzUmVwbGljYSgpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNN
YXNrKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGE5MTcyNzIwMWYzMmE2NDU2YTA0OGU0Y2QwMzA3Yzk1MDE1ZTk2MjYuLjkzOWFkNDJkZDUwMTkz
OGZkNGNkNDk4MzUwNTM1MzMwYzNkNTM4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwCkBAIC0yNTgsMTggKzI1OCwxOSBAQCB2b2lkIFNjcm9sbGJhckxheWVyQ2hy
b21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJikK
IAogICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKIAorICAgIGJvb2wgZHJhd3NU
b1Jvb3RTdXJmYWNlID0gIXRhcmdldFJlbmRlclN1cmZhY2UoKS0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpOwogICAgIGlmIChtX2JhY2tUcmFjaykgewogICAgICAgICBtX2JhY2tUcmFjay0+dGV4dHVy
ZSgpLT5zZXREaW1lbnNpb25zKGNvbnRlbnRCb3VuZHMoKSwgbV90ZXh0dXJlRm9ybWF0KTsKLSAg
ICAgICAgbV9iYWNrVHJhY2stPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3Jp
dHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KCkpOworICAgICAgICBtX2JhY2tUcmFjay0+dGV4dHVy
ZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHko
ZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgfQogICAgIGlmIChtX2ZvcmVUcmFjaykgewogICAg
ICAgICBtX2ZvcmVUcmFjay0+dGV4dHVyZSgpLT5zZXREaW1lbnNpb25zKGNvbnRlbnRCb3VuZHMo
KSwgbV90ZXh0dXJlRm9ybWF0KTsKLSAgICAgICAgbV9mb3JlVHJhY2stPnRleHR1cmUoKS0+c2V0
UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KCkpOworICAg
ICAgICBtX2ZvcmVUcmFjay0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0
eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgfQogICAg
IGlmIChtX3RodW1iKSB7CiAgICAgICAgIEludFNpemUgdGh1bWJTaXplID0gdGhlbWUoKS0+dGh1
bWJSZWN0KG1fc2Nyb2xsYmFyLmdldCgpKS5zaXplKCk7CiAgICAgICAgIG1fdGh1bWItPnRleHR1
cmUoKS0+c2V0RGltZW5zaW9ucyh0aHVtYlNpemUsIG1fdGV4dHVyZUZvcm1hdCk7Ci0gICAgICAg
IG1fdGh1bWItPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxh
dG9yOjp1aVByaW9yaXR5KCkpOworICAgICAgICBtX3RodW1iLT50ZXh0dXJlKCktPnNldFJlcXVl
c3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eShkcmF3c1RvUm9vdFN1
cmZhY2UpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGFiMmY1YmVjYzUyNDI1OWQ3YzBiOTkyMWExMmE0YTViMjc2YmQzZWEuLjY1Y2VhYzgyYTQyYWJk
N2UzYzlmYWIxMTE3MzhmMTY4NTBjYmU4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcApAQCAtNTIzLDYgKzUyMyw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAgICByZXNl
dFVwZGF0ZVN0YXRlKCk7CiAKICAgICBJbnRSZWN0IHByZXBhaW50UmVjdCA9IGlkbGVQYWludFJl
Y3QodmlzaWJsZVJlY3QpOworICAgIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlID0gIXRhcmdldFJl
bmRlclN1cmZhY2UoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOwogCiAgICAgLy8gTWluaW1hbGx5
IGNyZWF0ZSB0aGUgdGlsZXMgaW4gdGhlIGRlc2lyZWQgcHJlLXBhaW50IHJlY3QuCiAgICAgaWYg
KCFwcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CkBAIC01NTgsNyArNTU5LDcgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3Jp
dHlDYWxjdWxhdG9yJgogCiAgICAgICAgICAgICAgICAgdGlsZS0+ZGlydHlSZWN0ID0gbV90aWxl
ci0+dGlsZVJlY3QodGlsZSk7CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogYmFja0J1ZmZlciA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAgICAgICAgICBi
YWNrQnVmZmVyLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUNhbGMucHJp
b3JpdHlGcm9tVmlzaWJpbGl0eSh0cnVlKSk7CisgICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+
dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbVZp
c2liaWxpdHkodHJ1ZSwgZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgICAgICAgICAgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiBmcm9udEJ1ZmZlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpjcmVhdGUoYmFja0J1ZmZlci0+dGV4dHVyZSgpLT50ZXh0dXJlTWFuYWdlcigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+c2l6ZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+
Zm9ybWF0KCkpOwpAQCAtNTc4LDkgKzU3OSw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpz
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAg
ICAgICAgLy8gNTEyIHBpeGVscyBvZiBwcmUtcGFpbnRpbmcuIExhdGVyIHdlIGNhbiBqdXN0IHBh
c3MgYW4gYW5pbWF0aW5nIGZsYWcgZXRjLiB0byB0aGUKICAgICAgICAgLy8gY2FsY3VsYXRvciBh
bmQgaXQgY2FuIHRha2UgY2FyZSBvZiB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBzdGlsbCBuZWVk
IGl0LgogICAgICAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpICYmICFwcmVwYWludFJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+c2V0UmVxdWVz
dFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSg1MTIpKTsKKyAgICAg
ICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0
eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyLCBkcmF3c1RvUm9vdFN1cmZhY2UpKTsKICAg
ICAgICAgZWxzZSBpZiAoIXZpc2libGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRpbGUt
Pm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUNhbGMucHJpb3Jp
dHlGcm9tRGlzdGFuY2UodmlzaWJsZVJlY3QsIHRpbGVSZWN0KSk7CisgICAgICAgICAgICB0aWxl
LT5tYW5hZ2VkVGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9y
aXR5RnJvbURpc3RhbmNlKHZpc2libGVSZWN0LCB0aWxlUmVjdCwgZHJhd3NUb1Jvb3RTdXJmYWNl
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGUzY2I3M2Zh
YmRjY2RiYTFmNjUzMTcxMzczZGUyYWJlNWZiOWNhYTUuLmNkZTU1MmMwOWUyOWUyMjZkMDRkNWZm
MWRjOWUyNjg5MDljNWFmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC04Miw4
ICs4Miw2IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXNldCBzdGF0ZSBvbiB0aWxlcyB0aGF0IHdp
bGwgYmUgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIGxheWVyLgogICAgIHZvaWQgcmVzZXRVcGRhdGVT
dGF0ZSgpOwogCi0gICAgdm9pZCBzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1By
aW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpOwotCiAg
ICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNl
Y3Qgd2l0aCBsYXllclJlY3QuCiAgICAgdm9pZCB1cGRhdGVMYXllclJlY3QoQ0NUZXh0dXJlVXBk
YXRlciYsIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2Vy
Kik7CiAKQEAgLTEwOSw2ICsxMDcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgdGlsZU9ubHlOZWVk
c1BhcnRpYWxVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogICAgIGJvb2wgdGlsZU5lZWRzQnVmZmVy
ZWRVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogCisgICAgdm9pZCBzZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3QmIHZpc2li
bGVMYXllclJlY3QpOworCiAgICAgdm9pZCB1cGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0
LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIENDVGV4dHVyZVVwZGF0ZXImLCBjb25z
dCBDQ09jY2x1c2lvblRyYWNrZXIqKTsKIAogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQs
IGludCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBmOTgyYjVi
YjdlZTU5NjdjNDQ2ODI1MDQ0MWEyNGNkNWRlMWNmNjFmLi40YzE3OTA4YzBmNzdiMjMyYTY2NDQx
MGZjYWMxODNjYWQxOGI1NzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAg
LTE0OSw3ICsxNDksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoKQogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIHBhcnRpYWwgdXBkYXRl
IGNhcGFiaWxpdHkuCiAgICAgbV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMgPSBt
aW4obV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMsIG1fcHJveHktPm1heFBhcnRp
YWxUZXh0dXJlVXBkYXRlcygpKTsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDAsIDAsIG1fcHJveHktPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMCwgbV9wcm94
eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKIAogICAgIG1f
bGF5ZXJSZW5kZXJlckluaXRpYWxpemVkID0gdHJ1ZTsKIApAQCAtNDQwLDEwICs0NDAsMTAgQEAg
Ym9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKQog
fQogCiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRl
ciYgdXBkYXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcykKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90
IG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKQogewogICAgIEFTU0VSVChtX2xheWVyUmVuZGVy
ZXJJbml0aWFsaXplZCk7Ci0gICAgQVNTRVJUKGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7Cisg
ICAgQVNTRVJUKG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKIAogICAgIGlmICghcm9vdExh
eWVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNpemVfdCBj
b250ZW50c01lbQogICAgIGlmICh2aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5QWxsb2NhdGlv
bkxpbWl0Qnl0ZXMoY29udGVudHNNZW1vcnlMaW1pdEJ5dGVzKTsKKyAgICBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5QWxsb2NhdGlvbkxpbWl0
Qnl0ZXMpOwogCiAgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLCB1cGRhdGVyKTsKIH0KQEAg
LTUyMiw3ICs1MjIsMTkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnByaW9yaXRpemVUZXh0dXJl
cyhjb25zdCBMYXllckxpc3QmIHVwZGF0ZUxpc3QpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHNpemVf
dCByb290UmVuZGVyU3VyZmFjZUJ5dGVzID0gMDsKKyAgICBzaXplX3QgY2hpbGRSZW5kZXJTdXJm
YWNlc0J5dGVzID0gMDsKKyAgICBib29sIGJhY2tncm91bmRGaWx0ZXJQcmVzZW50ID0gZmFsc2U7
CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCB1cGRhdGVMaXN0LnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHVwZGF0ZUxpc3RbaV0u
Z2V0KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJl
bmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBjaGlsZFJlbmRlclN1
cmZhY2VzQnl0ZXMgKz0gcmVuZGVyU3VyZmFjZS0+cmVxdWlyZWRUZXh0dXJlQnl0ZXMoKTsKKyAg
ICAgICAgYmFja2dyb3VuZEZpbHRlclByZXNlbnQgfD0gIXJlbmRlclN1cmZhY2UtPmJhY2tncm91
bmRGaWx0ZXJzKCkuaXNFbXB0eSgpOworICAgIH0KKyAgICBpZiAoIXJvb3RSZW5kZXJTdXJmYWNl
Qnl0ZXMgJiYgYmFja2dyb3VuZEZpbHRlclByZXNlbnQpCisgICAgICAgIGNoaWxkUmVuZGVyU3Vy
ZmFjZXNCeXRlcyArPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV9kZXZpY2VWaWV3
cG9ydFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpOworCisgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocm9vdFJlbmRlclN1cmZhY2VCeXRlcywgY2hp
bGRSZW5kZXJTdXJmYWNlc0J5dGVzKTsKIH0KIAogLy8gc3RhdGljCkBAIC01NzUsNiArNTg3LDgg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5sZWF2
ZUxheWVyKGl0KTsKICAgICB9CiAKKyAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmlj
cygpLmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFu
YWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKyAgICBvY2NsdXNpb25UcmFja2VyLm92
ZXJkcmF3TWV0cmljcygpLmRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMobV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5tZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKCkpOwog
ICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlz
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwCmluZGV4IDBjYzJmYTVl
YzYxNmEwMDQ3NzgyNjE1ODk2MGJkMDE3ODg3ZTNkZDguLmIyY2VmNmFhZTAxOTgwNjVkNjFkNmI4
OTZjNTU4MmFlNGEwMzg1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAK
QEAgLTQ2LDYgKzQ2LDggQEAgQ0NPdmVyZHJhd01ldHJpY3M6OkNDT3ZlcmRyYXdNZXRyaWNzKGJv
b2wgcmVjb3JkTWV0cmljc0ZvckZyYW1lKQogICAgICwgbV9waXhlbHNVcGxvYWRlZE9wYXF1ZSgw
KQogICAgICwgbV9waXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50KDApCiAgICAgLCBtX3RpbGVzQ3Vs
bGVkRm9yVXBsb2FkKDApCisgICAgLCBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKDApCisgICAg
LCBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMoMCkKICAgICAsIG1fcGl4ZWxzRHJhd25P
cGFxdWUoMCkKICAgICAsIG1fcGl4ZWxzRHJhd25UcmFuc2x1Y2VudCgwKQogICAgICwgbV9waXhl
bHNDdWxsZWRGb3JEcmF3aW5nKDApCkBAIC05Miw2ICs5NCwyMiBAQCB2b2lkIENDT3ZlcmRyYXdN
ZXRyaWNzOjpkaWRVcGxvYWQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bVRvVGFyZwogICAgIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCArPSB1cGxvYWRBcmVhIC0g
dXBsb2FkT3BhcXVlQXJlYTsKIH0KIAordm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlQ29u
dGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKQor
eworICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMgKz0gY29udGVudHNUZXh0dXJlVXNlQnl0ZXM7
Cit9CisKK3ZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJl
TWVtb3J5Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRlcykKK3sKKyAgICBpZiAoIW1f
cmVjb3JkTWV0cmljc0ZvckZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlVXNlQnl0ZXMgKz0gcmVuZGVyU3VyZmFjZVVzZUJ5dGVzOworfQorCiB2b2lk
IENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRDdWxsRm9yRHJhd2luZyhjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQsIGNvbnN0IEludFJlY3QmIGJlZm9yZUN1bGxS
ZWN0LCBjb25zdCBJbnRSZWN0JiBhZnRlckN1bGxSZWN0KQogewogICAgIGlmICghbV9yZWNvcmRN
ZXRyaWNzRm9yRnJhbWUpCkBAIC0xMzQsNiArMTUyLDggQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmlj
czo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBM
YXkKICAgICBmbG9hdCBub3JtYWxpemF0aW9uID0gMTAwMC5mIC8gKGxheWVyVHJlZUhvc3QtPmRl
dmljZVZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsYXllclRyZWVIb3N0LT5kZXZpY2VWaWV3cG9y
dFNpemUoKS5oZWlnaHQoKSk7CiAgICAgLy8gVGhpcyBnaXZlcyBhcHByb3hpbWF0ZWx5IDEwMHgg
dGhlIHBlcmNlbnRhZ2Ugb2YgdGlsZXMgdG8gZmlsbCB0aGUgdmlld3BvcnQgb25jZSwgaWYgYWxs
IHRpbGVzIHdlcmUgMjU2eDI1Ni4KICAgICBmbG9hdCB0aWxlTm9ybWFsaXphdGlvbiA9IDEwMDAw
LmYgLyAobGF5ZXJUcmVlSG9zdC0+ZGV2aWNlVmlld3BvcnRTaXplKCkud2lkdGgoKSAvIDI1Ni5m
ICogbGF5ZXJUcmVlSG9zdC0+ZGV2aWNlVmlld3BvcnRTaXplKCkuaGVpZ2h0KCkgLyAyNTYuZik7
CisgICAgLy8gVGhpcyBnaXZlcyBhcHByb3hpbWF0ZWx5IDEweCB0aGUgcGVyY2VudGFnZSBvZiBi
eXRlcyB0byBmaWxsIHRoZSB2aWV3cG9ydCBvbmNlLCBhc3N1bWluZyA0IGJ5dGVzIHBlciBwaXhl
bC4KKyAgICBmbG9hdCBieXRlTm9ybWFsaXphdGlvbiA9IG5vcm1hbGl6YXRpb24gLyA0OwogCiAg
ICAgc3dpdGNoIChtZXRyaWNzVHlwZSkgewogICAgIGNhc2UgRHJhd2luZ1RvU2NyZWVuOgpAQCAt
MTUxLDYgKzE3MSwxMCBAQCB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50
ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmljc1R5cGUsIGNvbnN0IExheQogICAgICAgICBXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnBp
eGVsQ291bnRPcGFxdWVfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pihub3JtYWxpemF0aW9uICog
bV9waXhlbHNVcGxvYWRlZE9wYXF1ZSksIDEwMCwgMTAwMDAwMCwgNTApOwogICAgICAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0
LnBpeGVsQ291bnRUcmFuc2x1Y2VudF9VcGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG5vcm1hbGl6
YXRpb24gKiBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQpLCAxMDAsIDEwMDAwMDAsIDUwKTsK
ICAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3Vu
dHMoIlJlbmRlcmVyNC50aWxlQ291bnRDdWxsZWRfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pih0
aWxlTm9ybWFsaXphdGlvbiAqIG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQpLCAxMDAsIDEwMDAwMDAw
LCA1MCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3Vz
dG9tQ291bnRzKCJSZW5kZXJlcjQucmVuZGVyU3VyZmFjZVRleHR1cmVCeXRlc19WaWV3cG9ydFNj
YWxlZCIsIHN0YXRpY19jYXN0PGludD4oYnl0ZU5vcm1hbGl6YXRpb24gKiBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlVXNlQnl0ZXMpLCAxMCwgMTAwMDAwMCwgNTApOworICAgICAgICBXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnJlbmRl
clN1cmZhY2VUZXh0dXJlQnl0ZXNfVW5zY2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVVc2VCeXRlcyAvIDEwMDApLCAxMDAwLCAxMDAwMDAwMDAsIDUwKTsKKyAg
ICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMo
IlJlbmRlcmVyNC5jb250ZW50c1RleHR1cmVCeXRlc19WaWV3cG9ydFNjYWxlZCIsIHN0YXRpY19j
YXN0PGludD4oYnl0ZU5vcm1hbGl6YXRpb24gKiBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKSwg
MTAsIDEwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5o
aXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5jb250ZW50c1RleHR1cmVCeXRlc19VbnNj
YWxlZCIsIHN0YXRpY19jYXN0PGludD4obV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyAvIDEwMDAp
LCAxMDAwLCAxMDAwMDAwMDAsIDUwKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBUUkFDRV9D
T1VOVEVSX0lEMSgiY2MiLCAiVXBsb2FkVGlsZXNDdWxsZWQiLCBsYXllclRyZWVIb3N0LCBtX3Rp
bGVzQ3VsbGVkRm9yVXBsb2FkKTsKQEAgLTE2MCw2ICsxODQsMTAgQEAgdm9pZCBDQ092ZXJkcmF3
TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBj
b25zdCBMYXkKICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBpbiBhIGRpZmZlcmVudCBzY29w
ZSB0aGFuIHRoZSBUUkFDRV9FVkVOVDIgYWJvdmUuCiAgICAgICAgICAgICBUUkFDRV9FVkVOVDEo
ImNjIiwgIkNDT3ZlcmRyYXdQYWludE1ldHJpY3MiLCAiUGl4ZWxzUGFpbnRlZCIsIG1fcGl4ZWxz
UGFpbnRlZCk7CiAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBtdXN0
IGJlIGluIGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UcyBhYm92ZS4KKyAg
ICAgICAgICAgIFRSQUNFX0VWRU5UMigiY2MiLCAiQ0NPdmVyZHJhd1BhaW50TWV0cmljcyIsICJD
b250ZW50c1RleHR1cmVCeXRlcyIsIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMsICJSZW5kZXJT
dXJmYWNlVGV4dHVyZUJ5dGVzIiwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzKTsKKyAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01l
dHJpY3MuaAppbmRleCA3MTVmNWUxNTFiYmFkZGExNzk3NmM3ZTM5ZmUzNzEzNzdiZGY4ZTMzLi5m
MGRhYjBlOTNjOTVlYTU1NGQ4MGE3MjQzYjJkOTg1NTkxNjk1N2Q2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmlj
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T3ZlcmRyYXdNZXRyaWNzLmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZEN1bGxUaWxlRm9yVXBsb2FkKCk7CiAgICAgLy8gUmVjb3JkcyBwaXhlbHMgdGhhdCB3ZXJlIHVw
bG9hZGVkIHRvIHRleHR1cmUgbWVtb3J5LgogICAgIHZvaWQgZGlkVXBsb2FkKGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRS
ZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKKyAgICAvLyBSZWNv
cmQgY29udGVudHMgdGV4dHVyZShzKSBiZWhpbmQgcHJlc2VudCB1c2luZyB0aGUgZ2l2ZW4gbnVt
YmVyIG9mIGJ5dGVzLgorICAgIHZvaWQgZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMo
c2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAvLyBSZWNvcmQgUmVuZGVyU3Vy
ZmFjZSB0ZXh0dXJlKHMpIGJlaW5nIHByZXNlbnQgdXNpbmcgdGhlIGdpdmVuIG51bWJlciBvZiBi
eXRlcy4KKyAgICB2b2lkIGRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6
ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRlcyk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1
c2VkIGZvciBzYXZpbmcgbWV0cmljcyBkdXJpbmcgZHJhdy4KIApAQCAtOTMsNiArOTcsMTAgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQ7CiAgICAgLy8g
Q291bnQgb2YgdGlsZXMgdGhhdCB3ZXJlIGludmFsaWRhdGVkIGJ1dCBub3QgdXBsb2FkZWQuCiAg
ICAgaW50IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQ7CisgICAgLy8gQ291bnQgdGhlIG51bWJlciBv
ZiBieXRlcyBpbiBjb250ZW50cyB0ZXh0dXJlcy4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9j
b250ZW50c1RleHR1cmVVc2VCeXRlczsKKyAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVz
IGluIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fcmVu
ZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlczsKIAogICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNl
ZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IGI2NDJiOTllYjZhMzc1YjIz
OWU5M2VjZWFmYmIwNTE5Y2E2ZDcwY2IuLmMyYjg4OGI2MDVjMzYxM2E0ZDhlNDQxNGUzYTdkYmI5
MDgxZTNkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyLmNwcApAQCAtMzYsMTQgKzM2LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBw
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCitDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4
TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogICAgIDogbV9tYXhUZXh0dXJl
U2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAgICAsIG1fbWF4TWVtb3J5TGltaXRCeXRlcyhtYXhNZW1v
cnlMaW1pdEJ5dGVzKQotICAgICwgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHByZWZlcnJl
ZE1lbW9yeUxpbWl0Qnl0ZXMpCi0gICAgLCBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKENDUHJp
b3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxlUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJpb3JpdHlDdXRv
ZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCkpCiAgICAgLCBtX21lbW9y
eVVzZUJ5dGVzKDApCiAgICAgLCBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoMCkKKyAgICAsIG1f
bWVtb3J5QXZhaWxhYmxlQnl0ZXMoMCkKIHsKIH0KIApAQCAtNTgsMTcgKzU2LDcgQEAgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKCkKICAg
ICAgICAgZGVzdHJveUJhY2tpbmcoKm1fYmFja2luZ3MuYmVnaW4oKSwgMCk7CiB9CiAKLXZvaWQg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpzZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
cyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykKLXsKLSAgICBzZXRNYXhNZW1vcnlMaW1pdEJ5dGVz
KG1lbW9yeUxpbWl0Qnl0ZXMpOwotCi0gICAgLy8gRklYTUU6IFByZWZlcnJlZCBsaW1pdCBzaG91
bGQgZ28gYXdheS4gV2UgY2FuIHJlbW92ZSBpdCBhcyBzb29uCi0gICAgLy8gICAgICAgIGFzIHdl
IG5vIGxvbmdlciB1c2UgdGhlICdyZW1haW5kZXInIG9mIHRoaXMgbWFuYWdlciBmb3IKLSAgICAv
LyAgICAgICAgYW55dGhpbmcuCi0gICAgc2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhtZW1v
cnlMaW1pdEJ5dGVzIC8gNCAqIDMpOwotfQotCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpwcmlvcml0aXplVGV4dHVyZXMoc2l6ZV90IHJvb3RSZW5kZXJTdXJmYWNlTWVtb3J5Qnl0
ZXMsIHNpemVfdCBjaGlsZFJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXMpCiB7CiAgICAgVFJBQ0Vf
RVZFTlQwKCJjYyIsICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0
dXJlcyIpOwogCkBAIC05MCwyMSArNzgsMzUgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiAgICAgICAgIHNvcnRlZFRleHR1cmVzLmFwcGVu
ZCgqaXQpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRUZXh0dXJlcy5iZWdpbigpLCBzb3J0ZWRUZXh0
dXJlcy5lbmQoKSwgY29tcGFyZVRleHR1cmVzKTsKIAorICAgIGlmIChyb290UmVuZGVyU3VyZmFj
ZU1lbW9yeUJ5dGVzID4gbV9tYXhNZW1vcnlMaW1pdEJ5dGVzKQorICAgICAgICBtX21lbW9yeUF2
YWlsYWJsZUJ5dGVzID0gMDsKKyAgICBlbHNlCisgICAgICAgIG1fbWVtb3J5QXZhaWxhYmxlQnl0
ZXMgPSBtX21heE1lbW9yeUxpbWl0Qnl0ZXMgLSByb290UmVuZGVyU3VyZmFjZU1lbW9yeUJ5dGVz
OworCiAgICAgbV9wcmlvcml0eUN1dG9mZiA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQ
cmlvcml0eSgpOworICAgIGJvb2wgcmVzZXJ2ZWRDaGlsZFJlbmRlclN1cmZhY2VzID0gZmFsc2U7
CiAgICAgc2l6ZV90IG1lbW9yeUJ5dGVzID0gMDsKICAgICBmb3IgKFRleHR1cmVWZWN0b3I6Oml0
ZXJhdG9yIGl0ID0gc29ydGVkVGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gc29ydGVkVGV4dHVyZXMu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBzaXplX3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArICgqaXQpLT5t
ZW1vcnlTaXplQnl0ZXMoKTsKLSAgICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbWF4TWVtb3J5
TGltaXRCeXRlcygpKSB7Ci0gICAgICAgICAgICBtX3ByaW9yaXR5Q3V0b2ZmID0gKCppdCktPnJl
cXVlc3RQcmlvcml0eSgpOwotICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCFyZXNl
cnZlZENoaWxkUmVuZGVyU3VyZmFjZXMgJiYgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5
SXNMb3dlcigoKml0KS0+cmVxdWVzdFByaW9yaXR5KCksIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpy
ZW5kZXJTdXJmYWNlUHJpb3JpdHkoKSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdNZW1vcnlC
eXRlcyA9IG1lbW9yeUJ5dGVzICsgY2hpbGRSZW5kZXJTdXJmYWNlc01lbW9yeUJ5dGVzOworICAg
ICAgICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbV9tZW1vcnlBdmFpbGFibGVCeXRlcykgewor
ICAgICAgICAgICAgICAgIG1fcHJpb3JpdHlDdXRvZmYgPSAoKml0KS0+cmVxdWVzdFByaW9yaXR5
KCk7CisgICAgICAgICAgICAgICAgbV9tZW1vcnlBdmFpbGFibGVCeXRlcyA9IG1lbW9yeUJ5dGVz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9t
ZW1vcnlBdmFpbGFibGVCeXRlcyAtPSBjaGlsZFJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXM7Cisg
ICAgICAgICAgICByZXNlcnZlZENoaWxkUmVuZGVyU3VyZmFjZXMgPSB0cnVlOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMo
KQotICAgICAgICAgICAgICAgICAgICAmJiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJ
c0xvd2VyKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSwgbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYo
KSkpIHsKKworICAgICAgICBzaXplX3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArICgq
aXQpLT5tZW1vcnlTaXplQnl0ZXMoKTsKKyAgICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbV9t
ZW1vcnlBdmFpbGFibGVCeXRlcykgewogICAgICAgICAgICAgbV9wcmlvcml0eUN1dG9mZiA9ICgq
aXQpLT5yZXF1ZXN0UHJpb3JpdHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisK
ICAgICAgICAgbWVtb3J5Qnl0ZXMgPSBuZXdNZW1vcnlCeXRlczsKICAgICB9CiAKQEAgLTExOCw3
ICsxMjAsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRl
eHR1cmVzKCkKICAgICAgICAgaWYgKGlzQWJvdmVQcmlvcml0eUN1dG9mZikKICAgICAgICAgICAg
IG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyArPSAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7CiAg
ICAgfQotICAgIEFTU0VSVChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPD0gbWF4TWVtb3J5TGlt
aXRCeXRlcygpKTsKKyAgICBBU1NFUlQobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzIDw9IG1fbWVt
b3J5QXZhaWxhYmxlQnl0ZXMpOwogCiAgICAgLy8gUHV0IGJhY2tpbmdzIGluIGV2aWN0aW9uL3Jl
Y3ljbGluZyBvcmRlci4KICAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNr
aW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KQpAQCAtMTU2LDggKzE1
OCwxMyBAQCBib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUoQ0NQ
cmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiAgICAgaWYgKHRleHR1cmUtPmlzQWJvdmVQcmlv
cml0eUN1dG9mZigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIGJvb2wgb25seUFsbG93
VGV4dHVyZXNEcmF3blRvUm9vdFN1cmZhY2UgPSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3Jp
dHlJc0hpZ2hlcihtX3ByaW9yaXR5Q3V0b2ZmLCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cmVuZGVy
U3VyZmFjZVByaW9yaXR5KCkpOworICAgIGJvb2wgaXNEcmF3blRvUm9vdFN1cmZhY2UgPSBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0hpZ2hlcih0ZXh0dXJlLT5yZXF1ZXN0UHJpb3Jp
dHkoKSwgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZhY2VQcmlvcml0eSgpKTsKKyAg
ICBpZiAob25seUFsbG93VGV4dHVyZXNEcmF3blRvUm9vdFN1cmZhY2UgJiYgIWlzRHJhd25Ub1Jv
b3RTdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzaXplX3QgbmV3TWVtb3J5
Qnl0ZXMgPSBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgKyB0ZXh0dXJlLT5tZW1vcnlTaXplQnl0
ZXMoKTsKLSAgICBpZiAobmV3TWVtb3J5Qnl0ZXMgPiBtX21heE1lbW9yeUxpbWl0Qnl0ZXMpCisg
ICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbV9tZW1vcnlBdmFpbGFibGVCeXRlcykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5
Qnl0ZXM7CkBAIC0xOTAsOCArMTk3LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKIAogICAg
IC8vIE90aGVyd2lzZSByZWR1Y2UgbWVtb3J5IGFuZCBqdXN0IGFsbG9jYXRlIGEgbmV3IGJhY2tp
bmcgdGV4dXJlcy4KICAgICBpZiAoIWJhY2tpbmcpIHsKLSAgICAgICAgc2l6ZV90IGxpbWl0ID0g
c3RkOjptYXgobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0
Qnl0ZXMpIC0gdGV4dHVyZS0+bWVtb3J5U2l6ZUJ5dGVzKCk7Ci0gICAgICAgIHJlZHVjZU1lbW9y
eShsaW1pdCwgYWxsb2NhdG9yKTsKKyAgICAgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxh
YmxlQnl0ZXMgLSB0ZXh0dXJlLT5tZW1vcnlTaXplQnl0ZXMoKSwgYWxsb2NhdG9yKTsKICAgICAg
ICAgYmFja2luZyA9IGNyZWF0ZUJhY2tpbmcodGV4dHVyZS0+c2l6ZSgpLCB0ZXh0dXJlLT5mb3Jt
YXQoKSwgYWxsb2NhdG9yKTsKICAgICB9CiAKQEAgLTIxOSw4ICsyMjUsNyBAQCB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBU
ZXh0dXJlQWxsb2NhdAogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNl
TWVtb3J5KFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBzaXplX3QgbGltaXQg
PSBzdGQ6Om1heChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMsIG1fcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcyk7Ci0gICAgcmVkdWNlTWVtb3J5KGxpbWl0LCBhbGxvY2F0b3IpOworICAgIHJlZHVj
ZU1lbW9yeShtX21lbW9yeUF2YWlsYWJsZUJ5dGVzLCBhbGxvY2F0b3IpOwogICAgIEFTU0VSVCht
ZW1vcnlVc2VCeXRlcygpIDw9IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSk7CiAKICAgICAvLyBXZSBj
dXJyZW50bHkgY29sbGVjdCBiYWNraW5ncyBmcm9tIGRlbGV0ZWQgdGV4dHVyZXMgZm9yIGxhdGVy
IHJlY3ljbGluZy4KQEAgLTIzNCw3ICsyMzksNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6cmVkdWNlTWVtb3J5KFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB3YXN0ZWRNZW1vcnkgKz0gKCppdCktPm1lbW9yeVNpemVC
eXRlcygpOwogICAgIH0KLSAgICBzaXplX3QgdGVuUGVyY2VudE9mTWVtb3J5ID0gbWF4TWVtb3J5
TGltaXRCeXRlcygpIC8gMTA7CisgICAgc2l6ZV90IHRlblBlcmNlbnRPZk1lbW9yeSA9IG1fbWVt
b3J5QXZhaWxhYmxlQnl0ZXMgLyAxMDsKICAgICBpZiAod2FzdGVkTWVtb3J5IDw9IHRlblBlcmNl
bnRPZk1lbW9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlZHVjZU1lbW9yeShtZW1vcnlVc2VC
eXRlcygpIC0gKHdhc3RlZE1lbW9yeSAtIHRlblBlcmNlbnRPZk1lbW9yeSksIGFsbG9jYXRvcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCmluZGV4
IDdmYzJjNmVhNDhlNjJkOGMwNTVlODVhMmUyOGQxMDgzNDlhMzI0MDAuLmVhYzNmYjMyZGQ1OWE3
MDlhNGQ3ODgxZjdmZGYwNGUyZTgzMWFhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC00MCw5ICs0MCw5IEBAIGNsYXNzIENDUHJpb3Jp
dHlDYWxjdWxhdG9yOwogY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIpOwogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gY3Jl
YXRlKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVz
LCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihtYXhNZW1vcnlMaW1pdEJ5dGVzLCBwcmVmZXJy
ZWRNZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihtYXhNZW1vcnlMaW1pdEJ5dGVz
LCBtYXhUZXh0dXJlU2l6ZSkpOwogICAgIH0KICAgICBQYXNzT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQogICAg
IHsKQEAgLTU2LDIxICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gbWVtb3J5VXNlQnl0ZXMoKSA8
PSBtZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLgogICAgIHNp
emVfdCBtZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNlQnl0ZXM7IH0K
ICAgICBzaXplX3QgbWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVt
b3J5QWJvdmVDdXRvZmZCeXRlczsgfQorICAgIHNpemVfdCBtZW1vcnlGb3JSZW5kZXJTdXJmYWNl
c0J5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhNZW1vcnlMaW1pdEJ5dGVzIC0gbV9tZW1vcnlB
dmFpbGFibGVCeXRlczsgfQogCi0gICAgdm9pZCBzZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
cyhzaXplX3QpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZXQgcmlkIG9mIHRoZSBwcmVm
ZXJyZWQvbWF4IGxpbWl0cyBhbmQgbGV0IEdwdU1lbW9yeU1hbmFnZXIKLSAgICAvLyBqdXN0IGFk
anVzdCB0aGUgbWF4IGxpbWl0IGJhc2VkIG9uIGhpbnRzIHdlIGNhbiBwcm92aWRlIGZyb20gdGhp
cyBjbGFzcy4KLSAgICAvLyBJZGVhbGx5IGl0IHdpbGwgYmUgYWRqdXN0ZWQgcmVsYXRpdmVseSBy
YXJlbHkgc3VjaCB0aGF0IHJlY3ljbGluZyBpcyBtYXhpbWl6ZWQuCiAgICAgdm9pZCBzZXRNYXhN
ZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBieXRlcykgeyBtX21heE1lbW9yeUxpbWl0Qnl0ZXMgPSBi
eXRlczsgfQogICAgIHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhNZW1vcnlMaW1pdEJ5dGVzOyB9Ci0gICAgdm9pZCBzZXRQcmVmZXJyZWRNZW1vcnlMaW1p
dEJ5dGVzKHNpemVfdCBieXRlcykgeyBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMgPSBieXRl
czsgfQotICAgIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzOyB9Ci0KLSAgICB2b2lkIHNldE1heE1lbW9y
eVByaW9yaXR5Q3V0b2ZmKHNpemVfdCBjdXRvZmYpIHsgbV9tYXhNZW1vcnlQcmlvcml0eUN1dG9m
ZiA9IGN1dG9mZjsgfQotICAgIHVuc2lnbmVkIG1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhNZW1vcnlQcmlvcml0eUN1dG9mZjsgfQogCi0gICAgdm9pZCBwcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICB2b2lkIHByaW9yaXRpemVUZXh0dXJlcyhzaXplX3Qgcm9v
dFJlbmRlclN1cmZhY2VNZW1vcnlCeXRlcywgc2l6ZV90IGNoaWxkUmVuZGVyU3VyZmFjZXNNZW1v
cnlCeXRlcyk7CiAgICAgdm9pZCBjbGVhclByaW9yaXRpZXMoKTsKIAogICAgIGJvb2wgcmVxdWVz
dExhdGUoQ0NQcmlvcml0aXplZFRleHR1cmUqKTsKQEAgLTEwNyw3ICs5OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKHBy
aW9yaXR5QSwgcHJpb3JpdHlCKTsKICAgICB9CiAKLSAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsK
IAogICAgIHZvaWQgcmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdCwgVGV4dHVyZUFsbG9jYXRvciop
OwogCkBAIC0xMTksMTEgKzExMCwxMCBAQCBwcml2YXRlOgogCiAgICAgaW50IG1fbWF4VGV4dHVy
ZVNpemU7CiAgICAgc2l6ZV90IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKLSAgICBzaXplX3QgbV9w
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzOwotICAgIHVuc2lnbmVkIG1fbWF4TWVtb3J5UHJpb3Jp
dHlDdXRvZmY7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0eUN1dG9mZjsKICAgICBzaXplX3QgbV9t
ZW1vcnlVc2VCeXRlczsKICAgICBzaXplX3QgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzOworICAg
IHNpemVfdCBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PEND
UHJpb3JpdGl6ZWRUZXh0dXJlKj4gVGV4dHVyZVNldDsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0
PENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKj4gQmFja2luZ1NldDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlD
YWxjdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcAppbmRleCA4NTAxMGExMDcwYjgxNWMyM2ZkOGY1
MGQzMDZiMzYxMDZmZTA2YjRlLi45MDA4NDA0M2Q5NzE5ODQwYTllY2IyMzQ1OGNlNzVmYjMwMTI5
NjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwCkBAIC0zMywx
NSArMzMsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gc3RhdGljCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoKQoraW50IEND
UHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKQog
ewotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gZHJhd3NUb1Jvb3RTdXJmYWNlID8gLTEgOiAy
OwogfQogCiAvLyBzdGF0aWMKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9y
aXR5KCkKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KGJvb2wgZHJh
d3NUb1Jvb3RTdXJmYWNlKQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBkcmF3c1RvUm9v
dFN1cmZhY2UgPyAwIDogMzsKK30KKworLy8gc3RhdGljCitpbnQgQ0NQcmlvcml0eUNhbGN1bGF0
b3I6OnJlbmRlclN1cmZhY2VQcmlvcml0eSgpCit7CisgICAgcmV0dXJuIDE7CiB9CiAKIC8vIHN0
YXRpYwpAQCAtNjUsMTkgKzcxLDI0IEBAIHVuc2lnbmVkIG1hbmhhdHRhbkRpc3RhbmNlKGNvbnN0
IEludFJlY3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCiB9CiB9CiAKLWludCBDQ1ByaW9yaXR5Q2Fs
Y3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIHRleHR1cmVSZWN0KSBjb25zdAoraW50IENDUHJpb3JpdHlDYWxjdWxh
dG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAog
ewotICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoKSArIG1hbmhhdHRhbkRpc3RhbmNlKHZpc2li
bGVSZWN0LCB0ZXh0dXJlUmVjdCk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSBtYW5oYXR0YW5E
aXN0YW5jZSh2aXNpYmxlUmVjdCwgdGV4dHVyZVJlY3QpOworICAgIGlmICghZGlzdGFuY2UpCisg
ICAgICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICBy
ZXR1cm4gdmlzaWJsZVByaW9yaXR5KGZhbHNlKSArIGRpc3RhbmNlOwogfQogCi1pbnQgQ0NQcmlv
cml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscykgY29u
c3QKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWdu
ZWQgcGl4ZWxzLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKIHsKLSAgICByZXR1cm4g
dmlzaWJsZVByaW9yaXR5KCkgKyBwaXhlbHM7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJl
dHVybiB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICByZXR1cm4gdmlz
aWJsZVByaW9yaXR5KGZhbHNlKSArIHBpeGVsczsKIH0KIAotaW50IENDUHJpb3JpdHlDYWxjdWxh
dG9yOjpwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSkgY29uc3QKK2ludCBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUsIGJv
b2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAogewotICAgIHJldHVybiB2aXNpYmxlID8gdmlz
aWJsZVByaW9yaXR5KCkgOiBsb3dlc3RQcmlvcml0eSgpOworICAgIHJldHVybiB2aXNpYmxlID8g
dmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSkgOiBsb3dlc3RQcmlvcml0eSgpOwog
fQogCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCmlu
ZGV4IGY0ZmVhZmU5Yjg0Y2YzMzM0ODc0NjcxZjIxNzAxNzNmNTUxYTI1MDIuLjY4YTIyNWJlMGI5
ZWYzMjY1ZjBmODk4YTYyZmRjNThkY2NlZmI3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0
eUNhbGN1bGF0b3IuaApAQCAtMzQsMTIgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ0NQcmlvcml0eUNhbGN1bGF0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBpbnQgdWlQ
cmlvcml0eSgpOwotICAgIHN0YXRpYyBpbnQgdmlzaWJsZVByaW9yaXR5KCk7CisgICAgc3RhdGlj
IGludCB1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICBzdGF0aWMgaW50
IHZpc2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgc3RhdGljIGlu
dCByZW5kZXJTdXJmYWNlUHJpb3JpdHkoKTsKICAgICBzdGF0aWMgaW50IGxpbmdlcmluZ1ByaW9y
aXR5KGludCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICBpbnQgcHJpb3JpdHlGcm9tRGlzdGFuY2Uo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1cmVSZWN0KSBj
b25zdDsKLSAgICBpbnQgcHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzKSBjb25z
dDsKLSAgICBpbnQgcHJpb3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUpIGNvbnN0Owor
ICAgIGludCBwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25z
dDsKKyAgICBpbnQgcHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzLCBib29sIGRy
YXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7CisgICAgaW50IHByaW9yaXR5RnJvbVZpc2liaWxpdHko
Ym9vbCB2aXNpYmxlLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7CiAKICAgICBzdGF0
aWMgaW5saW5lIGludCBoaWdoZXN0UHJpb3JpdHkoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpOyB9CiAgICAgc3RhdGljIGlubGluZSBpbnQgbG93ZXN0UHJpb3JpdHko
KSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCA2YWMwOTQ2YWE2ODY3YWU3Yjc3NWYwZDI5Y2JiOGVk
YjBkNzFkNjgxLi41OTlhMWNlMzg2OGU0YTI3YWRkYWQ0ODY1NTg0ZTkxN2FlNzNmZGYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29sIEND
UmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZQogICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJl
c2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAg
ICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1fY29udGVudFJlY3Quc2l6ZSgpLCBj
b250ZW50c1RleHR1cmVGb3JtYXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTE4LDEyICsxMTgsMTIgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJl
bGVhc2VDb250ZW50c1RleHR1cmUoKQogCiBib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRD
b250ZW50c1RleHR1cmUoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAm
JiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYmIG1fY29udGVudHNUZXh0dXJlLT5p
c1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cisg
ICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2Vy
dmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCks
IGNvbnRlbnRzVGV4dHVyZUZvcm1hdCgpKTsKIH0KIAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhh
c0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGVudHNU
ZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgp
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJl
ICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBjb250
ZW50c1RleHR1cmVGb3JtYXQoKSk7CiB9CiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJl
QmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQpA
QCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3Vu
ZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlCiAgICAgaWYgKG1fYmFj
a2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUt
PnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIGJhY2tncm91bmRUZXh0dXJlRm9ybWF0KCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmgKaW5kZXggMDI5ZTFmNjA0NDE0Y2NmZWIxMzA1OGVmNGFhYzgxMzc5Zjk1
MDhmNC4uNDNhNGFkNGE4ZTI2ZGRmYmNiNmVkMmE4NjllMTUyMGI0OGFiYzAxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTEyNyw2ICsxMjcsOSBAQCBwdWJsaWM6CiAgICAgTWFu
YWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNU
ZXh0dXJlLmdldCgpOyB9CiAgICAgTWFuYWdlZFRleHR1cmUqIGJhY2tncm91bmRUZXh0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKTsgfQogCisgICAgR0MzRGVu
dW0gY29udGVudHNUZXh0dXJlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE7IH0KKyAgICBHQzNEZW51bSBiYWNrZ3JvdW5kVGV4dHVyZUZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOyB9CisKICAgICBpbnQgb3duaW5nTGF5
ZXJJZCgpIGNvbnN0OwogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKaW5kZXggNTQxZTUxNTk4ZmJmZTk5MmNjODFmYWVm
N2Q2ZTgxMDM2Mjg1ZTVjYS4uYjM2YTkzMzlmN2YyOTJlZTI3ZTRhMjNhOGU4YzU2YzA0MjAzMGZk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LmNwcApAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV90ZXh0dXJlU2l6ZSwgbV90
ZXh0dXJlRm9ybWF0KSAqIHRleHR1cmVDb3VudDsKICAgICB9CiAKLSAgICBQYXNzT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gY3JlYXRlTWFuYWdlcihzaXplX3QgbWF4VGV4dHVy
ZXMsIHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcykKKyAgICBQYXNzT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gY3JlYXRlTWFuYWdlcihzaXplX3QgbWF4VGV4dHVyZXMpCiAgICAg
ewotICAgICAgICByZXR1cm4gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUodGV4
dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJl
ZFRleHR1cmVzKSwgMTAyNCk7CisgICAgICAgIHJldHVybiBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCAxMDI0KTsKICAg
ICB9CiAKICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmU+JiB0ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQpAQCAtODIsOTggKzgyLDEwIEBAIHByb3Rl
Y3RlZDoKICAgICBjb25zdCBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CiB9OwogCi1URVNUX0Yo
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUluUHJlZmVycmVkTGltaXQp
Ci17Ci0gICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3Qg
cHJlZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVy
cmVkVGV4dHVyZXMpOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNb
cHJlZmVycmVkVGV4dHVyZXNdOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVmZXJy
ZWRUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5j
cmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7Ci0KLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBMb3dlc3QgcHJpb3Jp
dHkgdGV4dHVyZXMgc2hvdWxkbid0IGJlIGF2YWlsYWJsZS4KLSAgICBFWFBFQ1RfRkFMU0UodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbMV0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1syXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcmVmZXJyZWRUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVx
dWVzdFByaW9yaXR5KDEwMCk7Ci0KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7Ci0KLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZh
bHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzFdLCBmYWxz
ZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1syXSwgZmFsc2Up
KTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7
Ci0KLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwg
dGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNUX0xF
KHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5
QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9y
eShhbGxvY2F0b3IoKSk7Ci19Ci0KLVRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJl
cXVlc3RUZXh0dXJlRXhjZWVkaW5nUHJlZmVycmVkTGltaXQpCi17Ci0gICAgY29uc3Qgc2l6ZV90
IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0
OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOwotICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJl
c1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4
dHVyZUZvcm1hdCk7Ci0KLSAgICAvLyBTZXQgZGVjcmVhc2luZyBwcmlvcml0aWVzCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tp
XS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKLQotICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZh
aWxhYmxlLgotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFs
c2UpKTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNl
KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2Up
KTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkp
OwotICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUocHJlZmVycmVkVGV4dHVyZXMpLCB0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1RfTEUo
dGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlB
Ym92ZUN1dG9mZkJ5dGVzKCkpOwotCi0gICAgLy8gU2V0IGluY3JlYXNpbmcgcHJpb3JpdGllcwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKLSAgICAgICAgdGV4
dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBPbmx5IHVwcGVyIGhhbGYgc2hvdWxk
IGJlIGF2YWlsYWJsZS4KLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVz
WzBdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNb
M10sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRd
LCBmYWxzZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwg
ZmFsc2UpKTsKLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1
cmVzKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQ
RUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+
bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIC8vIE1ha2UgYWxsIHRleHR1cmVzIGlt
cG9ydGFudCAoYWJvdmUgbWF4LW1lbW9yeSBwcmlvcml0eSBjdXRvZmYpCi0gICAgdGV4dHVyZU1h
bmFnZXItPnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKENDUHJpb3JpdHlDYWxjdWxhdG9yOjps
b3dlc3RQcmlvcml0eSgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7Ci0KLSAgICAvLyBBbGwgdGV4dHVyZXMgc2hvdWxkIGJlIGF2YWlsYWJsZQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkgewotICAgICAgIEVYUEVDVF9UUlVF
KHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKLSAgICAgICBFWFBFQ1RfVFJV
RSh0ZXh0dXJlc1tpXS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwotICAgIH0KLQotICAgIEVYUEVD
VF9FUSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+bWVt
b3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1l
bW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkp
OwotCi0gICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKLX0K
LQotCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2Vl
ZGluZ01heExpbWl0KQogewogICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAg
Y29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4
dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOwog
CiAgICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBkb3VibGUgb3VyIG1lbW9yeSBsaW1pdC4KICAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzKjJdOwpA
QCAtMTgyLDI0ICs5NCwyMiBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1
ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1
cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7
CiAKICAgICAvLyBTZXQgZGVjcmVhc2luZyBwcmlvcml0aWVzCi0gICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXMqMjsgKytpKQogICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwogCiAgICAgLy8g
T25seSBsb3dlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCwgMCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBd
LCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwg
ZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzhdLCBm
YWxzZSkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMTVdLCBm
YWxzZSkpOwogCiAgICAgLy8gU2V0IGluY3JlYXNpbmcgcHJpb3JpdGllcwotICAgIHRleHR1cmVN
YW5hZ2VyLT5zZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzKjI7ICsr
aSkKICAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKIAog
ICAgIC8vIE9ubHkgdXBwZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDAsIDApOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbMF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0
dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVy
ZXNbOF0sIGZhbHNlKSk7CkBAIC0yMTQsMTIgKzEyNCw5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiBURVNUX0YoQ0NQ
cmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiB7CiAgICAgY29uc3Qg
c2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVy
ZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOwor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Y3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4
TWVtb3J5UHJpb3JpdHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5
KCkpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAg
ICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVy
ZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlczsgKytpKQpAQCAtMjI3LDcgKzEzNCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8g
OCB0ZXh0dXJlcwogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRl
eHR1cmVzTWVtb3J5U2l6ZSg4KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICB2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB0ZXh0dXJlTWFuYWdlci0+cmVk
dWNlTWVtb3J5KGFsbG9jYXRvcigpKTsKQEAgLTIzNyw3ICsxNDQsNyBAQCBURVNUX0YoQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAgICAvLyBTZXQgbWF4
IGxpbWl0IHRvIDUgdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGlt
aXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUoNSkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDAsIDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAg
ICAgICAgRVhQRUNUX0VRKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpLCBpIDwg
NSk7CiAgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeShhbGxvY2F0b3IoKSk7CkBAIC0y
NDcsNyArMTU0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVt
b3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA0IHRleHR1cmVzCiAgICAgdGV4
dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDQp
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDQpOwogICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnkoYWxsb2NhdG9yKCkpOwpAQCAtMjU4LDIzICsxNjUsMjIgQEAgVEVTVF9GKENDUHJp
b3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogICAgIHRleHR1cmVNYW5h
Z2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7CiB9CiAKLQogVEVTVF9GKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiB7
Ci0gICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJl
ZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVk
VGV4dHVyZXMpOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbcHJl
ZmVycmVkVGV4dHVyZXNdOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gbW9yZVRl
eHR1cmVzW3ByZWZlcnJlZFRleHR1cmVzXTsKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMg
PSA0OworICAgIGNvbnN0IHNpemVfdCBudW1UZXh0dXJlcyA9IDQ7CisgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1h
eFRleHR1cmVzKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW251
bVRleHR1cmVzXTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IG1vcmVUZXh0dXJl
c1tudW1UZXh0dXJlc107CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRl
eHR1cmVzOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyAr
K2kpIHsKICAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVy
ZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwogICAgICAgICBtb3JlVGV4dHVyZXNb
aV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1
cmVGb3JtYXQpOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVk
VGV4dHVyZXM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyAr
K2kpCiAgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMjAwICsgaSk7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0ZXh0dXJl
cyB3aGljaCBhcmUgY3VycmVudGx5IGhpZ2ggcHJpb3JpdHkuCiAgICAgRVhQRUNUX1RSVUUodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwpAQCAtMjg3LDkgKzE5Myw5IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0
ZVRleHR1cmVzKQogICAgIEVYUEVDVF9UUlVFKHRleHR1cmVzWzJdLT5oYXZlQmFja2luZ1RleHR1
cmUoKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZXNbM10tPmhhdmVCYWNraW5nVGV4dHVyZSgp
KTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsraSkK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAgIG1v
cmVUZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgLy8gVGV4dHVyZXMgYXJlIG5vdyBiZWxvdyBjdXRv
ZmYuCiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2Up
KTsKQEAgLTMyMSwxMiArMjI3LDkgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
dGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIHsKICAgICBj
b25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSAxNjsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVk
VGV4dHVyZXMgPSA4OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVy
ZXMpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7Ci0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAg
ICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJl
U2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKIApAQCAtMzM4LDcgKzI0MSw3IEBAIFRFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQog
CiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA4IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygwLCAwKTsKIAogICAgIC8vIFRoZSB0d28gaGlnaCBwcmlvcml0eSB0
ZXh0dXJlcyBzaG91bGQgYmUgYXZhaWxhYmxlLCBvdGhlcnMgc2hvdWxkIG5vdC4KICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKQEAgLTM2MiwxNCArMjY1LDE0IEBAIFRFU1RfRihD
Q1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFs
KQogCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlckRlc3Ry
b3llZEZpcnN0KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcigxLCAxKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIoMSk7CiAg
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlID0gdGV4dHVyZU1hbmFnZXIt
PmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKIAogICAgIC8v
IFRleHR1cmUgaXMgaW5pdGlhbGx5IGludmFsaWQsIGJ1dCBpdCB3aWxsIGJlY29tZSBhdmFpbGFi
bGUuCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAog
ICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKDAsIDApOwogCiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmUs
IGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0
dXJlKCkpOwpAQCAtMzg0LDE1ICsyODcsMTUgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdCwgdGV4dHVyZU1hbmFnZXJEZXN0cm95ZWRGaXJzdCkKIAogVEVTVF9GKENDUHJpb3JpdGl6
ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQogewotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyT25lID0gY3JlYXRlTWFu
YWdlcigxLCAxKTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlclR3byA9IGNyZWF0ZU1hbmFnZXIoMSwgMSk7CisgICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXJPbmUgPSBjcmVhdGVNYW5hZ2VyKDEp
OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
VHdvID0gY3JlYXRlTWFuYWdlcigxKTsKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+
IHRleHR1cmUgPSB0ZXh0dXJlTWFuYWdlck9uZS0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXpl
LCBtX3RleHR1cmVGb3JtYXQpOwogCiAgICAgLy8gVGV4dHVyZSBpcyBpbml0aWFsbHkgaW52YWxp
ZCwgYnV0IGl0IHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KICAgICBFWFBFQ1RfRkFMU0UodGV4dHVy
ZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAgICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9y
aXR5KDEwMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXJPbmUtPnByaW9yaXRpemVUZXh0dXJlcygpOwor
ICAgIHRleHR1cmVNYW5hZ2VyT25lLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICBF
WFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBFQ1Rf
VFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC00MDgsNyArMzEx
LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdN
YW5hZ2VyKQogCiAgICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXJU
d28uZ2V0KCkpOwogCi0gICAgdGV4dHVyZU1hbmFnZXJUd28tPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIHRleHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAg
ICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBF
Q1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC00MTYsNCAr
MzE5LDIwMCBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRU
b05ld01hbmFnZXIpCiAKICAgICB0ZXh0dXJlTWFuYWdlclR3by0+Y2xlYXJBbGxNZW1vcnkoYWxs
b2NhdG9yKCkpOwogfQorCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZW5kZXJT
dXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZU91dHNpZGVSb290U3VyZmFjZSkKK3sKKyAgICBj
b25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7
CisKKyAgICAvLyBIYWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFrZW4gYnkgbm9uLXJvb3Qgc3VyZmFj
ZXMuCisgICAgY29uc3Qgc2l6ZV90IHJvb3RSZW5kZXJTdXJmYWNlQnl0ZXMgPSAwOworICAgIGNv
bnN0IHNpemVfdCBjaGlsZFJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0ZXh0dXJlc01lbW9yeVNpemUo
NCk7CisKKyAgICAvLyBDcmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0Lgor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0
ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUs
IG1fdGV4dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQgZGVjcmVhc2luZyBub24tdmlzaWJsZSBw
cmlvcml0aWVzIG91dHNpZGUgcm9vdCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlv
cml0eSgxMDAgKyBpKTsKKworICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxh
YmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocm9vdFJlbmRlclN1
cmZhY2VCeXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzKTsKKyAgICBFWFBFQ1RfVFJVRSh2
YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CisgICAgRVhQRUNUX1RSVUUodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZhbHNlKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKKworICAgIC8vIFNldCBpbmNyZWFzaW5n
IG5vbi12aXNpYmxlIHByaW9yaXRpZXMgb3V0c2lkZSByb290IHN1cmZhY2UuCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXS0+
c2V0UmVxdWVzdFByaW9yaXR5KDEwMCAtIGkpOworCisgICAgLy8gT25seSB1cHBlciBoYWxmIHNo
b3VsZCBiZSBhdmFpbGFibGUuCisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cyhyb290UmVuZGVyU3VyZmFjZUJ5dGVzLCBjaGlsZFJlbmRlclN1cmZhY2VzQnl0ZXMpOworICAg
IEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CisgICAg
RVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKKyAgICBF
WFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZhbHNlKSk7CisgICAgRVhQ
RUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkpOworCisgICAgRVhQ
RUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4
dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSk7CisgICAgRVhQRUNU
X0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVt
b3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1l
bW9yeShhbGxvY2F0b3IoKSk7Cit9CisKK1RFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qs
IHJvb3RSZW5kZXJTdXJmYWNlUmVkdWNlc01lbW9yeUF2YWlsYWJsZSkKK3sKKyAgICBjb25zdCBz
aXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAg
ICAvLyBIYWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFrZW4gYnkgbm9uLXJvb3Qgc3VyZmFjZXMuCisg
ICAgY29uc3Qgc2l6ZV90IHJvb3RSZW5kZXJTdXJmYWNlQnl0ZXMgPSB0ZXh0dXJlc01lbW9yeVNp
emUoNCk7CisgICAgY29uc3Qgc2l6ZV90IGNoaWxkUmVuZGVyU3VyZmFjZXNCeXRlcyA9IDA7CisK
KyAgICAvLyBDcmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJl
c1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4
dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQgcHJpb3JpdHkgYXMgdmlzaWJsZSBpbiB0aGUgcm9v
dCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkK
KyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6dmlzaWJsZVByaW9yaXR5KHRydWUpKTsKKworICAgIC8vIE9ubHkgdGhlIGZpcnN0IGZv
dXIgcmVxdWVzdGVkIHNob3VsZCBiZSBhdmFpbGFibGUuCisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcyhyb290UmVuZGVyU3VyZmFjZUJ5dGVzLCBjaGlsZFJlbmRlclN1cmZh
Y2VzQnl0ZXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytp
KQorICAgICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxz
ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSArPSAyKQor
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIHRydWUpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgdHJ1ZSkpOworCisg
ICAgLy8gU2V0IGluY3JlYXNpbmcgbm9uLXZpc2libGUgcHJpb3JpdGllcyBvdXRzaWRlIHJvb3Qg
c3VyZmFjZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisg
ICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CisKKyAgICAv
LyBPbmx5IHVwcGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKHJvb3RSZW5kZXJTdXJmYWNlQnl0ZXMsIGNoaWxkUmVuZGVy
U3VyZmFjZXNCeXRlcyk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJl
c1swXSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVz
WzNdLCBmYWxzZSkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0
XSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10s
IGZhbHNlKSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJl
TWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4dHVy
ZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNC
eXRlcygpKTsKKyAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCks
IHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworCisgICAgdGV4dHVy
ZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKK30KKworVEVTVF9GKENDUHJp
b3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVG
b3JSZXF1ZXN0TGF0ZSkKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3Jl
YXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAgICAvLyBIYWxmIG9mIHRoZSBtZW1vcnkgaXMg
dGFrZW4gYnkgbm9uLXJvb3Qgc3VyZmFjZXMuCisgICAgY29uc3Qgc2l6ZV90IHJvb3RSZW5kZXJT
dXJmYWNlQnl0ZXMgPSAwOworICAgIGNvbnN0IHNpemVfdCBjaGlsZFJlbmRlclN1cmZhY2VzQnl0
ZXMgPSB0ZXh0dXJlc01lbW9yeVNpemUoNCk7CisKKyAgICAvLyBDcmVhdGUgdGV4dHVyZXMgdG8g
ZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4g
dGV4dHVyZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVh
dGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQg
ZXF1YWwgcHJpb3JpdGllcy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVz
OyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKKwor
ICAgIC8vIFRoZSBmaXJzdCBmb3VyIHRvIGJlIHJlcXVlc3RlZCBsYXRlIHdpbGwgYmUgYXZhaWxh
YmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocm9vdFJlbmRlclN1
cmZhY2VCeXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzW2ldLCB0cnVlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IG1heFRleHR1cmVzOyBpICs9IDIpCisgICAgICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbaV0sIHRydWUpKTsKKworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNp
emUoNCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworICAgIEVY
UEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlGb3JS
ZW5kZXJTdXJmYWNlc0J5dGVzKCkpOworICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVt
b3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7
CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOworfQor
CitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB3aGVuUm9vdFJlbmRlclN1cmZhY2VO
b3RBdmFpbGFibGVUZXh0dXJlc0Fsc29Ob3RBdmFpbGFibGUpCit7CisgICAgY29uc3Qgc2l6ZV90
IG1heFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworCisgICAgLy8g
SGFsZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5IG5vbi1yb290IHN1cmZhY2VzLgorICAgIGNv
bnN0IHNpemVfdCByb290UmVuZGVyU3VyZmFjZUJ5dGVzID0gdGV4dHVyZXNNZW1vcnlTaXplKDEw
KTsKKyAgICBjb25zdCBzaXplX3QgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzID0gMDsKKworICAg
IC8vIENyZWF0ZSB0ZXh0dXJlcyB0byBmaWxsIG91ciBtZW1vcnkgbGltaXQuCisgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVzW2ld
ID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJl
Rm9ybWF0KTsKKworICAgIC8vIFNldCB0ZXh0dXJlcyBhcyBoaWdoZXN0IHByaW9yaXR5LgorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVy
ZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6aGlnaGVzdFBy
aW9yaXR5KCkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcyhyb290
UmVuZGVyU3VyZmFjZUJ5dGVzLCBjaGlsZFJlbmRlclN1cmZhY2VzQnl0ZXMpOworCisgICAgLy8g
VW5hYmxlIHRvIHJlcXVlc3RMYXRlIGFueSB0ZXh0dXJlcy4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRl
eHR1cmUodGV4dHVyZXNbaV0sIHRydWUpKTsKKworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9y
eVNpemUoMCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworICAg
IEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoOCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlG
b3JSZW5kZXJTdXJmYWNlc0J5dGVzKCkpOworICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+
bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMo
KSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwor
fQorCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB3aGVuQ2hpbGRSZW5kZXJTdXJm
YWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90QXZhaWxhYmxlKQoreworICAgIGNvbnN0IHNp
emVfdCBtYXhUZXh0dXJlcyA9IDg7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzKTsKKworICAg
IC8vIEhhbGYgb2YgdGhlIG1lbW9yeSBpcyB0YWtlbiBieSBub24tcm9vdCBzdXJmYWNlcy4KKyAg
ICBjb25zdCBzaXplX3Qgcm9vdFJlbmRlclN1cmZhY2VCeXRlcyA9IDA7CisgICAgY29uc3Qgc2l6
ZV90IGNoaWxkUmVuZGVyU3VyZmFjZXNCeXRlcyA9IHRleHR1cmVzTWVtb3J5U2l6ZSg0KTsKKwor
ICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyB0byBmaWxsIG91ciBtZW1vcnkgbGltaXQuCisgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVz
W2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0
dXJlRm9ybWF0KTsKKworICAgIC8vIFNldCA2IHZpc2libGUgdGV4dHVyZXMgaW4gdGhlIHJvb3Qg
c3VyZmFjZSwgYW5kIDIgaW4gYSBjaGlsZCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgNjsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KEND
UHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxlUHJpb3JpdHkodHJ1ZSkpOworICAgIGZvciAoc2l6
ZV90IGkgPSA2OyBpIDwgODsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFBy
aW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxlUHJpb3JpdHkoZmFsc2UpKTsKKwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocm9vdFJlbmRlclN1cmZhY2VC
eXRlcywgY2hpbGRSZW5kZXJTdXJmYWNlc0J5dGVzKTsKKworICAgIC8vIFVuYWJsZSB0byByZXF1
ZXN0TGF0ZSB0ZXh0dXJlcyBpbiB0aGUgY2hpbGQgc3VyZmFjZS4KKyAgICBFWFBFQ1RfRkFMU0Uo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzZdLCB0cnVlKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgdHJ1ZSkpOworCisgICAgLy8gUm9vdCBzdXJmYWNl
IHRleHR1cmVzIGFyZSB2YWxpZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDY7ICsraSkK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSkp
OworCisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg2KSwgdGV4dHVyZU1hbmFnZXIt
Pm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5
U2l6ZSgyKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSk7
CisgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJl
TWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKworICAgIHRleHR1cmVNYW5hZ2Vy
LT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21t
b24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29t
bW9uLmNwcAppbmRleCAwY2Y2YjBhNzQ4NmM0M2QzMDc2NGNkNmFmMzVlN2E4ZDViNGEzN2ExLi41
NThjYmE1NzYwYTczMjU0ZDA3ZGY4ZjE4ZmM0N2U2ZmRhNGQzYWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAK
QEAgLTEyMSw2ICsxMjEsMjUgQEAgdm9pZCBGYWtlVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUo
Q0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgQ0NPY2NsdXNpb24KICAgICB1cGRhdGVM
YXllclJlY3QodXBkYXRlciwgdmlzaWJsZUxheWVyUmVjdCgpLCBvY2NsdXNpb24pOwogfQogCit2
b2lkIEZha2VUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IEND
UHJpb3JpdHlDYWxjdWxhdG9yJiBjYWxjdWxhdG9yKQoreworICAgIC8vIEVuc3VyZSB0aGVyZSBp
cyBhbHdheXMgYSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgYXZhaWxhYmxlLiBJZiBub25lIGhhcyBi
ZWVuCisgICAgLy8gc2V0ICh0aGUgbGF5ZXIgaXMgYW4gb3JwaGFuIGZvciB0aGUgdGVzdCksIHRo
ZW4ganVzdCBzZXQgYSBzdXJmYWNlIG9uIGl0c2VsZi4KKyAgICBib29sIG1pc3NpbmdUYXJnZXRS
ZW5kZXJTdXJmYWNlID0gIXRhcmdldFJlbmRlclN1cmZhY2UoKTsKKworICAgIGlmIChtaXNzaW5n
VGFyZ2V0UmVuZGVyU3VyZmFjZSkgeworICAgICAgICBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgICAgIHNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSgpKTsKKyAgICB9CisK
KyAgICBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNhbGN1bGF0b3Ip
OworCisgICAgaWYgKG1pc3NpbmdUYXJnZXRSZW5kZXJTdXJmYWNlKSB7CisgICAgICAgIGNsZWFy
UmVuZGVyU3VyZmFjZSgpOworICAgICAgICBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDApOworICAg
IH0KK30KKwogRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzOjpGYWtlVGlsZWRMYXllcldp
dGhTY2FsZWRCb3VuZHMoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdl
cikKICAgICA6IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21t
b24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1v
bi5oCmluZGV4IDAyMDBhMjM3ZTAxY2VjMzU4MTk3ZDk5ZGQzMjRhY2ViNTQ5MDc2NjYuLjM2OWJh
YzliZTkyNjE4MjNhY2Q3ZDE4YWQ1OTJjZTMwYzczNThiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0xMTcs
NyArMTE3LDYgQEAgcHVibGljOgogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6c2tpcHNEcmF3OwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVt
UGFpbnRlZFRpbGVzOwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRs
ZVBhaW50UmVjdDsKLSAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CiAgICAgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBsYXN0TmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdE5lZWRzRGlzcGxheVJlY3Q7IH0KQEAgLTEyNSw2ICsxMjQsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gVXBkYXRlcyB0aGUgdmlzaWJsZUxheWVyUmVjdCgpLgogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGUoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlciYsIGNvbnN0IFdlYkNvcmU6OkNDT2NjbHVzaW9u
VHJhY2tlciopIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmVQcmlvcml0
aWVzKGNvbnN0IFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yJikgT1ZFUlJJREU7CisKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1h
bmFnZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CiAgICAg
RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIqIGZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyByZXR1
cm4gbV9mYWtlVGV4dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
dXBkYXRlUmVjdCgpIHsgcmV0dXJuIG1fdXBkYXRlUmVjdDsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXgg
ODQ3NjIyNDc3OGFiMDBjZDE2NDkxMDUwZmFmNmRiNGY0YjIzOWIyOS4uMTk3ZmViNTQ4MGMwZGEz
N2YwM2JhMTkyM2E3MDliZDUzODZlZDcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05NCwxNyArOTQs
MTggQEAgcHVibGljOgogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRp
bGVzKQogewogICAgIENDUHJpb3JpdHlDYWxjdWxhdG9yIHByaW9yaXR5Q2FsY3VsYXRvcjsKLSAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAy
NCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBp
bnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVj
dCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5S
ZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsK
QEAgLTExNyw4ICsxMTgsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERp
cnR5VGlsZXMpCiAgICAgLy8gSW52YWxpZGF0ZXMgYm90aCB0aWxlcy4uLgogICAgIGxheWVyLT5p
bnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgLy8gLi4uLmJ1dCB0
aGVuIG9ubHkgdXBkYXRlIG9uZSBvZiB0aGVtLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKICAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogCkBAIC0xMzAsNyArMTMxLDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7CiAgICAgQ0NQcmlvcml0
eUNhbGN1bGF0b3IgcHJpb3JpdHlDYWxjdWxhdG9yOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMTQyLDgg
KzE0Myw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0
eVRpbGVzKQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJp
b3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDAsIDApOwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSwgJm9jY2x1ZGVkKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTc2
LDE3ICsxNzcsMTggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRl
ZERpcnR5VGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRl
ZFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwog
ICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBG
YWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4
MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAg
bGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwg
MjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICBsYXllci0+dXBkYXRl
TGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKICAgICB1cGRh
dGVUZXh0dXJlcygpOwpAQCAtMTk5LDcgKzIwMSw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9y
aXRpZXMoKTsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoJmFsbG9jYXRvcik7
CiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDQqMTAy
NCoxMDI0KTsKIAogICAgIC8vIFRoaXMgc2hvdWxkIGRyb3AgdGhlIHRpbGVzIG9uIHRoZSBpbXBs
IHRocmVhZC4KICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpA
QCAtMjA5LDggKzIxMCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVs
ZXRlZFRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7
CiAKICAgICAvLyBUaGlzIHNob3VsZCByZWNyZWF0ZSBhbmQgdXBkYXRlIHRoZSBkZWxldGVkIHRl
eHR1cmVzLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNh
bGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHBy
aW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApLCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNo
UHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC0yMjIsNyArMjIzLDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwog
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7
CkBAIC0yMzcsOCArMjM4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJ
ZGxlUGFpbnRUaWxlcykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVj
dCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVS
ZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKIAogICAgIGxheWVyLT51cGRhdGVM
YXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7
CkBAIC0yNTMsOCArMjU0LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJ
ZGxlUGFpbnRUaWxlcykKIAogICAgIC8vIEZvciB0aGUgbmV4dCBmb3VyIHVwZGF0ZXMsIHdlIHNo
b3VsZCBkZXRlY3Qgd2Ugc3RpbGwgbmVlZCBpZGxlIHBhaW50aW5nLgogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygwLCAwKTsKIAogICAgICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5l
ZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CkBAIC0yODEsNyArMjgyLDcgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIHsKICAgICAv
LyBTdGFydCB3aXRoIDJtYiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVzdCBpcyBnb2luZyB0byB0cnkg
dG8gdXNlIGp1c3QgbW9yZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNlIHRvIDFtYiBsYXRlci4KLSAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIqMTAyNCoxMDI0LCAyKjEwMjQqMTAy
NCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyKjEwMjQqMTAy
NCwgMTAyNCk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwxKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbCgwKSkpOwpAQCAtMzA1LDkgKzMwNiw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBsYXllcjEtPmludmFs
aWRhdGVSZWN0KGxheWVyUmVjdCk7CiAKICAgICAvLyBQYWludCBhIHNpbmdsZSB0aWxlIGluIGxh
eWVyMiBzbyB0aGF0IGl0IHdpbGwgaWRsZSBwYWludC4KLSAgICBsYXllcjItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5ZXIyUmVjdCk7Ci0gICAgbGF5
ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVy
UmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICBsYXll
cjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllcjEtPnVwZGF0ZUxh
eWVyUmVjdCh1cGRhdGVyLCBsYXllclJlY3QsIDApOwogICAgIGxheWVyMi0+dXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKIApAQCAtMzIxLDEyICsz
MjIsMTEgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRs
ZVBhaW50RmFpbGVkKQogCiAgICAgLy8gUmVkdWNlIG91ciBtZW1vcnkgbGltaXRzIHRvIDFtYi4K
ICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0ICogMTAyNCk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMTAyNCAq
IDEwMjQpOwogCiAgICAgLy8gTm93IGlkbGUgcGFpbnQgbGF5ZXIyLiBXZSBhcmUgZ29pbmcgdG8g
cnVuIG91dCBvZiBtZW1vcnkgdGhvdWdoIQotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRp
ZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllcjJSZWN0KTsKLSAgICBsYXllcjEtPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5ZXJSZWN0KTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVyMS0+c2V0
VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyMi0+dXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKICAgICBsYXllcjItPmlkbGVV
cGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5ZXIyUmVjdCwgMCk7CiAKQEAgLTM0NSw5ICszNDUs
OSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFp
bnRGYWlsZWQpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAyKSk7
CiAKICAgICAvLyBOb3cgaWYgbGF5ZXIyIGJlY29tZXMgZnVsbHkgdmlzaWJsZSwgd2Ugc2hvdWxk
IGJlIGFibGUgdG8gcGFpbnQgaXQgYW5kIHB1c2ggdmFsaWQgdGV4dHVyZXMuCi0gICAgbGF5ZXIy
LT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyMlJl
Y3QpOwotICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxj
dWxhdG9yLCBsYXllclJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRv
cik7CisgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3Ip
OworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5
ZXIyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5ZXIyUmVjdCwgMCk7CiAgICAgbGF5ZXIx
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5ZXJSZWN0LCAwKTsKIApAQCAtMzY1LDcgKzM2
NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQ
YWludEZhaWxlZCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFp
bnRlZE9jY2x1ZGVkVGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0zNzksOCArMzc5LDggQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGls
ZXMpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEw
MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7
CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0
eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwg
MCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMTAwKSwgJm9jY2x1ZGVkKTsKICAgICBsYXllci0+aWRsZVVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkKTsKICAgICB1cGRhdGVUZXh0
dXJlcygpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkKIHsKLSAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7
CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7
CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkp
KTsKQEAgLTQwMiwxMCArNDAyLDExIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBw
dXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogICAgIC8vIG5vdCBwcmV2ZW50IHRoZSB0
aWxlIGZyb20gYmVpbmcgcHVzaGVkLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAs
IDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAw
KSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZh
bGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwgNTApLCBsYXllci5nZXQoKSk7CiAKLSAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3Ip
OworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7
CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXll
ckltcGwuZ2V0KCkpOwpAQCAtNDE3LDcgKzQxOCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogCiBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25O
ZXh0TGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
cjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwpAQCAtNDI1
LDE0ICs0MjYsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xh
eWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpKTsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAg
ICBsYXllcjEtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwog
ICAgIGxheWVyMS0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCiAg
ICAgbGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyMi0+c2V0
VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXIyLT5p
bnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllcjEtPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJp
b3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9y
aXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0
aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygwLCAwKTsKIAogICAgIGxheWVyMS0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKIApAQCAtNDUzLDcgKzQ1Niw3IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFp
bnRPbk5leHRMYXllcikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxl
c0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXllcikKIHsKLSAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAy
NCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CkBAIC00NjgsOSArNDcxLDkgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWlu
dE9uUHJldmlvdXNMYXkKICAgICBsYXllcjItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyMi0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllcjIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICAvLyBJ
bnZhbGlkYXRlIGEgdGlsZSBvbiBsYXllcjIKICAgICBsYXllcjEtPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnNldFJlY3RUb0ludmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxh
eWVyMi5nZXQoKSk7CkBAIC00OTcsNyArNTAwLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIC8vIFdlIGhhdmUgZW5vdWdoIG1lbW9y
eSBmb3Igb25seSB0aGUgdmlzaWJsZSByZWN0LCBzbyB3ZSB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5
IGluIGZpcnN0IGlkbGUgcGFpbnQuCiAgICAgaW50IG1lbW9yeUxpbWl0ID0gNCAqIDEwMCAqIDEw
MDsgLy8gMSB0aWxlcywgNCBieXRlcyBwZXIgcGl4ZWwuCiAKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCwgMTAyNCk7CisgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgMTAyNCk7CiAgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTUw
Nyw4ICs1MTAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0
T2ZNZW1vcnkpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwog
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVj
dCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAKICAgICAvLyBJZGxlLXBhaW50aW5nIHNob3Vs
ZCBzZWUgbm8gbW9yZSBwcmlvcml0eSB0aWxlcyBmb3IgcGFpbnRpbmcuCkBAIC01MjAsOCArNTIz
LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5
KQogICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUuCiAgICAg
RVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMSkpOwogCi0gICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3Qp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJl
Y3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgIGxheWVyLT5pZGxlVXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKIApAQCAtNTMxLDcgKzUzNCw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKIAogVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogewotICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0KTsKKyAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0KTsKICAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNTQz
LDggKzU0Niw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJv
U2l6ZWRMYXllcikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7
CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsKIAogICAgIC8vIEVtcHR5IGxheWVycyBkb24n
dCBoYXZlIHRpbGVzLgpAQCAtNTcyLDcgKzU3NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZEFuaW1hdGluZ0xheWVyKQogewotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0KTsKKyAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNTg3LDggKzU5
MCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRB
bmltYXRpbmdMYXllcikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVj
dCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRS
ZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5
ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsKIAogICAgIC8vIEVtcHR5IGxheWVycyBk
b24ndCBoYXZlIHRpbGVzLgpAQCAtNjE5LDcgKzYyMiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIEludFNpemUgY29udGVu
dEJvdW5kcygxMDAsIDEwMCk7CiAgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBjb250ZW50Qm91bmRzKTsKIAotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoMjAwMDAsIDEwMDAwLCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDIwMDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOwpAQCAtNjMxLDggKzYzNCw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
Y29udGVudFJlY3QpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHBy
aW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAs
IDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDAp
OwogCiAgICAgLy8gTm9uLXZpc2libGUgbGF5ZXJzIGRvbid0IG5lZWQgaWRsZSBwYWludC4KQEAg
LTY2NCw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0SGF2ZU91dGVyVGlsZXMoRmFrZUNDVGls
ZWRMYXllckltcGwqIGxheWVySW1wbCwgaW50IHdpZHRoLCBpbnQgaAogCiBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVycykKIHsK
LSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCA4MDAwKjgw
MDAqNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4MDAwKjgw
MDAqOCwgMTAyNCk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAK
ICAgICBpbnQgdGlsZVdpZHRoID0gRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUoKS53
aWR0aCgpOwpAQCAtNjg4LDggKzY5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgICAgICAgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwogICAgICAgICAgICAgbGF5ZXItPmlu
dmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAg
ICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICAg
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAg
ICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAg
ICAgICAgICAvLyBJZiBpZGxlUGFpbnRSZWN0IGdpdmVzIGJhY2sgYSBub24tZW1wdHkgcmVzdWx0
IHRoZW4gd2Ugc2hvdWxkIHBhaW50IGl0LiBPdGhlcndpc2UsCiAgICAgICAgICAgICAvLyB3ZSBz
aG91ZCBwYWludCBub3RoaW5nLgpAQCAtNzA1LDE2ICs3MDgsMTYgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMpCiAgICAg
ICAgICAgICB0ZXN0SGF2ZU91dGVyVGlsZXMobGF5ZXJJbXBsLmdldCgpLCB3aWR0aFtpXSwgaGVp
Z2h0W2pdLCAwKTsKIAogICAgICAgICAgICAgLy8gU2V0IHByaW9yaXRpZXMgYW5kIHJlY3JlYXRl
IHRpbGVzLgotICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHBy
aW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgICAgICAgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgICAgICAgICAvLyBOb3JtYWxseSB3
ZSBkb24ndCBhbGxvdyBub24tdmlzaWJsZSBsYXllcnMgdG8gcHJlLXBhaW50LCBidXQgaWYgdGhl
eSBhcmUgYW5pbWF0aW5nIHRoZW4gd2Ugc2hvdWxkLgogICAgICAgICAgICAgRVhQRUNUX0VRKHNo
b3VsZFByZXBhaW50LCBsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKIAogICAg
ICAgICAgICAgLy8gSWYgdGhlIGxheWVyIGlzIHRvIGJlIHByZXBhaW50ZWQgYXQgYWxsLCB0aGVu
IGFmdGVyIGZvdXIgdXBkYXRlcyB3ZSBzaG91bGQgaGF2ZSB0aGUgb3V0ZXIgcm93L2NvbHVtbnMg
cGFpbnRlZC4KICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgKytrKSB7Ci0gICAg
ICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogCiAgICAgICAgICAgICAgICAgbGF5ZXIt
PnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAgICAgICAgICAgICAg
ICAgbGF5ZXItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwpA
QCAtNzI2LDggKzcyOSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFp
bnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3Vy
cmVudGx5IGlkbGUgcGFpbnQgcGFzdCB0aGUgb3V0ZXJtb3N0IHRpbGVzLgogICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOwogICAgICAg
ICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyArK2spIHsKLSAgICAgICAgICAgICAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxl
UmVjdCk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgICAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0
eUNhbGN1bGF0b3IpOworICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoMCwgMCk7CiAKICAgICAgICAgICAgICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICAgICAgICAgICAgICBsYXllci0+aWRsZVVw
ZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CkBAIC03NDEsNyArNzQ0LDcg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmlt
YXRpbmdMYXllcnMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRl
RnJvbVByZXBhcmUpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC03NTMsOSArNzU2LDEwIEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVByZXBhcmUpCiAKICAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4g
cGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDAp
KTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAw
KSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsK
LSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNh
bGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7
CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwg
MjAwKSwgMCk7CiAgICAgdXBkYXRlci51cGRhdGUoY2NDb250ZXh0LmdldCgpLCAmZmFrZUFsbG9j
YXRvciwgJmZha2VDb3BpZXIsICZmYWtlVXBsb2FkZXIsIDEwMDApOwogICAgIGxheWVyLT5wdXNo
UHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC03OTAsNyArNzk0LDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5k
c0FyZVNjYWxlZCkKICAgICAvLyBUaGUgdXBkYXRlUmVjdCAodGhhdCBpbmRpY2F0ZXMgd2hhdCB3
YXMgYWN0dWFsbHkgcGFpbnRlZCkgc2hvdWxkIGJlIGluCiAgICAgLy8gbGF5ZXIgc3BhY2UsIG5v
dCB0aGUgY29udGVudCBzcGFjZS4KIAotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJXaXRoU2NhbGVkQm91bmRzPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
cldpdGhTY2FsZWRCb3VuZHModGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIEludFJlY3Qg
bGF5ZXJCb3VuZHMoMCwgMCwgMzAwLCAyMDApOwpAQCAtODA0LDE1ICs4MDgsMTUgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5k
c0FyZVNjYWxlZCkKICAgICAvLyBIb3dldmVyLCBpdCBzaG91bGQgc3RpbGwgYmUgaW4gbGF5ZXIg
c3BhY2UsIG5vdCBjb250ZW50IHNwYWNlLgogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50Qm91bmRzKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlv
cml0eUNhbGN1bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAs
IDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgY29udGVudEJvdW5kcywg
MCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDMwMCwgMzAwICog
MC44KSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKIAogICAg
IC8vIEFmdGVyIHRoZSB0aWxlcyBhcmUgdXBkYXRlZCBvbmNlLCBhbm90aGVyIGludmFsaWRhdGUg
b25seSBuZWVkcyB0byB1cGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIuCi0gICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJv
dW5kcyk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPmludmFsaWRh
dGVSZWN0KGNvbnRlbnRCb3VuZHMpOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRl
ciwgY29udGVudEJvdW5kcywgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0
KGxheWVyQm91bmRzKSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CkBAIC04MjEsMjkgKzgyNSwzMCBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5Db250
ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIC8vIFBhcnRpYWwgcmUtcGFpbnQgc2hvdWxkIGFsc28g
YmUgcmVwcmVzZW50ZWQgYnkgdGhlIHVwZGF0ZVJlY3QgaW4gbGF5ZXIgc3BhY2UsIG5vdCBjb250
ZW50IHNwYWNlLgogICAgIEludFJlY3QgcGFydGlhbERhbWFnZSgzMCwgMTAwLCAxMCwgMTApOwog
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChwYXJ0aWFsRGFtYWdlKTsKLSAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50Qm91bmRz
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIGNvbnRlbnRCb3VuZHMsIDApOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCg0NSwgODAsIDE1LCA4KSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiB9CiAKIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVu
dHNTY2FsZUNoYW5nZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0
KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAgICAvLyBDcmVhdGUgYSBsYXll
ciB3aXRoIG9uZSB0aWxlLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDAp
KTsKIAogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllci4KICAgICBsYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAs
IDEwMCwgMTAwKSwgbGF5ZXItPmxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkpOwogCiAgICAgLy8gUHVz
aCB0aGUgdGlsZXMgdG8gdGhlIGltcGwgc2lkZSBhbmQgY2hlY2sgdGhhdCB0aGVyZSBpcyBleGFj
dGx5IG9uZS4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhw
cmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMTAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpAQCAtODU1LDExICs4NjAsMTIgQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50
c1NjYWxlQ2hhbmdlcykKICAgICAvLyBDaGFuZ2UgdGhlIGNvbnRlbnRzIHNjYWxlIGFuZCB2ZXJp
ZnkgdGhhdCB0aGUgY29udGVudCByZWN0YW5nbGUgcmVxdWlyaW5nIHBhaW50aW5nCiAgICAgLy8g
aXMgbm90IHNjYWxlZC4KICAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZSgyKTsKKyAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDIwMCwgMjAwKSk7CiAgICAgRVhQ
RUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXItPmxhc3RO
ZWVkc0Rpc3BsYXlSZWN0KCkpOwogCiAgICAgLy8gVGhlIGltcGwgc2lkZSBzaG91bGQgZ2V0IDJ4
MiB0aWxlcyBub3cuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVj
dCgwLCAwLCAyMDAsIDIwMCksIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXIt
PnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAgLTg3MSw5ICs4NzcsOSBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRl
bnRzU2NhbGVDaGFuZ2VzKQogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllciBhZ2Fp
biwgYnV0IGRvIG5vdCBwYWludC4gQWxsIHRpbGVzIHNob3VsZCBiZSBnb25lIG5vdyBmcm9tIHRo
ZQogICAgIC8vIGltcGwgc2lkZS4KICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50
UmVjdCgwLCAwLCAyMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhw
cmlvcml0eUNhbGN1bGF0b3IpOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwg
SW50UmVjdCgxLCAwLCAwLCAxKSwgMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7
CiAKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogICAgIEVY
UEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC04OTYsMTUgKzkwMiwx
NiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQog
CiAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IG9uZSBvZiB0aGUgdHdvIGxh
eWVycy4KICAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMzAwICogMzAwOyAvLyA0IGJ5dGVzIHBl
ciBwaXhlbC4KLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0
LCBtZW1vcnlMaW1pdCwgbWVtb3J5TGltaXQpOwogCi0gICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IHJvb3RMYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGNoaWxkTGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBy
b290TGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJl
ZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBjaGlsZExheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKICAgICBy
b290TGF5ZXItPmFkZENoaWxkKGNoaWxkTGF5ZXIpOwogCiAgICAgcm9vdExheWVyLT5zZXRCb3Vu
ZHMoY29udGVudEJvdW5kcyk7CisgICAgcm9vdExheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNv
bnRlbnRSZWN0KTsKICAgICByb290TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTUwLCAx
NTApKTsKICAgICBjaGlsZExheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgY2hp
bGRMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAgICAgY2hpbGRMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxNTAsIDE1MCkpOwogICAgIHJvb3RMYXllci0+aW52
YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogICAgIGNoaWxkTGF5ZXItPmludmFsaWRhdGVSZWN0
KGNvbnRlbnRSZWN0KTsKQEAgLTkxMiw5ICs5MTksNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dExheWVyKHJvb3RMYXllcik7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUo
SW50U2l6ZSgzMDAsIDMwMCkpOwogCi0gICAgY2hpbGRMYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgcm9vdExheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRS
ZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAgICAgY2NM
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgbWVtb3J5TGltaXQpOwogCiAgICAg
Ly8gV2UnbGwgc2tpcCB0aGUgcm9vdCBsYXllci4KQEAgLTkyNiwxNCArOTMwLDEwIEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgLy8gUmVt
b3ZlIHRoZSBjaGlsZCBsYXllci4KICAgICByb290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7
CiAKLSAgICAvLyBEcm9wIHRleHR1cmUgcHJpb3JpdGllcyBvbiB0aGUgY2hpbGQuCi0gICAgdGV4
dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotCi0gICAgcm9vdExheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAgICAgY2NMYXllclRyZWVI
b3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgbWVtb3J5TGltaXQpOwogICAgIEVYUEVDVF9GQUxT
RShyb290TGF5ZXItPnNraXBzRHJhdygpKTsKIAorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFsbE1lbW9yeSgmYWxsb2NhdG9yKTsKICAgICBjY0xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIo
KTsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CkBAIC05NDEsMTQgKzk0
MSwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0
KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcmVzaXplVG9TbWFsbGVyKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0LCA2MCoxMDI0
KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAy
NCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOwogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDcwMCwgNzAwKSk7CisgICAgbGF5
ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwogICAgIGxh
eWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7CiAKLSAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0
KDAsIDAsIDcwMCwgNzAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3Ip
OworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSwgMCk7
CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMjAwLCAyMDApKTsKQEAgLTk1NywxNiAr
OTU4LDE3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkK
IHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwgNjAq
MTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYw
KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKIAogICAgIGludCBzaXplID0gMSA8PCAzMDsKICAgICBsYXllci0+c2V0Qm91bmRz
KEludFNpemUoc2l6ZSwgc2l6ZSkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVj
dCgwLCAwLCBzaXplLCBzaXplKSk7CiAKICAgICAvLyBFbnN1cmUgbm8gY3Jhc2ggZm9yIGJvdW5k
cyB3aGVyZSBzaXplICogc2l6ZSB3b3VsZCBvdmVyZmxvdyBhbiBpbnQuCi0gICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAw
LCA3MDAsIDcwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
KyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51
cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA3MDAsIDcwMCksIDApOwogfQog
CkBAIC05ODIsNyArOTg0LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRp
YWxVcGRhdGVzKQogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9
IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBzZXR0
aW5ncyk7CiAgICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcklmTmVlZGVkKCkpOwogCi0gICAgLy8gQ3JlYXRlIG9uZSA1MDAgeCAzMDAgdGlsZWQg
bGF5ZXIuCisgICAgLy8gQ3JlYXRlIG9uZSAzMDAgeCAyMDAgdGlsZWQgbGF5ZXIgd2l0aCAzIHgg
MiB0aWxlcy4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAyMDApOwogICAgIEludFJl
Y3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CiAKQEAgLTEw
OTcsNyArMTA5OSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBk
YXRlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhv
dXRPY2NsdXNpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNv
IHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KQEAgLTExMDUsMTUg
KzExMDcsMTUgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdp
dGhvdXRPY2NsdXNpb24pCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJp
b3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogfQogCiBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKIHsKLSAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwg
MTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwg
MTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMTI2LDggKzExMjgsOCBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lv
bikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxh
eWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAs
IDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJp
b3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRS
ZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5
ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAg
LTExNjAsNyArMTE2Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1Bh
aW50ZWRXaXRoT2NjbHVzaW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGls
ZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogewotICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAx
MDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAx
MDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTExNzQsOCArMTE3Niw4IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9u
QW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdCgwLCAwLCA2MDAsIDM2MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRS
ZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJ
blJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzYwKSk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzYwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEo
MjQtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQo
KSk7CiAKQEAgLTExODksOCArMTE5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAg
b2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTUwKSk7CiAgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDM1MCkpOwogICAg
IGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVj
dCgwLCAwLCA2MDAsIDM1MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxh
eWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDM1MCksICZv
Y2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMjA0LDggKzEyMDYsOCBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZp
c2libGl0eUNvbnN0cmFpbnRzKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDIw
MCwgMjAwLCAzMDAsIDE1MCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoMCwgMCwgNjAwLCAzNDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgw
LCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwLCAwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIElu
dFJlY3QoMCwgMCwgNjAwLCAzNDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgyNC02LCBs
YXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApA
QCAtMTIxNyw3ICsxMjE5LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
UGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24p
CiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMiox
MDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTIyOSw4
ICsxMjMxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRl
ZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3Qo
MjAwLCAyMDAsIDMwMCwgMTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0
KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwg
SW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2LTMs
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwog
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CkBAIC0xMjUyLDcgKzEyNTQsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlvbikKIAog
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25B
bmRUcmFuc2Zvcm1zKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7
CiAKQEAgLTEyNjksOCArMTI3MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0
aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNmb3JtcykKICAgICBvY2NsdWRlZC5zZXRP
Y2NsdXNpb24oSW50UmVjdCgxMDAsIDEwMCwgMTUwLCA1MCkpOwogICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7CiAgICAg
bGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0
KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3Ip
OworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCwgMCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9j
Y2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTEyODEsNyArMTI4Myw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJh
bnNmb3JtcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdp
dGhPY2NsdXNpb25BbmRTY2FsaW5nKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIg
b2NjbHVkZWQ7CiAKQEAgLTEyOTcsOCArMTI5OSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2NsdWRl
ZC5zZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAxMDApKTsKICAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkp
OwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0g
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwg
SW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwog
ICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCksICZvY2NsdWRlZCk7CiAgICAgLy8gVGhlIGNvbnRlbnQgaXMgaGFsZiB0aGUgc2l6ZSBvZiB0
aGUgbGF5ZXIgKHNvIHRoZSBudW1iZXIgb2YgdGlsZXMgaXMgZmV3ZXIpLgogICAgIC8vIEluIHRo
aXMgY2FzZSwgdGhlIGNvbnRlbnQgaXMgMzAweDMwMCwgYW5kIHNpbmNlIHRoZSB0aWxlIHNpemUg
aXMgMTAwLCB0aGUKQEAgLTEzMTcsOCArMTMxOSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2NsdWRl
ZC5zZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAyMDApKTsKICAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkp
OwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0g
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwg
SW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAsIDApOwog
ICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTEzMzcsOCArMTMzOSw4IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9u
QW5kU2NhbGluZykKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgxMDAsIDEwMCwg
MTUwLCAxMDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBv
aW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRS
ZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5S
ZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDAsIDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRl
ciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDkt
MSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7
CiAKQEAgLTEzNDksNyArMTM1MSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0
aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKIAogVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogewotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsK
KyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsK
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTEzNjYsOCArMTM2OCw4IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAg
ICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkoMSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
KHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwLCAwKTsKIAogICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IHBhaW50IG9wYXF1ZSBj
b250ZW50LCB0aGVuIHRoZSB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbiBzaG91bGQgYmUgZW1w
dHkuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50
UmVjdChJbnRSZWN0KCkpOwpAQCAtMTQ1MCw3ICsxNDUyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogCiBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwog
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdEND
T2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTQ2Nyw4ICsxNDY5LDggQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVCb3VuZHMpOwogICAgIGxheWVyLT5zZXREcmF3
T3BhY2l0eSgxKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlv
cml0eUNhbGN1bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAs
IDApOwogCiAgICAgLy8gSW52YWxpZGF0ZXMgYW5kIHBhaW50cyB0aGUgd2hvbGUgbGF5ZXIuCiAg
ICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJ
bnRSZWN0KCkpOwpAQCAtMTUwMSw2ICsxNTAzLDE2MCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiAgICAgRVhQRUNUX0VRKDAsIG9jY2x1ZGVk
Lm92ZXJkcmF3TWV0cmljcygpLnRpbGVzQ3VsbGVkRm9yVXBsb2FkKCkpOwogfQogCitURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVuVGFyZ2V0U3Vy
ZmFjZUNhbnRCZUFsbG9jYXRlZCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFk
aW5nIHN1cHBvcnQuCisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwor
CisgICAgLy8gVGlsZSBzaXplIGlzIDEwMHgxMDAuCisgICAgSW50UmVjdCByb290UmVjdCgwLCAw
LCAzMDAsIDIwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMCwgMCwgMzAwLCAxMDApOworICAg
IEludFJlY3QgY2hpbGQyUmVjdCgwLCAxMDAsIDMwMCwgMTAwKTsKKworICAgIENDTGF5ZXJUcmVl
U2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NM
YXllclRyZWVIb3N0Q2xpZW50OworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJU
cmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xp
ZW50LCBzZXR0aW5ncyk7CisgICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVIb3N0LT5pbml0aWFs
aXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkpOworCisgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IHJvb3QgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xh
eWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBzdXJmYWNlID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGNoaWxkID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsK
KyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkpKTsKKworICAgIHJvb3QtPnNldEJvdW5kcyhyb290UmVjdC5zaXplKCkpOworICAg
IHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7CisgICAgcm9vdC0+c2V0VmlzaWJs
ZUxheWVyUmVjdChyb290UmVjdCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoc3VyZmFjZSk7CisKKyAg
ICBzdXJmYWNlLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisgICAgc3VyZmFjZS0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKKyAgICBzdXJmYWNlLT5zZXRPcGFjaXR5KDAuNSk7
CisgICAgc3VyZmFjZS0+YWRkQ2hpbGQoY2hpbGQpOworICAgIHN1cmZhY2UtPmFkZENoaWxkKGNo
aWxkMik7CisKKyAgICBjaGlsZC0+c2V0Qm91bmRzKGNoaWxkUmVjdC5zaXplKCkpOworICAgIGNo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlv
bihjaGlsZFJlY3QubG9jYXRpb24oKSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3Qo
Y2hpbGRSZWN0KTsKKworICAgIGNoaWxkMi0+c2V0Qm91bmRzKGNoaWxkMlJlY3Quc2l6ZSgpKTsK
KyAgICBjaGlsZDItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7CisgICAgY2hpbGQyLT5z
ZXRQb3NpdGlvbihjaGlsZDJSZWN0LmxvY2F0aW9uKCkpOworICAgIGNoaWxkMi0+c2V0VmlzaWJs
ZUxheWVyUmVjdChjaGlsZDJSZWN0KTsKKworICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExh
eWVyKHJvb3QpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RSZWN0
LnNpemUoKSk7CisKKyAgICAvLyBXaXRoIGEgaHVnZSBtZW1vcnkgbGltaXQsIGFsbCBsYXllcnMg
c2hvdWxkIHVwZGF0ZSBhbmQgcHVzaCB0aGVpciB0ZXh0dXJlcy4KKyAgICByb290LT5pbnZhbGlk
YXRlUmVjdChyb290UmVjdCk7CisgICAgY2hpbGQtPmludmFsaWRhdGVSZWN0KGNoaWxkUmVjdCk7
CisgICAgY2hpbGQyLT5pbnZhbGlkYXRlUmVjdChjaGlsZDJSZWN0KTsKKyAgICBjY0xheWVyVHJl
ZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpKTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOworICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICAgICAgRVhQRUNUX0VRKDYs
IHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMywgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNv
dW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMywgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFz
TW9yZVVwZGF0ZXMoKSk7CisKKyAgICAgICAgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGlsZDItPmZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKworICAgICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbChyb290LT5pZCgpKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkp
KSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5pZCgpKSkpOworICAgICAgICBy
b290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQtPnB1
c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQyLT5wdXNoUHJv
cGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAy
OyArK2opCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocm9vdEltcGwtPmhhc1RleHR1cmVJ
ZEZvclRpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjaGlsZEltcGwtPmhh
c1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjaGls
ZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAgICB9CisgICAgfQor
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgIC8vIFdpdGggYSBt
ZW1vcnkgbGltaXQgdGhhdCBpbmNsdWRlcyBvbmx5IHRoZSByb290IGxheWVyICgzeDIgdGlsZXMp
IGFuZCBoYWxmIHRoZSBzdXJmYWNlIHRoYXQKKyAgICAvLyB0aGUgY2hpbGQgbGF5ZXJzIGRyYXcg
aW50bywgdGhlIGNoaWxkIGxheWVycyB3aWxsIG5vdCBiZSBhbGxvY2F0ZWQuIElmIHRoZSBzdXJm
YWNlIGlzbid0CisgICAgLy8gYWNjb3VudGVkIGZvciwgdGhlbiBvbmUgb2YgdGhlIGNoaWxkcmVu
IHdvdWxkIGZpdCB3aXRoaW4gdGhlIG1lbW9yeSBsaW1pdC4KKyAgICByb290LT5pbnZhbGlkYXRl
UmVjdChyb290UmVjdCk7CisgICAgY2hpbGQtPmludmFsaWRhdGVSZWN0KGNoaWxkUmVjdCk7Cisg
ICAgY2hpbGQyLT5pbnZhbGlkYXRlUmVjdChjaGlsZDJSZWN0KTsKKyAgICBjY0xheWVyVHJlZUhv
c3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCAoMyAqIDIgKyAzICogMSkgKiAoMTAwICogMTAwKSAq
IDQpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CisgICAgICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOworICAgICAgICBFWFBFQ1RfRVEoNiwgcm9v
dC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodXBkYXRlci5oYXNNb3Jl
VXBkYXRlcygpKTsKKworICAgICAgICByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5j
bGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworCisgICAgICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KHJvb3QtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hp
bGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZC0+aWQoKSkpKTsK
KyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7CisgICAgICAgIHJvb3Qt
PnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZC0+cHVzaFBy
b3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZDItPnB1c2hQcm9wZXJ0
aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDM7ICsraSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsr
aikKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShyb290SW1wbC0+aGFzVGV4dHVyZUlkRm9y
VGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZEltcGwtPmhhc1Rl
eHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQy
SW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAvLyBXaXRoIGEgbWVt
b3J5IGxpbWl0IHRoYXQgaW5jbHVkZXMgb25seSBoYWxmIHRoZSByb290IGxheWVyLCBubyBjb250
ZW50cyB3aWxsIGJlCisgICAgLy8gYWxsb2NhdGVkLiBJZiByZW5kZXIgc3VyZmFjZSBtZW1vcnkg
d2Fzbid0IGFjY291bnRlZCBmb3IsIHRoZXJlIGlzIGVub3VnaCBzcGFjZQorICAgIC8vIGZvciBv
bmUgb2YgdGhlIGNoaWxkcmVuIGxheWVycywgYnV0IHRoZXkgZHJhdyBpbnRvIGEgc3VyZmFjZSB0
aGF0IGNhbid0IGJlCisgICAgLy8gYWxsb2NhdGVkLgorICAgIHJvb3QtPmludmFsaWRhdGVSZWN0
KHJvb3RSZWN0KTsKKyAgICBjaGlsZC0+aW52YWxpZGF0ZVJlY3QoY2hpbGRSZWN0KTsKKyAgICBj
aGlsZDItPmludmFsaWRhdGVSZWN0KGNoaWxkMlJlY3QpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+
dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsICgzICogMSkgKiAoMTAwICogMTAwKSAqIDQpOworICAgIHsK
KyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIHVw
ZGF0ZVRleHR1cmVzKDEwMDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgcm9vdC0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBj
aGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgwLCBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNv
dW50KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsK
KworICAgICAgICByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNv
dW50KCk7CisgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVw
ZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
Y2xlYXJVcGRhdGVDb3VudCgpOworCisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkp
KSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZC0+aWQoKSkpKTsKKyAgICAgICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7CisgICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0
aWVzVG8ocm9vdEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhj
aGlsZEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZDItPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQy
SW1wbC5nZXQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKKyAgICAgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0Uocm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBq
KSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JU
aWxlQXQoaSwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMkltcGwtPmhhc1Rl
eHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2NMYXllclRy
ZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgY2NMYXllclRyZWVIb3N0LT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KCZhbGxvY2F0b3IpOworICAgIGNjTGF5
ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOworICAgIGNjTGF5ZXJUcmVlSG9zdC5jbGVhcigp
OworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKwogY2xhc3MgVHJh
Y2tpbmdMYXllclBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNraW5nTGF5ZXJQYWludGVyPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgVHJhY2tpbmdMYXllclBhaW50ZXIoKSk7IH0KQEAgLTE1NDIs
NyArMTY5OCw3IEBAIHByaXZhdGU6CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBu
b25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiB7Ci0gICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCwgNDAwMDAwMCkp
OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
KENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDApKTsK
ICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9yOwogCiAgICAgUmVmUHRyPFVwZGF0
ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVU
cmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwpAQCAtMTU1
Nyw2ICsxNzEzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJD
b250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQYWludCkKICAgICBsYXllci0+c2V0Vmlz
aWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXMoY2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwLCAwKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgd2hvbGUgdGlsZS4KICAgICBsYXllci0+dXBk
YXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsKQEAgLTE1NzUsNyArMTczMiw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2Fs
ZUlzTm90RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpZGF0
aW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAw
MDAsIDQwMDAwMDApKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlcihDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAw
LCA0MDAwMDAwKSk7CiAgICAgQ0NQcmlvcml0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKIAogICAg
IFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKQEAgLTE1ODksNiArMTc0Niw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpCiAgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoY29udGVudFJlY3QpOwogCiAgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzKGNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCwgMCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHdob2xlIHRpbGUuCiAg
ICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBjb250ZW50UmVjdCwgMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150246</attachid>
            <date>2012-06-29 13:25:18 -0700</date>
            <delta_ts>2012-07-04 07:52:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120629162518.patch</filename>
            <type>text/plain</type>
            <size>111957</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJhNDVlODU2YjkzYzZh
YzVjOTk2MTZiMjcyOTY2OTUwODY3MGVmNy4uM2EwYTc5YzFjYmFhZTg0NGJjYjE2ZWQyZWQxYzM4
M2IzOTgxMzEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA2LTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBTaW5j
ZSBzdXJmYWNlIG1lbW9yeSBjYW4gbm8gbG9uZ2VyIGJlIHRha2VuIGJ5IGNvbnRlbnRzLCB3ZSBy
ZW1vdmUgdGhlCisgICAgICAgIHByZWZlcnJlZCBtZW1vcnkgbGltaXQgZnJvbSB0aGUgdGV4dHVy
ZSBtYW5hZ2VyLgorCisgICAgICAgIFRlc3RzOiBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmRvbnRB
bGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2F0ZWQKKyAgICAgICAg
ICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5yZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9y
eUF2YWlsYWJsZU91dHNpZGVSb290U3VyZmFjZQorICAgICAgICAgICAgICAgQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LnJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVz
dExhdGUKKyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC53aGVuUmVuZGVy
U3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZQorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojpwcmlvcml0aXplVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDT3ZlcmRyYXdNZXRyaWNzOjpDQ092ZXJkcmF3TWV0cmljcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6ZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oOgorICAg
ICAgICAoQ0NPdmVyZHJhd01ldHJpY3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnBy
aW9yaXRpemVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OnJlcXVlc3RMYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjptZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKToKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNh
bGN1bGF0b3I6OnVpUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1
bGF0b3I6OnZpc2libGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJpb3JpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21W
aXNpYmlsaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXR5Q2FsY3VsYXRvci5oOgorICAgICAgICAoQ0NQcmlvcml0eUNhbGN1bGF0b3IpOgorCiAy
MDEyLTA2LTI5ICBFcmljIFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBb
Y2hyb21pdW1dIEFkZGluZyBQcmlvcml0aXplZFRleHR1cmUgYW5kIHJlcGxhY2luZyBDb250ZW50
c1RleHR1cmVNYW5hZ2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZlYTllOTNjYTRm
NDI2YzRhOTI3NjEwMjM4YzkwNmNmZmQ2N2I0YjguLjFjNTk0ZDJmZDY0MjVhMTM3NThkNmViZDdj
ODFjNDYzZjQzODk3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDYtMjkgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBSZXNwZWN0IG1lbW9yeSBuZWVkZWQgZm9yIFJlbmRlclN1cmZhY2Vz
IHdoZW4gcmVzZXJ2aW5nIGNvbnRlbnRzIHRleHR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTkwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0
LmNwcDoKKyAgICAgICAgKFdURjo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0OjpjcmVhdGVNYW5h
Z2VyKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURik6CisgICAgICAgICog
dGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMpOgorICAgICAgICAo
V2ViS2l0VGVzdHMpOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaDoK
KyAgICAgICAgKEZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHRlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA2LTI5ICBFcmljIFBlbm5lciAgPGVwZW5u
ZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZGluZyBQcmlvcml0aXplZFRl
eHR1cmUgYW5kIHJlcGxhY2luZyBDb250ZW50c1RleHR1cmVNYW5hZ2VyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA0NmM5YjM2MjE1YTczNTkwNDgyNWY5ZjY0MjQ4
YzhkZmEyMTk4NDE1Li4yMGJmMTA0OWI3MDAwMzZhOTA1NzVjYmFmOWYwOWYyZWFkMDg4YzFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUwMSw2ICs1MDEsOCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0
IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdQogICAgIC8vCiAgICAgLy8gUGl4ZWwgY29waWVzIGlu
IHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFuZCA1LgogCisgICAgLy8g
RklYTUU6IFdoZW4gdGhpcyBhbGdvcml0aG0gY2hhbmdlcywgdXBkYXRlIENDTGF5ZXJUcmVlSG9z
dDo6cHJpb3JpdGl6ZVRleHR1cmVzKCkgYWNjb3JkaW5nbHkuCisKICAgICBDQ1JlbmRlclN1cmZh
Y2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCk7
CiAgICAgaWYgKHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAppbmRleCA1MTc2MTQ1
M2Q4MzNhZjY1ODEyNjJmZmI2YmEzM2FlZjg3NzYxMDU0Li5iMWU0YmNjYWIxNTRmODViMDExOWUz
OTNjOWE1Y2Q1OWZhY2MyNjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIK
IAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5o
IgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDBlN2Q0ZTM4YzU2YzFlY2NkOTZmNWNiYWZk
NzRmOWRlNWYzZDg3ZDkuLjA1MDRmMzU3ZmY2YjdiMjg3NTg5NWFhNzk5N2FiNmEzYWFkNDg2NDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0zMCw2ICszMCw3IEBACiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxwdWJsaWMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggYTkxNzI3MjAxZjMyYTY0NTZhMDQ4ZTRjZDAzMDdjOTUwMTVlOTYyNi4u
OTM5YWQ0MmRkNTAxOTM4ZmQ0Y2Q0OTgzNTA1MzUzMzBjM2Q1Mzg2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI1OCwxOCArMjU4LDE5IEBAIHZvaWQgU2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0
eUNhbGN1bGF0b3ImKQogCiAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOwogCisg
ICAgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UgPSAhdGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCk7CiAgICAgaWYgKG1fYmFja1RyYWNrKSB7CiAgICAgICAgIG1fYmFj
a1RyYWNrLT50ZXh0dXJlKCktPnNldERpbWVuc2lvbnMoY29udGVudEJvdW5kcygpLCBtX3RleHR1
cmVGb3JtYXQpOwotICAgICAgICBtX2JhY2tUcmFjay0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJp
b3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoKSk7CisgICAgICAgIG1fYmFj
a1RyYWNrLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRv
cjo6dWlQcmlvcml0eShkcmF3c1RvUm9vdFN1cmZhY2UpKTsKICAgICB9CiAgICAgaWYgKG1fZm9y
ZVRyYWNrKSB7CiAgICAgICAgIG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPnNldERpbWVuc2lvbnMo
Y29udGVudEJvdW5kcygpLCBtX3RleHR1cmVGb3JtYXQpOwotICAgICAgICBtX2ZvcmVUcmFjay0+
dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJp
b3JpdHkoKSk7CisgICAgICAgIG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlv
cml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eShkcmF3c1RvUm9vdFN1cmZhY2Up
KTsKICAgICB9CiAgICAgaWYgKG1fdGh1bWIpIHsKICAgICAgICAgSW50U2l6ZSB0aHVtYlNpemUg
PSB0aGVtZSgpLT50aHVtYlJlY3QobV9zY3JvbGxiYXIuZ2V0KCkpLnNpemUoKTsKICAgICAgICAg
bV90aHVtYi0+dGV4dHVyZSgpLT5zZXREaW1lbnNpb25zKHRodW1iU2l6ZSwgbV90ZXh0dXJlRm9y
bWF0KTsKLSAgICAgICAgbV90aHVtYi0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQ
cmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoKSk7CisgICAgICAgIG1fdGh1bWItPnRleHR1
cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5
KGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggYWIyZjViZWNjNTI0MjU5ZDdjMGI5OTIxYTEyYTRhNWIyNzZiZDNlYS4u
NjVjZWFjODJhNDJhYmQ3ZTNjOWZhYjExMTczOGYxNjg1MGNiZTg1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwCkBAIC01MjMsNiArNTIzLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxh
dG9yJgogICAgIHJlc2V0VXBkYXRlU3RhdGUoKTsKIAogICAgIEludFJlY3QgcHJlcGFpbnRSZWN0
ID0gaWRsZVBhaW50UmVjdCh2aXNpYmxlUmVjdCk7CisgICAgYm9vbCBkcmF3c1RvUm9vdFN1cmZh
Y2UgPSAhdGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CiAKICAg
ICAvLyBNaW5pbWFsbHkgY3JlYXRlIHRoZSB0aWxlcyBpbiB0aGUgZGVzaXJlZCBwcmUtcGFpbnQg
cmVjdC4KICAgICBpZiAoIXByZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKQEAgLTU1OCw3ICs1NTks
NyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3Qo
Y29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAKICAgICAgICAgICAgICAgICB0aWxlLT5kaXJ0
eVJlY3QgPSBtX3RpbGVyLT50aWxlUmVjdCh0aWxlKTsKICAgICAgICAgICAgICAgICBMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBiYWNrQnVmZmVyID0gdGlsZS0+dGV4dHVyZSgpOwotICAg
ICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KHBy
aW9yaXR5Q2FsYy5wcmlvcml0eUZyb21WaXNpYmlsaXR5KHRydWUpKTsKKyAgICAgICAgICAgICAg
ICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUNhbGMu
cHJpb3JpdHlGcm9tVmlzaWJpbGl0eSh0cnVlLCBkcmF3c1RvUm9vdFN1cmZhY2UpKTsKICAgICAg
ICAgICAgICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IGZyb250QnVmZmVyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmU6OmNyZWF0ZShiYWNrQnVmZmVyLT50ZXh0dXJlKCktPnRleHR1cmVN
YW5hZ2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+dGV4
dHVyZSgpLT5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja0J1ZmZl
ci0+dGV4dHVyZSgpLT5mb3JtYXQoKSk7CkBAIC01NzgsOSArNTc5LDkgQEAgdm9pZCBUaWxlZExh
eWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3JpdHlD
YWxjdWxhdG9yJgogICAgICAgICAvLyA1MTIgcGl4ZWxzIG9mIHByZS1wYWludGluZy4gTGF0ZXIg
d2UgY2FuIGp1c3QgcGFzcyBhbiBhbmltYXRpbmcgZmxhZyBldGMuIHRvIHRoZQogICAgICAgICAv
LyBjYWxjdWxhdG9yIGFuZCBpdCBjYW4gdGFrZSBjYXJlIG9mIHRoaXMgc3BlY2lhbCBjYXNlIGlm
IHdlIHN0aWxsIG5lZWQgaXQuCiAgICAgICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkgJiYg
IXByZXBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0aWxlLT5tYW5hZ2VkVGV4dHVy
ZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbURpc3RhbmNl
KDUxMikpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+c2V0UmVxdWVzdFBy
aW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSg1MTIsIGRyYXdzVG9Sb290
U3VyZmFjZSkpOwogICAgICAgICBlbHNlIGlmICghdmlzaWJsZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9y
aXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSh2aXNpYmxlUmVjdCwgdGlsZVJlY3QpKTsKKyAg
ICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlv
cml0eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UodmlzaWJsZVJlY3QsIHRpbGVSZWN0LCBkcmF3
c1RvUm9vdFN1cmZhY2UpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgK
aW5kZXggZTNjYjczZmFiZGNjZGJhMWY2NTMxNzEzNzNkZTJhYmU1ZmI5Y2FhNS4uY2RlNTUyYzA5
ZTI5ZTIyNmQwNGQ1ZmYxZGM5ZTI2ODkwOWM1YWY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmgKQEAgLTgyLDggKzgyLDYgQEAgcHJvdGVjdGVkOgogICAgIC8vIFJlc2V0IHN0YXRlIG9u
IHRpbGVzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB1cGRhdGluZyB0aGUgbGF5ZXIuCiAgICAgdm9p
ZCByZXNldFVwZGF0ZVN0YXRlKCk7CiAKLSAgICB2b2lkIHNldFRleHR1cmVQcmlvcml0aWVzSW5S
ZWN0KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxh
eWVyUmVjdCk7Ci0KICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVwZGF0ZSB0ZXh0dXJl
cyB0aGF0IGludGVyc2VjdCB3aXRoIGxheWVyUmVjdC4KICAgICB2b2lkIHVwZGF0ZUxheWVyUmVj
dChDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBDQ09j
Y2x1c2lvblRyYWNrZXIqKTsKIApAQCAtMTA5LDYgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCB0aWxlT25seU5lZWRzUGFydGlhbFVwZGF0ZShVcGRhdGFibGVUaWxlKik7CiAgICAgYm9vbCB0
aWxlTmVlZHNCdWZmZXJlZFVwZGF0ZShVcGRhdGFibGVUaWxlKik7CiAKKyAgICB2b2lkIHNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCk7CisKICAgICB2b2lkIHVwZGF0ZVRpbGVzKGJvb2wg
aWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwgQ0NUZXh0dXJl
VXBkYXRlciYsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciopOwogCiAgICAgVXBkYXRhYmxlVGls
ZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CmluZGV4IGY5ODJiNWJiN2VlNTk2N2M0NDY4MjUwNDQxYTI0Y2Q1ZGUxY2Y2MWYuLjljNjA2NWIy
OTgxNjQ3NWJmNjY1MTg5MmI2ZjU4YzExZjdiZjk2MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojppbml0
aWFsaXplTGF5ZXJSZW5kZXJlcigpCiAgICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQgb24g
cGFydGlhbCB1cGRhdGUgY2FwYWJpbGl0eS4KICAgICBtX3NldHRpbmdzLm1heFBhcnRpYWxUZXh0
dXJlVXBkYXRlcyA9IG1pbihtX3NldHRpbmdzLm1heFBhcnRpYWxUZXh0dXJlVXBkYXRlcywgbV9w
cm94eS0+bWF4UGFydGlhbFRleHR1cmVVcGRhdGVzKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMCwgMCwgbV9w
cm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSgwLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNp
emUpOwogCiAgICAgbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQgPSB0cnVlOwogCkBAIC00NDAs
MTAgKzQ0MCwxMCBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJJZk5lZWRlZCgpCiB9CiAKIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhD
Q1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyLCBzaXplX3QgY29udGVudHNNZW1vcnlMaW1pdEJ5dGVz
KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiB1
cGRhdGVyLCBzaXplX3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMpCiB7CiAgICAgQVNTRVJU
KG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkKTsKLSAgICBBU1NFUlQoY29udGVudHNNZW1vcnlM
aW1pdEJ5dGVzKTsKKyAgICBBU1NFUlQobWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMpOwogCiAg
ICAgaWYgKCFyb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDUxLDcgKzQ1MSw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBk
YXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtCiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRN
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpOworICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1vcnlB
bGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICB1cGRhdGVMYXllcnMocm9vdExheWVyKCksIHVw
ZGF0ZXIpOwogfQpAQCAtNTIyLDcgKzUyMiwyNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cHJp
b3JpdGl6ZVRleHR1cmVzKGNvbnN0IExheWVyTGlzdCYgdXBkYXRlTGlzdCkKICAgICAgICAgfQog
ICAgIH0KIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgc2l6ZV90IHJlYWRiYWNrQnl0ZXM7CisgICAgc2l6ZV90IG1heEJhY2tncm91bmRU
ZXh0dXJlQnl0ZXM7CisgICAgc2l6ZV90IGNvbnRlbnRzVGV4dHVyZUJ5dGVzOworICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwgdXBkYXRlTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBMYXll
ckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSB1cGRhdGVMaXN0W2ldLmdldCgpOworICAg
ICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNl
TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICBzaXplX3QgYnl0ZXMgPSBUZXh0dXJl
TWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMocmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5zaXpl
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgY29udGVudHNUZXh0dXJlQnl0
ZXMgKz0gYnl0ZXM7CisKKyAgICAgICAgaWYgKHJlbmRlclN1cmZhY2UtPmJhY2tncm91bmRGaWx0
ZXJzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJ5
dGVzID4gbWF4QmFja2dyb3VuZFRleHR1cmVCeXRlcykKKyAgICAgICAgICAgIG1heEJhY2tncm91
bmRUZXh0dXJlQnl0ZXMgPSBieXRlczsKKyAgICAgICAgaWYgKCFyZWFkYmFja0J5dGVzKQorICAg
ICAgICAgICAgcmVhZGJhY2tCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyht
X2RldmljZVZpZXdwb3J0U2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgIH0KKyAg
ICBzaXplX3QgcmVuZGVyU3VyZmFjZXNCeXRlcyA9IHJlYWRiYWNrQnl0ZXMgKyBtYXhCYWNrZ3Jv
dW5kVGV4dHVyZUJ5dGVzICsgY29udGVudHNUZXh0dXJlQnl0ZXM7CisKKyAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcyhyZW5kZXJTdXJmYWNlc0J5dGVzKTsK
IH0KIAogLy8gc3RhdGljCkBAIC01NzUsNiArNTk1LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5sZWF2ZUxheWVyKGl0KTsKICAgICB9CiAKKyAg
ICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLmRpZFVzZUNvbnRlbnRzVGV4dHVy
ZU1lbW9yeUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZC
eXRlcygpKTsKKyAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLmRpZFVzZVJl
bmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMobV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5t
ZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKCkpOwogICAgIG9jY2x1c2lvblRyYWNrZXIub3Zl
cmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJp
Y3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
dmVyZHJhd01ldHJpY3MuY3BwCmluZGV4IDBjYzJmYTVlYzYxNmEwMDQ3NzgyNjE1ODk2MGJkMDE3
ODg3ZTNkZDguLmIyY2VmNmFhZTAxOTgwNjVkNjFkNmI4OTZjNTU4MmFlNGEwMzg1NTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3Zl
cmRyYXdNZXRyaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAKQEAgLTQ2LDYgKzQ2LDggQEAgQ0NPdmVy
ZHJhd01ldHJpY3M6OkNDT3ZlcmRyYXdNZXRyaWNzKGJvb2wgcmVjb3JkTWV0cmljc0ZvckZyYW1l
KQogICAgICwgbV9waXhlbHNVcGxvYWRlZE9wYXF1ZSgwKQogICAgICwgbV9waXhlbHNVcGxvYWRl
ZFRyYW5zbHVjZW50KDApCiAgICAgLCBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkKDApCisgICAgLCBt
X2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKDApCisgICAgLCBtX3JlbmRlclN1cmZhY2VUZXh0dXJl
VXNlQnl0ZXMoMCkKICAgICAsIG1fcGl4ZWxzRHJhd25PcGFxdWUoMCkKICAgICAsIG1fcGl4ZWxz
RHJhd25UcmFuc2x1Y2VudCgwKQogICAgICwgbV9waXhlbHNDdWxsZWRGb3JEcmF3aW5nKDApCkBA
IC05Miw2ICs5NCwyMiBAQCB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRVcGxvYWQoY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZwogICAgIG1fcGl4ZWxzVXBs
b2FkZWRUcmFuc2x1Y2VudCArPSB1cGxvYWRBcmVhIC0gdXBsb2FkT3BhcXVlQXJlYTsKIH0KIAor
dm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMo
c2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKQoreworICAgIGlmICghbV9yZWNvcmRNZXRy
aWNzRm9yRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGVudHNUZXh0dXJlVXNl
Qnl0ZXMgKz0gY29udGVudHNUZXh0dXJlVXNlQnl0ZXM7Cit9CisKK3ZvaWQgQ0NPdmVyZHJhd01l
dHJpY3M6OmRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IHJlbmRl
clN1cmZhY2VVc2VCeXRlcykKK3sKKyAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMgKz0g
cmVuZGVyU3VyZmFjZVVzZUJ5dGVzOworfQorCiB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRD
dWxsRm9yRHJhd2luZyhjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9U
YXJnZXQsIGNvbnN0IEludFJlY3QmIGJlZm9yZUN1bGxSZWN0LCBjb25zdCBJbnRSZWN0JiBhZnRl
ckN1bGxSZWN0KQogewogICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCkBAIC0xMzQs
NiArMTUyLDggQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFs
KE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBMYXkKICAgICBmbG9hdCBub3JtYWxpemF0
aW9uID0gMTAwMC5mIC8gKGxheWVyVHJlZUhvc3QtPmRldmljZVZpZXdwb3J0U2l6ZSgpLndpZHRo
KCkgKiBsYXllclRyZWVIb3N0LT5kZXZpY2VWaWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7CiAgICAg
Ly8gVGhpcyBnaXZlcyBhcHByb3hpbWF0ZWx5IDEwMHggdGhlIHBlcmNlbnRhZ2Ugb2YgdGlsZXMg
dG8gZmlsbCB0aGUgdmlld3BvcnQgb25jZSwgaWYgYWxsIHRpbGVzIHdlcmUgMjU2eDI1Ni4KICAg
ICBmbG9hdCB0aWxlTm9ybWFsaXphdGlvbiA9IDEwMDAwLmYgLyAobGF5ZXJUcmVlSG9zdC0+ZGV2
aWNlVmlld3BvcnRTaXplKCkud2lkdGgoKSAvIDI1Ni5mICogbGF5ZXJUcmVlSG9zdC0+ZGV2aWNl
Vmlld3BvcnRTaXplKCkuaGVpZ2h0KCkgLyAyNTYuZik7CisgICAgLy8gVGhpcyBnaXZlcyBhcHBy
b3hpbWF0ZWx5IDEweCB0aGUgcGVyY2VudGFnZSBvZiBieXRlcyB0byBmaWxsIHRoZSB2aWV3cG9y
dCBvbmNlLCBhc3N1bWluZyA0IGJ5dGVzIHBlciBwaXhlbC4KKyAgICBmbG9hdCBieXRlTm9ybWFs
aXphdGlvbiA9IG5vcm1hbGl6YXRpb24gLyA0OwogCiAgICAgc3dpdGNoIChtZXRyaWNzVHlwZSkg
ewogICAgIGNhc2UgRHJhd2luZ1RvU2NyZWVuOgpAQCAtMTUxLDYgKzE3MSwxMCBAQCB2b2lkIEND
T3ZlcmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmlj
c1R5cGUsIGNvbnN0IExheQogICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhp
c3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnBpeGVsQ291bnRPcGFxdWVfVXBsb2FkIiwg
c3RhdGljX2Nhc3Q8aW50Pihub3JtYWxpemF0aW9uICogbV9waXhlbHNVcGxvYWRlZE9wYXF1ZSks
IDEwMCwgMTAwMDAwMCwgNTApOwogICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
Pmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnBpeGVsQ291bnRUcmFuc2x1Y2VudF9V
cGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG5vcm1hbGl6YXRpb24gKiBtX3BpeGVsc1VwbG9hZGVk
VHJhbnNsdWNlbnQpLCAxMDAsIDEwMDAwMDAsIDUwKTsKICAgICAgICAgV2ViS2l0OjpQbGF0Zm9y
bTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC50aWxlQ291bnRD
dWxsZWRfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pih0aWxlTm9ybWFsaXphdGlvbiAqIG1fdGls
ZXNDdWxsZWRGb3JVcGxvYWQpLCAxMDAsIDEwMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQucmVu
ZGVyU3VyZmFjZVRleHR1cmVCeXRlc19WaWV3cG9ydFNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4o
Ynl0ZU5vcm1hbGl6YXRpb24gKiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMpLCAxMCwg
MTAwMDAwMCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3Rv
Z3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnJlbmRlclN1cmZhY2VUZXh0dXJlQnl0ZXNfVW5z
Y2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlcyAv
IDEwMDApLCAxMDAwLCAxMDAwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5jb250ZW50c1RleHR1
cmVCeXRlc19WaWV3cG9ydFNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4oYnl0ZU5vcm1hbGl6YXRp
b24gKiBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKSwgMTAsIDEwMDAwMDAsIDUwKTsKKyAgICAg
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJl
bmRlcmVyNC5jb250ZW50c1RleHR1cmVCeXRlc19VbnNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4o
bV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyAvIDEwMDApLCAxMDAwLCAxMDAwMDAwMDAsIDUwKTsK
IAogICAgICAgICB7CiAgICAgICAgICAgICBUUkFDRV9DT1VOVEVSX0lEMSgiY2MiLCAiVXBsb2Fk
VGlsZXNDdWxsZWQiLCBsYXllclRyZWVIb3N0LCBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkKTsKQEAg
LTE2MCw2ICsxODQsMTAgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0lu
dGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBMYXkKICAgICAgICAgICAgIC8v
IFRoaXMgbXVzdCBiZSBpbiBhIGRpZmZlcmVudCBzY29wZSB0aGFuIHRoZSBUUkFDRV9FVkVOVDIg
YWJvdmUuCiAgICAgICAgICAgICBUUkFDRV9FVkVOVDEoImNjIiwgIkNDT3ZlcmRyYXdQYWludE1l
dHJpY3MiLCAiUGl4ZWxzUGFpbnRlZCIsIG1fcGl4ZWxzUGFpbnRlZCk7CiAgICAgICAgIH0KKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50IHNjb3Bl
IHRoYW4gdGhlIFRSQUNFX0VWRU5UcyBhYm92ZS4KKyAgICAgICAgICAgIFRSQUNFX0VWRU5UMigi
Y2MiLCAiQ0NPdmVyZHJhd1BhaW50TWV0cmljcyIsICJDb250ZW50c1RleHR1cmVCeXRlcyIsIG1f
Y29udGVudHNUZXh0dXJlVXNlQnl0ZXMsICJSZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzIiwgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuaAppbmRleCA3MTVmNWUxNTFi
YmFkZGExNzk3NmM3ZTM5ZmUzNzEzNzdiZGY4ZTMzLi5mMGRhYjBlOTNjOTVlYTU1NGQ4MGE3MjQz
YjJkOTg1NTkxNjk1N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgKQEAgLTQ5
LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEN1bGxUaWxlRm9yVXBsb2FkKCk7CiAg
ICAgLy8gUmVjb3JkcyBwaXhlbHMgdGhhdCB3ZXJlIHVwbG9hZGVkIHRvIHRleHR1cmUgbWVtb3J5
LgogICAgIHZvaWQgZGlkVXBsb2FkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBvcGFxdWVSZWN0KTsKKyAgICAvLyBSZWNvcmQgY29udGVudHMgdGV4dHVyZShzKSBi
ZWhpbmQgcHJlc2VudCB1c2luZyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorICAgIHZvaWQg
ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVz
ZUJ5dGVzKTsKKyAgICAvLyBSZWNvcmQgUmVuZGVyU3VyZmFjZSB0ZXh0dXJlKHMpIGJlaW5nIHBy
ZXNlbnQgdXNpbmcgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4KKyAgICB2b2lkIGRpZFVzZVJl
bmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRl
cyk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBzYXZpbmcgbWV0cmljcyBk
dXJpbmcgZHJhdy4KIApAQCAtOTMsNiArOTcsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3Bp
eGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQ7CiAgICAgLy8gQ291bnQgb2YgdGlsZXMgdGhhdCB3ZXJl
IGludmFsaWRhdGVkIGJ1dCBub3QgdXBsb2FkZWQuCiAgICAgaW50IG1fdGlsZXNDdWxsZWRGb3JV
cGxvYWQ7CisgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBieXRlcyBpbiBjb250ZW50cyB0ZXh0
dXJlcy4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlczsK
KyAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIFJlbmRlclN1cmZhY2UgdGV4dHVy
ZXMuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRl
czsKIAogICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVy
aW5nIGRyYXcuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXIuY3BwCmluZGV4IGI2NDJiOTllYjZhMzc1YjIzOWU5M2VjZWFmYmIwNTE5Y2E2ZDcwY2Iu
LmYzNjZjOGJiZTc3MmQ5OTY4MTdkOWFlOGU0ODZlM2EyODdlMjMzMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzYsMTQgKzM2
LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoc2l6
ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVz
LCBpbnQgbWF4VGV4dHVyZVNpemUpCitDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1h
eFRleHR1cmVTaXplKQogICAgIDogbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAg
ICAsIG1fbWF4TWVtb3J5TGltaXRCeXRlcyhtYXhNZW1vcnlMaW1pdEJ5dGVzKQotICAgICwgbV9w
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMpCi0gICAg
LCBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxl
UHJpb3JpdHkoKSkKLSAgICAsIG1fcHJpb3JpdHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6
Omxvd2VzdFByaW9yaXR5KCkpCiAgICAgLCBtX21lbW9yeVVzZUJ5dGVzKDApCiAgICAgLCBtX21l
bW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoMCkKKyAgICAsIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMoMCkK
IHsKIH0KIApAQCAtNTgsMTcgKzU2LDcgQEAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp+
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKCkKICAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1f
YmFja2luZ3MuYmVnaW4oKSwgMCk7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpzZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRl
cykKLXsKLSAgICBzZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMpOwotCi0g
ICAgLy8gRklYTUU6IFByZWZlcnJlZCBsaW1pdCBzaG91bGQgZ28gYXdheS4gV2UgY2FuIHJlbW92
ZSBpdCBhcyBzb29uCi0gICAgLy8gICAgICAgIGFzIHdlIG5vIGxvbmdlciB1c2UgdGhlICdyZW1h
aW5kZXInIG9mIHRoaXMgbWFuYWdlciBmb3IKLSAgICAvLyAgICAgICAgYW55dGhpbmcuCi0gICAg
c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1pdEJ5dGVzIC8gNCAqIDMpOwot
fQotCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVz
KCkKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMo
c2l6ZV90IHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXMpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyIpOwog
CkBAIC05MCwyMSArNzgsMzIgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnBy
aW9yaXRpemVUZXh0dXJlcygpCiAgICAgICAgIHNvcnRlZFRleHR1cmVzLmFwcGVuZCgqaXQpOwog
ICAgIHN0ZDo6c29ydChzb3J0ZWRUZXh0dXJlcy5iZWdpbigpLCBzb3J0ZWRUZXh0dXJlcy5lbmQo
KSwgY29tcGFyZVRleHR1cmVzKTsKIAorICAgIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgPSBtX21h
eE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgbV9wcmlvcml0eUN1dG9mZiA9IENDUHJpb3JpdHlDYWxj
dWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOworICAgIGJvb2wgcmVzZXJ2ZWRSZW5kZXJTdXJmYWNl
cyA9IGZhbHNlOwogICAgIHNpemVfdCBtZW1vcnlCeXRlcyA9IDA7CiAgICAgZm9yIChUZXh0dXJl
VmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZFRleHR1cmVzLmJlZ2luKCk7IGl0ICE9IHNvcnRl
ZFRleHR1cmVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgoKml0KS0+cmVxdWVzdFByaW9y
aXR5KCkgPT0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCkpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgc2l6ZV90IG5ld01lbW9yeUJ5dGVzID0gbWVtb3J5Qnl0ZXMg
KyAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7Ci0gICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+
IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSkgewotICAgICAgICAgICAgbV9wcmlvcml0eUN1dG9mZiA9
ICgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKTsKLSAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IC8vIEZJWE1FOiBXZSBjYW4gbWFrZSBwbGFjZWhvbGRlciBvYmplY3RzIHNpbWlsYXIgdG8gdGV4
dHVyZXMgdG8gcmVwcmVzZW50IHRoZSByZW5kZXIgc3VyZmFjZSBtZW1vcnkgcmVxdWVzdC4KKyAg
ICAgICAgaWYgKCFyZXNlcnZlZFJlbmRlclN1cmZhY2VzICYmIENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojpwcmlvcml0eUlzTG93ZXIoKCppdCktPnJlcXVlc3RQcmlvcml0eSgpLCBDQ1ByaW9yaXR5Q2Fs
Y3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KCkpKSB7CisgICAgICAgICAgICBzaXplX3Qg
bmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArIHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXM7
CisgICAgICAgICAgICBpZiAobmV3TWVtb3J5Qnl0ZXMgPiBtX21lbW9yeUF2YWlsYWJsZUJ5dGVz
KSB7CisgICAgICAgICAgICAgICAgbV9wcmlvcml0eUN1dG9mZiA9ICgqaXQpLT5yZXF1ZXN0UHJp
b3JpdHkoKTsKKyAgICAgICAgICAgICAgICBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzID0gbWVtb3J5
Qnl0ZXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzIC09IHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXM7Cisg
ICAgICAgICAgICByZXNlcnZlZFJlbmRlclN1cmZhY2VzID0gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBpZiAobmV3TWVtb3J5Qnl0ZXMgPiBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dl
cigoKml0KS0+cmVxdWVzdFByaW9yaXR5KCksIG1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKCkpKSB7
CisKKyAgICAgICAgc2l6ZV90IG5ld01lbW9yeUJ5dGVzID0gbWVtb3J5Qnl0ZXMgKyAoKml0KS0+
bWVtb3J5U2l6ZUJ5dGVzKCk7CisgICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IG1fbWVtb3J5
QXZhaWxhYmxlQnl0ZXMpIHsKICAgICAgICAgICAgIG1fcHJpb3JpdHlDdXRvZmYgPSAoKml0KS0+
cmVxdWVzdFByaW9yaXR5KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAg
ICAgIG1lbW9yeUJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7CiAgICAgfQogCkBAIC0xMTgsNyArMTE3
LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJl
cygpCiAgICAgICAgIGlmIChpc0Fib3ZlUHJpb3JpdHlDdXRvZmYpCiAgICAgICAgICAgICBtX21l
bW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgKz0gKCppdCktPm1lbW9yeVNpemVCeXRlcygpOwogICAgIH0K
LSAgICBBU1NFUlQobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzIDw9IG1heE1lbW9yeUxpbWl0Qnl0
ZXMoKSk7CisgICAgQVNTRVJUKG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyA8PSBtX21lbW9yeUF2
YWlsYWJsZUJ5dGVzKTsKIAogICAgIC8vIFB1dCBiYWNraW5ncyBpbiBldmljdGlvbi9yZWN5Y2xp
bmcgb3JkZXIuCiAgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3Mu
YmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkKQEAgLTE1Niw4ICsxNTUsMTEg
QEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogICAgIGlmICh0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlD
dXRvZmYoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBpZiAoQ0NQcmlvcml0eUNhbGN1
bGF0b3I6OnByaW9yaXR5SXNMb3dlcih0ZXh0dXJlLT5yZXF1ZXN0UHJpb3JpdHkoKSwgbV9wcmlv
cml0eUN1dG9mZikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHNpemVfdCBuZXdNZW1v
cnlCeXRlcyA9IG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyArIHRleHR1cmUtPm1lbW9yeVNpemVC
eXRlcygpOwotICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IG1fbWF4TWVtb3J5TGltaXRCeXRlcykK
KyAgICBpZiAobmV3TWVtb3J5Qnl0ZXMgPiBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPSBuZXdNZW1v
cnlCeXRlczsKQEAgLTE5MCw4ICsxOTIsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogCiAg
ICAgLy8gT3RoZXJ3aXNlIHJlZHVjZSBtZW1vcnkgYW5kIGp1c3QgYWxsb2NhdGUgYSBuZXcgYmFj
a2luZyB0ZXh1cmVzLgogICAgIGlmICghYmFja2luZykgewotICAgICAgICBzaXplX3QgbGltaXQg
PSBzdGQ6Om1heChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMsIG1fcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcykgLSB0ZXh0dXJlLT5tZW1vcnlTaXplQnl0ZXMoKTsKLSAgICAgICAgcmVkdWNlTWVt
b3J5KGxpbWl0LCBhbGxvY2F0b3IpOworICAgICAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFp
bGFibGVCeXRlcyAtIHRleHR1cmUtPm1lbW9yeVNpemVCeXRlcygpLCBhbGxvY2F0b3IpOwogICAg
ICAgICBiYWNraW5nID0gY3JlYXRlQmFja2luZyh0ZXh0dXJlLT5zaXplKCksIHRleHR1cmUtPmZv
cm1hdCgpLCBhbGxvY2F0b3IpOwogICAgIH0KIApAQCAtMjE5LDggKzIyMCw3IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMs
IFRleHR1cmVBbGxvY2F0CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1
Y2VNZW1vcnkoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewotICAgIHNpemVfdCBsaW1p
dCA9IHN0ZDo6bWF4KG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcywgbV9wcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzKTsKLSAgICByZWR1Y2VNZW1vcnkobGltaXQsIGFsbG9jYXRvcik7CisgICAgcmVk
dWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMsIGFsbG9jYXRvcik7CiAgICAgQVNTRVJU
KG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWF4TWVtb3J5TGltaXRCeXRlcygpKTsKIAogICAgIC8vIFdl
IGN1cnJlbnRseSBjb2xsZWN0IGJhY2tpbmdzIGZyb20gZGVsZXRlZCB0ZXh0dXJlcyBmb3IgbGF0
ZXIgcmVjeWNsaW5nLgpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIHdhc3RlZE1lbW9yeSArPSAoKml0KS0+bWVtb3J5U2l6
ZUJ5dGVzKCk7CiAgICAgfQotICAgIHNpemVfdCB0ZW5QZXJjZW50T2ZNZW1vcnkgPSBtYXhNZW1v
cnlMaW1pdEJ5dGVzKCkgLyAxMDsKKyAgICBzaXplX3QgdGVuUGVyY2VudE9mTWVtb3J5ID0gbV9t
ZW1vcnlBdmFpbGFibGVCeXRlcyAvIDEwOwogICAgIGlmICh3YXN0ZWRNZW1vcnkgPD0gdGVuUGVy
Y2VudE9mTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgcmVkdWNlTWVtb3J5KG1lbW9yeVVz
ZUJ5dGVzKCkgLSAod2FzdGVkTWVtb3J5IC0gdGVuUGVyY2VudE9mTWVtb3J5KSwgYWxsb2NhdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKaW5k
ZXggN2ZjMmM2ZWE0OGU2MmQ4YzA1NWU4NWEyZTI4ZDEwODM0OWEzMjQwMC4uY2RiMjA2MjE2ZmU4
NzM5MTAzN2IwY2FlNTBjMmVhYjIxN2Y0ZWZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKQEAgLTQwLDkgKzQwLDkgQEAgY2xhc3MgQ0NQcmlv
cml0eUNhbGN1bGF0b3I7CiBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiBj
cmVhdGUoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiBjcmVhdGUoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0
ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHByZWZl
cnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKG1heE1lbW9yeUxpbWl0Qnl0
ZXMsIG1heFRleHR1cmVTaXplKSk7CiAgICAgfQogICAgIFBhc3NPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCiAg
ICAgewpAQCAtNTYsMjEgKzU2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBtZW1vcnlVc2VCeXRlcygp
IDw9IG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSBzaG91bGQgYWx3YXlzIGJlIHRydWUuCiAgICAg
c2l6ZV90IG1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsg
fQogICAgIHNpemVfdCBtZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9t
ZW1vcnlBYm92ZUN1dG9mZkJ5dGVzOyB9CisgICAgc2l6ZV90IG1lbW9yeUZvclJlbmRlclN1cmZh
Y2VzQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21heE1lbW9yeUxpbWl0Qnl0ZXMgLSBtX21lbW9y
eUF2YWlsYWJsZUJ5dGVzOyB9CiAKLSAgICB2b2lkIHNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5
dGVzKHNpemVfdCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdldCByaWQgb2YgdGhlIHBy
ZWZlcnJlZC9tYXggbGltaXRzIGFuZCBsZXQgR3B1TWVtb3J5TWFuYWdlcgotICAgIC8vIGp1c3Qg
YWRqdXN0IHRoZSBtYXggbGltaXQgYmFzZWQgb24gaGludHMgd2UgY2FuIHByb3ZpZGUgZnJvbSB0
aGlzIGNsYXNzLgotICAgIC8vIElkZWFsbHkgaXQgd2lsbCBiZSBhZGp1c3RlZCByZWxhdGl2ZWx5
IHJhcmVseSBzdWNoIHRoYXQgcmVjeWNsaW5nIGlzIG1heGltaXplZC4KICAgICB2b2lkIHNldE1h
eE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IGJ5dGVzKSB7IG1fbWF4TWVtb3J5TGltaXRCeXRlcyA9
IGJ5dGVzOyB9CiAgICAgc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJldHVy
biBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7IH0KLSAgICB2b2lkIHNldFByZWZlcnJlZE1lbW9yeUxp
bWl0Qnl0ZXMoc2l6ZV90IGJ5dGVzKSB7IG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyA9IGJ5
dGVzOyB9Ci0gICAgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXM7IH0KLQotICAgIHZvaWQgc2V0TWF4TWVt
b3J5UHJpb3JpdHlDdXRvZmYoc2l6ZV90IGN1dG9mZikgeyBtX21heE1lbW9yeVByaW9yaXR5Q3V0
b2ZmID0gY3V0b2ZmOyB9Ci0gICAgdW5zaWduZWQgbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoKSBj
b25zdCB7IHJldHVybiBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2ZmOyB9CiAKLSAgICB2b2lkIHBy
aW9yaXRpemVUZXh0dXJlcygpOworICAgIHZvaWQgcHJpb3JpdGl6ZVRleHR1cmVzKHNpemVfdCBy
ZW5kZXJTdXJmYWNlc01lbW9yeUJ5dGVzKTsKICAgICB2b2lkIGNsZWFyUHJpb3JpdGllcygpOwog
CiAgICAgYm9vbCByZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4dHVyZSopOwpAQCAtMTA3LDcg
Kzk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpw
cmlvcml0eUlzTG93ZXIocHJpb3JpdHlBLCBwcmlvcml0eUIpOwogICAgIH0KIAotICAgIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90
IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpOwogCiAgICAgdm9pZCByZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0LCBU
ZXh0dXJlQWxsb2NhdG9yKik7CiAKQEAgLTExOSwxMSArMTEwLDEwIEBAIHByaXZhdGU6CiAKICAg
ICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBzaXplX3QgbV9tYXhNZW1vcnlMaW1pdEJ5dGVz
OwotICAgIHNpemVfdCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXM7Ci0gICAgdW5zaWduZWQg
bV9tYXhNZW1vcnlQcmlvcml0eUN1dG9mZjsKICAgICB1bnNpZ25lZCBtX3ByaW9yaXR5Q3V0b2Zm
OwogICAgIHNpemVfdCBtX21lbW9yeVVzZUJ5dGVzOwogICAgIHNpemVfdCBtX21lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXM7CisgICAgc2l6ZV90IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXM7CiAKICAgICB0
eXBlZGVmIEhhc2hTZXQ8Q0NQcmlvcml0aXplZFRleHR1cmUqPiBUZXh0dXJlU2V0OwogICAgIHR5
cGVkZWYgTGlzdEhhc2hTZXQ8Q0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqPiBCYWNraW5n
U2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwCmluZGV4IDg1MDEw
YTEwNzBiODE1YzIzZmQ4ZjUwZDMwNmIzNjEwNmZlMDZiNGUuLjkwMDg0MDQzZDk3MTk4NDBhOWVj
YjIzNDU4Y2U3NWZiMzAxMjk2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3Vs
YXRvci5jcHAKQEAgLTMzLDE1ICszMywyMSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBzdGF0aWMKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQ
cmlvcml0eSgpCitpbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoYm9vbCBkcmF3
c1RvUm9vdFN1cmZhY2UpCiB7Ci0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiBkcmF3c1RvUm9v
dFN1cmZhY2UgPyAtMSA6IDI7CiB9CiAKIC8vIHN0YXRpYwotaW50IENDUHJpb3JpdHlDYWxjdWxh
dG9yOjp2aXNpYmxlUHJpb3JpdHkoKQoraW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxl
UHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGRyYXdzVG9Sb290U3VyZmFjZSA/IDAgOiAzOworfQorCisvLyBzdGF0aWMKK2ludCBD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KCkKK3sKKyAgICByZXR1
cm4gMTsKIH0KIAogLy8gc3RhdGljCkBAIC02NSwxOSArNzEsMjQgQEAgdW5zaWduZWQgbWFuaGF0
dGFuRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYgYikKIH0KIH0KIAot
aW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QpIGNvbnN0CitpbnQg
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVjdCwgYm9vbCBkcmF3c1RvUm9v
dFN1cmZhY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHZpc2libGVQcmlvcml0eSgpICsgbWFuaGF0
dGFuRGlzdGFuY2UodmlzaWJsZVJlY3QsIHRleHR1cmVSZWN0KTsKKyAgICB1bnNpZ25lZCBkaXN0
YW5jZSA9IG1hbmhhdHRhbkRpc3RhbmNlKHZpc2libGVSZWN0LCB0ZXh0dXJlUmVjdCk7CisgICAg
aWYgKCFkaXN0YW5jZSkKKyAgICAgICAgcmV0dXJuIHZpc2libGVQcmlvcml0eShkcmF3c1RvUm9v
dFN1cmZhY2UpOworICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZmFsc2UpICsgZGlzdGFuY2U7
CiB9CiAKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UodW5z
aWduZWQgcGl4ZWxzKSBjb25zdAoraW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZy
b21EaXN0YW5jZSh1bnNpZ25lZCBwaXhlbHMsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25z
dAogewotICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoKSArIHBpeGVsczsKKyAgICBpZiAoIXBp
eGVscykKKyAgICAgICAgcmV0dXJuIHZpc2libGVQcmlvcml0eShkcmF3c1RvUm9vdFN1cmZhY2Up
OworICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZmFsc2UpICsgcGl4ZWxzOwogfQogCi1pbnQg
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxl
KSBjb25zdAoraW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21WaXNpYmlsaXR5
KGJvb2wgdmlzaWJsZSwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHZpc2libGUgPyB2aXNpYmxlUHJpb3JpdHkoKSA6IGxvd2VzdFByaW9yaXR5KCk7CisgICAg
cmV0dXJuIHZpc2libGUgPyB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKSA6IGxv
d2VzdFByaW9yaXR5KCk7CiB9CiAKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3Jp
dHlDYWxjdWxhdG9yLmgKaW5kZXggZjRmZWFmZTliODRjZjMzMzQ4NzQ2NzFmMjE3MDE3M2Y1NTFh
MjUwMi4uNjhhMjI1YmUwYjllZjMyNjVmMGY4OThhNjJmZGM1OGRjY2VmYjdhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0
eUNhbGN1bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCkBAIC0zNCwxMiArMzQsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ1ByaW9yaXR5Q2FsY3VsYXRvciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIGludCB1aVByaW9yaXR5KCk7Ci0gICAgc3RhdGljIGludCB2aXNpYmxlUHJpb3Jp
dHkoKTsKKyAgICBzdGF0aWMgaW50IHVpUHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2Up
OworICAgIHN0YXRpYyBpbnQgdmlzaWJsZVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNl
KTsKKyAgICBzdGF0aWMgaW50IHJlbmRlclN1cmZhY2VQcmlvcml0eSgpOwogICAgIHN0YXRpYyBp
bnQgbGluZ2VyaW5nUHJpb3JpdHkoaW50IHByZXZpb3VzUHJpb3JpdHkpOwotICAgIGludCBwcmlv
cml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgdGV4dHVyZVJlY3QpIGNvbnN0OwotICAgIGludCBwcmlvcml0eUZyb21EaXN0YW5jZSh1bnNp
Z25lZCBwaXhlbHMpIGNvbnN0OwotICAgIGludCBwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wg
dmlzaWJsZSkgY29uc3Q7CisgICAgaW50IHByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVjdCwgYm9vbCBkcmF3c1Rv
Um9vdFN1cmZhY2UpIGNvbnN0OworICAgIGludCBwcmlvcml0eUZyb21EaXN0YW5jZSh1bnNpZ25l
ZCBwaXhlbHMsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdDsKKyAgICBpbnQgcHJpb3Jp
dHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBj
b25zdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgaW50IGhpZ2hlc3RQcmlvcml0eSgpIHsgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7IH0KICAgICBzdGF0aWMgaW5saW5lIGlu
dCBsb3dlc3RQcmlvcml0eSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LmNwcAppbmRleCA1NDFlNTE1OThmYmZlOTkyY2M4MWZhZWY3ZDZl
ODEwMzYyODVlNWNhLi40NjhhZjM2YmJhNTBlM2VlODE2NWYzYWNhYzc0ZTFlNDlmNmY5NTU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRp
emVkVGV4dHVyZVRlc3QuY3BwCkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhtX3RleHR1cmVTaXplLCBtX3RleHR1
cmVGb3JtYXQpICogdGV4dHVyZUNvdW50OwogICAgIH0KIAotICAgIFBhc3NPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiBjcmVhdGVNYW5hZ2VyKHNpemVfdCBtYXhUZXh0dXJlcywg
c2l6ZV90IHByZWZlcnJlZFRleHR1cmVzKQorICAgIFBhc3NPd25QdHI8Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyPiBjcmVhdGVNYW5hZ2VyKHNpemVfdCBtYXhUZXh0dXJlcykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJl
c01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlc01lbW9yeVNpemUocHJlZmVycmVkVGV4
dHVyZXMpLCAxMDI0KTsKKyAgICAgICAgcmV0dXJuIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcyksIDEwMjQpOwogICAgIH0K
IAogICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4m
IHRleHR1cmUsIGJvb2wgcmVxdWVzdExhdGUpCkBAIC04Miw5OCArODIsMTAgQEAgcHJvdGVjdGVk
OgogICAgIGNvbnN0IEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKIH07CiAKLVRFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlSW5QcmVmZXJyZWRMaW1pdCkKLXsK
LSAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OwotICAgIGNvbnN0IHNpemVfdCBwcmVm
ZXJyZWRUZXh0dXJlcyA9IDQ7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzLCBwcmVmZXJyZWRU
ZXh0dXJlcyk7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1twcmVm
ZXJyZWRUZXh0dXJlc107Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRl
eHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0
ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKLQotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgIC8vIExvd2VzdCBwcmlvcml0eSB0
ZXh0dXJlcyBzaG91bGRuJ3QgYmUgYXZhaWxhYmxlLgotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRl
VGV4dHVyZSh0ZXh0dXJlc1sxXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzWzJdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRl
eHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByZWZlcnJlZFRleHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0
UHJpb3JpdHkoMTAwKTsKLQotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKLQotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2Up
KTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMV0sIGZhbHNlKSk7
Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzJdLCBmYWxzZSkpOwot
ICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKLQot
ICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUocHJlZmVycmVkVGV4dHVyZXMpLCB0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1RfTEUodGV4
dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzKCkpOwotCi0gICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFs
bG9jYXRvcigpKTsKLX0KLQotVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVz
dFRleHR1cmVFeGNlZWRpbmdQcmVmZXJyZWRMaW1pdCkKLXsKLSAgICBjb25zdCBzaXplX3QgbWF4
VGV4dHVyZXMgPSA4OwotICAgIGNvbnN0IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDQ7Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBj
cmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzLCBwcmVmZXJyZWRUZXh0dXJlcyk7Ci0gICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ld
ID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJl
Rm9ybWF0KTsKLQotICAgIC8vIFNldCBkZWNyZWFzaW5nIHByaW9yaXRpZXMKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ldLT5z
ZXRSZXF1ZXN0UHJpb3JpdHkoMTAwICsgaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOwotCi0gICAgLy8gT25seSBsb3dlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFi
bGUuCi0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkp
OwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsK
LSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOwot
ICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7Ci0g
ICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIHRleHR1
cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwotICAgIEVYUEVDVF9MRSh0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMoKSk7Ci0KLSAgICAvLyBTZXQgaW5jcmVhc2luZyBwcmlvcml0aWVzCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJl
c1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCAtIGkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgIC8vIE9ubHkgdXBwZXIgaGFsZiBzaG91bGQgYmUg
YXZhaWxhYmxlLgotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0s
IGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwg
ZmFsc2UpKTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZh
bHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxz
ZSkpOwotICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUocHJlZmVycmVkVGV4dHVyZXMp
LCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1Rf
TEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1v
cnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwotCi0gICAgLy8gTWFrZSBhbGwgdGV4dHVyZXMgaW1wb3J0
YW50IChhYm92ZSBtYXgtbWVtb3J5IHByaW9yaXR5IGN1dG9mZikKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2Vz
dFByaW9yaXR5KCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
LQotICAgIC8vIEFsbCB0ZXh0dXJlcyBzaG91bGQgYmUgYXZhaWxhYmxlCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKSB7Ci0gICAgICAgRVhQRUNUX1RSVUUodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSkpOwotICAgICAgIEVYUEVDVF9UUlVFKHRl
eHR1cmVzW2ldLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7Ci0gICAgfQotCi0gICAgRVhQRUNUX0VR
KHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlB
Ym92ZUN1dG9mZkJ5dGVzKCkpOwotICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5
VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0K
LSAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwotfQotCi0K
IFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5n
TWF4TGltaXQpCiB7CiAgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25z
dCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJl
cywgcHJlZmVycmVkVGV4dHVyZXMpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CiAKICAg
ICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIGRvdWJsZSBvdXIgbWVtb3J5IGxpbWl0LgogICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXMqMl07CkBAIC0x
ODIsMjQgKzk0LDIyIEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RU
ZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiAgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1h
bmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKIAog
ICAgIC8vIFNldCBkZWNyZWFzaW5nIHByaW9yaXRpZXMKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlcyoyOyArK2kpCiAgICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwICsgaSk7CiAKICAgICAvLyBPbmx5
IGxvd2VyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNl
KSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkp
OwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbOF0sIGZhbHNlKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1sxNV0sIGZhbHNlKSk7
CiAKICAgICAvLyBTZXQgaW5jcmVhc2luZyBwcmlvcml0aWVzCi0gICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXMqMjsgKytpKQogICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCAtIGkpOwogCiAgICAgLy8g
T25seSB1cHBlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwg
ZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBm
YWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s4XSwgZmFs
c2UpKTsKQEAgLTIxNCwxMiArMTI0LDkgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVz
dCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkKIFRFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKIHsKICAgICBjb25zdCBzaXplX3QgbWF4
VGV4dHVyZXMgPSA4OwotICAgIGNvbnN0IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDQ7Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBj
cmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzLCBwcmVmZXJyZWRUZXh0dXJlcyk7CisgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5h
Z2VyKG1heFRleHR1cmVzKTsKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1
cmVzW21heFRleHR1cmVzXTsKIAotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlQcmlv
cml0eUN1dG9mZihDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSk7Ci0KICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIHRleHR1
cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90
ZXh0dXJlRm9ybWF0KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyAr
K2kpCkBAIC0yMjcsNyArMTM0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
Y2hhbmdlTWVtb3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA4IHRleHR1cmVz
CiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1v
cnlTaXplKDgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1tpXSwgZmFsc2UpOwogICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkoYWxs
b2NhdG9yKCkpOwpAQCAtMjM3LDcgKzE0NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gNSB0
ZXh0dXJlcwogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1
cmVzTWVtb3J5U2l6ZSg1KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA1KTsKICAgICB0ZXh0dXJl
TWFuYWdlci0+cmVkdWNlTWVtb3J5KGFsbG9jYXRvcigpKTsKQEAgLTI0Nyw3ICsxNTQsNyBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAg
ICAvLyBTZXQgbWF4IGxpbWl0IHRvIDQgdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUoNCkpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7
ICsraSkKICAgICAgICAgRVhQRUNUX0VRKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFs
c2UpLCBpIDwgNCk7CiAgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeShhbGxvY2F0b3Io
KSk7CkBAIC0yNTgsMjMgKzE2NSwyMiBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0
LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5
KGFsbG9jYXRvcigpKTsKIH0KIAotCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0
ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRhdGVUZXh0dXJlcykKIHsKLSAgICBjb25zdCBzaXplX3Qg
bWF4VGV4dHVyZXMgPSA4OwotICAgIGNvbnN0IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDQ7
Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzLCBwcmVmZXJyZWRUZXh0dXJlcyk7Ci0gICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1twcmVmZXJyZWRUZXh0dXJlc107Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiBtb3JlVGV4dHVyZXNbcHJlZmVycmVkVGV4
dHVyZXNdOworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDQ7CisgICAgY29uc3Qgc2l6
ZV90IG51bVRleHR1cmVzID0gNDsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbnVtVGV4dHVyZXNdOworICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gbW9yZVRleHR1cmVzW251bVRleHR1cmVzXTsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsraSkgeworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVGV4dHVyZXM7ICsraSkgewogICAgICAgICB0ZXh0
dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1f
dGV4dHVyZUZvcm1hdCk7CiAgICAgICAgIG1vcmVUZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2Vy
LT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAgICAgfQog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVmZXJyZWRUZXh0dXJlczsgKytpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVGV4dHVyZXM7ICsraSkKICAgICAgICAgdGV4dHVy
ZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgyMDAgKyBpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwKTsKIAogICAgIC8vIEFsbG9jYXRlIHRleHR1cmVzIHdoaWNoIGFyZSBjdXJyZW50bHkg
aGlnaCBwcmlvcml0eS4KICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNb
MF0sIGZhbHNlKSk7CkBAIC0yODcsOSArMTkzLDkgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiAgICAgRVhQRUNU
X1RSVUUodGV4dHVyZXNbMl0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKICAgICBFWFBFQ1RfVFJV
RSh0ZXh0dXJlc1szXS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcmVmZXJyZWRUZXh0dXJlczsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtVGV4dHVyZXM7ICsraSkKICAgICAgICAgbW9yZVRleHR1cmVzW2ldLT5zZXRSZXF1
ZXN0UHJpb3JpdHkoMTAwICsgaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAg
ICAvLyBUZXh0dXJlcyBhcmUgbm93IGJlbG93IGN1dG9mZi4KICAgICBFWFBFQ1RfRkFMU0UodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwpAQCAtMzIxLDEyICsyMjcsOSBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRh
dGVUZXh0dXJlcykKIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5h
Z2VyUHJpb3JpdGllc0FyZUVxdWFsKQogewogICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9
IDE2OwotICAgIGNvbnN0IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDg7Ci0gICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5h
Z2VyKG1heFRleHR1cmVzLCBwcmVmZXJyZWRUZXh0dXJlcyk7CisgICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRl
eHR1cmVzKTsKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRl
eHR1cmVzXTsKIAotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9m
ZihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLQogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJl
TWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwog
CkBAIC0zMzgsNyArMjQxLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4
dHVyZU1hbmFnZXJQcmlvcml0aWVzQXJlRXF1YWwpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRv
IDggdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0
ZXh0dXJlc01lbW9yeVNpemUoOCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAg
ICAgLy8gVGhlIHR3byBoaWdoIHByaW9yaXR5IHRleHR1cmVzIHNob3VsZCBiZSBhdmFpbGFibGUs
IG90aGVycyBzaG91bGQgbm90LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQpA
QCAtMzYyLDE0ICsyNjUsMTQgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4
dHVyZU1hbmFnZXJQcmlvcml0aWVzQXJlRXF1YWwpCiAKIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2Vy
KDEsIDEpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gY3JlYXRlTWFuYWdlcigxKTsKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmU+IHRleHR1cmUgPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXpl
LCBtX3RleHR1cmVGb3JtYXQpOwogCiAgICAgLy8gVGV4dHVyZSBpcyBpbml0aWFsbHkgaW52YWxp
ZCwgYnV0IGl0IHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KICAgICBFWFBFQ1RfRkFMU0UodGV4dHVy
ZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAgICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9y
aXR5KDEwMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBFWFBFQ1RfVFJV
RSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC0zODQsMTUgKzI4NywxNSBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlckRlc3Ryb3llZEZp
cnN0KQogCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRUb05l
d01hbmFnZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXJPbmUgPSBjcmVhdGVNYW5hZ2VyKDEsIDEpOwotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyVHdvID0gY3JlYXRlTWFuYWdlcigx
LCAxKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlck9uZSA9IGNyZWF0ZU1hbmFnZXIoMSk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXJUd28gPSBjcmVhdGVNYW5hZ2VyKDEpOwogICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZSA9IHRleHR1cmVNYW5hZ2VyT25lLT5j
cmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAKICAgICAvLyBU
ZXh0dXJlIGlzIGluaXRpYWxseSBpbnZhbGlkLCBidXQgaXQgd2lsbCBiZWNvbWUgYXZhaWxhYmxl
LgogICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CiAKICAg
ICB0ZXh0dXJlLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKLSAgICB0ZXh0dXJlTWFuYWdlck9u
ZS0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXJPbmUtPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKIAogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJl
LCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4
dHVyZSgpKTsKQEAgLTQwOCw3ICszMTEsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LCB0ZXh0dXJlTW92ZWRUb05ld01hbmFnZXIpCiAKICAgICB0ZXh0dXJlLT5zZXRUZXh0dXJl
TWFuYWdlcih0ZXh0dXJlTWFuYWdlclR3by5nZXQoKSk7CiAKLSAgICB0ZXh0dXJlTWFuYWdlclR3
by0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXJUd28tPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKIAogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJl
LCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4
dHVyZSgpKTsKQEAgLTQxNiw0ICszMTksMTE5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKIAogICAgIHRleHR1cmVNYW5hZ2VyVHdv
LT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7CiB9CisKK1RFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlT3V0c2lkZVJv
b3RTdXJmYWNlKQoreworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7CisgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVN
YW5hZ2VyKG1heFRleHR1cmVzKTsKKworICAgIC8vIEhhbGYgb2YgdGhlIG1lbW9yeSBpcyB0YWtl
biBieSBzdXJmYWNlcy4KKyAgICBjb25zdCBzaXplX3QgcmVuZGVyU3VyZmFjZXNCeXRlcyA9IHRl
eHR1cmVzTWVtb3J5U2l6ZSg0KTsKKworICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyB0byBmaWxsIG91
ciBtZW1vcnkgbGltaXQuCisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJl
c1ttYXhUZXh0dXJlc107CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVz
OyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1
cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKKworICAgIC8vIFNldCBkZWNyZWFz
aW5nIG5vbi12aXNpYmxlIHByaW9yaXRpZXMgb3V0c2lkZSByb290IHN1cmZhY2UuCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tp
XS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOworCisgICAgLy8gT25seSBsb3dlciBoYWxm
IHNob3VsZCBiZSBhdmFpbGFibGUuCisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcyhyZW5kZXJTdXJmYWNlc0J5dGVzKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzNdLCBmYWxzZSkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbNF0sIGZhbHNlKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1s3XSwgZmFsc2UpKTsKKworICAgIC8vIFNldCBpbmNyZWFzaW5nIG5vbi12aXNpYmxl
IHByaW9yaXRpZXMgb3V0c2lkZSByb290IHN1cmZhY2UuCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFBy
aW9yaXR5KDEwMCAtIGkpOworCisgICAgLy8gT25seSB1cHBlciBoYWxmIHNob3VsZCBiZSBhdmFp
bGFibGUuCisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcyhyZW5kZXJTdXJm
YWNlc0J5dGVzKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBd
LCBmYWxzZSkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10s
IGZhbHNlKSk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBm
YWxzZSkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFs
c2UpKTsKKworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5h
Z2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01l
bW9yeVNpemUoNCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVz
KCkpOworICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4
dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisKKyAgICB0ZXh0dXJlTWFu
YWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOworfQorCitURVNUX0YoQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LCByZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZUZvclJl
cXVlc3RMYXRlKQoreworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7CisgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVN
YW5hZ2VyKG1heFRleHR1cmVzKTsKKworICAgIC8vIEhhbGYgb2YgdGhlIG1lbW9yeSBpcyB0YWtl
biBieSBzdXJmYWNlcy4KKyAgICBjb25zdCBzaXplX3QgcmVuZGVyU3VyZmFjZXNCeXRlcyA9IHRl
eHR1cmVzTWVtb3J5U2l6ZSg0KTsKKworICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyB0byBmaWxsIG91
ciBtZW1vcnkgbGltaXQuCisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJl
c1ttYXhUZXh0dXJlc107CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVz
OyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1
cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKKworICAgIC8vIFNldCBlcXVhbCBw
cmlvcml0aWVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkK
KyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOworCisgICAgLy8g
VGhlIGZpcnN0IGZvdXIgdG8gYmUgcmVxdWVzdGVkIGxhdGUgd2lsbCBiZSBhdmFpbGFibGUuCisg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcyhyZW5kZXJTdXJmYWNlc0J5dGVz
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCB0cnVlKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IG1heFRleHR1cmVzOyBpICs9IDIpCisgICAgICAgIEVYUEVD
VF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIHRydWUpKTsKKworICAgIEVYUEVD
VF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1
dG9mZkJ5dGVzKCkpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1
cmVNYW5hZ2VyLT5tZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKCkpOworICAgIEVYUEVDVF9M
RSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9y
eUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1v
cnkoYWxsb2NhdG9yKCkpOworfQorCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB3
aGVuUmVuZGVyU3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZSkKK3sK
KyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0
dXJlcyk7CisKKyAgICAvLyBIYWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFrZW4gYnkgc3VyZmFjZXMu
CisgICAgY29uc3Qgc2l6ZV90IHJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0ZXh0dXJlc01lbW9yeVNp
emUoNCk7CisKKyAgICAvLyBDcmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0
LgorICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNd
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAg
ICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNp
emUsIG1fdGV4dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQgNiB2aXNpYmxlIHRleHR1cmVzIGlu
IHRoZSByb290IHN1cmZhY2UsIGFuZCAyIGluIGEgY2hpbGQgc3VyZmFjZS4KKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IDY7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQ
cmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KHRydWUpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gNjsgaSA8IDg7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNl
dFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KGZh
bHNlKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKHJlbmRlclN1
cmZhY2VzQnl0ZXMpOworCisgICAgLy8gVW5hYmxlIHRvIHJlcXVlc3RMYXRlIHRleHR1cmVzIGlu
IHRoZSBjaGlsZCBzdXJmYWNlLgorICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbNl0sIHRydWUpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1
cmVzWzddLCB0cnVlKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2UgdGV4dHVyZXMgYXJlIHZhbGlk
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNjsgKytpKQorICAgICAgICBFWFBFQ1RfVFJV
RSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSk7CisKKyAgICBFWFBFQ1RfRVEo
dGV4dHVyZXNNZW1vcnlTaXplKDYpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZC
eXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDIpLCB0ZXh0dXJlTWFu
YWdlci0+bWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRlcygpKTsKKyAgICBFWFBFQ1RfTEUodGV4
dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzKCkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFs
bG9jYXRvcigpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwCmluZGV4IDBjZjZi
MGE3NDg2YzQzZDMwNzY0Y2Q2YWYzNWU3YThkNWI0YTM3YTEuLjU1OGNiYTU3NjBhNzMyNTRkMDdk
ZjhmMThmYzQ3ZTZmZGE0ZDNhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcApAQCAtMTIxLDYgKzEyMSwyNSBA
QCB2b2lkIEZha2VUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZShDQ1RleHR1cmVVcGRhdGVyJiB1
cGRhdGVyLCBjb25zdCBDQ09jY2x1c2lvbgogICAgIHVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2
aXNpYmxlTGF5ZXJSZWN0KCksIG9jY2x1c2lvbik7CiB9CiAKK3ZvaWQgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3Im
IGNhbGN1bGF0b3IpCit7CisgICAgLy8gRW5zdXJlIHRoZXJlIGlzIGFsd2F5cyBhIHRhcmdldCBy
ZW5kZXIgc3VyZmFjZSBhdmFpbGFibGUuIElmIG5vbmUgaGFzIGJlZW4KKyAgICAvLyBzZXQgKHRo
ZSBsYXllciBpcyBhbiBvcnBoYW4gZm9yIHRoZSB0ZXN0KSwgdGhlbiBqdXN0IHNldCBhIHN1cmZh
Y2Ugb24gaXRzZWxmLgorICAgIGJvb2wgbWlzc2luZ1RhcmdldFJlbmRlclN1cmZhY2UgPSAhdGFy
Z2V0UmVuZGVyU3VyZmFjZSgpOworCisgICAgaWYgKG1pc3NpbmdUYXJnZXRSZW5kZXJTdXJmYWNl
KSB7CisgICAgICAgIGNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgc2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKCkpOworICAgIH0KKworICAgIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY2FsY3VsYXRvcik7CisKKyAgICBpZiAobWlzc2lu
Z1RhcmdldFJlbmRlclN1cmZhY2UpIHsKKyAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgICAgIHNldFRhcmdldFJlbmRlclN1cmZhY2UoMCk7CisgICAgfQorfQorCiBGYWtlVGlsZWRM
YXllcldpdGhTY2FsZWRCb3VuZHM6OkZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyhDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKQogICAgIDogRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKaW5kZXggMDIwMGEyMzdl
MDFjZWMzNTgxOTdkOTlkZDMyNGFjZWI1NDkwNzY2Ni4uMzY5YmFjOWJlOTI2MTgyM2FjZDdkMThh
ZDU5MmNlMzBjNzM1OGI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKQEAgLTExNyw3ICsxMTcsNiBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpza2lwc0RyYXc7CiAgICAg
dXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpudW1QYWludGVkVGlsZXM7CiAgICAg
dXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0OwotICAgIHVz
aW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBPVkVSUklERTsKICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxh
c3ROZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TmVlZHNEaXNwbGF5UmVj
dDsgfQpAQCAtMTI1LDYgKzEyNCw4IEBAIHB1YmxpYzoKICAgICAvLyBVcGRhdGVzIHRoZSB2aXNp
YmxlTGF5ZXJSZWN0KCkuCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShXZWJDb3JlOjpDQ1RleHR1
cmVVcGRhdGVyJiwgY29uc3QgV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyKikgT1ZFUlJJREU7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgV2ViQ29yZTo6
Q0NQcmlvcml0eUNhbGN1bGF0b3ImKSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgV2ViQ29yZTo6
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KICAgICBGYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlciogZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX2Zha2VUZXh0dXJlVXBk
YXRlci5nZXQoKTsgfQogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVSZWN0KCkgeyByZXR1
cm4gbV91cGRhdGVSZWN0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA4NDc2MjI0Nzc4YWIwMGNkMTY0
OTEwNTBmYWY2ZGI0ZjRiMjM5YjI5Li5hYWVhNjc5MThiOTM2M2I4ZjBiY2FlNWRmZTg5MGY4ZTNi
MzQ0MjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGls
ZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTk0LDE3ICs5NCwxOCBAQCBwdWJsaWM6CiBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiB7CiAgICAgQ0NQcmlv
cml0eUNhbGN1bGF0b3IgcHJpb3JpdHlDYWxjdWxhdG9yOwotICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAg
Ly8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVu
IHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAw
KSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7
CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0
eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7
CiAKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAw
LCAyMDApLCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTE3LDggKzExOCw4IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICAvLyBJbnZh
bGlkYXRlcyBib3RoIHRpbGVzLi4uCiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3Qo
MCwgMCwgMTAwLCAyMDApKTsKICAgICAvLyAuLi4uYnV0IHRoZW4gb25seSB1cGRhdGUgb25lIG9m
IHRoZW0uCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJp
b3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCksIDApOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQo
KSk7CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaERpcnR5VGlsZXMpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1
ZGVkRGlydHlUaWxlcykKIHsKICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvciBwcmlvcml0eUNhbGN1
bGF0b3I7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwg
MioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAg
T3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0xNDIsOCArMTQzLDggQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiAgICAgbGF5ZXItPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZh
bGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBsYXllci0+dXBkYXRl
TGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAmb2NjbHVkZWQpOwog
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CkBAIC0xNzYsMTcgKzE3NywxOCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKIAogVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAK
ICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5k
IHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAyMDApKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAy
MDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNh
bGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHBy
aW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwKTsKIAogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCksIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CkBAIC0xOTksNyArMjAxLDYg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAgICAg
dGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwogICAgIHRleHR1cmVNYW5hZ2VyLT5j
bGVhckFsbE1lbW9yeSgmYWxsb2NhdG9yKTsKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVt
b3J5TGltaXRCeXRlcyg0KjEwMjQqMTAyNCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnNldFByZWZl
cnJlZE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91bGQg
ZHJvcCB0aGUgdGlsZXMgb24gdGhlIGltcGwgdGhyZWFkLgogICAgIGxheWVyLT5wdXNoUHJvcGVy
dGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC0yMDksOCArMjEwLDggQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAgICAgRVhQRUNUX0ZBTFNFKGxh
eWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIAogICAgIC8vIFRoaXMgc2hvdWxkIHJlY3JlYXRl
IGFuZCB1cGRhdGUgdGhlIGRlbGV0ZWQgdGV4dHVyZXMuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJl
Y3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDApOwogICAgIHVwZGF0ZVRleHR1
cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAg
LTIyMiw3ICsyMjMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0
ZWRUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRU
aWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTIzNyw4ICsyMzgsOCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29u
dGVudFJlY3QpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlD
YWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwog
CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAg
ICAgdXBkYXRlVGV4dHVyZXMoKTsKQEAgLTI1Myw4ICsyNTQsOCBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogCiAgICAgLy8gRm9yIHRoZSBuZXh0
IGZvdXIgdXBkYXRlcywgd2Ugc2hvdWxkIGRldGVjdCB3ZSBzdGlsbCBuZWVkIGlkbGUgcGFpbnRp
bmcuCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3Qp
OwotICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgICAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgICAgICBFWFBF
Q1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKQEAgLTI4MSw3ICsy
ODIsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVz
KQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50
RmFpbGVkKQogewogICAgIC8vIFN0YXJ0IHdpdGggMm1iIG9mIG1lbW9yeSwgYnV0IHRoZSB0ZXN0
IGlzIGdvaW5nIHRvIHRyeSB0byB1c2UganVzdCBtb3JlIHRoYW4gMW1iLCBzbyB3ZSByZWR1Y2Ug
dG8gMW1iIGxhdGVyLgotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMioxMDI0
KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDIqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbDEoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0zMDUsOSArMzA2LDkgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQog
ICAgIGxheWVyMS0+aW52YWxpZGF0ZVJlY3QobGF5ZXJSZWN0KTsKIAogICAgIC8vIFBhaW50IGEg
c2luZ2xlIHRpbGUgaW4gbGF5ZXIyIHNvIHRoYXQgaXQgd2lsbCBpZGxlIHBhaW50LgotICAgIGxh
eWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXll
cjJSZWN0KTsKLSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5
Q2FsY3VsYXRvciwgbGF5ZXJSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1
bGF0b3IpOworICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxh
eWVyMS0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGxheWVyUmVjdCwgMCk7CiAgICAgbGF5ZXIy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDApOwog
CkBAIC0zMjEsMTIgKzMyMiwxMSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAKICAgICAvLyBSZWR1Y2Ugb3VyIG1lbW9yeSBs
aW1pdHMgdG8gMW1iLgogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVz
KDEwMjQgKiAxMDI0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcygxMDI0ICogMTAyNCk7CiAKICAgICAvLyBOb3cgaWRsZSBwYWludCBsYXllcjIuIFdl
IGFyZSBnb2luZyB0byBydW4gb3V0IG9mIG1lbW9yeSB0aG91Z2ghCi0gICAgbGF5ZXIyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyMlJlY3QpOwot
ICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBsYXllclJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
KyAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7Cisg
ICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXIyLT51cGRh
dGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDApOwogICAgIGxh
eWVyMi0+aWRsZVVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBsYXllcjJSZWN0LCAwKTsKIApAQCAt
MzQ1LDkgKzM0NSw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNB
ZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsMi0+aGFzVGls
ZUF0KDAsIDIpKTsKIAogICAgIC8vIE5vdyBpZiBsYXllcjIgYmVjb21lcyBmdWxseSB2aXNpYmxl
LCB3ZSBzaG91bGQgYmUgYWJsZSB0byBwYWludCBpdCBhbmQgcHVzaCB2YWxpZCB0ZXh0dXJlcy4K
LSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRv
ciwgbGF5ZXIyUmVjdCk7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIGxheWVyUmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOworICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5
Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsK
ICAgICBsYXllcjItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBsYXllcjJSZWN0LCAwKTsKICAg
ICBsYXllcjEtPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBsYXllclJlY3QsIDApOwogCkBAIC0z
NjUsNyArMzY1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0Fm
dGVySWRsZVBhaW50RmFpbGVkKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aElkbGVQYWludGVkT2NjbHVkZWRUaWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVy
SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTM3OSw4ICsz
NzksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludGVkT2Nj
bHVkZWRUaWxlcykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAxMDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
KHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApLCAmb2NjbHVkZWQpOwogICAgIGxheWVyLT5pZGxlVXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAmb2NjbHVkZWQpOwogICAgIHVwZGF0
ZVRleHR1cmVzKCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogewotICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAx
MDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAx
MDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOwpAQCAtNDAyLDEwICs0MDIsMTEgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQpCiAgICAgLy8gbm90IHByZXZlbnQg
dGhlIHRpbGUgZnJvbSBiZWluZyBwdXNoZWQuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAyMDApKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7CiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldFJlY3RU
b0ludmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxheWVyLmdldCgpKTsKIAotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3Vs
YXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBs
YXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAw
KTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CkBAIC00MTcsNyArNDE4LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQpCiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRP
bk5leHRMYXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CkBAIC00
MjUsMTQgKzQyNiwxNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVz
TGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiAgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOwogCiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwor
ICAgIGxheWVyMS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7
CiAgICAgbGF5ZXIxLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAK
ICAgICBsYXllcjItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXIyLT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllcjIt
PmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKIAotICAgIGxheWVyMS0+
c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9y
aXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKDApOwogCiAgICAgbGF5ZXIxLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50
UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogCkBAIC00NTMsNyArNDU2LDcgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWlu
dE9uTmV4dExheWVyKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVz
TGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25QcmV2aW91c0xheWVyKQogewotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0
KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0
KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKQEAgLTQ2OCw5ICs0NzEsOSBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50
T25QcmV2aW91c0xheQogICAgIGxheWVyMi0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXIyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSk7CiAKLSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHBy
aW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+
c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7Cisg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8vIEludmFs
aWRhdGUgYSB0aWxlIG9uIGxheWVyMgogICAgIGxheWVyMS0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIy
LmdldCgpKTsKQEAgLTQ5Nyw3ICs1MDAsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZv
ciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkgaW4g
Zmlyc3QgaWRsZSBwYWludC4KICAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAwICogMTAwOyAv
LyAxIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KIAotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUobWVtb3J5TGltaXQsIG1lbW9yeUxpbWl0LCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNTA3LDgg
KzUxMCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1l
bW9yeSkKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CiAgICAg
bGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIHZpc2libGVSZWN0LCAwKTsKIAogICAgIC8vIElkbGUtcGFpbnRpbmcgc2hvdWxkIHNlZSBu
byBtb3JlIHByaW9yaXR5IHRpbGVzIGZvciBwYWludGluZy4KQEAgLTUyMCw4ICs1MjMsOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAg
Ly8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgxLCAxKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVy
LCB2aXNpYmxlUmVjdCwgMCk7CiAgICAgbGF5ZXItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRl
ciwgdmlzaWJsZVJlY3QsIDApOwogCkBAIC01MzEsNyArNTM0LDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogCiBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAwMDAsIDEwMjQpOworICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC01NDMsOCArNTQ2LDgg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVy
KQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudFJlY3QpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwg
Y29udGVudFJlY3QsIDApOwogCiAgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMu
CkBAIC01NzIsNyArNTc1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQ
YWludFplcm9TaXplZExheWVyKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRs
ZVBhaW50WmVyb1NpemVkQW5pbWF0aW5nTGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAwMDAsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC01ODcsOCArNTkwLDggQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZEFuaW1hdGluZ0xheWVy
KQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudFJlY3QpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwg
Y29udGVudFJlY3QsIDApOwogCiAgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMu
CkBAIC02MTksNyArNjIyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQ
YWludE5vblZpc2libGVMYXllcnMpCiAgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDEwMCwgMTAw
KTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3Vu
ZHMpOwogCi0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAwMDAs
IDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMjQp
OwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDAp
KSk7CkBAIC02MzEsOCArNjM0LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlk
bGVQYWludE5vblZpc2libGVMYXllcnMpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
dmlzaWJsZVJlY3QpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAK
LSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCB2aXNpYmxlUmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVw
ZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAKICAgICAvLyBOb24tdmlz
aWJsZSBsYXllcnMgZG9uJ3QgbmVlZCBpZGxlIHBhaW50LgpAQCAtNjY0LDcgKzY2Nyw3IEBAIHN0
YXRpYyB2b2lkIHRlc3RIYXZlT3V0ZXJUaWxlcyhGYWtlQ0NUaWxlZExheWVySW1wbCogbGF5ZXJJ
bXBsLCBpbnQgd2lkdGgsIGludCBoCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBp
ZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoODAwMCo4MDAwKjgsIDgwMDAqODAwMCo0LCAxMDI0KTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCAxMDI0KTsKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKIAogICAgIGludCB0aWxlV2lkdGgg
PSBGYWtlVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSgpLndpZHRoKCk7CkBAIC02ODgsOCAr
NjkxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2li
bGVBbmltYXRpbmdMYXllcnMpCiAgICAgICAgICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dCh2aXNpYmxlUmVjdCk7CiAgICAgICAgICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVu
dFJlY3QpOwogCi0gICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3Qo
cHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAgICAgICAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICAgICAgICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAgICAgICAgIC8vIElmIGlkbGVQYWlu
dFJlY3QgZ2l2ZXMgYmFjayBhIG5vbi1lbXB0eSByZXN1bHQgdGhlbiB3ZSBzaG91bGQgcGFpbnQg
aXQuIE90aGVyd2lzZSwKICAgICAgICAgICAgIC8vIHdlIHNob3VkIHBhaW50IG5vdGhpbmcuCkBA
IC03MDUsMTYgKzcwOCwxNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBh
aW50Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVycykKICAgICAgICAgICAgIHRlc3RIYXZlT3V0ZXJU
aWxlcyhsYXllckltcGwuZ2V0KCksIHdpZHRoW2ldLCBoZWlnaHRbal0sIDApOwogCiAgICAgICAg
ICAgICAvLyBTZXQgcHJpb3JpdGllcyBhbmQgcmVjcmVhdGUgdGlsZXMuCi0gICAgICAgICAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNp
YmxlUmVjdCk7Ci0gICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
MCk7CiAKICAgICAgICAgICAgIC8vIE5vcm1hbGx5IHdlIGRvbid0IGFsbG93IG5vbi12aXNpYmxl
IGxheWVycyB0byBwcmUtcGFpbnQsIGJ1dCBpZiB0aGV5IGFyZSBhbmltYXRpbmcgdGhlbiB3ZSBz
aG91bGQuCiAgICAgICAgICAgICBFWFBFQ1RfRVEoc2hvdWxkUHJlcGFpbnQsIGxheWVyLT5uZWVk
c0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXIg
aXMgdG8gYmUgcHJlcGFpbnRlZCBhdCBhbGwsIHRoZW4gYWZ0ZXIgZm91ciB1cGRhdGVzIHdlIHNo
b3VsZCBoYXZlIHRoZSBvdXRlciByb3cvY29sdW1ucyBwYWludGVkLgogICAgICAgICAgICAgZm9y
IChpbnQgayA9IDA7IGsgPCA0OyArK2spIHsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
ICAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0
b3IpOworICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
MCk7CiAKICAgICAgICAgICAgICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZp
c2libGVSZWN0LCAwKTsKICAgICAgICAgICAgICAgICBsYXllci0+aWRsZVVwZGF0ZUxheWVyUmVj
dCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CkBAIC03MjYsOCArNzI5LDggQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMp
CiAgICAgICAgICAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgaWRsZSBwYWludCBwYXN0IHRoZSBv
dXRlcm1vc3QgdGlsZXMuCiAgICAgICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRs
ZVBhaW50KHZpc2libGVSZWN0KSk7CiAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7
ICsraykgewotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgICAgICAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAgICAgICAgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICAg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgICAgICAgICAg
ICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAg
ICAgICAgICAgICAgIGxheWVyLT5pZGxlVXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVS
ZWN0LCAwKTsKQEAgLTc0MSw3ICs3NDQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVycykKIAogVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGludmFsaWRhdGVGcm9tUHJlcGFyZSkKIHsKLSAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7Cisg
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsK
QEAgLTc1Myw5ICs3NTYsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGludmFs
aWRhdGVGcm9tUHJlcGFyZSkKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28g
dGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKICAgICB1cGRhdGVyLnVwZGF0ZShjY0Nv
bnRleHQuZ2V0KCksICZmYWtlQWxsb2NhdG9yLCAmZmFrZUNvcGllciwgJmZha2VVcGxvYWRlciwg
MTAwMCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAg
LTc5MCw3ICs3OTQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBk
YXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIC8vIFRoZSB1cGRhdGVSZWN0
ICh0aGF0IGluZGljYXRlcyB3aGF0IHdhcyBhY3R1YWxseSBwYWludGVkKSBzaG91bGQgYmUgaW4K
ICAgICAvLyBsYXllciBzcGFjZSwgbm90IHRoZSBjb250ZW50IHNwYWNlLgogCi0gICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQp
OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQp
OwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogCiAgICAgSW50UmVjdCBsYXllckJvdW5kcygwLCAwLCAzMDAsIDIwMCk7CkBAIC04
MDQsMTUgKzgwOCwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBk
YXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIC8vIEhvd2V2ZXIsIGl0IHNo
b3VsZCBzdGlsbCBiZSBpbiBsYXllciBzcGFjZSwgbm90IGNvbnRlbnQgc3BhY2UuCiAgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOwogCi0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBjb250ZW50Qm91bmRzLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJl
Y3QoMCwgMCwgMzAwLCAzMDAgKiAwLjgpLCBsYXllci0+dXBkYXRlUmVjdCgpKTsKICAgICB1cGRh
dGVUZXh0dXJlcygpOwogCiAgICAgLy8gQWZ0ZXIgdGhlIHRpbGVzIGFyZSB1cGRhdGVkIG9uY2Us
IGFub3RoZXIgaW52YWxpZGF0ZSBvbmx5IG5lZWRzIHRvIHVwZGF0ZSB0aGUgYm91bmRzIG9mIHRo
ZSBsYXllci4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2Fs
Y3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CiAgICAgbGF5ZXItPnVwZGF0
ZUxheWVyUmVjdCh1cGRhdGVyLCBjb250ZW50Qm91bmRzLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QobGF5ZXJCb3VuZHMpLCBsYXllci0+dXBkYXRlUmVjdCgpKTsKQEAg
LTgyMSwyOSArODI1LDMwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlV
cGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiAgICAgLy8gUGFydGlhbCByZS1w
YWludCBzaG91bGQgYWxzbyBiZSByZXByZXNlbnRlZCBieSB0aGUgdXBkYXRlUmVjdCBpbiBsYXll
ciBzcGFjZSwgbm90IGNvbnRlbnQgc3BhY2UuCiAgICAgSW50UmVjdCBwYXJ0aWFsRGFtYWdlKDMw
LCAxMDAsIDEwLCAxMCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KHBhcnRpYWxEYW1hZ2Up
OwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgY29udGVudEJvdW5kcywgMCk7CiAgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDQ1LCA4MCwgMTUsIDgpLCBsYXllci0+dXBkYXRlUmVj
dCgpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRh
dGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIC8v
IENyZWF0ZSBhIGxheWVyIHdpdGggb25lIHRpbGUuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDEwMCwgMTAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOwogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxheWVyLgog
ICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShG
bG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci0+bGFzdE5lZWRzRGlzcGxheVJlY3QoKSk7
CiAKICAgICAvLyBQdXNoIHRoZSB0aWxlcyB0byB0aGUgaW1wbCBzaWRlIGFuZCBjaGVjayB0aGF0
IHRoZXJlIGlzIGV4YWN0bHkgb25lLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAg
IGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC04NTUsMTEgKzg2
MCwxMiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9u
V2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIC8vIENoYW5nZSB0aGUgY29udGVudHMgc2Nh
bGUgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb250ZW50IHJlY3RhbmdsZSByZXF1aXJpbmcgcGFpbnRp
bmcKICAgICAvLyBpcyBub3Qgc2NhbGVkLgogICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKDIp
OworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMjAwLCAyMDAp
KTsKICAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCBs
YXllci0+bGFzdE5lZWRzRGlzcGxheVJlY3QoKSk7CiAKICAgICAvLyBUaGUgaW1wbCBzaWRlIHNo
b3VsZCBnZXQgMngyIHRpbGVzIG5vdy4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJ
blJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDIwMCwgMjAwKSk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVy
LCBJbnRSZWN0KDAsIDAsIDIwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAg
ICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpAQCAtODcxLDkgKzg3
Nyw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25X
aGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxh
eWVyIGFnYWluLCBidXQgZG8gbm90IHBhaW50LiBBbGwgdGlsZXMgc2hvdWxkIGJlIGdvbmUgbm93
IGZyb20gdGhlCiAgICAgLy8gaW1wbCBzaWRlLgogICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBJbnRSZWN0KDAsIDAsIDIwMCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1
cGRhdGVyLCBJbnRSZWN0KDEsIDAsIDAsIDEpLCAwKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwKTsKIAogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKQEAgLTg5NiwxNSAr
OTAyLDE2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVz
ZXQpCiAKICAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkgb25lIG9mIHRoZSB0
d28gbGF5ZXJzLgogICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAzMDAgKiAzMDA7IC8vIDQgYnl0
ZXMgcGVyIHBpeGVsLgotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5
TGltaXQsIG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCk7CiAKLSAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gY2hpbGRMYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IHJvb3RMYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKGNjTGF5
ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKSk7CisgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGNoaWxkTGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOwog
ICAgIHJvb3RMYXllci0+YWRkQ2hpbGQoY2hpbGRMYXllcik7CiAKICAgICByb290TGF5ZXItPnNl
dEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICByb290TGF5ZXItPnNldFZpc2libGVMYXllclJl
Y3QoY29udGVudFJlY3QpOwogICAgIHJvb3RMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgx
NTAsIDE1MCkpOwogICAgIGNoaWxkTGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAg
ICBjaGlsZExheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKICAgICBjaGls
ZExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE1MCwgMTUwKSk7CiAgICAgcm9vdExheWVy
LT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAgICAgY2hpbGRMYXllci0+aW52YWxpZGF0
ZVJlY3QoY29udGVudFJlY3QpOwpAQCAtOTEyLDkgKzkxOSw2IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgY2NMYXllclRyZWVIb3N0LT5z
ZXRSb290TGF5ZXIocm9vdExheWVyKTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0
U2l6ZShJbnRTaXplKDMwMCwgMzAwKSk7CiAKLSAgICBjaGlsZExheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAgICByb290
TGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29u
dGVudFJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKICAg
ICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBtZW1vcnlMaW1pdCk7CiAK
ICAgICAvLyBXZSdsbCBza2lwIHRoZSByb290IGxheWVyLgpAQCAtOTI2LDE0ICs5MzAsMTAgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKICAgICAv
LyBSZW1vdmUgdGhlIGNoaWxkIGxheWVyLgogICAgIHJvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKIAotICAgIC8vIERyb3AgdGV4dHVyZSBwcmlvcml0aWVzIG9uIHRoZSBjaGlsZC4KLSAg
ICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7Ci0KLSAgICByb290TGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudFJlY3Qp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKICAgICBjY0xheWVy
VHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBtZW1vcnlMaW1pdCk7CiAgICAgRVhQRUNU
X0ZBTFNFKHJvb3RMYXllci0+c2tpcHNEcmF3KCkpOwogCisgICAgY2NMYXllclRyZWVIb3N0LT5j
b250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KCZhbGxvY2F0b3IpOwogICAg
IGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwogICAgIGNjTGF5ZXJUcmVlSG9zdC5j
bGVhcigpOwogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKQEAgLTk0MSwx
NCArOTQxLDE1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRz
UmVzZXQpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIp
CiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDYw
KjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2
MCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoNzAwLCA3MDApKTsKKyAg
ICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7CiAg
ICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKIAotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIElu
dFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3Vs
YXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBs
YXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNzAwLCA3MDApLCAw
KTsKIAogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgyMDAsIDIwMCkpOwpAQCAtOTU3LDE2
ICs5NTgsMTcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHJlc2l6ZVRvU21hbGxl
cikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGh1Z2VMYXllclVwZGF0ZUNyYXNo
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0LCA2
MCoxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NjAqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogCiAgICAgaW50IHNpemUgPSAxIDw8IDMwOwogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZShzaXplLCBzaXplKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRS
ZWN0KDAsIDAsIHNpemUsIHNpemUpKTsKIAogICAgIC8vIEVuc3VyZSBubyBjcmFzaCBmb3IgYm91
bmRzIHdoZXJlIHNpemUgKiBzaXplIHdvdWxkIG92ZXJmbG93IGFuIGludC4KLSAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAs
IDAsIDcwMCwgNzAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVw
ZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSwgMCk7CiB9CiAK
QEAgLTk4Miw3ICs5ODQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlh
bFVwZGF0ZXMpCiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGUoJmZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHNldHRp
bmdzKTsKICAgICBBU1NFUlRfVFJVRShjY0xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVMYXllclJl
bmRlcmVySWZOZWVkZWQoKSk7CiAKLSAgICAvLyBDcmVhdGUgb25lIDUwMCB4IDMwMCB0aWxlZCBs
YXllci4KKyAgICAvLyBDcmVhdGUgb25lIDMwMCB4IDIwMCB0aWxlZCBsYXllciB3aXRoIDMgeCAy
IHRpbGVzLgogICAgIEludFNpemUgY29udGVudEJvdW5kcygzMDAsIDIwMCk7CiAgICAgSW50UmVj
dCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKIApAQCAtMTA5
Nyw3ICsxMDk5LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRh
dGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aG91
dE9jY2x1c2lvbikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28g
dGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgpAQCAtMTEwNSwxNSAr
MTEwNywxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0
aG91dE9jY2x1c2lvbikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwg
MTAwLCAyMDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlv
cml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3Qo
MCwgMCwgMTAwLCAyMDApLCAwKTsKICAgICBFWFBFQ1RfRVEoMiwgbGF5ZXItPmZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogewotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0
KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0
KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTExMjYsOCArMTEyOCw4IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQog
ICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXIt
PmJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAw
LCA2MDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
KHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwg
MCwgNjAwLCA2MDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgzNi0zLCBsYXllci0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApAQCAtMTE2MCw3
ICsxMTYyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdp
dGhPY2NsdXNpb24pCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50
ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwog
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdEND
T2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTE3NCw4ICsxMTc2LDggQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNp
YmxpdHlDb25zdHJhaW50cykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0
KDAsIDAsIDYwMCwgMzYwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwg
MCwgNjAwLCA2MDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCAzNjApKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJl
Y3QoMCwgMCwgNjAwLCAzNjApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgyNC0zLCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApAQCAt
MTE4OSw4ICsxMTkxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFp
bnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKICAgICBvY2NsdWRlZC5z
ZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAxNTApKTsKICAgICBsYXllci0+c2V0
VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgMzUwKSk7CiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYw
MCwgMzUwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxh
eWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzUwKSwgJm9jY2x1ZGVkKTsKICAg
ICBFWFBFQ1RfRVEoMjQtNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVSZWN0Q291bnQoKSk7CiAKQEAgLTEyMDQsOCArMTIwNiw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3Ry
YWludHMpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwg
MTUwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA2MDAs
IDM0MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAw
KSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3Vs
YXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDM0MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAp
OwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAs
IDM0MCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMjE3LDcgKzEyMTks
NyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1
c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlvbikKIHsKLSAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7
CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7
CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0
Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMjI5LDggKzEyMzEsOCBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRh
dGlvbikKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAx
MDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwg
NjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDAp
KTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0
eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7
CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwg
NjAwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAgICAgdXBkYXRlVGV4dHVyZXMo
KTsKQEAgLTEyNTIsNyArMTI1NCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0
aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiB7Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEw
MjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTI2OSw4ICsxMjcx
LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2Ns
dXNpb25BbmRUcmFuc2Zvcm1zKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDEw
MCwgMTAwLCAxNTAsIDUwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJl
Y3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVw
ZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9F
USgzNi0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3Vu
dCgpKTsKIApAQCAtMTI4MSw3ICsxMjgzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRUcmFuc2Zvcm1zKQogCiBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcp
CiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMiox
MDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTI5Nyw4
ICsxMjk5LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdp
dGhPY2NsdXNpb25BbmRTY2FsaW5nKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0
KDIwMCwgMjAwLCAzMDAsIDEwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmludmFsaWRh
dGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAw
KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVj
dCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkKTsKICAgICAvLyBU
aGUgY29udGVudCBpcyBoYWxmIHRoZSBzaXplIG9mIHRoZSBsYXllciAoc28gdGhlIG51bWJlciBv
ZiB0aWxlcyBpcyBmZXdlcikuCiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgY29udGVudCBpcyAz
MDB4MzAwLCBhbmQgc2luY2UgdGhlIHRpbGUgc2l6ZSBpcyAxMDAsIHRoZQpAQCAtMTMxNyw4ICsx
MzE5LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb25BbmRTY2FsaW5nKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDIw
MCwgMjAwLCAzMDAsIDIwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1
cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1Rf
RVEoOS0xLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3Vu
dCgpKTsKIApAQCAtMTMzNyw4ICsxMzM5LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2FsaW5nKQogICAgIG9jY2x1ZGVkLnNl
dE9jY2x1c2lvbihJbnRSZWN0KDEwMCwgMTAwLCAxNTAsIDEwMCkpOwogICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7CiAg
ICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRS
ZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0
b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9j
Y2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoOS0xLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApAQCAtMTM0OSw3ICsxMzUxLDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2Fs
aW5nKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFx
dWVSZWdpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApA
QCAtMTM2Niw4ICsxMzY4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2li
bGVDb250ZW50T3BhcXVlUmVnaW9uKQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZp
c2libGVCb3VuZHMpOwogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKIAotICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRC
b3VuZHMpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgLy8gSWYgdGhlIGxheWVy
IGRvZXNuJ3QgcGFpbnQgb3BhcXVlIGNvbnRlbnQsIHRoZW4gdGhlIHZpc2libGVDb250ZW50T3Bh
cXVlUmVnaW9uIHNob3VsZCBiZSBlbXB0eS4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CkBAIC0xNDUwLDcgKzE0NTIs
NyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVS
ZWdpb24pCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0
cmljcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0x
NDY3LDggKzE0NjksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFp
bnRlZE1ldHJpY3MpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUJvdW5k
cyk7CiAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCi0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAvLyBJbnZhbGlkYXRlcyBhbmQgcGFpbnRz
IHRoZSB3aG9sZSBsYXllci4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CkBAIC0xNTAxLDYgKzE1MDMsMTYwIEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmljcykKICAgICBF
WFBFQ1RfRVEoMCwgb2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkudGlsZXNDdWxsZWRGb3JVcGxv
YWQoKSk7CiB9CiAKK1RFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBkb250QWxsb2NhdGVD
b250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2NhdGVkKQoreworICAgIC8vIEluaXRp
YWxpemUgd2l0aG91dCB0aHJlYWRpbmcgc3VwcG9ydC4KKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0
b3I6OmluaXRpYWxpemUoMCk7CisKKyAgICAvLyBUaWxlIHNpemUgaXMgMTAweDEwMC4KKyAgICBJ
bnRSZWN0IHJvb3RSZWN0KDAsIDAsIDMwMCwgMjAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgw
LCAwLCAzMDAsIDEwMCk7CisgICAgSW50UmVjdCBjaGlsZDJSZWN0KDAsIDEwMCwgMzAwLCAxMDAp
OworCisgICAgQ0NMYXllclRyZWVTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBGYWtlQ0NMYXllclRy
ZWVIb3N0Q2xpZW50IGZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQ7CisgICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoJmZh
a2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHNldHRpbmdzKTsKKyAgICBBU1NFUlRfVFJVRShjY0xh
eWVyVHJlZUhvc3QtPmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKSk7CisKKyAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gcm9vdCA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHN1cmZhY2UgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBj
aGlsZDIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhv
c3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworCisgICAgcm9vdC0+c2V0Qm91bmRzKHJv
b3RSZWN0LnNpemUoKSk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsK
KyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHJvb3RSZWN0KTsKKyAgICByb290LT5hZGRD
aGlsZChzdXJmYWNlKTsKKworICAgIHN1cmZhY2UtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVl
KTsKKyAgICBzdXJmYWNlLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkpOworICAgIHN1cmZh
Y2UtPnNldE9wYWNpdHkoMC41KTsKKyAgICBzdXJmYWNlLT5hZGRDaGlsZChjaGlsZCk7CisgICAg
c3VyZmFjZS0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgIGNoaWxkLT5zZXRCb3VuZHMoY2hpbGRS
ZWN0LnNpemUoKSk7CisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7Cisg
ICAgY2hpbGQtPnNldFBvc2l0aW9uKGNoaWxkUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjaGlsZC0+
c2V0VmlzaWJsZUxheWVyUmVjdChjaGlsZFJlY3QpOworCisgICAgY2hpbGQyLT5zZXRCb3VuZHMo
Y2hpbGQyUmVjdC5zaXplKCkpOworICAgIGNoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgpKTsKKyAgICBjaGlsZDItPnNldFBvc2l0aW9uKGNoaWxkMlJlY3QubG9jYXRpb24oKSk7Cisg
ICAgY2hpbGQyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNoaWxkMlJlY3QpOworCisgICAgY2NMYXll
clRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgY2NMYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUocm9vdFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIFdpdGggYSBodWdlIG1lbW9y
eSBsaW1pdCwgYWxsIGxheWVycyBzaG91bGQgdXBkYXRlIGFuZCBwdXNoIHRoZWlyIHRleHR1cmVz
LgorICAgIHJvb3QtPmludmFsaWRhdGVSZWN0KHJvb3RSZWN0KTsKKyAgICBjaGlsZC0+aW52YWxp
ZGF0ZVJlY3QoY2hpbGRSZWN0KTsKKyAgICBjaGlsZDItPmludmFsaWRhdGVSZWN0KGNoaWxkMlJl
Y3QpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOwor
ICAgICAgICBFWFBFQ1RfRVEoNiwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBk
YXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgzLCBjaGlsZC0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgzLCBjaGlsZDIt
PmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKKworICAgICAgICByb290LT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxk
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAg
IGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwor
CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbChjaGlsZC0+aWQoKSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBjaGlsZDJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZDIt
PmlkKCkpKSk7CisgICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkp
OworICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkpOworICAg
ICAgICBjaGlsZDItPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7CisKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShy
b290SW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKGNoaWxkSW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKGNoaWxkMkltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgp
OworCisgICAgLy8gV2l0aCBhIG1lbW9yeSBsaW1pdCB0aGF0IGluY2x1ZGVzIG9ubHkgdGhlIHJv
b3QgbGF5ZXIgKDN4MiB0aWxlcykgYW5kIGhhbGYgdGhlIHN1cmZhY2UgdGhhdAorICAgIC8vIHRo
ZSBjaGlsZCBsYXllcnMgZHJhdyBpbnRvLCB0aGUgY2hpbGQgbGF5ZXJzIHdpbGwgbm90IGJlIGFs
bG9jYXRlZC4gSWYgdGhlIHN1cmZhY2UgaXNuJ3QKKyAgICAvLyBhY2NvdW50ZWQgZm9yLCB0aGVu
IG9uZSBvZiB0aGUgY2hpbGRyZW4gd291bGQgZml0IHdpdGhpbiB0aGUgbWVtb3J5IGxpbWl0Lgor
ICAgIHJvb3QtPmludmFsaWRhdGVSZWN0KHJvb3RSZWN0KTsKKyAgICBjaGlsZC0+aW52YWxpZGF0
ZVJlY3QoY2hpbGRSZWN0KTsKKyAgICBjaGlsZDItPmludmFsaWRhdGVSZWN0KGNoaWxkMlJlY3Qp
OworICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsICgzICogMiArIDMg
KiAxKSAqICgxMDAgKiAxMDApICogNCk7CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CisgICAg
ICAgIEVYUEVDVF9FUSg2LCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVD
b3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGNoaWxkMi0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh1cGRhdGVyLmhhc01vcmVVcGRhdGVzKCkpOworCisgICAgICAgIHJvb3QtPmZha2VMYXll
clRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgY2hpbGQtPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgY2hp
bGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisKKyAg
ICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiByb290SW1wbChhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwocm9vdC0+aWQoKSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBjaGlsZEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsKGNoaWxkLT5pZCgpKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGNoaWxkMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQo
KSkpKTsKKyAgICAgICAgcm9vdC0+cHVzaFByb3BlcnRpZXNUbyhyb290SW1wbC5nZXQoKSk7Cisg
ICAgICAgIGNoaWxkLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkSW1wbC5nZXQoKSk7CisgICAgICAg
IGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgMjsgKytqKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJvb3RJ
bXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgaikpOworICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKGNoaWxkSW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRShjaGlsZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsK
KworICAgIC8vIFdpdGggYSBtZW1vcnkgbGltaXQgdGhhdCBpbmNsdWRlcyBvbmx5IGhhbGYgdGhl
IHJvb3QgbGF5ZXIsIG5vIGNvbnRlbnRzIHdpbGwgYmUKKyAgICAvLyBhbGxvY2F0ZWQuIElmIHJl
bmRlciBzdXJmYWNlIG1lbW9yeSB3YXNuJ3QgYWNjb3VudGVkIGZvciwgdGhlcmUgaXMgZW5vdWdo
IHNwYWNlCisgICAgLy8gZm9yIG9uZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzLCBidXQgdGhleSBk
cmF3IGludG8gYSBzdXJmYWNlIHRoYXQgY2FuJ3QgYmUKKyAgICAvLyBhbGxvY2F0ZWQuCisgICAg
cm9vdC0+aW52YWxpZGF0ZVJlY3Qocm9vdFJlY3QpOworICAgIGNoaWxkLT5pbnZhbGlkYXRlUmVj
dChjaGlsZFJlY3QpOworICAgIGNoaWxkMi0+aW52YWxpZGF0ZVJlY3QoY2hpbGQyUmVjdCk7Cisg
ICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgKDMgKiAxKSAqICgxMDAg
KiAxMDApICogNCk7CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKKyAgICAgICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CisgICAgICAgIEVYUEVDVF9F
USgwLCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDAsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRh
dGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1cGRhdGVy
Lmhhc01vcmVVcGRhdGVzKCkpOworCisgICAgICAgIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgY2hpbGQtPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgY2hpbGQyLT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisKKyAgICAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiByb290SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwocm9vdC0+aWQoKSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBjaGlsZEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkLT5p
ZCgpKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKKyAgICAg
ICAgcm9vdC0+cHVzaFByb3BlcnRpZXNUbyhyb290SW1wbC5nZXQoKSk7CisgICAgICAgIGNoaWxk
LT5wdXNoUHJvcGVydGllc1RvKGNoaWxkSW1wbC5nZXQoKSk7CisgICAgICAgIGNoaWxkMi0+cHVz
aFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgMjsgKytqKQorICAgICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShyb290SW1wbC0+aGFzVGV4
dHVyZUlkRm9yVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZElt
cGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFM
U0UoY2hpbGQySW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICBjY0xh
eWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y2xlYXJBbGxNZW1vcnkoJmFs
bG9jYXRvcik7CisgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAgY2NM
YXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93
bigpOworfQorCiBjbGFzcyBUcmFja2luZ0xheWVyUGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50
ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VHJhY2tpbmdMYXll
clBhaW50ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFja2luZ0xheWVyUGFp
bnRlcigpKTsgfQpAQCAtMTU0Miw3ICsxNjk4LDcgQEAgcHJpdmF0ZToKIAogVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWRE
dXJpbmdQYWludCkKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlcihDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAw
LCA0MDAwMDAwLCA0MDAwMDAwKSk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NDAwMDAwMCwgNDAwMDAwMCkpOwogICAgIENDUHJpb3JpdHlDYWxjdWxhdG9yIGNhbGN1bGF0b3I7
CiAKICAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0g
YWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CkBAIC0xNTU3LDYgKzE3MTMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ1BhaW50
KQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKIAogICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhjYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgLy8gVXBkYXRlIHRoZSB3aG9sZSB0aWxl
LgogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgY29udGVudFJlY3QsIDApOwpA
QCAtMTU3NSw3ICsxNzMyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbklu
dGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQYWludCkKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0
ZWREdXJpbmdJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNDAwMDAwMCwgNDAwMDAwMCwgNDAwMDAwMCkpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDApKTsKICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvciBj
YWxjdWxhdG9yOwogCiAgICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bSh0
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwpAQCAtMTU4OSw2ICsxNzQ2LDcgQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWRE
dXJpbmdJbnZhbGkKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7
CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMoY2FsY3VsYXRvcik7CisgICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUg
d2hvbGUgdGlsZS4KICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRS
ZWN0LCAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150794</attachid>
            <date>2012-07-04 07:52:30 -0700</date>
            <delta_ts>2012-07-04 08:20:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120704105228.patch</filename>
            <type>text/plain</type>
            <size>110728</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY1NjA1NGEwMjI5YmI2
MDg3NzUxM2NkMDQ2OWJlYjAyMGE4OTk3OC4uNTJlNThkN2JhYjIxOGNmMmIzZjEzOTdkMjg5NGVl
YzhiMWYwY2U0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA2LTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBTaW5j
ZSBzdXJmYWNlIG1lbW9yeSBjYW4gbm8gbG9uZ2VyIGJlIHRha2VuIGJ5IGNvbnRlbnRzLCB3ZSBy
ZW1vdmUgdGhlCisgICAgICAgIHByZWZlcnJlZCBtZW1vcnkgbGltaXQgZnJvbSB0aGUgdGV4dHVy
ZSBtYW5hZ2VyLgorCisgICAgICAgIFRlc3RzOiBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmRvbnRB
bGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2F0ZWQKKyAgICAgICAg
ICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5yZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9y
eUF2YWlsYWJsZU91dHNpZGVSb290U3VyZmFjZQorICAgICAgICAgICAgICAgQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LnJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVz
dExhdGUKKyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC53aGVuUmVuZGVy
U3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZQorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojpwcmlvcml0aXplVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDT3ZlcmRyYXdNZXRyaWNzOjpDQ092ZXJkcmF3TWV0cmljcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3TWV0cmlj
czo6ZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1cmVNZW1vcnlCeXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oOgorICAg
ICAgICAoQ0NPdmVyZHJhd01ldHJpY3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnBy
aW9yaXRpemVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OnJlcXVlc3RMYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjptZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVzKToKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNh
bGN1bGF0b3I6OnVpUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1
bGF0b3I6OnZpc2libGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJpb3JpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21W
aXNpYmlsaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXR5Q2FsY3VsYXRvci5oOgorICAgICAgICAoQ0NQcmlvcml0eUNhbGN1bGF0b3IpOgorCiAy
MDEyLTA3LTA0ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQ29ycmVjdGx5IHJlamVjdCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHdpdGgg
Y2VydGFpbiByb3RhdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZkYjUxMDIz
MTJkODg1NGEwNDI1YmRiZmIyODEwODFjYjZiY2NjNDEuLjU5ZDdmZWQyM2M0ZDU3ODdiMWE4YWI2
ZjA1OTNkMzUzMGYzZDk0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTItMDYtMjkgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBSZXNwZWN0IG1lbW9yeSBuZWVkZWQgZm9yIFJlbmRlclN1cmZh
Y2VzIHdoZW4gcmVzZXJ2aW5nIGNvbnRlbnRzIHRleHR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTkwMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0OjpjcmVhdGVN
YW5hZ2VyKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURik6CisgICAgICAg
ICogdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMpOgorICAgICAg
ICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24u
aDoKKyAgICAgICAgKEZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHRlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA3LTA0ICBJYW4gVm9sbGljayAgPHZv
bGxpY2tAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ29ycmVjdGx5IHJlamVj
dCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHdpdGggY2VydGFpbiByb3RhdGlvbnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBkZGQ3ZDUxNTMzZTVlODI4MGUwY2Jh
ZDAzYTM4MjRhMGMwNGFmZWRhLi44MzVkZmJkN2YxOTdjMDk0ZDc0OTM0ODkxNGNiYzY0YWY4ODE5
N2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUwNCw2ICs1
MDQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJz
KGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdQogICAgIC8vCiAgICAgLy8gUGl4ZWwgY29w
aWVzIGluIHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFuZCA1LgogCisg
ICAgLy8gRklYTUU6IFdoZW4gdGhpcyBhbGdvcml0aG0gY2hhbmdlcywgdXBkYXRlIENDTGF5ZXJU
cmVlSG9zdDo6cHJpb3JpdGl6ZVRleHR1cmVzKCkgYWNjb3JkaW5nbHkuCisKICAgICBDQ1JlbmRl
clN1cmZhY2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJm
YWNlKCk7CiAgICAgaWYgKHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGRkNmE0M2QwMjk4NzdiNzFkMGUyODgxZmI1ZDVjOTg2ZTRlNWM1OGYuLjc1ODBiNjMzNzk5NGFl
MzYzN2ExMmRkOTEzOTM4YmE2M2E2Mzc4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwCkBAIC0yNTgsMTggKzI1OCwxOSBAQCB2b2lkIFNjcm9sbGJhckxheWVyQ2hy
b21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJikK
IAogICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKIAorICAgIGJvb2wgZHJhd3NU
b1Jvb3RTdXJmYWNlID0gIXRhcmdldFJlbmRlclN1cmZhY2UoKS0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpOwogICAgIGlmIChtX2JhY2tUcmFjaykgewogICAgICAgICBtX2JhY2tUcmFjay0+dGV4dHVy
ZSgpLT5zZXREaW1lbnNpb25zKGNvbnRlbnRCb3VuZHMoKSwgbV90ZXh0dXJlRm9ybWF0KTsKLSAg
ICAgICAgbV9iYWNrVHJhY2stPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3Jp
dHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KCkpOworICAgICAgICBtX2JhY2tUcmFjay0+dGV4dHVy
ZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHko
ZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgfQogICAgIGlmIChtX2ZvcmVUcmFjaykgewogICAg
ICAgICBtX2ZvcmVUcmFjay0+dGV4dHVyZSgpLT5zZXREaW1lbnNpb25zKGNvbnRlbnRCb3VuZHMo
KSwgbV90ZXh0dXJlRm9ybWF0KTsKLSAgICAgICAgbV9mb3JlVHJhY2stPnRleHR1cmUoKS0+c2V0
UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KCkpOworICAg
ICAgICBtX2ZvcmVUcmFjay0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0
eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgfQogICAg
IGlmIChtX3RodW1iKSB7CiAgICAgICAgIEludFNpemUgdGh1bWJTaXplID0gdGhlbWUoKS0+dGh1
bWJSZWN0KG1fc2Nyb2xsYmFyLmdldCgpKS5zaXplKCk7CiAgICAgICAgIG1fdGh1bWItPnRleHR1
cmUoKS0+c2V0RGltZW5zaW9ucyh0aHVtYlNpemUsIG1fdGV4dHVyZUZvcm1hdCk7Ci0gICAgICAg
IG1fdGh1bWItPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxh
dG9yOjp1aVByaW9yaXR5KCkpOworICAgICAgICBtX3RodW1iLT50ZXh0dXJlKCktPnNldFJlcXVl
c3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eShkcmF3c1RvUm9vdFN1
cmZhY2UpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGFiMmY1YmVjYzUyNDI1OWQ3YzBiOTkyMWExMmE0YTViMjc2YmQzZWEuLjY1Y2VhYzgyYTQyYWJk
N2UzYzlmYWIxMTE3MzhmMTY4NTBjYmU4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcApAQCAtNTIzLDYgKzUyMyw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAgICByZXNl
dFVwZGF0ZVN0YXRlKCk7CiAKICAgICBJbnRSZWN0IHByZXBhaW50UmVjdCA9IGlkbGVQYWludFJl
Y3QodmlzaWJsZVJlY3QpOworICAgIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlID0gIXRhcmdldFJl
bmRlclN1cmZhY2UoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOwogCiAgICAgLy8gTWluaW1hbGx5
IGNyZWF0ZSB0aGUgdGlsZXMgaW4gdGhlIGRlc2lyZWQgcHJlLXBhaW50IHJlY3QuCiAgICAgaWYg
KCFwcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CkBAIC01NTgsNyArNTU5LDcgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3Jp
dHlDYWxjdWxhdG9yJgogCiAgICAgICAgICAgICAgICAgdGlsZS0+ZGlydHlSZWN0ID0gbV90aWxl
ci0+dGlsZVJlY3QodGlsZSk7CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogYmFja0J1ZmZlciA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAgICAgICAgICBi
YWNrQnVmZmVyLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUNhbGMucHJp
b3JpdHlGcm9tVmlzaWJpbGl0eSh0cnVlKSk7CisgICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+
dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbVZp
c2liaWxpdHkodHJ1ZSwgZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgICAgICAgICAgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiBmcm9udEJ1ZmZlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpjcmVhdGUoYmFja0J1ZmZlci0+dGV4dHVyZSgpLT50ZXh0dXJlTWFuYWdlcigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+c2l6ZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+
Zm9ybWF0KCkpOwpAQCAtNTc4LDkgKzU3OSw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpz
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAg
ICAgICAgLy8gNTEyIHBpeGVscyBvZiBwcmUtcGFpbnRpbmcuIExhdGVyIHdlIGNhbiBqdXN0IHBh
c3MgYW4gYW5pbWF0aW5nIGZsYWcgZXRjLiB0byB0aGUKICAgICAgICAgLy8gY2FsY3VsYXRvciBh
bmQgaXQgY2FuIHRha2UgY2FyZSBvZiB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBzdGlsbCBuZWVk
IGl0LgogICAgICAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpICYmICFwcmVwYWludFJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+c2V0UmVxdWVz
dFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSg1MTIpKTsKKyAgICAg
ICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0
eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyLCBkcmF3c1RvUm9vdFN1cmZhY2UpKTsKICAg
ICAgICAgZWxzZSBpZiAoIXZpc2libGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRpbGUt
Pm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUNhbGMucHJpb3Jp
dHlGcm9tRGlzdGFuY2UodmlzaWJsZVJlY3QsIHRpbGVSZWN0KSk7CisgICAgICAgICAgICB0aWxl
LT5tYW5hZ2VkVGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9y
aXR5RnJvbURpc3RhbmNlKHZpc2libGVSZWN0LCB0aWxlUmVjdCwgZHJhd3NUb1Jvb3RTdXJmYWNl
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGUzY2I3M2Zh
YmRjY2RiYTFmNjUzMTcxMzczZGUyYWJlNWZiOWNhYTUuLmNkZTU1MmMwOWUyOWUyMjZkMDRkNWZm
MWRjOWUyNjg5MDljNWFmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC04Miw4
ICs4Miw2IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXNldCBzdGF0ZSBvbiB0aWxlcyB0aGF0IHdp
bGwgYmUgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIGxheWVyLgogICAgIHZvaWQgcmVzZXRVcGRhdGVT
dGF0ZSgpOwogCi0gICAgdm9pZCBzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1By
aW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpOwotCiAg
ICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNl
Y3Qgd2l0aCBsYXllclJlY3QuCiAgICAgdm9pZCB1cGRhdGVMYXllclJlY3QoQ0NUZXh0dXJlVXBk
YXRlciYsIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2Vy
Kik7CiAKQEAgLTEwOSw2ICsxMDcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgdGlsZU9ubHlOZWVk
c1BhcnRpYWxVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogICAgIGJvb2wgdGlsZU5lZWRzQnVmZmVy
ZWRVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogCisgICAgdm9pZCBzZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3QmIHZpc2li
bGVMYXllclJlY3QpOworCiAgICAgdm9pZCB1cGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0
LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIENDVGV4dHVyZVVwZGF0ZXImLCBjb25z
dCBDQ09jY2x1c2lvblRyYWNrZXIqKTsKIAogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQs
IGludCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBhMmY4YmJj
YmE5NjU3NjliMGEzYTIyY2YzMjViZDgwYWZlMWM4YTljLi4yNThkMjFkZGIwN2I1N2M5OGM1OGNj
NzRhODBlMTkxMWJhMzVjOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAg
LTE1Miw3ICsxNTIsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoKQogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIHBhcnRpYWwgdXBkYXRl
IGNhcGFiaWxpdHkuCiAgICAgbV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMgPSBt
aW4obV9zZXR0aW5ncy5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMsIG1fcHJveHktPm1heFBhcnRp
YWxUZXh0dXJlVXBkYXRlcygpKTsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDAsIDAsIG1fcHJveHktPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMCwgbV9wcm94
eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKIAogICAgIG1f
bGF5ZXJSZW5kZXJlckluaXRpYWxpemVkID0gdHJ1ZTsKIApAQCAtNDQzLDEwICs0NDMsMTAgQEAg
Ym9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKQog
fQogCiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRl
ciYgdXBkYXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcykKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgc2l6ZV90
IG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKQogewogICAgIEFTU0VSVChtX2xheWVyUmVuZGVy
ZXJJbml0aWFsaXplZCk7Ci0gICAgQVNTRVJUKGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7Cisg
ICAgQVNTRVJUKG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKIAogICAgIGlmICghcm9vdExh
eWVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1NCw3ICs0NTQsNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNpemVfdCBj
b250ZW50c01lbQogICAgIGlmICh2aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5QWxsb2NhdGlv
bkxpbWl0Qnl0ZXMoY29udGVudHNNZW1vcnlMaW1pdEJ5dGVzKTsKKyAgICBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5QWxsb2NhdGlvbkxpbWl0
Qnl0ZXMpOwogCiAgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLCB1cGRhdGVyKTsKIH0KQEAg
LTUyNSw3ICs1MjUsMjcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnByaW9yaXRpemVUZXh0dXJl
cyhjb25zdCBMYXllckxpc3QmIHVwZGF0ZUxpc3QpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHNpemVf
dCByZWFkYmFja0J5dGVzOworICAgIHNpemVfdCBtYXhCYWNrZ3JvdW5kVGV4dHVyZUJ5dGVzOwor
ICAgIHNpemVfdCBjb250ZW50c1RleHR1cmVCeXRlczsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsg
aSA8IHVwZGF0ZUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZUxheWVyID0gdXBkYXRlTGlzdFtpXS5nZXQoKTsKKyAgICAgICAgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJT
dXJmYWNlKCk7CisKKyAgICAgICAgc2l6ZV90IGJ5dGVzID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9y
eVVzZUJ5dGVzKHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkuc2l6ZSgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSk7CisgICAgICAgIGNvbnRlbnRzVGV4dHVyZUJ5dGVzICs9IGJ5dGVzOwor
CisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChieXRlcyA+IG1heEJhY2tn
cm91bmRUZXh0dXJlQnl0ZXMpCisgICAgICAgICAgICBtYXhCYWNrZ3JvdW5kVGV4dHVyZUJ5dGVz
ID0gYnl0ZXM7CisgICAgICAgIGlmICghcmVhZGJhY2tCeXRlcykKKyAgICAgICAgICAgIHJlYWRi
YWNrQnl0ZXMgPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV9kZXZpY2VWaWV3cG9y
dFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICB9CisgICAgc2l6ZV90IHJlbmRl
clN1cmZhY2VzQnl0ZXMgPSByZWFkYmFja0J5dGVzICsgbWF4QmFja2dyb3VuZFRleHR1cmVCeXRl
cyArIGNvbnRlbnRzVGV4dHVyZUJ5dGVzOworCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRlcyk7CiB9CiAKIC8vIHN0YXRp
YwpAQCAtNTc4LDYgKzU5OCw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29u
dGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIG9j
Y2x1c2lvblRyYWNrZXIubGVhdmVMYXllcihpdCk7CiAgICAgfQogCisgICAgb2NjbHVzaW9uVHJh
Y2tlci5vdmVyZHJhd01ldHJpY3MoKS5kaWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyht
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisgICAg
b2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5kaWRVc2VSZW5kZXJTdXJmYWNlVGV4
dHVyZU1lbW9yeUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVy
U3VyZmFjZXNCeXRlcygpKTsKICAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygp
LnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNz
LmNwcAppbmRleCBjMGYwYmQ3N2QzM2U1YWYyYjg3NzQ4MzU1NDBlNjQzMWUwZjQ2MDZmLi5jNWI2
ZjNhZTc3ZDU1ZDMyYjk2YzMwYmJmZDU2NDQ1NTA1ODc3ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
dmVyZHJhd01ldHJpY3MuY3BwCkBAIC00Nyw2ICs0Nyw4IEBAIENDT3ZlcmRyYXdNZXRyaWNzOjpD
Q092ZXJkcmF3TWV0cmljcyhib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSkKICAgICAsIG1fcGl4
ZWxzVXBsb2FkZWRPcGFxdWUoMCkKICAgICAsIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCgw
KQogICAgICwgbV90aWxlc0N1bGxlZEZvclVwbG9hZCgwKQorICAgICwgbV9jb250ZW50c1RleHR1
cmVVc2VCeXRlcygwKQorICAgICwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzKDApCiAg
ICAgLCBtX3BpeGVsc0RyYXduT3BhcXVlKDApCiAgICAgLCBtX3BpeGVsc0RyYXduVHJhbnNsdWNl
bnQoMCkKICAgICAsIG1fcGl4ZWxzQ3VsbGVkRm9yRHJhd2luZygwKQpAQCAtMTA1LDYgKzEwNywy
MiBAQCB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRVcGxvYWQoY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZwogICAgIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1
Y2VudCArPSB1cGxvYWRBcmVhIC0gdXBsb2FkT3BhcXVlQXJlYTsKIH0KIAordm9pZCBDQ092ZXJk
cmF3TWV0cmljczo6ZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IGNvbnRl
bnRzVGV4dHVyZVVzZUJ5dGVzKQoreworICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMgKz0gY29u
dGVudHNUZXh0dXJlVXNlQnl0ZXM7Cit9CisKK3ZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZFVz
ZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VC
eXRlcykKK3sKKyAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMgKz0gcmVuZGVyU3VyZmFj
ZVVzZUJ5dGVzOworfQorCiB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRDdWxsRm9yRHJhd2lu
Zyhjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQsIGNvbnN0
IEludFJlY3QmIGJlZm9yZUN1bGxSZWN0LCBjb25zdCBJbnRSZWN0JiBhZnRlckN1bGxSZWN0KQog
ewogICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCkBAIC0xNDcsNiArMTY1LDggQEAg
dm9pZCBDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBl
IG1ldHJpY3NUeXBlLCBjb25zdCBMYXkKICAgICBmbG9hdCBub3JtYWxpemF0aW9uID0gMTAwMC5m
IC8gKGxheWVyVHJlZUhvc3QtPmRldmljZVZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsYXllclRy
ZWVIb3N0LT5kZXZpY2VWaWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7CiAgICAgLy8gVGhpcyBnaXZl
cyBhcHByb3hpbWF0ZWx5IDEwMHggdGhlIHBlcmNlbnRhZ2Ugb2YgdGlsZXMgdG8gZmlsbCB0aGUg
dmlld3BvcnQgb25jZSwgaWYgYWxsIHRpbGVzIHdlcmUgMjU2eDI1Ni4KICAgICBmbG9hdCB0aWxl
Tm9ybWFsaXphdGlvbiA9IDEwMDAwLmYgLyAobGF5ZXJUcmVlSG9zdC0+ZGV2aWNlVmlld3BvcnRT
aXplKCkud2lkdGgoKSAvIDI1Ni5mICogbGF5ZXJUcmVlSG9zdC0+ZGV2aWNlVmlld3BvcnRTaXpl
KCkuaGVpZ2h0KCkgLyAyNTYuZik7CisgICAgLy8gVGhpcyBnaXZlcyBhcHByb3hpbWF0ZWx5IDEw
eCB0aGUgcGVyY2VudGFnZSBvZiBieXRlcyB0byBmaWxsIHRoZSB2aWV3cG9ydCBvbmNlLCBhc3N1
bWluZyA0IGJ5dGVzIHBlciBwaXhlbC4KKyAgICBmbG9hdCBieXRlTm9ybWFsaXphdGlvbiA9IG5v
cm1hbGl6YXRpb24gLyA0OwogCiAgICAgc3dpdGNoIChtZXRyaWNzVHlwZSkgewogICAgIGNhc2Ug
RHJhd2luZ1RvU2NyZWVuOgpAQCAtMTY0LDYgKzE4NCwxMCBAQCB2b2lkIENDT3ZlcmRyYXdNZXRy
aWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJuYWwoTWV0cmljc1R5cGUgbWV0cmljc1R5cGUsIGNvbnN0
IExheQogICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3Rv
bUNvdW50cygiUmVuZGVyZXI0LnBpeGVsQ291bnRPcGFxdWVfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8
aW50Pihub3JtYWxpemF0aW9uICogbV9waXhlbHNVcGxvYWRlZE9wYXF1ZSksIDEwMCwgMTAwMDAw
MCwgNTApOwogICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1
c3RvbUNvdW50cygiUmVuZGVyZXI0LnBpeGVsQ291bnRUcmFuc2x1Y2VudF9VcGxvYWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KG5vcm1hbGl6YXRpb24gKiBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQp
LCAxMDAsIDEwMDAwMDAsIDUwKTsKICAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC50aWxlQ291bnRDdWxsZWRfVXBsb2Fk
Iiwgc3RhdGljX2Nhc3Q8aW50Pih0aWxlTm9ybWFsaXphdGlvbiAqIG1fdGlsZXNDdWxsZWRGb3JV
cGxvYWQpLCAxMDAsIDEwMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQucmVuZGVyU3VyZmFjZVRl
eHR1cmVCeXRlc19WaWV3cG9ydFNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4oYnl0ZU5vcm1hbGl6
YXRpb24gKiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMpLCAxMCwgMTAwMDAwMCwgNTAp
OworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNv
dW50cygiUmVuZGVyZXI0LnJlbmRlclN1cmZhY2VUZXh0dXJlQnl0ZXNfVW5zY2FsZWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlcyAvIDEwMDApLCAxMDAw
LCAxMDAwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5o
aXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5jb250ZW50c1RleHR1cmVCeXRlc19WaWV3
cG9ydFNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4oYnl0ZU5vcm1hbGl6YXRpb24gKiBtX2NvbnRl
bnRzVGV4dHVyZVVzZUJ5dGVzKSwgMTAsIDEwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5jb250
ZW50c1RleHR1cmVCeXRlc19VbnNjYWxlZCIsIHN0YXRpY19jYXN0PGludD4obV9jb250ZW50c1Rl
eHR1cmVVc2VCeXRlcyAvIDEwMDApLCAxMDAwLCAxMDAwMDAwMDAsIDUwKTsKIAogICAgICAgICB7
CiAgICAgICAgICAgICBUUkFDRV9DT1VOVEVSX0lEMSgiY2MiLCAiVXBsb2FkVGlsZXNDdWxsZWQi
LCBsYXllclRyZWVIb3N0LCBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkKTsKQEAgLTE3Myw2ICsxOTcs
MTAgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJp
Y3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBMYXkKICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBi
ZSBpbiBhIGRpZmZlcmVudCBzY29wZSB0aGFuIHRoZSBUUkFDRV9FVkVOVDIgYWJvdmUuCiAgICAg
ICAgICAgICBUUkFDRV9FVkVOVDEoImNjIiwgIkNDT3ZlcmRyYXdQYWludE1ldHJpY3MiLCAiUGl4
ZWxzUGFpbnRlZCIsIG1fcGl4ZWxzUGFpbnRlZCk7CiAgICAgICAgIH0KKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGluIGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gdGhlIFRS
QUNFX0VWRU5UcyBhYm92ZS4KKyAgICAgICAgICAgIFRSQUNFX0VWRU5UMigiY2MiLCAiQ0NPdmVy
ZHJhd1BhaW50TWV0cmljcyIsICJDb250ZW50c1RleHR1cmVCeXRlcyIsIG1fY29udGVudHNUZXh0
dXJlVXNlQnl0ZXMsICJSZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzIiwgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q092ZXJkcmF3TWV0cmljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuaAppbmRleCA3MTVmNWUxNTFiYmFkZGExNzk3NmM3
ZTM5ZmUzNzEzNzdiZGY4ZTMzLi5mMGRhYjBlOTNjOTVlYTU1NGQ4MGE3MjQzYjJkOTg1NTkxNjk1
N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgKQEAgLTQ5LDYgKzQ5LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpZEN1bGxUaWxlRm9yVXBsb2FkKCk7CiAgICAgLy8gUmVjb3Jk
cyBwaXhlbHMgdGhhdCB3ZXJlIHVwbG9hZGVkIHRvIHRleHR1cmUgbWVtb3J5LgogICAgIHZvaWQg
ZGlkVXBsb2FkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFx
dWVSZWN0KTsKKyAgICAvLyBSZWNvcmQgY29udGVudHMgdGV4dHVyZShzKSBiZWhpbmQgcHJlc2Vu
dCB1c2luZyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorICAgIHZvaWQgZGlkVXNlQ29udGVu
dHNUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKTsKKyAg
ICAvLyBSZWNvcmQgUmVuZGVyU3VyZmFjZSB0ZXh0dXJlKHMpIGJlaW5nIHByZXNlbnQgdXNpbmcg
dGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4KKyAgICB2b2lkIGRpZFVzZVJlbmRlclN1cmZhY2VU
ZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRlcyk7CiAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBzYXZpbmcgbWV0cmljcyBkdXJpbmcgZHJhdy4K
IApAQCAtOTMsNiArOTcsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3BpeGVsc1VwbG9hZGVk
VHJhbnNsdWNlbnQ7CiAgICAgLy8gQ291bnQgb2YgdGlsZXMgdGhhdCB3ZXJlIGludmFsaWRhdGVk
IGJ1dCBub3QgdXBsb2FkZWQuCiAgICAgaW50IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQ7CisgICAg
Ly8gQ291bnQgdGhlIG51bWJlciBvZiBieXRlcyBpbiBjb250ZW50cyB0ZXh0dXJlcy4KKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlczsKKyAgICAvLyBDb3Vu
dCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCisgICAgdW5z
aWduZWQgbG9uZyBsb25nIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlczsKIAogICAgIC8v
IFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmlu
ZGV4IDI1MDg1YjhkNWNlM2JkMDg4ZDQ1NmZmMGI2ZWQ4ODY5OGVjMzdhYzIuLjVhZjUzZGYwNGJk
ZWI2N2UyYTBlY2MxYTM0YTllYTZiY2U5OWYzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzYsMTMgKzM2LDExIEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9y
eUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQpCitDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXpl
X3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50KQogICAgIDogbV9tYXhNZW1vcnlMaW1pdEJ5dGVz
KG1heE1lbW9yeUxpbWl0Qnl0ZXMpCi0gICAgLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMo
cHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcykKLSAgICAsIG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRv
ZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eSgpKQotICAgICwgbV9wcmlv
cml0eUN1dG9mZihDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKICAgICAs
IG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcygwKQor
ICAgICwgbV9tZW1vcnlBdmFpbGFibGVCeXRlcygwKQogewogfQogCkBAIC01NywxNyArNTUsNyBA
QCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6On5DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIoKQogICAgICAgICBkZXN0cm95QmFja2luZygqbV9iYWNraW5ncy5iZWdpbigpLCAwKTsKIH0K
IAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUFsbG9jYXRpb25M
aW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQotewotICAgIHNldE1heE1lbW9yeUxp
bWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcyk7Ci0KLSAgICAvLyBGSVhNRTogUHJlZmVycmVkIGxp
bWl0IHNob3VsZCBnbyBhd2F5LiBXZSBjYW4gcmVtb3ZlIGl0IGFzIHNvb24KLSAgICAvLyAgICAg
ICAgYXMgd2Ugbm8gbG9uZ2VyIHVzZSB0aGUgJ3JlbWFpbmRlcicgb2YgdGhpcyBtYW5hZ2VyIGZv
cgotICAgIC8vICAgICAgICBhbnl0aGluZy4KLSAgICBzZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5
dGVzKG1lbW9yeUxpbWl0Qnl0ZXMgLyA0ICogMyk7Ci19Ci0KLXZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQordm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyhzaXplX3QgcmVuZGVyU3VyZmFjZXNNZW1v
cnlCeXRlcykKIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzIik7CiAKQEAgLTg5LDIxICs3NywzMiBAQCB2b2lk
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAg
ICAgc29ydGVkVGV4dHVyZXMuYXBwZW5kKCppdCk7CiAgICAgc3RkOjpzb3J0KHNvcnRlZFRleHR1
cmVzLmJlZ2luKCksIHNvcnRlZFRleHR1cmVzLmVuZCgpLCBjb21wYXJlVGV4dHVyZXMpOwogCisg
ICAgbV9tZW1vcnlBdmFpbGFibGVCeXRlcyA9IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKICAgICBt
X3ByaW9yaXR5Q3V0b2ZmID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7
CisgICAgYm9vbCByZXNlcnZlZFJlbmRlclN1cmZhY2VzID0gZmFsc2U7CiAgICAgc2l6ZV90IG1l
bW9yeUJ5dGVzID0gMDsKICAgICBmb3IgKFRleHR1cmVWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29y
dGVkVGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gc29ydGVkVGV4dHVyZXMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgaWYgKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzaXpl
X3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMo
KTsKLSAgICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbWF4TWVtb3J5TGltaXRCeXRlcygpKSB7
Ci0gICAgICAgICAgICBtX3ByaW9yaXR5Q3V0b2ZmID0gKCppdCktPnJlcXVlc3RQcmlvcml0eSgp
OwotICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBtYWtlIHBs
YWNlaG9sZGVyIG9iamVjdHMgc2ltaWxhciB0byB0ZXh0dXJlcyB0byByZXByZXNlbnQgdGhlIHJl
bmRlciBzdXJmYWNlIG1lbW9yeSByZXF1ZXN0LgorICAgICAgICBpZiAoIXJlc2VydmVkUmVuZGVy
U3VyZmFjZXMgJiYgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcigoKml0KS0+
cmVxdWVzdFByaW9yaXR5KCksIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJp
b3JpdHkoKSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdNZW1vcnlCeXRlcyA9IG1lbW9yeUJ5
dGVzICsgcmVuZGVyU3VyZmFjZXNNZW1vcnlCeXRlczsKKyAgICAgICAgICAgIGlmIChuZXdNZW1v
cnlCeXRlcyA+IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBtX3By
aW9yaXR5Q3V0b2ZmID0gKCppdCktPnJlcXVlc3RQcmlvcml0eSgpOworICAgICAgICAgICAgICAg
IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgPSBtZW1vcnlCeXRlczsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMg
LT0gcmVuZGVyU3VyZmFjZXNNZW1vcnlCeXRlczsKKyAgICAgICAgICAgIHJlc2VydmVkUmVuZGVy
U3VyZmFjZXMgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+
IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoKQotICAgICAgICAgICAgICAgICAgICAmJiBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHko
KSwgbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoKSkpIHsKKworICAgICAgICBzaXplX3QgbmV3TWVt
b3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyArICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMoKTsKKyAgICAg
ICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbV9tZW1vcnlBdmFpbGFibGVCeXRlcykgewogICAgICAg
ICAgICAgbV9wcmlvcml0eUN1dG9mZiA9ICgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgbWVtb3J5Qnl0ZXMgPSBuZXdNZW1v
cnlCeXRlczsKICAgICB9CiAKQEAgLTExNyw3ICsxMTYsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAgICAgaWYgKGlzQWJvdmVQ
cmlvcml0eUN1dG9mZikKICAgICAgICAgICAgIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyArPSAo
Kml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7CiAgICAgfQotICAgIEFTU0VSVChtX21lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMgPD0gbWF4TWVtb3J5TGltaXRCeXRlcygpKTsKKyAgICBBU1NFUlQobV9tZW1v
cnlBYm92ZUN1dG9mZkJ5dGVzIDw9IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMpOwogCiAgICAgLy8g
UHV0IGJhY2tpbmdzIGluIGV2aWN0aW9uL3JlY3ljbGluZyBvcmRlci4KICAgICBmb3IgKEJhY2tp
bmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdz
LmVuZCgpOyArK2l0KQpAQCAtMTU1LDggKzE1NCwxMSBAQCBib29sIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiAg
ICAgaWYgKHRleHR1cmUtPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAorICAgIGlmIChDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKHRl
eHR1cmUtPnJlcXVlc3RQcmlvcml0eSgpLCBtX3ByaW9yaXR5Q3V0b2ZmKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgc2l6ZV90IG5ld01lbW9yeUJ5dGVzID0gbV9tZW1vcnlBYm92ZUN1
dG9mZkJ5dGVzICsgdGV4dHVyZS0+bWVtb3J5U2l6ZUJ5dGVzKCk7Ci0gICAgaWYgKG5ld01lbW9y
eUJ5dGVzID4gbV9tYXhNZW1vcnlMaW1pdEJ5dGVzKQorICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+
IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1f
bWVtb3J5QWJvdmVDdXRvZmZCeXRlcyA9IG5ld01lbW9yeUJ5dGVzOwpAQCAtMTg5LDggKzE5MSw3
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1
cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4CiAKICAgICAvLyBPdGhlcndpc2UgcmVkdWNlIG1l
bW9yeSBhbmQganVzdCBhbGxvY2F0ZSBhIG5ldyBiYWNraW5nIHRleHVyZXMuCiAgICAgaWYgKCFi
YWNraW5nKSB7Ci0gICAgICAgIHNpemVfdCBsaW1pdCA9IHN0ZDo6bWF4KG1fbWVtb3J5QWJvdmVD
dXRvZmZCeXRlcywgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKSAtIHRleHR1cmUtPm1lbW9y
eVNpemVCeXRlcygpOwotICAgICAgICByZWR1Y2VNZW1vcnkobGltaXQsIGFsbG9jYXRvcik7Cisg
ICAgICAgIHJlZHVjZU1lbW9yeShtX21lbW9yeUF2YWlsYWJsZUJ5dGVzIC0gdGV4dHVyZS0+bWVt
b3J5U2l6ZUJ5dGVzKCksIGFsbG9jYXRvcik7CiAgICAgICAgIGJhY2tpbmcgPSBjcmVhdGVCYWNr
aW5nKHRleHR1cmUtPnNpemUoKSwgdGV4dHVyZS0+Zm9ybWF0KCksIGFsbG9jYXRvcik7CiAgICAg
fQogCkBAIC0yMTgsOCArMjE5LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OnJlZHVjZU1lbW9yeShzaXplX3QgbGltaXRCeXRlcywgVGV4dHVyZUFsbG9jYXQKIAogdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IpCiB7Ci0gICAgc2l6ZV90IGxpbWl0ID0gc3RkOjptYXgobV9tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIHJlZHVjZU1l
bW9yeShsaW1pdCwgYWxsb2NhdG9yKTsKKyAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFi
bGVCeXRlcywgYWxsb2NhdG9yKTsKICAgICBBU1NFUlQobWVtb3J5VXNlQnl0ZXMoKSA8PSBtYXhN
ZW1vcnlMaW1pdEJ5dGVzKCkpOwogCiAgICAgLy8gV2UgY3VycmVudGx5IGNvbGxlY3QgYmFja2lu
Z3MgZnJvbSBkZWxldGVkIHRleHR1cmVzIGZvciBsYXRlciByZWN5Y2xpbmcuCkBAIC0yMzMsNyAr
MjMzLDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShU
ZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
d2FzdGVkTWVtb3J5ICs9ICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMoKTsKICAgICB9Ci0gICAgc2l6
ZV90IHRlblBlcmNlbnRPZk1lbW9yeSA9IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSAvIDEwOworICAg
IHNpemVfdCB0ZW5QZXJjZW50T2ZNZW1vcnkgPSBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzIC8gMTA7
CiAgICAgaWYgKHdhc3RlZE1lbW9yeSA8PSB0ZW5QZXJjZW50T2ZNZW1vcnkpCiAgICAgICAgIHJl
dHVybjsKICAgICByZWR1Y2VNZW1vcnkobWVtb3J5VXNlQnl0ZXMoKSAtICh3YXN0ZWRNZW1vcnkg
LSB0ZW5QZXJjZW50T2ZNZW1vcnkpLCBhbGxvY2F0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAppbmRleCBmODcwZTc3ZTFhYmIwNDBkYTViY2I4
NDJmNDc2ZTQxNTJiMTNkOWEzLi4zYzcwYjJiMmEwMjMwOWNhMTY0ZDZkY2E5MWNkOTBiYzQyYWZl
NmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIu
aApAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjsKIGNsYXNzIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5TGlt
aXRCeXRlcywgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJl
U2l6ZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXIobWF4TWVtb3J5TGltaXRCeXRlcywgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywgbWF4
VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXIobWF4TWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAg
ICB9CiAgICAgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gY3JlYXRlVGV4dHVyZShJ
bnRTaXplIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKICAgICB7CkBAIC01NiwyMSArNTYsMTIgQEAg
cHVibGljOgogICAgIC8vIG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWVtb3J5QWJvdmVDdXRvZmZCeXRl
cygpIHNob3VsZCBhbHdheXMgYmUgdHJ1ZS4KICAgICBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoKSBj
b25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5dGVzOyB9CiAgICAgc2l6ZV90IG1lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXM7IH0K
KyAgICBzaXplX3QgbWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4TWVtb3J5TGltaXRCeXRlcyAtIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXM7IH0KIAotICAg
IHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoc2l6ZV90KTsKLQotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgcHJlZmVycmVkL21heCBsaW1pdHMgYW5kIGxl
dCBHcHVNZW1vcnlNYW5hZ2VyCi0gICAgLy8ganVzdCBhZGp1c3QgdGhlIG1heCBsaW1pdCBiYXNl
ZCBvbiBoaW50cyB3ZSBjYW4gcHJvdmlkZSBmcm9tIHRoaXMgY2xhc3MuCi0gICAgLy8gSWRlYWxs
eSBpdCB3aWxsIGJlIGFkanVzdGVkIHJlbGF0aXZlbHkgcmFyZWx5IHN1Y2ggdGhhdCByZWN5Y2xp
bmcgaXMgbWF4aW1pemVkLgogICAgIHZvaWQgc2V0TWF4TWVtb3J5TGltaXRCeXRlcyhzaXplX3Qg
Ynl0ZXMpIHsgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzID0gYnl0ZXM7IH0KICAgICBzaXplX3QgbWF4
TWVtb3J5TGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWVtb3J5TGltaXRCeXRlczsg
fQotICAgIHZvaWQgc2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpIHsg
bV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzID0gYnl0ZXM7IH0KLSAgICBzaXplX3QgcHJlZmVy
cmVkTWVtb3J5TGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlczsgfQotCi0gICAgdm9pZCBzZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihzaXplX3Qg
Y3V0b2ZmKSB7IG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYgPSBjdXRvZmY7IH0KLSAgICB1bnNp
Z25lZCBtYXhNZW1vcnlQcmlvcml0eUN1dG9mZigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWVtb3J5
UHJpb3JpdHlDdXRvZmY7IH0KIAotICAgIHZvaWQgcHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
dm9pZCBwcmlvcml0aXplVGV4dHVyZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXMp
OwogICAgIHZvaWQgY2xlYXJQcmlvcml0aWVzKCk7CiAKICAgICBib29sIHJlcXVlc3RMYXRlKEND
UHJpb3JpdGl6ZWRUZXh0dXJlKik7CkBAIC0xMDcsNyArOTgsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEs
IHByaW9yaXR5Qik7CiAgICAgfQogCi0gICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNp
emVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRl
cywgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIo
c2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICB2
b2lkIHJlZHVjZU1lbW9yeShzaXplX3QgbGltaXQsIFRleHR1cmVBbGxvY2F0b3IqKTsKIApAQCAt
MTE4LDExICsxMDksMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJp
b3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiwgVGV4dHVyZUFsbG9jYXRvciopOwogCiAgICAgc2l6
ZV90IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKLSAgICBzaXplX3QgbV9wcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzOwotICAgIHVuc2lnbmVkIG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmY7CiAgICAg
dW5zaWduZWQgbV9wcmlvcml0eUN1dG9mZjsKICAgICBzaXplX3QgbV9tZW1vcnlVc2VCeXRlczsK
ICAgICBzaXplX3QgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzOworICAgIHNpemVfdCBtX21lbW9y
eUF2YWlsYWJsZUJ5dGVzOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PENDUHJpb3JpdGl6ZWRUZXh0
dXJlKj4gVGV4dHVyZVNldDsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PENDUHJpb3JpdGl6ZWRU
ZXh0dXJlOjpCYWNraW5nKj4gQmFja2luZ1NldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlD
YWxjdWxhdG9yLmNwcAppbmRleCA4NTAxMGExMDcwYjgxNWMyM2ZkOGY1MGQzMDZiMzYxMDZmZTA2
YjRlLi45MDA4NDA0M2Q5NzE5ODQwYTllY2IyMzQ1OGNlNzVmYjMwMTI5NjE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5
Q2FsY3VsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwCkBAIC0zMywxNSArMzMsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGljCi1pbnQg
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoKQoraW50IENDUHJpb3JpdHlDYWxjdWxh
dG9yOjp1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKQogewotICAgIHJldHVybiAt
MTsKKyAgICByZXR1cm4gZHJhd3NUb1Jvb3RTdXJmYWNlID8gLTEgOiAyOwogfQogCiAvLyBzdGF0
aWMKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KCkKK2ludCBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNl
KQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBkcmF3c1RvUm9vdFN1cmZhY2UgPyAwIDog
MzsKK30KKworLy8gc3RhdGljCitpbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZh
Y2VQcmlvcml0eSgpCit7CisgICAgcmV0dXJuIDE7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNjUsMTkg
KzcxLDI0IEBAIHVuc2lnbmVkIG1hbmhhdHRhbkRpc3RhbmNlKGNvbnN0IEludFJlY3QmIGEsIGNv
bnN0IEludFJlY3QmIGIpCiB9CiB9CiAKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3Jp
dHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IHRleHR1cmVSZWN0KSBjb25zdAoraW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZy
b21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGV4
dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAogewotICAgIHJldHVybiB2
aXNpYmxlUHJpb3JpdHkoKSArIG1hbmhhdHRhbkRpc3RhbmNlKHZpc2libGVSZWN0LCB0ZXh0dXJl
UmVjdCk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSBtYW5oYXR0YW5EaXN0YW5jZSh2aXNpYmxl
UmVjdCwgdGV4dHVyZVJlY3QpOworICAgIGlmICghZGlzdGFuY2UpCisgICAgICAgIHJldHVybiB2
aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICByZXR1cm4gdmlzaWJsZVBy
aW9yaXR5KGZhbHNlKSArIGRpc3RhbmNlOwogfQogCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6
OnByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscykgY29uc3QKK2ludCBDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzLCBib29s
IGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5
KCkgKyBwaXhlbHM7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybiB2aXNpYmxlUHJp
b3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGZh
bHNlKSArIHBpeGVsczsKIH0KIAotaW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZy
b21WaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSkgY29uc3QKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRv
cjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUsIGJvb2wgZHJhd3NUb1Jvb3RT
dXJmYWNlKSBjb25zdAogewotICAgIHJldHVybiB2aXNpYmxlID8gdmlzaWJsZVByaW9yaXR5KCkg
OiBsb3dlc3RQcmlvcml0eSgpOworICAgIHJldHVybiB2aXNpYmxlID8gdmlzaWJsZVByaW9yaXR5
KGRyYXdzVG9Sb290U3VyZmFjZSkgOiBsb3dlc3RQcmlvcml0eSgpOwogfQogCiB9IC8vIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCmluZGV4IGY0ZmVhZmU5Yjg0
Y2YzMzM0ODc0NjcxZjIxNzAxNzNmNTUxYTI1MDIuLjY4YTIyNWJlMGI5ZWYzMjY1ZjBmODk4YTYy
ZmRjNThkY2NlZmI3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuaApA
QCAtMzQsMTIgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQcmlvcml0
eUNhbGN1bGF0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBpbnQgdWlQcmlvcml0eSgpOwotICAg
IHN0YXRpYyBpbnQgdmlzaWJsZVByaW9yaXR5KCk7CisgICAgc3RhdGljIGludCB1aVByaW9yaXR5
KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICBzdGF0aWMgaW50IHZpc2libGVQcmlvcml0
eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgc3RhdGljIGludCByZW5kZXJTdXJmYWNl
UHJpb3JpdHkoKTsKICAgICBzdGF0aWMgaW50IGxpbmdlcmluZ1ByaW9yaXR5KGludCBwcmV2aW91
c1ByaW9yaXR5KTsKLSAgICBpbnQgcHJpb3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1cmVSZWN0KSBjb25zdDsKLSAgICBpbnQg
cHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzKSBjb25zdDsKLSAgICBpbnQgcHJp
b3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUpIGNvbnN0OworICAgIGludCBwcmlvcml0
eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYg
dGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdDsKKyAgICBpbnQgcHJp
b3JpdHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzLCBib29sIGRyYXdzVG9Sb290U3VyZmFj
ZSkgY29uc3Q7CisgICAgaW50IHByaW9yaXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlLCBi
b29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7CiAKICAgICBzdGF0aWMgaW5saW5lIGludCBo
aWdoZXN0UHJpb3JpdHkoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigp
OyB9CiAgICAgc3RhdGljIGlubGluZSBpbnQgbG93ZXN0UHJpb3JpdHkoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKaW5kZXggNTQx
ZTUxNTk4ZmJmZTk5MmNjODFmYWVmN2Q2ZTgxMDM2Mjg1ZTVjYS4uNDY4YWYzNmJiYTUwZTNlZTgx
NjVmM2FjYWM3NGUxZTQ5ZjZmOTU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcApAQCAtNTMsOSArNTMs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0
ZXMobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSAqIHRleHR1cmVDb3VudDsKICAgICB9
CiAKLSAgICBQYXNzT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gY3JlYXRlTWFu
YWdlcihzaXplX3QgbWF4VGV4dHVyZXMsIHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcykKKyAgICBQ
YXNzT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gY3JlYXRlTWFuYWdlcihzaXpl
X3QgbWF4VGV4dHVyZXMpCiAgICAgewotICAgICAgICByZXR1cm4gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVy
ZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwgMTAyNCk7CisgICAgICAgIHJldHVybiBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlc01lbW9yeVNpemUobWF4
VGV4dHVyZXMpLCAxMDI0KTsKICAgICB9CiAKICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmU+JiB0ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQpAQCAt
ODIsOTggKzgyLDEwIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBHQzNEZW51bSBtX3RleHR1cmVG
b3JtYXQ7CiB9OwogCi1URVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4
dHVyZUluUHJlZmVycmVkTGltaXQpCi17Ci0gICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0g
ODsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdl
cihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOwotICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZT4gdGV4dHVyZXNbcHJlZmVycmVkVGV4dHVyZXNdOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcmVmZXJyZWRUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tp
XSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVy
ZUZvcm1hdCk7Ci0KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0K
LSAgICAvLyBMb3dlc3QgcHJpb3JpdHkgdGV4dHVyZXMgc2hvdWxkbid0IGJlIGF2YWlsYWJsZS4K
LSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwot
ICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMV0sIGZhbHNlKSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1syXSwgZmFsc2UpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVmZXJyZWRUZXh0dXJlczsgKytpKQotICAgICAg
ICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7Ci0KLSAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRl
eHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzFdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1syXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbM10sIGZhbHNlKSk7Ci0KLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXpl
KHByZWZlcnJlZFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0
ZXMoKSk7Ci0gICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIHRleHR1cmVN
YW5hZ2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7Ci19Ci0KLVRFU1RfRihDQ1ByaW9y
aXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nUHJlZmVycmVkTGltaXQp
Ci17Ci0gICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3Qg
cHJlZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVy
cmVkVGV4dHVyZXMpOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNb
bWF4VGV4dHVyZXNdOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsg
KytpKQotICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJl
KG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7Ci0KLSAgICAvLyBTZXQgZGVjcmVhc2lu
ZyBwcmlvcml0aWVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytp
KQotICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgIC8vIE9ubHkgbG93
ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4
dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1s0XSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzddLCBmYWxzZSkpOwotICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUo
cHJlZmVycmVkVGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRl
cygpKTsKLSAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwotCi0gICAgLy8gU2V0IGlu
Y3JlYXNpbmcgcHJpb3JpdGllcwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVy
ZXM7ICsraSkKLSAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBp
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBP
bmx5IHVwcGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICBFWFBFQ1RfRkFMU0UodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRl
VGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1v
cnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0
b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRl
cygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIC8v
IE1ha2UgYWxsIHRleHR1cmVzIGltcG9ydGFudCAoYWJvdmUgbWF4LW1lbW9yeSBwcmlvcml0eSBj
dXRvZmYpCi0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKEND
UHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBBbGwgdGV4dHVyZXMgc2hvdWxkIGJl
IGF2YWlsYWJsZQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkg
ewotICAgICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2Up
KTsKLSAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlc1tpXS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkp
OwotICAgIH0KLQotICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMp
LCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1Rf
TEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1v
cnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwotCi0gICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVt
b3J5KGFsbG9jYXRvcigpKTsKLX0KLQotCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0
LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogewogICAgIGNvbnN0IHNpemVfdCBt
YXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsK
LSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKKyAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1h
bmFnZXIobWF4VGV4dHVyZXMpOwogCiAgICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBkb3VibGUg
b3VyIG1lbW9yeSBsaW1pdC4KICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1
cmVzW21heFRleHR1cmVzKjJdOwpAQCAtMTgyLDI0ICs5NCwyMiBAQCBURVNUX0YoQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogICAgICAg
ICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNp
emUsIG1fdGV4dHVyZUZvcm1hdCk7CiAKICAgICAvLyBTZXQgZGVjcmVhc2luZyBwcmlvcml0aWVz
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4
VGV4dHVyZXMqMjsgKytpKQogICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5
KDEwMCArIGkpOwogCiAgICAgLy8gT25seSBsb3dlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUu
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4
dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzhdLCBmYWxzZSkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbMTVdLCBmYWxzZSkpOwogCiAgICAgLy8gU2V0IGluY3JlYXNpbmcgcHJpb3Jp
dGllcwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1heFRleHR1cmVzKjI7ICsraSkKICAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlv
cml0eSgxMDAgLSBpKTsKIAogICAgIC8vIE9ubHkgdXBwZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxh
YmxlLgotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbOF0sIGZhbHNlKSk7CkBAIC0yMTQsMTIgKzEyNCw5IEBAIFRFU1Rf
RihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGlt
aXQpCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMp
CiB7CiAgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3Qg
cHJlZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVy
cmVkVGV4dHVyZXMpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CiAgICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CiAKLSAgICB0ZXh0dXJl
TWFuYWdlci0+c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6
Omxvd2VzdFByaW9yaXR5KCkpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0
dXJlczsgKytpKQogICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVU
ZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQpAQCAtMjI3LDcgKzEzNCw3IEBAIFRFU1RfRihD
Q1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNl
dCBtYXggbGltaXQgdG8gOCB0ZXh0dXJlcwogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1v
cnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg4KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQog
ICAgICAgICB2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB0ZXh0dXJl
TWFuYWdlci0+cmVkdWNlTWVtb3J5KGFsbG9jYXRvcigpKTsKQEAgLTIzNyw3ICsxNDQsNyBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAg
ICAvLyBTZXQgbWF4IGxpbWl0IHRvIDUgdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUoNSkpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7
ICsraSkKICAgICAgICAgRVhQRUNUX0VRKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFs
c2UpLCBpIDwgNSk7CiAgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeShhbGxvY2F0b3Io
KSk7CkBAIC0yNDcsNyArMTU0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
Y2hhbmdlTWVtb3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA0IHRleHR1cmVz
CiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1v
cnlTaXplKDQpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDQpOwogICAgIHRleHR1cmVNYW5hZ2Vy
LT5yZWR1Y2VNZW1vcnkoYWxsb2NhdG9yKCkpOwpAQCAtMjU4LDIzICsxNjUsMjIgQEAgVEVTVF9G
KENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogICAgIHRleHR1
cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7CiB9CiAKLQogVEVTVF9GKEND
UHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVy
ZXMpCiB7Ci0gICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXpl
X3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJl
ZmVycmVkVGV4dHVyZXMpOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVy
ZXNbcHJlZmVycmVkVGV4dHVyZXNdOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4g
bW9yZVRleHR1cmVzW3ByZWZlcnJlZFRleHR1cmVzXTsKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4
dHVyZXMgPSA0OworICAgIGNvbnN0IHNpemVfdCBudW1UZXh0dXJlcyA9IDQ7CisgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5h
Z2VyKG1heFRleHR1cmVzKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1
cmVzW251bVRleHR1cmVzXTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IG1vcmVU
ZXh0dXJlc1tudW1UZXh0dXJlc107CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZl
cnJlZFRleHR1cmVzOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1
cmVzOyArK2kpIHsKICAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRl
VGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwogICAgICAgICBtb3JlVGV4
dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBt
X3RleHR1cmVGb3JtYXQpOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJl
ZmVycmVkVGV4dHVyZXM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1
cmVzOyArK2kpCiAgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMjAwICsg
aSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0ZXh0
dXJlcyB3aGljaCBhcmUgY3VycmVudGx5IGhpZ2ggcHJpb3JpdHkuCiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwpAQCAtMjg3LDkgKzE5Myw5IEBA
IFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVw
ZGF0ZVRleHR1cmVzKQogICAgIEVYUEVDVF9UUlVFKHRleHR1cmVzWzJdLT5oYXZlQmFja2luZ1Rl
eHR1cmUoKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZXNbM10tPmhhdmVCYWNraW5nVGV4dHVy
ZSgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsr
aSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAg
IG1vcmVUZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgLy8gVGV4dHVyZXMgYXJlIG5vdyBiZWxvdyBjdXRv
ZmYuCiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2Up
KTsKQEAgLTMyMSwxMiArMjI3LDkgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
dGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIHsKICAgICBj
b25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSAxNjsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVk
VGV4dHVyZXMgPSA4OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVy
ZXMpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7Ci0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAg
ICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJl
U2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKIApAQCAtMzM4LDcgKzI0MSw3IEBAIFRFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQog
CiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA4IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8vIFRoZSB0d28gaGlnaCBwcmlvcml0eSB0ZXh0
dXJlcyBzaG91bGQgYmUgYXZhaWxhYmxlLCBvdGhlcnMgc2hvdWxkIG5vdC4KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IDI7ICsraSkKQEAgLTM2MiwxNCArMjY1LDE0IEBAIFRFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQog
CiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlckRlc3Ryb3ll
ZEZpcnN0KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcigxLCAxKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIoMSk7CiAgICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlID0gdGV4dHVyZU1hbmFnZXItPmNy
ZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKIAogICAgIC8vIFRl
eHR1cmUgaXMgaW5pdGlhbGx5IGludmFsaWQsIGJ1dCBpdCB3aWxsIGJlY29tZSBhdmFpbGFibGUu
CiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAogICAg
IHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKDApOwogCiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNl
KSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkp
OwpAQCAtMzg0LDE1ICsyODcsMTUgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
dGV4dHVyZU1hbmFnZXJEZXN0cm95ZWRGaXJzdCkKIAogVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyT25lID0gY3JlYXRlTWFuYWdlcigx
LCAxKTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlclR3byA9IGNyZWF0ZU1hbmFnZXIoMSwgMSk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXJPbmUgPSBjcmVhdGVNYW5hZ2VyKDEpOworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyVHdvID0g
Y3JlYXRlTWFuYWdlcigxKTsKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1
cmUgPSB0ZXh0dXJlTWFuYWdlck9uZS0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3Rl
eHR1cmVGb3JtYXQpOwogCiAgICAgLy8gVGV4dHVyZSBpcyBpbml0aWFsbHkgaW52YWxpZCwgYnV0
IGl0IHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZS0+aGF2
ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAgICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9yaXR5KDEw
MCk7Ci0gICAgdGV4dHVyZU1hbmFnZXJPbmUtPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRl
eHR1cmVNYW5hZ2VyT25lLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBFWFBFQ1RfVFJV
RSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC00MDgsNyArMzExLDcgQEAgVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQog
CiAgICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXJUd28uZ2V0KCkp
OwogCi0gICAgdGV4dHVyZU1hbmFnZXJUd28tPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRl
eHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBFWFBFQ1RfVFJV
RSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC00MTYsNCArMzE5LDExOSBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRUb05ld01hbmFnZXIp
CiAKICAgICB0ZXh0dXJlTWFuYWdlclR3by0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwog
fQorCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZW5kZXJTdXJmYWNlc1JlZHVj
ZU1lbW9yeUF2YWlsYWJsZU91dHNpZGVSb290U3VyZmFjZSkKK3sKKyAgICBjb25zdCBzaXplX3Qg
bWF4VGV4dHVyZXMgPSA4OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAgICAvLyBI
YWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFrZW4gYnkgc3VyZmFjZXMuCisgICAgY29uc3Qgc2l6ZV90
IHJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0ZXh0dXJlc01lbW9yeVNpemUoNCk7CisKKyAgICAvLyBD
cmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRl
eHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1h
dCk7CisKKyAgICAvLyBTZXQgZGVjcmVhc2luZyBub24tdmlzaWJsZSBwcmlvcml0aWVzIG91dHNp
ZGUgcm9vdCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7
ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsK
KworICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgorICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRlcyk7CisgICAg
RVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOworICAgIEVY
UEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKKyAgICBFWFBF
Q1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOworICAgIEVYUEVD
VF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7CisKKyAgICAvLyBT
ZXQgaW5jcmVhc2luZyBub24tdmlzaWJsZSBwcmlvcml0aWVzIG91dHNpZGUgcm9vdCBzdXJmYWNl
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAg
dGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKKworICAgIC8vIE9ubHkg
dXBwZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRlcyk7CisgICAgRVhQRUNUX0ZBTFNFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNN
ZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsK
KyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVt
b3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRlcygpKTsKKyAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFn
ZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5
dGVzKCkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigp
KTsKK30KKworVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNS
ZWR1Y2VNZW1vcnlBdmFpbGFibGVGb3JSZXF1ZXN0TGF0ZSkKK3sKKyAgICBjb25zdCBzaXplX3Qg
bWF4VGV4dHVyZXMgPSA4OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAgICAvLyBI
YWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFrZW4gYnkgc3VyZmFjZXMuCisgICAgY29uc3Qgc2l6ZV90
IHJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0ZXh0dXJlc01lbW9yeVNpemUoNCk7CisKKyAgICAvLyBD
cmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRl
eHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1h
dCk7CisKKyAgICAvLyBTZXQgZXF1YWwgcHJpb3JpdGllcy4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0
UHJpb3JpdHkoMTAwKTsKKworICAgIC8vIFRoZSBmaXJzdCBmb3VyIHRvIGJlIHJlcXVlc3RlZCBs
YXRlIHdpbGwgYmUgYXZhaWxhYmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRlcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbaV0sIGZhbHNlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heFRl
eHR1cmVzOyBpICs9IDIpCisgICAgICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0
dXJlc1tpXSwgdHJ1ZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtYXhUZXh0dXJl
czsgaSArPSAyKQorICAgICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVz
W2ldLCB0cnVlKSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4
dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVyU3VyZmFj
ZXNCeXRlcygpKTsKKyAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVz
KCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworCisgICAgdGV4
dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKK30KKworVEVTVF9GKEND
UHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgd2hlblJlbmRlclN1cmZhY2VOb3RBdmFpbGFibGVUZXh0
dXJlc0Fsc29Ob3RBdmFpbGFibGUpCit7CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0g
ODsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworCisgICAgLy8gSGFsZiBvZiB0aGUgbWVt
b3J5IGlzIHRha2VuIGJ5IHN1cmZhY2VzLgorICAgIGNvbnN0IHNpemVfdCByZW5kZXJTdXJmYWNl
c0J5dGVzID0gdGV4dHVyZXNNZW1vcnlTaXplKDQpOworCisgICAgLy8gQ3JlYXRlIHRleHR1cmVz
IHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1pdC4KKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+
Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOworCisgICAgLy8g
U2V0IDYgdmlzaWJsZSB0ZXh0dXJlcyBpbiB0aGUgcm9vdCBzdXJmYWNlLCBhbmQgMiBpbiBhIGNo
aWxkIHN1cmZhY2UuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA2OyArK2kpCisgICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZp
c2libGVQcmlvcml0eSh0cnVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDY7IGkgPCA4OyArK2kp
CisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1
bGF0b3I6OnZpc2libGVQcmlvcml0eShmYWxzZSkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcyhyZW5kZXJTdXJmYWNlc0J5dGVzKTsKKworICAgIC8vIFVuYWJsZSB0
byByZXF1ZXN0TGF0ZSB0ZXh0dXJlcyBpbiB0aGUgY2hpbGQgc3VyZmFjZS4KKyAgICBFWFBFQ1Rf
RkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzZdLCB0cnVlKSk7CisgICAgRVhQRUNUX0ZB
TFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgdHJ1ZSkpOworCisgICAgLy8gUm9vdCBz
dXJmYWNlIHRleHR1cmVzIGFyZSB2YWxpZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDY7
ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBm
YWxzZSkpOworCisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg2KSwgdGV4dHVyZU1h
bmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVz
TWVtb3J5U2l6ZSgyKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0
ZXMoKSk7CisgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKworICAgIHRleHR1cmVN
YW5hZ2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRl
c3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJU
ZXN0Q29tbW9uLmNwcAppbmRleCAwY2Y2YjBhNzQ4NmM0M2QzMDc2NGNkNmFmMzVlN2E4ZDViNGEz
N2ExLi41NThjYmE1NzYwYTczMjU0ZDA3ZGY4ZjE4ZmM0N2U2ZmRhNGQzYWQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1v
bi5jcHAKQEAgLTEyMSw2ICsxMjEsMjUgQEAgdm9pZCBGYWtlVGlsZWRMYXllckNocm9taXVtOjp1
cGRhdGUoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgQ0NPY2NsdXNpb24KICAgICB1
cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZUxheWVyUmVjdCgpLCBvY2NsdXNpb24pOwog
fQogCit2b2lkIEZha2VUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNv
bnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBjYWxjdWxhdG9yKQoreworICAgIC8vIEVuc3VyZSB0
aGVyZSBpcyBhbHdheXMgYSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgYXZhaWxhYmxlLiBJZiBub25l
IGhhcyBiZWVuCisgICAgLy8gc2V0ICh0aGUgbGF5ZXIgaXMgYW4gb3JwaGFuIGZvciB0aGUgdGVz
dCksIHRoZW4ganVzdCBzZXQgYSBzdXJmYWNlIG9uIGl0c2VsZi4KKyAgICBib29sIG1pc3NpbmdU
YXJnZXRSZW5kZXJTdXJmYWNlID0gIXRhcmdldFJlbmRlclN1cmZhY2UoKTsKKworICAgIGlmICht
aXNzaW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSkgeworICAgICAgICBjcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgIHNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICB9CisKKyAgICBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNhbGN1
bGF0b3IpOworCisgICAgaWYgKG1pc3NpbmdUYXJnZXRSZW5kZXJTdXJmYWNlKSB7CisgICAgICAg
IGNsZWFyUmVuZGVyU3VyZmFjZSgpOworICAgICAgICBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDAp
OworICAgIH0KK30KKwogRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzOjpGYWtlVGlsZWRM
YXllcldpdGhTY2FsZWRCb3VuZHMoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJl
TWFuYWdlcikKICAgICA6IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRl
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVz
dENvbW1vbi5oCmluZGV4IDAyMDBhMjM3ZTAxY2VjMzU4MTk3ZDk5ZGQzMjRhY2ViNTQ5MDc2NjYu
LjM2OWJhYzliZTkyNjE4MjNhY2Q3ZDE4YWQ1OTJjZTMwYzczNThiN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBA
IC0xMTcsNyArMTE3LDYgQEAgcHVibGljOgogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6c2tpcHNEcmF3OwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6bnVtUGFpbnRlZFRpbGVzOwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6aWRsZVBhaW50UmVjdDsKLSAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
RGlzcGxheVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CiAgICAgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsYXN0TmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdE5lZWRzRGlzcGxheVJlY3Q7IH0KQEAgLTEyNSw2ICsxMjQsOCBAQCBwdWJsaWM6
CiAgICAgLy8gVXBkYXRlcyB0aGUgdmlzaWJsZUxheWVyUmVjdCgpLgogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGUoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlciYsIGNvbnN0IFdlYkNvcmU6OkNDT2Nj
bHVzaW9uVHJhY2tlciopIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmVQ
cmlvcml0aWVzKGNvbnN0IFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yJikgT1ZFUlJJREU7
CisKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4
dHVyZU1hbmFnZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9
CiAgICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIqIGZha2VMYXllclRleHR1cmVVcGRhdGVyKCkg
eyByZXR1cm4gbV9mYWtlVGV4dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgdXBkYXRlUmVjdCgpIHsgcmV0dXJuIG1fdXBkYXRlUmVjdDsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAK
aW5kZXggMjViM2Q1ZTNkNDU2MjFjMWNmYWJlNGE5MDZjMGQzMWU1ZTlhMDg5ZC4uYzkzMTU4YWIy
ZDM1MTQyMjhkY2FmZThhOTNmNjg4NTAxMTMxMDEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05NCwx
NyArOTQsMTggQEAgcHVibGljOgogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hE
aXJ0eVRpbGVzKQogewogICAgIENDUHJpb3JpdHlDYWxjdWxhdG9yIHByaW9yaXR5Q2FsY3VsYXRv
cjsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEw
MjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVy
ID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25Q
dHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGls
ZWRMYXllckltcGwoMCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28g
dGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1
cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMo
KTsKQEAgLTExNyw4ICsxMTgsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aERpcnR5VGlsZXMpCiAgICAgLy8gSW52YWxpZGF0ZXMgYm90aCB0aWxlcy4uLgogICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgLy8gLi4uLmJ1
dCB0aGVuIG9ubHkgdXBkYXRlIG9uZSBvZiB0aGVtLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0
KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKICAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogCkBAIC0xMzAsNyArMTMxLDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7CiAgICAgQ0NQcmlvcml0
eUNhbGN1bGF0b3IgcHJpb3JpdHlDYWxjdWxhdG9yOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMTQyLDgg
KzE0Myw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0
eVRpbGVzKQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJp
b3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDApOwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSwgJm9jY2x1ZGVkKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTc2LDE3
ICsxNzcsMTggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERp
cnR5VGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRp
bGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRl
UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAw
KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBsYXllci0+dXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKICAgICB1cGRhdGVUZXh0
dXJlcygpOwpAQCAtMTk5LDcgKzIwMSw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMo
KTsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoJmFsbG9jYXRvcik7CiAgICAg
dGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0
KTsKIAogICAgIC8vIFRoaXMgc2hvdWxkIGRyb3AgdGhlIHRpbGVzIG9uIHRoZSBpbXBsIHRocmVh
ZC4KICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpAQCAtMjA5
LDggKzIxMCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRp
bGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAg
ICAvLyBUaGlzIHNob3VsZCByZWNyZWF0ZSBhbmQgdXBkYXRlIHRoZSBkZWxldGVkIHRleHR1cmVz
LgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5
Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsK
ICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAx
MDApLCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC0yMjIsNyArMjIzLDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0yMzcs
OCArMjM4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRU
aWxlcykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CiAgICAg
bGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBk
YXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CkBAIC0yNTMsOCAr
MjU0LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxl
cykKIAogICAgIC8vIEZvciB0aGUgbmV4dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qg
d2Ugc3RpbGwgbmVlZCBpZGxlIHBhaW50aW5nLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg
aSsrKSB7Ci0gICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOworICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJp
b3JpdHlDYWxjdWxhdG9yKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwKTsKIAogICAgICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2li
bGVSZWN0LCAwKTsKICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZp
c2libGVSZWN0KSk7CkBAIC0yODEsNyArMjgyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIHsKICAgICAvLyBTdGFydCB3aXRoIDJt
YiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVzdCBpcyBnb2luZyB0byB0cnkgdG8gdXNlIGp1c3QgbW9y
ZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNlIHRvIDFtYiBsYXRlci4KLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDIqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyKjEwMjQqMTAyNCwgMTAyNCk7CiAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgUmVmUHRyPEZha2VUaWxl
ZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwxKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpA
QCAtMzA1LDkgKzMwNiw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGls
ZXNBZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBsYXllcjEtPmludmFsaWRhdGVSZWN0KGxheWVy
UmVjdCk7CiAKICAgICAvLyBQYWludCBhIHNpbmdsZSB0aWxlIGluIGxheWVyMiBzbyB0aGF0IGl0
IHdpbGwgaWRsZSBwYWludC4KLSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5ZXIyUmVjdCk7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJl
UHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyUmVjdCk7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyMi0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQ
cmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllcjEtPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBs
YXllclJlY3QsIDApOwogICAgIGxheWVyMi0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJl
Y3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKIApAQCAtMzIxLDEyICszMjIsMTEgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogCiAg
ICAgLy8gUmVkdWNlIG91ciBtZW1vcnkgbGltaXRzIHRvIDFtYi4KICAgICB0ZXh0dXJlTWFuYWdl
ci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0ICogMTAyNCk7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMTAyNCAqIDEwMjQpOwogCiAgICAgLy8g
Tm93IGlkbGUgcGFpbnQgbGF5ZXIyLiBXZSBhcmUgZ29pbmcgdG8gcnVuIG91dCBvZiBtZW1vcnkg
dGhvdWdoIQotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCBsYXllcjJSZWN0KTsKLSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVz
SW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5ZXJSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
cHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKDApOwogICAgIGxheWVyMi0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApLCAwKTsKICAgICBsYXllcjItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRl
ciwgbGF5ZXIyUmVjdCwgMCk7CiAKQEAgLTM0NSw5ICszNDUsOSBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAgICAgRVhQRUNU
X0ZBTFNFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAyKSk7CiAKICAgICAvLyBOb3cgaWYgbGF5
ZXIyIGJlY29tZXMgZnVsbHkgdmlzaWJsZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcGFpbnQgaXQg
YW5kIHB1c2ggdmFsaWQgdGV4dHVyZXMuCi0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyMlJlY3QpOwotICAgIGxheWVyMS0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllclJlY3QpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllcjItPnNl
dFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgbGF5ZXIxLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXIyLT51cGRhdGVMYXllclJlY3QodXBk
YXRlciwgbGF5ZXIyUmVjdCwgMCk7CiAgICAgbGF5ZXIxLT51cGRhdGVMYXllclJlY3QodXBkYXRl
ciwgbGF5ZXJSZWN0LCAwKTsKIApAQCAtMzY1LDcgKzM2NSw3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiB7Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEw
MjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKSk7CkBAIC0zNzksOCArMzc5LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiAgICAgbGF5ZXItPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVy
UmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkKTsKICAgICBs
YXllci0+aWRsZVVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSwgJm9jY2x1ZGVkKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMzkyLDcgKzM5Miw3IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRp
bGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGly
dHlEdXJpbmdQYWludCkKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTQwMiwxMCArNDAyLDExIEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1Bh
aW50KQogICAgIC8vIG5vdCBwcmV2ZW50IHRoZSB0aWxlIGZyb20gYmVpbmcgcHVzaGVkLgogICAg
IGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwg
NTApLCBsYXllci5nZXQoKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBs
YXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpAQCAtNDE3LDcgKzQxOCw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1
cmluZ1BhaW50KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5
ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwpAQCAtNDI1LDE0ICs0MjYsMTYgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4
dExheWVyKQogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIGxheWVyMS0+c2V0Qm91
bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAgICBsYXllcjEtPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyMS0+aW52YWxpZGF0ZVJlY3QoSW50
UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCiAgICAgbGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MDAsIDIwMCkpOworICAgIGxheWVyMi0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSk7CiAgICAgbGF5ZXIyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7CiAKLSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwor
ICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAg
ICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIGxheWVyMS0+dXBk
YXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKIApAQCAt
NDUzLDcgKzQ1Niw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNM
YXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPbk5leHRMYXllcikKIAogVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJl
dmlvdXNMYXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CkBAIC00
NjgsOSArNDcxLDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xh
eWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXkKICAgICBsYXllcjItPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyMi0+aW52
YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXIxLT5zZXRU
ZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwg
MTAwLCAyMDApKTsKLSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0
aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAKICAgICAvLyBJbnZhbGlkYXRlIGEgdGlsZSBvbiBsYXllcjIKICAgICBsYXll
cjEtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldFJlY3RUb0ludmFsaWRhdGUoSW50UmVj
dCgwLCA1MCwgMTAwLCA1MCksIGxheWVyMi5nZXQoKSk7CkBAIC00OTcsNyArNTAwLDcgQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIC8v
IFdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmb3Igb25seSB0aGUgdmlzaWJsZSByZWN0LCBzbyB3ZSB3
aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGluIGZpcnN0IGlkbGUgcGFpbnQuCiAgICAgaW50IG1lbW9y
eUxpbWl0ID0gNCAqIDEwMCAqIDEwMDsgLy8gMSB0aWxlcywgNCBieXRlcyBwZXIgcGl4ZWwuCiAK
LSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlM
aW1pdCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlM
aW1pdCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMCkpKTsKQEAgLTUwNyw4ICs1MTAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXll
clJlY3QodmlzaWJsZVJlY3QpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVj
dCk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxj
dWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0
b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAKICAgICAvLyBJ
ZGxlLXBhaW50aW5nIHNob3VsZCBzZWUgbm8gbW9yZSBwcmlvcml0eSB0aWxlcyBmb3IgcGFpbnRp
bmcuCkBAIC01MjAsOCArNTIzLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlk
bGVQYWludE91dE9mTWVtb3J5KQogICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRo
ZSBpbXBsIHNpZGUuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMSkp
OwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3Vs
YXRvciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgIGxheWVyLT5p
ZGxlVXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKIApAQCAtNTMxLDcg
KzUzNCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1l
bW9yeSkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXpl
ZExheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEw
MDAwLCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAx
MDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOwpAQCAtNTQzLDggKzU0Niw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChjb250ZW50UmVjdCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsK
IAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+
dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsKIAogICAgIC8vIEVtcHR5
IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgpAQCAtNTcyLDcgKzU3NSw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZEFuaW1hdGluZ0xheWVyKQog
ewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0
KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0KTsKICAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpA
QCAtNTg3LDggKzU5MCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFp
bnRaZXJvU2l6ZWRBbmltYXRpbmdMYXllcikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChjb250ZW50UmVjdCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsK
IAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+
dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsKIAogICAgIC8vIEVtcHR5
IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgpAQCAtNjE5LDcgKzYyMiw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIEludFNp
emUgY29udGVudEJvdW5kcygxMDAsIDEwMCk7CiAgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKIAotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNjMxLDggKzYzNCw4IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIGxh
eWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKICAgICBsYXllci0+aW52YWxp
ZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
SW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJl
Y3QsIDApOwogCiAgICAgLy8gTm9uLXZpc2libGUgbGF5ZXJzIGRvbid0IG5lZWQgaWRsZSBwYWlu
dC4KQEAgLTY2NCw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0SGF2ZU91dGVyVGlsZXMoRmFr
ZUNDVGlsZWRMYXllckltcGwqIGxheWVySW1wbCwgaW50IHdpZHRoLCBpbnQgaAogCiBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVy
cykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCA4
MDAwKjgwMDAqNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4
MDAwKjgwMDAqOCwgMTAyNCk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAKICAgICBpbnQgdGlsZVdpZHRoID0gRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNp
emUoKS53aWR0aCgpOwpAQCAtNjg4LDggKzY5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgICAgICAgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwogICAgICAgICAgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgICAgICAgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3Qp
OwotICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
ICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAg
ICAgICAgICAgICAvLyBJZiBpZGxlUGFpbnRSZWN0IGdpdmVzIGJhY2sgYSBub24tZW1wdHkgcmVz
dWx0IHRoZW4gd2Ugc2hvdWxkIHBhaW50IGl0LiBPdGhlcndpc2UsCiAgICAgICAgICAgICAvLyB3
ZSBzaG91ZCBwYWludCBub3RoaW5nLgpAQCAtNzA1LDE2ICs3MDgsMTYgQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMpCiAg
ICAgICAgICAgICB0ZXN0SGF2ZU91dGVyVGlsZXMobGF5ZXJJbXBsLmdldCgpLCB3aWR0aFtpXSwg
aGVpZ2h0W2pdLCAwKTsKIAogICAgICAgICAgICAgLy8gU2V0IHByaW9yaXRpZXMgYW5kIHJlY3Jl
YXRlIHRpbGVzLgotICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgICAgICAgICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgICAgICAgICAvLyBOb3JtYWxseSB3
ZSBkb24ndCBhbGxvdyBub24tdmlzaWJsZSBsYXllcnMgdG8gcHJlLXBhaW50LCBidXQgaWYgdGhl
eSBhcmUgYW5pbWF0aW5nIHRoZW4gd2Ugc2hvdWxkLgogICAgICAgICAgICAgRVhQRUNUX0VRKHNo
b3VsZFByZXBhaW50LCBsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKIAogICAg
ICAgICAgICAgLy8gSWYgdGhlIGxheWVyIGlzIHRvIGJlIHByZXBhaW50ZWQgYXQgYWxsLCB0aGVu
IGFmdGVyIGZvdXIgdXBkYXRlcyB3ZSBzaG91bGQgaGF2ZSB0aGUgb3V0ZXIgcm93L2NvbHVtbnMg
cGFpbnRlZC4KICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgKytrKSB7Ci0gICAg
ICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgICAgICAgICAgICAgbGF5ZXItPnVw
ZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAgICAgICAgICAgICAgICAg
bGF5ZXItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwpAQCAt
NzI2LDggKzcyOSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRO
b25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVu
dGx5IGlkbGUgcGFpbnQgcGFzdCB0aGUgb3V0ZXJtb3N0IHRpbGVzLgogICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOwogICAgICAgICAg
ICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyArK2spIHsKLSAgICAgICAgICAgICAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVj
dCk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgICAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNh
bGN1bGF0b3IpOworICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAKICAgICAgICAgICAgICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICAgICAgICAgICAgICBsYXllci0+aWRsZVVwZGF0ZUxh
eWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CkBAIC03NDEsNyArNzQ0LDcgQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdM
YXllcnMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVBy
ZXBhcmUpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC03NTMsOSArNzU2LDEwIEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVByZXBhcmUpCiAKICAgICAvLyBUaGUg
dGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRz
IHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAg
ICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAg
ICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0
b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7
CiAgICAgdXBkYXRlci51cGRhdGUoY2NDb250ZXh0LmdldCgpLCAmZmFrZUFsbG9jYXRvciwgJmZh
a2VDb3BpZXIsICZmYWtlVXBsb2FkZXIsIDEwMDApOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC03OTAsNyArNzk0LDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxl
ZCkKICAgICAvLyBUaGUgdXBkYXRlUmVjdCAodGhhdCBpbmRpY2F0ZXMgd2hhdCB3YXMgYWN0dWFs
bHkgcGFpbnRlZCkgc2hvdWxkIGJlIGluCiAgICAgLy8gbGF5ZXIgc3BhY2UsIG5vdCB0aGUgY29u
dGVudCBzcGFjZS4KIAotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJXaXRo
U2NhbGVkQm91bmRzPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllcldpdGhTY2Fs
ZWRCb3VuZHModGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIEludFJlY3QgbGF5ZXJCb3Vu
ZHMoMCwgMCwgMzAwLCAyMDApOwpAQCAtODA0LDE1ICs4MDgsMTUgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxl
ZCkKICAgICAvLyBIb3dldmVyLCBpdCBzaG91bGQgc3RpbGwgYmUgaW4gbGF5ZXIgc3BhY2UsIG5v
dCBjb250ZW50IHNwYWNlLgogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRz
KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxh
eWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgY29udGVudEJvdW5kcywgMCk7CiAgICAgRVhQ
RUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDMwMCwgMzAwICogMC44KSwgbGF5ZXIt
PnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKIAogICAgIC8vIEFmdGVyIHRo
ZSB0aWxlcyBhcmUgdXBkYXRlZCBvbmNlLCBhbm90aGVyIGludmFsaWRhdGUgb25seSBuZWVkcyB0
byB1cGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRC
b3VuZHMpOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgY29udGVudEJvdW5k
cywgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KGxheWVyQm91bmRzKSwg
bGF5ZXItPnVwZGF0ZVJlY3QoKSk7CkBAIC04MjEsMjkgKzgyNSwzMCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2Nh
bGVkKQogICAgIC8vIFBhcnRpYWwgcmUtcGFpbnQgc2hvdWxkIGFsc28gYmUgcmVwcmVzZW50ZWQg
YnkgdGhlIHVwZGF0ZVJlY3QgaW4gbGF5ZXIgc3BhY2UsIG5vdCBjb250ZW50IHNwYWNlLgogICAg
IEludFJlY3QgcGFydGlhbERhbWFnZSgzMCwgMTAwLCAxMCwgMTApOwogICAgIGxheWVyLT5pbnZh
bGlkYXRlUmVjdChwYXJ0aWFsRGFtYWdlKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRl
bnRCb3VuZHMsIDApOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg0NSwgODAs
IDE1LCA4KSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiB7
Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0
KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgp
KSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDApKSk7CiAKICAgICAvLyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgog
ICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKIAogICAgIC8vIEludmFs
aWRhdGUgdGhlIGVudGlyZSBsYXllci4KICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIt
Pmxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkpOwogCiAgICAgLy8gUHVzaCB0aGUgdGlsZXMgdG8gdGhl
IGltcGwgc2lkZSBhbmQgY2hlY2sgdGhhdCB0aGVyZSBpcyBleGFjdGx5IG9uZS4KLSAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3Ip
OworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXIt
PnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCk7CiAg
ICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllcklt
cGwuZ2V0KCkpOwpAQCAtODU1LDExICs4NjAsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKICAgICAv
LyBDaGFuZ2UgdGhlIGNvbnRlbnRzIHNjYWxlIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGVudCBy
ZWN0YW5nbGUgcmVxdWlyaW5nIHBhaW50aW5nCiAgICAgLy8gaXMgbm90IHNjYWxlZC4KICAgICBs
YXllci0+c2V0Q29udGVudHNTY2FsZSgyKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KDAsIDAsIDIwMCwgMjAwKSk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXItPmxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkpOwog
CiAgICAgLy8gVGhlIGltcGwgc2lkZSBzaG91bGQgZ2V0IDJ4MiB0aWxlcyBub3cuCi0gICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVj
dCgwLCAwLCAyMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAyMDAsIDIwMCksIDApOwog
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJ
bXBsLmdldCgpKTsKQEAgLTg3MSw5ICs4NzcsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIC8v
IEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllciBhZ2FpbiwgYnV0IGRvIG5vdCBwYWludC4gQWxs
IHRpbGVzIHNob3VsZCBiZSBnb25lIG5vdyBmcm9tIHRoZQogICAgIC8vIGltcGwgc2lkZS4KICAg
ICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwor
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwogICAg
IGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgxLCAwLCAwLCAxKSwgMCk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBsYXllci0+cHVzaFByb3BlcnRp
ZXNUbyhsYXllckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1Rp
bGVBdCgwLCAwKSk7CkBAIC04OTYsMTUgKzkwMiwxNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogCiAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVt
b3J5IGZvciBvbmx5IG9uZSBvZiB0aGUgdHdvIGxheWVycy4KICAgICBpbnQgbWVtb3J5TGltaXQg
PSA0ICogMzAwICogMzAwOyAvLyA0IGJ5dGVzIHBlciBwaXhlbC4KLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCwgbWVtb3J5TGltaXQp
OwogCi0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0g
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGNoaWxkTGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBjaGlsZExheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250
ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKICAgICByb290TGF5ZXItPmFkZENoaWxkKGNoaWxkTGF5
ZXIpOwogCiAgICAgcm9vdExheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgcm9v
dExheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKICAgICByb290TGF5ZXIt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTUwLCAxNTApKTsKICAgICBjaGlsZExheWVyLT5zZXRC
b3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgY2hpbGRMYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChjb250ZW50UmVjdCk7CiAgICAgY2hpbGRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgx
NTAsIDE1MCkpOwogICAgIHJvb3RMYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwog
ICAgIGNoaWxkTGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKQEAgLTkxMiw5ICs5
MTksNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0
KQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAgY2NM
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgzMDAsIDMwMCkpOwogCi0gICAg
Y2hpbGRMYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBjb250ZW50UmVjdCk7Ci0gICAgcm9vdExheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMo
dXBkYXRlciwgbWVtb3J5TGltaXQpOwogCiAgICAgLy8gV2UnbGwgc2tpcCB0aGUgcm9vdCBsYXll
ci4KQEAgLTkyNiwxNCArOTMwLDEwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBz
a2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgLy8gUmVtb3ZlIHRoZSBjaGlsZCBsYXllci4KICAgICBy
b290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAKLSAgICAvLyBEcm9wIHRleHR1cmUgcHJp
b3JpdGllcyBvbiB0aGUgY2hpbGQuCi0gICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGll
cygpOwotCi0gICAgcm9vdExheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CiAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwg
bWVtb3J5TGltaXQpOwogICAgIEVYUEVDVF9GQUxTRShyb290TGF5ZXItPnNraXBzRHJhdygpKTsK
IAorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFs
bE1lbW9yeSgmYWxsb2NhdG9yKTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigw
KTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0
b3I6OnNodXRkb3duKCk7CkBAIC05NDEsMTQgKzk0MSwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcmVzaXplVG9TbWFsbGVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNjAqMTAyNCoxMDI0LCA2MCoxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAgbGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKDcwMCwgNzAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0
KDAsIDAsIDcwMCwgNzAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJ
bnRSZWN0KDAsIDAsIDcwMCwgNzAwKSwgMCk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNp
emUoMjAwLCAyMDApKTsKQEAgLTk1NywxNiArOTU4LDE3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwgNjAqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIGludCBzaXplID0gMSA8
PCAzMDsKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoc2l6ZSwgc2l6ZSkpOworICAgIGxh
eWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKICAgICBs
YXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCBzaXplLCBzaXplKSk7CiAKICAgICAv
LyBFbnN1cmUgbm8gY3Jhc2ggZm9yIGJvdW5kcyB3aGVyZSBzaXplICogc2l6ZSB3b3VsZCBvdmVy
ZmxvdyBhbiBpbnQuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgw
LCAwLCA3MDAsIDcwMCksIDApOwogfQogCkBAIC05ODIsNyArOTg0LDcgQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NM
YXllclRyZWVIb3N0Q2xpZW50LCBzZXR0aW5ncyk7CiAgICAgQVNTRVJUX1RSVUUoY2NMYXllclRy
ZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkpOwogCi0gICAgLy8gQ3Jl
YXRlIG9uZSA1MDAgeCAzMDAgdGlsZWQgbGF5ZXIuCisgICAgLy8gQ3JlYXRlIG9uZSAzMDAgeCAy
MDAgdGlsZWQgbGF5ZXIgd2l0aCAzIHggMiB0aWxlcy4KICAgICBJbnRTaXplIGNvbnRlbnRCb3Vu
ZHMoMzAwLCAyMDApOwogICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
Y29udGVudEJvdW5kcyk7CiAKQEAgLTEwOTcsNyArMTA5OSw3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhvdXRPY2NsdXNpb24pCiB7Ci0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICAvLyBUaGUg
dGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRz
IHR3byB0aWxlcy4KQEAgLTExMDUsMTUgKzExMDcsMTUgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhvdXRPY2NsdXNpb24pCiAgICAgbGF5ZXItPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZh
bGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxh
eWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgRVhQRUNU
X0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50
KCkpOwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0
aE9jY2x1c2lvbikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwog
CkBAIC0xMTI2LDggKzExMjgsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGls
ZXNQYWludGVkV2l0aE9jY2x1c2lvbikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwg
NjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVy
UmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkKTsKICAgICBF
WFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVS
ZWN0Q291bnQoKSk7CiAKQEAgLTExNjAsNyArMTE2Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogCiBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0
cmFpbnRzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAg
LTExNzQsOCArMTE3Niw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1Bh
aW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAgbGF5ZXItPnNl
dFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDM2MCkpOwogICAgIGxheWVyLT5p
bnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAs
IDYwMCwgMzYwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwor
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0
ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzYwKSwgJm9jY2x1ZGVkKTsK
ICAgICBFWFBFQ1RfRVEoMjQtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnBy
ZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTExODksOCArMTE5MSw4IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29u
c3RyYWludHMpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMw
MCwgMTUwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA2
MDAsIDM1MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwg
NjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDM1MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJp
b3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2
MDAsIDM1MCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMjA0LDggKzEy
MDYsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9j
Y2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lv
bihJbnRSZWN0KDIwMCwgMjAwLCAzMDAsIDE1MCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJl
Y3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVw
ZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAwLCAzNDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9F
USgyNC02LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3Vu
dCgpKTsKIApAQCAtMTIxNyw3ICsxMjE5LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKIAog
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZh
bGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApA
QCAtMTIyOSw4ICsxMjMxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
Tm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9u
KEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXll
clJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVj
dChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBk
YXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VR
KDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50
KCkpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CkBAIC0xMjUyLDcgKzEyNTQsNyBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlv
bikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2Ns
dXNpb25BbmRUcmFuc2Zvcm1zKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2Nj
bHVkZWQ7CiAKQEAgLTEyNjksOCArMTI3MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNmb3JtcykKICAgICBvY2NsdWRl
ZC5zZXRPY2NsdXNpb24oSW50UmVjdCgxMDAsIDEwMCwgMTUwLCA1MCkpOwogICAgIGxheWVyLT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7
CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJ
bnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1
bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAg
bGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwg
Jm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTEyODEsNyArMTI4Myw3IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5k
VHJhbnNmb3JtcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRl
ZFdpdGhPY2NsdXNpb25BbmRTY2FsaW5nKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVkZWQ7CiAKQEAgLTEyOTcsOCArMTI5OSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2Ns
dWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAxMDApKTsKICAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMo
KSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7
Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRv
ciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlD
YWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwog
ICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCksICZvY2NsdWRlZCk7CiAgICAgLy8gVGhlIGNvbnRlbnQgaXMgaGFsZiB0aGUgc2l6ZSBvZiB0
aGUgbGF5ZXIgKHNvIHRoZSBudW1iZXIgb2YgdGlsZXMgaXMgZmV3ZXIpLgogICAgIC8vIEluIHRo
aXMgY2FzZSwgdGhlIGNvbnRlbnQgaXMgMzAweDMwMCwgYW5kIHNpbmNlIHRoZSB0aWxlIHNpemUg
aXMgMTAwLCB0aGUKQEAgLTEzMTcsOCArMTMxOSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2NsdWRl
ZC5zZXRPY2NsdXNpb24oSW50UmVjdCgyMDAsIDIwMCwgMzAwLCAyMDApKTsKICAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkp
OwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0g
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwg
SW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAg
IGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCks
ICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTEzMzcsOCArMTMzOSw4IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5k
U2NhbGluZykKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgxMDAsIDEwMCwgMTUw
LCAxMDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50
KCksIGxheWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0
KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50
UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5
ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAg
LTEzNDksNyArMTM1MSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1Bh
aW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTEzNjYsOCArMTM2OCw4IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKICAgICBsYXllci0+c2V0RHJh
d09wYWNpdHkoMSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJp
b3JpdHlDYWxjdWxhdG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygw
KTsKIAogICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IHBhaW50IG9wYXF1ZSBjb250ZW50LCB0
aGVuIHRoZSB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbiBzaG91bGQgYmUgZW1wdHkuCiAgICAg
bGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRS
ZWN0KCkpOwpAQCAtMTQ1MCw3ICsxNDUyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTQ2Nyw4ICsxNDY5LDggQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KHZpc2libGVCb3VuZHMpOwogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgx
KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAg
Ly8gSW52YWxpZGF0ZXMgYW5kIHBhaW50cyB0aGUgd2hvbGUgbGF5ZXIuCiAgICAgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0KCkpOwpA
QCAtMTUwMSw2ICsxNTAzLDE2MCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4
ZWxzUGFpbnRlZE1ldHJpY3MpCiAgICAgRVhQRUNUX0VRKDAsIG9jY2x1ZGVkLm92ZXJkcmF3TWV0
cmljcygpLnRpbGVzQ3VsbGVkRm9yVXBsb2FkKCkpOwogfQogCitURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFs
bG9jYXRlZCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQu
CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworCisgICAgLy8gVGls
ZSBzaXplIGlzIDEwMHgxMDAuCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAzMDAsIDIwMCk7
CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMCwgMCwgMzAwLCAxMDApOworICAgIEludFJlY3QgY2hp
bGQyUmVjdCgwLCAxMDAsIDMwMCwgMTAwKTsKKworICAgIENDTGF5ZXJUcmVlU2V0dGluZ3Mgc2V0
dGluZ3M7CisgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NMYXllclRyZWVIb3N0
Q2xpZW50OworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBzZXR0aW5n
cyk7CisgICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcklmTmVlZGVkKCkpOworCisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IHJv
b3QgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3Qt
PmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBz
dXJmYWNlID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGNoaWxkID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
Y2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKKyAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsK
KworICAgIHJvb3QtPnNldEJvdW5kcyhyb290UmVjdC5zaXplKCkpOworICAgIHJvb3QtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoKSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChy
b290UmVjdCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoc3VyZmFjZSk7CisKKyAgICBzdXJmYWNlLT5z
ZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisgICAgc3VyZmFjZS0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgpKTsKKyAgICBzdXJmYWNlLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgc3VyZmFj
ZS0+YWRkQ2hpbGQoY2hpbGQpOworICAgIHN1cmZhY2UtPmFkZENoaWxkKGNoaWxkMik7CisKKyAg
ICBjaGlsZC0+c2V0Qm91bmRzKGNoaWxkUmVjdC5zaXplKCkpOworICAgIGNoaWxkLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihjaGlsZFJlY3Qu
bG9jYXRpb24oKSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoY2hpbGRSZWN0KTsK
KworICAgIGNoaWxkMi0+c2V0Qm91bmRzKGNoaWxkMlJlY3Quc2l6ZSgpKTsKKyAgICBjaGlsZDIt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihj
aGlsZDJSZWN0LmxvY2F0aW9uKCkpOworICAgIGNoaWxkMi0+c2V0VmlzaWJsZUxheWVyUmVjdChj
aGlsZDJSZWN0KTsKKworICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3QpOwor
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RSZWN0LnNpemUoKSk7CisK
KyAgICAvLyBXaXRoIGEgaHVnZSBtZW1vcnkgbGltaXQsIGFsbCBsYXllcnMgc2hvdWxkIHVwZGF0
ZSBhbmQgcHVzaCB0aGVpciB0ZXh0dXJlcy4KKyAgICByb290LT5pbnZhbGlkYXRlUmVjdChyb290
UmVjdCk7CisgICAgY2hpbGQtPmludmFsaWRhdGVSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQy
LT5pbnZhbGlkYXRlUmVjdChjaGlsZDJSZWN0KTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0
ZUxheWVycyh1cGRhdGVyLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAg
ICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAg
ICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICAgICAgRVhQRUNUX0VRKDYsIHJvb3QtPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEo
MywgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMywgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRh
dGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMo
KSk7CisKKyAgICAgICAgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRh
dGVDb3VudCgpOworICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xl
YXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5p
ZCgpKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChh
ZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkpKSk7CisgICAgICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5pZCgpKSkpOworICAgICAgICByb290LT5wdXNoUHJv
cGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVz
VG8oY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNo
aWxkMkltcGwuZ2V0KCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUocm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChp
LCBqKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjaGlsZEltcGwtPmhhc1RleHR1cmVJZEZv
clRpbGVBdChpLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjaGlsZDJJbXBsLT5oYXNU
ZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAgICB9CisgICAgfQorICAgIGNjTGF5ZXJU
cmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgIC8vIFdpdGggYSBtZW1vcnkgbGltaXQg
dGhhdCBpbmNsdWRlcyBvbmx5IHRoZSByb290IGxheWVyICgzeDIgdGlsZXMpIGFuZCBoYWxmIHRo
ZSBzdXJmYWNlIHRoYXQKKyAgICAvLyB0aGUgY2hpbGQgbGF5ZXJzIGRyYXcgaW50bywgdGhlIGNo
aWxkIGxheWVycyB3aWxsIG5vdCBiZSBhbGxvY2F0ZWQuIElmIHRoZSBzdXJmYWNlIGlzbid0Cisg
ICAgLy8gYWNjb3VudGVkIGZvciwgdGhlbiBvbmUgb2YgdGhlIGNoaWxkcmVuIHdvdWxkIGZpdCB3
aXRoaW4gdGhlIG1lbW9yeSBsaW1pdC4KKyAgICByb290LT5pbnZhbGlkYXRlUmVjdChyb290UmVj
dCk7CisgICAgY2hpbGQtPmludmFsaWRhdGVSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQyLT5p
bnZhbGlkYXRlUmVjdChjaGlsZDJSZWN0KTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxh
eWVycyh1cGRhdGVyLCAoMyAqIDIgKyAzICogMSkgKiAoMTAwICogMTAwKSAqIDQpOworICAgIHsK
KyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIHVw
ZGF0ZVRleHR1cmVzKDEwMDApOworICAgICAgICBFWFBFQ1RfRVEoNiwgcm9vdC0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBj
aGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgwLCBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNv
dW50KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsK
KworICAgICAgICByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNv
dW50KCk7CisgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVw
ZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
Y2xlYXJVcGRhdGVDb3VudCgpOworCisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkp
KSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZC0+aWQoKSkpKTsKKyAgICAgICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7CisgICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0
aWVzVG8ocm9vdEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhj
aGlsZEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZDItPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQy
SW1wbC5nZXQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKKyAgICAgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShyb290SW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIGop
KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZEltcGwtPmhhc1RleHR1cmVJZEZvclRp
bGVBdChpLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQySW1wbC0+aGFzVGV4
dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjY0xheWVyVHJl
ZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAvLyBXaXRoIGEgbWVtb3J5IGxpbWl0IHRo
YXQgaW5jbHVkZXMgb25seSBoYWxmIHRoZSByb290IGxheWVyLCBubyBjb250ZW50cyB3aWxsIGJl
CisgICAgLy8gYWxsb2NhdGVkLiBJZiByZW5kZXIgc3VyZmFjZSBtZW1vcnkgd2Fzbid0IGFjY291
bnRlZCBmb3IsIHRoZXJlIGlzIGVub3VnaCBzcGFjZQorICAgIC8vIGZvciBvbmUgb2YgdGhlIGNo
aWxkcmVuIGxheWVycywgYnV0IHRoZXkgZHJhdyBpbnRvIGEgc3VyZmFjZSB0aGF0IGNhbid0IGJl
CisgICAgLy8gYWxsb2NhdGVkLgorICAgIHJvb3QtPmludmFsaWRhdGVSZWN0KHJvb3RSZWN0KTsK
KyAgICBjaGlsZC0+aW52YWxpZGF0ZVJlY3QoY2hpbGRSZWN0KTsKKyAgICBjaGlsZDItPmludmFs
aWRhdGVSZWN0KGNoaWxkMlJlY3QpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJz
KHVwZGF0ZXIsICgzICogMSkgKiAoMTAwICogMTAwKSAqIDQpOworICAgIHsKKyAgICAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIHVwZGF0ZVRleHR1cmVz
KDEwMDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgw
LCBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAg
ICAgICBFWFBFQ1RfRkFMU0UodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKKworICAgICAgICBy
b290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAg
ICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7
CisgICAgICAgIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVD
b3VudCgpOworCisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gcm9vdEltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkpKSk7CisgICAgICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbChjaGlsZC0+aWQoKSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bChjaGlsZDItPmlkKCkpKSk7CisgICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdElt
cGwuZ2V0KCkpOworICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0
KCkpOworICAgICAgICBjaGlsZDItPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfRkFMU0Uocm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBqKSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkp
OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMkltcGwtPmhhc1RleHR1cmVJZEZvclRp
bGVBdChpLCAwKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2NMYXllclRyZWVIb3N0LT5jb21t
aXRDb21wbGV0ZSgpOworCisgICAgY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5h
Z2VyKCktPmNsZWFyQWxsTWVtb3J5KCZhbGxvY2F0b3IpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+
c2V0Um9vdExheWVyKDApOworICAgIGNjTGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgIFdlYktp
dDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKwogY2xhc3MgVHJhY2tpbmdMYXllclBh
aW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzT3duUHRyPFRyYWNraW5nTGF5ZXJQYWludGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgVHJhY2tpbmdMYXllclBhaW50ZXIoKSk7IH0KQEAgLTE1NDIsNyArMTY5OCw3IEBA
IHByaXZhdGU6CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29u
dGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiB7Ci0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCwgNDAwMDAwMCkpOworICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDApKTsKICAgICBDQ1ByaW9y
aXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9yOwogCiAgICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwpAQCAtMTU1Nyw2ICsxNzEzLDcg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxl
SXNOb3REaXN0b3J0ZWREdXJpbmdQYWludCkKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChjb250ZW50UmVjdCk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMoY2FsY3Vs
YXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAg
IC8vIFVwZGF0ZSB0aGUgd2hvbGUgdGlsZS4KICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVw
ZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsKQEAgLTE1NzUsNyArMTczMiw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVk
RHVyaW5nUGFpbnQpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2Vy
Q29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpZGF0aW9uKQogewotICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDAsIDQwMDAwMDApKTsK
KyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlcihD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAwLCA0MDAwMDAwKSk7CiAg
ICAgQ0NQcmlvcml0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKIAogICAgIFJlZlB0cjxVcGRhdGVU
cmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgVXBkYXRlVHJh
Y2tpbmdUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKQEAgLTE1ODks
NiArMTc0Niw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29u
dGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpCiAgICAgbGF5ZXItPnNldFZpc2li
bGVMYXllclJlY3QoY29udGVudFJlY3QpOwogCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKGNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
MCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHdob2xlIHRpbGUuCiAgICAgbGF5ZXItPnVwZGF0ZUxh
eWVyUmVjdCh1cGRhdGVyLCBjb250ZW50UmVjdCwgMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150801</attachid>
            <date>2012-07-04 08:21:02 -0700</date>
            <delta_ts>2012-07-04 11:48:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120704112101.patch</filename>
            <type>text/plain</type>
            <size>110612</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY1NjA1NGEwMjI5YmI2
MDg3NzUxM2NkMDQ2OWJlYjAyMGE4OTk3OC4uOGNiOTBmNDhhMDI2OTliZTg4ZWYyZjBiODI1OWEw
ODExYzRjNTQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA2LTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBTaW5j
ZSBzdXJmYWNlIG1lbW9yeSBjYW4gbm8gbG9uZ2VyIGJlIHRha2VuIGJ5IGNvbnRlbnRzLCB3ZSBy
ZW1vdmUgdGhlCisgICAgICAgIHByZWZlcnJlZCBtZW1vcnkgbGltaXQgZnJvbSB0aGUgdGV4dHVy
ZSBtYW5hZ2VyLgorCisgICAgICAgIFRlc3RzOiBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmRvbnRB
bGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2F0ZWQKKyAgICAgICAg
ICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5yZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9y
eUF2YWlsYWJsZU91dHNpZGVSb290U3VyZmFjZQorICAgICAgICAgICAgICAgQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LnJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVz
dExhdGUKKyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC53aGVuUmVuZGVy
U3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZQorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06
OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChUaWxl
ZExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3
TWV0cmljczo6Q0NPdmVyZHJhd01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJh
d01ldHJpY3M6OmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJhd01ldHJpY3M6OmRpZFVzZVJlbmRl
clN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJh
d01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuaDoKKyAgICAgICAgKENDT3ZlcmRy
YXdNZXRyaWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1
ZXN0TGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6bWVtb3J5Rm9yUmVu
ZGVyU3VyZmFjZXNCeXRlcyk6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxj
dWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVBy
aW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxl
UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuaDoKKyAgICAgICAgKENDUHJpb3JpdHlDYWxjdWxhdG9yKToKKwogMjAxMi0wNy0wNCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENv
cnJlY3RseSByZWplY3QgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3aXRoIGNlcnRhaW4gcm90YXRp
b25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2ZGI1MTAyMzEyZDg4NTRhMDQyNWJk
YmZiMjgxMDgxY2I2YmNjYzQxLi41OWQ3ZmVkMjNjNGQ1Nzg3YjFhOGFiNmYwNTkzZDM1MzBmM2Q5
NDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA2
LTI5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gUmVzcGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2Vy
dmluZyBjb250ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHRlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHA6CisgICAg
ICAgIChXVEY6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdDo6Y3JlYXRlTWFuYWdlcik6CisgICAg
ICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIHRlc3RzL0NDVGls
ZWRMYXllclRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxlZExh
eWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
KToKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6CisgICAgICAgIChG
YWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKwogMjAxMi0wNy0wNCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvcnJlY3RseSByZWplY3QgYWNjZWxlcmF0ZWQg
YW5pbWF0aW9ucyB3aXRoIGNlcnRhaW4gcm90YXRpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZGRkN2Q1MTUzM2U1ZTgyODBlMGNiYWQwM2EzODI0YTBjMDRh
ZmVkYS4uODM1ZGZiZDdmMTk3YzA5NGQ3NDkzNDg5MTRjYmM2NGFmODgxOTdiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01MDQsNiArNTA0LDggQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXUKICAgICAvLwogICAgIC8vIFBpeGVsIGNvcGllcyBpbiB0aGlzIGFs
Z29yaXRobSBvY2N1ciBhdCBzdGVwcyAyLCAzLCA0LCBhbmQgNS4KIAorICAgIC8vIEZJWE1FOiBX
aGVuIHRoaXMgYWxnb3JpdGhtIGNoYW5nZXMsIHVwZGF0ZSBDQ0xheWVyVHJlZUhvc3Q6OnByaW9y
aXRpemVUZXh0dXJlcygpIGFjY29yZGluZ2x5LgorCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3
aW5nU3VyZmFjZSA9IHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlm
IChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcAppbmRleCBkZDZhNDNkMDI5ODc3
YjcxZDBlMjg4MWZiNWQ1Yzk4NmU0ZTVjNThmLi43NTgwYjYzMzc5OTRhZTM2MzdhMTJkZDkxMzkz
OGJhNjNhNjM3OGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcApA
QCAtMjU4LDE4ICsyNTgsMTkgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlUHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYpCiAKICAgICBjcmVhdGVU
ZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7CiAKKyAgICBib29sIGRyYXdzVG9Sb290U3VyZmFjZSA9
ICF0YXJnZXRSZW5kZXJTdXJmYWNlKCktPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKICAgICBpZiAo
bV9iYWNrVHJhY2spIHsKICAgICAgICAgbV9iYWNrVHJhY2stPnRleHR1cmUoKS0+c2V0RGltZW5z
aW9ucyhjb250ZW50Qm91bmRzKCksIG1fdGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIG1fYmFja1Ry
YWNrLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6
dWlQcmlvcml0eSgpKTsKKyAgICAgICAgbV9iYWNrVHJhY2stPnRleHR1cmUoKS0+c2V0UmVxdWVz
dFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KGRyYXdzVG9Sb290U3Vy
ZmFjZSkpOwogICAgIH0KICAgICBpZiAobV9mb3JlVHJhY2spIHsKICAgICAgICAgbV9mb3JlVHJh
Y2stPnRleHR1cmUoKS0+c2V0RGltZW5zaW9ucyhjb250ZW50Qm91bmRzKCksIG1fdGV4dHVyZUZv
cm1hdCk7Ci0gICAgICAgIG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0
eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eSgpKTsKKyAgICAgICAgbV9mb3JlVHJh
Y2stPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1
aVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgIH0KICAgICBpZiAobV90aHVtYikg
ewogICAgICAgICBJbnRTaXplIHRodW1iU2l6ZSA9IHRoZW1lKCktPnRodW1iUmVjdChtX3Njcm9s
bGJhci5nZXQoKSkuc2l6ZSgpOwogICAgICAgICBtX3RodW1iLT50ZXh0dXJlKCktPnNldERpbWVu
c2lvbnModGh1bWJTaXplLCBtX3RleHR1cmVGb3JtYXQpOwotICAgICAgICBtX3RodW1iLT50ZXh0
dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0
eSgpKTsKKyAgICAgICAgbV90aHVtYi0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQ
cmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBhYjJmNWJlY2M1MjQy
NTlkN2MwYjk5MjFhMTJhNGE1YjI3NmJkM2VhLi42NWNlYWM4MmE0MmFiZDdlM2M5ZmFiMTExNzM4
ZjE2ODUwY2JlODVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTUyMyw2
ICs1MjMsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJ
blJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgcmVzZXRVcGRhdGVTdGF0ZSgp
OwogCiAgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSBpZGxlUGFpbnRSZWN0KHZpc2libGVSZWN0
KTsKKyAgICBib29sIGRyYXdzVG9Sb290U3VyZmFjZSA9ICF0YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnRhcmdldFJlbmRlclN1cmZhY2UoKTsKIAogICAgIC8vIE1pbmltYWxseSBjcmVhdGUgdGhlIHRp
bGVzIGluIHRoZSBkZXNpcmVkIHByZS1wYWludCByZWN0LgogICAgIGlmICghcHJlcGFpbnRSZWN0
LmlzRW1wdHkoKSkgewpAQCAtNTU4LDcgKzU1OSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYK
IAogICAgICAgICAgICAgICAgIHRpbGUtPmRpcnR5UmVjdCA9IG1fdGlsZXItPnRpbGVSZWN0KHRp
bGUpOwogICAgICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIGJhY2tC
dWZmZXIgPSB0aWxlLT50ZXh0dXJlKCk7Ci0gICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+dGV4
dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbVZpc2li
aWxpdHkodHJ1ZSkpOworICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+c2V0
UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21WaXNpYmlsaXR5KHRydWUs
IGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgICAgICAgICAgICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZT4gZnJvbnRCdWZmZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6Y3JlYXRlKGJh
Y2tCdWZmZXItPnRleHR1cmUoKS0+dGV4dHVyZU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPnNpemUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPmZvcm1hdCgpKTsKQEAg
LTU3OCw5ICs1NzksOSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgICAgIC8vIDUxMiBw
aXhlbHMgb2YgcHJlLXBhaW50aW5nLiBMYXRlciB3ZSBjYW4ganVzdCBwYXNzIGFuIGFuaW1hdGlu
ZyBmbGFnIGV0Yy4gdG8gdGhlCiAgICAgICAgIC8vIGNhbGN1bGF0b3IgYW5kIGl0IGNhbiB0YWtl
IGNhcmUgb2YgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2Ugc3RpbGwgbmVlZCBpdC4KICAgICAgICAg
aWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSAmJiAhcHJlcGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlv
cml0eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyKSk7CisgICAgICAgICAgICB0aWxlLT5t
YW5hZ2VkVGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5
RnJvbURpc3RhbmNlKDUxMiwgZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgICAgIGVsc2UgaWYg
KCF2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0aWxlLT5tYW5hZ2VkVGV4dHVy
ZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbURpc3RhbmNl
KHZpc2libGVSZWN0LCB0aWxlUmVjdCkpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5j
ZSh2aXNpYmxlUmVjdCwgdGlsZVJlY3QsIGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCBlM2NiNzNmYWJkY2NkYmExZjY1MzE3
MTM3M2RlMmFiZTVmYjljYWE1Li5jZGU1NTJjMDllMjllMjI2ZDA0ZDVmZjFkYzllMjY4OTA5YzVh
ZjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtODIsOCArODIsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgLy8gUmVzZXQgc3RhdGUgb24gdGlsZXMgdGhhdCB3aWxsIGJlIHVzZWQgZm9y
IHVwZGF0aW5nIHRoZSBsYXllci4KICAgICB2b2lkIHJlc2V0VXBkYXRlU3RhdGUoKTsKIAotICAg
IHZvaWQgc2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0
b3ImLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KTsKLQogICAgIC8vIFByZXBhcmUg
ZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggbGF5ZXJS
ZWN0LgogICAgIHZvaWQgdXBkYXRlTGF5ZXJSZWN0KENDVGV4dHVyZVVwZGF0ZXImLCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciopOwogCkBAIC0xMDks
NiArMTA3LDggQEAgcHJpdmF0ZToKICAgICBib29sIHRpbGVPbmx5TmVlZHNQYXJ0aWFsVXBkYXRl
KFVwZGF0YWJsZVRpbGUqKTsKICAgICBib29sIHRpbGVOZWVkc0J1ZmZlcmVkVXBkYXRlKFVwZGF0
YWJsZVRpbGUqKTsKIAorICAgIHZvaWQgc2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3Qg
Q0NQcmlvcml0eUNhbGN1bGF0b3ImLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KTsK
KwogICAgIHZvaWQgdXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50
IHJpZ2h0LCBpbnQgYm90dG9tLCBDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgQ0NPY2NsdXNpb25U
cmFja2VyKik7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggYTJmOGJiY2JhOTY1NzY5YjBhM2Ey
MmNmMzI1YmQ4MGFmZTFjOGE5Yy4uN2YxYmJjZjVkNWU0ODQzYzBmOTBlNjE0MThlMjhmYjliNTNj
YzAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xNTIsNyArMTUyLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKICAgICAv
LyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBwYXJ0aWFsIHVwZGF0ZSBjYXBhYmlsaXR5Lgog
ICAgIG1fc2V0dGluZ3MubWF4UGFydGlhbFRleHR1cmVVcGRhdGVzID0gbWluKG1fc2V0dGluZ3Mu
bWF4UGFydGlhbFRleHR1cmVVcGRhdGVzLCBtX3Byb3h5LT5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0
ZXMoKSk7CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSgwLCAwLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDAsIG1fcHJveHktPmxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBtX2xheWVyUmVuZGVyZXJJ
bml0aWFsaXplZCA9IHRydWU7CiAKQEAgLTQ0MywxMCArNDQzLDEwIEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkKIH0KIAogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNp
emVfdCBjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNpemVfdCBtZW1vcnlBbGxvY2F0
aW9uTGltaXRCeXRlcykKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQp
OwotICAgIEFTU0VSVChjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpOworICAgIEFTU0VSVChtZW1v
cnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAg
ICByZXR1cm47CkBAIC00NTQsNyArNDU0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0
ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyLCBzaXplX3QgY29udGVudHNNZW0KICAg
ICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKGNv
bnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKIAogICAg
IHVwZGF0ZUxheWVycyhyb290TGF5ZXIoKSwgdXBkYXRlcik7CiB9CkBAIC01MjUsNyArNTI1LDI3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpwcmlvcml0aXplVGV4dHVyZXMoY29uc3QgTGF5ZXJM
aXN0JiB1cGRhdGVMaXN0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBzaXplX3QgcmVhZGJhY2tCeXRl
cyA9IDA7CisgICAgc2l6ZV90IG1heEJhY2tncm91bmRUZXh0dXJlQnl0ZXMgPSAwOworICAgIHNp
emVfdCBjb250ZW50c1RleHR1cmVCeXRlcyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCB1cGRhdGVMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2VMYXllciA9IHVwZGF0ZUxpc3RbaV0uZ2V0KCk7CisgICAgICAgIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOworCisgICAgICAgIHNpemVfdCBieXRlcyA9IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlV
c2VCeXRlcyhyZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpOworICAgICAgICBjb250ZW50c1RleHR1cmVCeXRlcyArPSBieXRlczsKKwor
ICAgICAgICBpZiAocmVuZGVyU3VyZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYnl0ZXMgPiBtYXhCYWNrZ3Jv
dW5kVGV4dHVyZUJ5dGVzKQorICAgICAgICAgICAgbWF4QmFja2dyb3VuZFRleHR1cmVCeXRlcyA9
IGJ5dGVzOworICAgICAgICBpZiAoIXJlYWRiYWNrQnl0ZXMpCisgICAgICAgICAgICByZWFkYmFj
a0J5dGVzID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKG1fZGV2aWNlVmlld3BvcnRT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgfQorICAgIHNpemVfdCByZW5kZXJT
dXJmYWNlc0J5dGVzID0gcmVhZGJhY2tCeXRlcyArIG1heEJhY2tncm91bmRUZXh0dXJlQnl0ZXMg
KyBjb250ZW50c1RleHR1cmVCeXRlczsKKworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKHJlbmRlclN1cmZhY2VzQnl0ZXMpOwogfQogCiAvLyBzdGF0aWMK
QEAgLTU3OCw2ICs1OTgsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRl
bnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICBvY2Ns
dXNpb25UcmFja2VyLmxlYXZlTGF5ZXIoaXQpOwogICAgIH0KIAorICAgIG9jY2x1c2lvblRyYWNr
ZXIub3ZlcmRyYXdNZXRyaWNzKCkuZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMobV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworICAgIG9j
Y2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRyaWNzKCkuZGlkVXNlUmVuZGVyU3VyZmFjZVRleHR1
cmVNZW1vcnlCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1
cmZhY2VzQnl0ZXMoKSk7CiAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5y
ZWNvcmRNZXRyaWNzKHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5j
cHAKaW5kZXggYzBmMGJkNzdkMzNlNWFmMmI4Nzc0ODM1NTQwZTY0MzFlMGY0NjA2Zi4uYzViNmYz
YWU3N2Q1NWQzMmI5NmMzMGJiZmQ1NjQ0NTUwNTg3Nzg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3Zl
cmRyYXdNZXRyaWNzLmNwcApAQCAtNDcsNiArNDcsOCBAQCBDQ092ZXJkcmF3TWV0cmljczo6Q0NP
dmVyZHJhd01ldHJpY3MoYm9vbCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpCiAgICAgLCBtX3BpeGVs
c1VwbG9hZGVkT3BhcXVlKDApCiAgICAgLCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoMCkK
ICAgICAsIG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQoMCkKKyAgICAsIG1fY29udGVudHNUZXh0dXJl
VXNlQnl0ZXMoMCkKKyAgICAsIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVVc2VCeXRlcygwKQogICAg
ICwgbV9waXhlbHNEcmF3bk9wYXF1ZSgwKQogICAgICwgbV9waXhlbHNEcmF3blRyYW5zbHVjZW50
KDApCiAgICAgLCBtX3BpeGVsc0N1bGxlZEZvckRyYXdpbmcoMCkKQEAgLTEwNSw2ICsxMDcsMjIg
QEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXBsb2FkKGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmcKICAgICBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNl
bnQgKz0gdXBsb2FkQXJlYSAtIHVwbG9hZE9wYXF1ZUFyZWE7CiB9CiAKK3ZvaWQgQ0NPdmVyZHJh
d01ldHJpY3M6OmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCBjb250ZW50
c1RleHR1cmVVc2VCeXRlcykKK3sKKyAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzICs9IGNvbnRl
bnRzVGV4dHVyZVVzZUJ5dGVzOworfQorCit2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRVc2VS
ZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCByZW5kZXJTdXJmYWNlVXNlQnl0
ZXMpCit7CisgICAgaWYgKCFtX3JlY29yZE1ldHJpY3NGb3JGcmFtZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzICs9IHJlbmRlclN1cmZhY2VV
c2VCeXRlczsKK30KKwogdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkQ3VsbEZvckRyYXdpbmco
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJ
bnRSZWN0JiBiZWZvcmVDdWxsUmVjdCwgY29uc3QgSW50UmVjdCYgYWZ0ZXJDdWxsUmVjdCkKIHsK
ICAgICBpZiAoIW1fcmVjb3JkTWV0cmljc0ZvckZyYW1lKQpAQCAtMTQ3LDYgKzE2NSw4IEBAIHZv
aWQgQ0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRlcm5hbChNZXRyaWNzVHlwZSBt
ZXRyaWNzVHlwZSwgY29uc3QgTGF5CiAgICAgZmxvYXQgbm9ybWFsaXphdGlvbiA9IDEwMDAuZiAv
IChsYXllclRyZWVIb3N0LT5kZXZpY2VWaWV3cG9ydFNpemUoKS53aWR0aCgpICogbGF5ZXJUcmVl
SG9zdC0+ZGV2aWNlVmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwogICAgIC8vIFRoaXMgZ2l2ZXMg
YXBwcm94aW1hdGVseSAxMDB4IHRoZSBwZXJjZW50YWdlIG9mIHRpbGVzIHRvIGZpbGwgdGhlIHZp
ZXdwb3J0IG9uY2UsIGlmIGFsbCB0aWxlcyB3ZXJlIDI1NngyNTYuCiAgICAgZmxvYXQgdGlsZU5v
cm1hbGl6YXRpb24gPSAxMDAwMC5mIC8gKGxheWVyVHJlZUhvc3QtPmRldmljZVZpZXdwb3J0U2l6
ZSgpLndpZHRoKCkgLyAyNTYuZiAqIGxheWVyVHJlZUhvc3QtPmRldmljZVZpZXdwb3J0U2l6ZSgp
LmhlaWdodCgpIC8gMjU2LmYpOworICAgIC8vIFRoaXMgZ2l2ZXMgYXBwcm94aW1hdGVseSAxMHgg
dGhlIHBlcmNlbnRhZ2Ugb2YgYnl0ZXMgdG8gZmlsbCB0aGUgdmlld3BvcnQgb25jZSwgYXNzdW1p
bmcgNCBieXRlcyBwZXIgcGl4ZWwuCisgICAgZmxvYXQgYnl0ZU5vcm1hbGl6YXRpb24gPSBub3Jt
YWxpemF0aW9uIC8gNDsKIAogICAgIHN3aXRjaCAobWV0cmljc1R5cGUpIHsKICAgICBjYXNlIERy
YXdpbmdUb1NjcmVlbjoKQEAgLTE2NCw2ICsxODQsMTAgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmlj
czo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBM
YXkKICAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21D
b3VudHMoIlJlbmRlcmVyNC5waXhlbENvdW50T3BhcXVlX1VwbG9hZCIsIHN0YXRpY19jYXN0PGlu
dD4obm9ybWFsaXphdGlvbiAqIG1fcGl4ZWxzVXBsb2FkZWRPcGFxdWUpLCAxMDAsIDEwMDAwMDAs
IDUwKTsKICAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0
b21Db3VudHMoIlJlbmRlcmVyNC5waXhlbENvdW50VHJhbnNsdWNlbnRfVXBsb2FkIiwgc3RhdGlj
X2Nhc3Q8aW50Pihub3JtYWxpemF0aW9uICogbV9waXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50KSwg
MTAwLCAxMDAwMDAwLCA1MCk7CiAgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQudGlsZUNvdW50Q3VsbGVkX1VwbG9hZCIs
IHN0YXRpY19jYXN0PGludD4odGlsZU5vcm1hbGl6YXRpb24gKiBtX3RpbGVzQ3VsbGVkRm9yVXBs
b2FkKSwgMTAwLCAxMDAwMDAwMCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnJlbmRlclN1cmZhY2VUZXh0
dXJlQnl0ZXNfVmlld3BvcnRTY2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVOb3JtYWxpemF0
aW9uICogbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzKSwgMTAsIDEwMDAwMDAsIDUwKTsK
KyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3Vu
dHMoIlJlbmRlcmVyNC5yZW5kZXJTdXJmYWNlVGV4dHVyZUJ5dGVzX1Vuc2NhbGVkIiwgc3RhdGlj
X2Nhc3Q8aW50PihtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXMgLyAxMDAwKSwgMTAwMCwg
MTAwMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlz
dG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuY29udGVudHNUZXh0dXJlQnl0ZXNfVmlld3Bv
cnRTY2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVOb3JtYWxpemF0aW9uICogbV9jb250ZW50
c1RleHR1cmVVc2VCeXRlcyksIDEwLCAxMDAwMDAwLCA1MCk7CisgICAgICAgIFdlYktpdDo6UGxh
dGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuY29udGVu
dHNUZXh0dXJlQnl0ZXNfVW5zY2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fY29udGVudHNUZXh0
dXJlVXNlQnl0ZXMgLyAxMDAwKSwgMTAwMCwgMTAwMDAwMDAwLCA1MCk7CiAKICAgICAgICAgewog
ICAgICAgICAgICAgVFJBQ0VfQ09VTlRFUl9JRDEoImNjIiwgIlVwbG9hZFRpbGVzQ3VsbGVkIiwg
bGF5ZXJUcmVlSG9zdCwgbV90aWxlc0N1bGxlZEZvclVwbG9hZCk7CkBAIC0xNzMsNiArMTk3LDEw
IEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRlcm5hbChNZXRyaWNz
VHlwZSBtZXRyaWNzVHlwZSwgY29uc3QgTGF5CiAgICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUg
aW4gYSBkaWZmZXJlbnQgc2NvcGUgdGhhbiB0aGUgVFJBQ0VfRVZFTlQyIGFib3ZlLgogICAgICAg
ICAgICAgVFJBQ0VfRVZFTlQxKCJjYyIsICJDQ092ZXJkcmF3UGFpbnRNZXRyaWNzIiwgIlBpeGVs
c1BhaW50ZWQiLCBtX3BpeGVsc1BhaW50ZWQpOwogICAgICAgICB9CisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgbXVzdCBiZSBpbiBhIGRpZmZlcmVudCBzY29wZSB0aGFuIHRoZSBUUkFD
RV9FVkVOVHMgYWJvdmUuCisgICAgICAgICAgICBUUkFDRV9FVkVOVDIoImNjIiwgIkNDT3ZlcmRy
YXdQYWludE1ldHJpY3MiLCAiQ29udGVudHNUZXh0dXJlQnl0ZXMiLCBtX2NvbnRlbnRzVGV4dHVy
ZVVzZUJ5dGVzLCAiUmVuZGVyU3VyZmFjZVRleHR1cmVCeXRlcyIsIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVVc2VCeXRlcyk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
dmVyZHJhd01ldHJpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgKaW5kZXggNzE1ZjVlMTUxYmJhZGRhMTc5NzZjN2Uz
OWZlMzcxMzc3YmRmOGUzMy4uZjBkYWIwZTkzYzk1ZWE1NTRkODBhNzI0M2IyZDk4NTU5MTY5NTdk
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPdmVyZHJhd01ldHJpY3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oCkBAIC00OSw2ICs0OSwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaWRDdWxsVGlsZUZvclVwbG9hZCgpOwogICAgIC8vIFJlY29yZHMg
cGl4ZWxzIHRoYXQgd2VyZSB1cGxvYWRlZCB0byB0ZXh0dXJlIG1lbW9yeS4KICAgICB2b2lkIGRp
ZFVwbG9hZChjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1U
b1RhcmdldCwgY29uc3QgSW50UmVjdCYgdXBsb2FkUmVjdCwgY29uc3QgSW50UmVjdCYgb3BhcXVl
UmVjdCk7CisgICAgLy8gUmVjb3JkIGNvbnRlbnRzIHRleHR1cmUocykgYmVoaW5kIHByZXNlbnQg
dXNpbmcgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4KKyAgICB2b2lkIGRpZFVzZUNvbnRlbnRz
VGV4dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCBjb250ZW50c1RleHR1cmVVc2VCeXRlcyk7CisgICAg
Ly8gUmVjb3JkIFJlbmRlclN1cmZhY2UgdGV4dHVyZShzKSBiZWluZyBwcmVzZW50IHVzaW5nIHRo
ZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuCisgICAgdm9pZCBkaWRVc2VSZW5kZXJTdXJmYWNlVGV4
dHVyZU1lbW9yeUJ5dGVzKHNpemVfdCByZW5kZXJTdXJmYWNlVXNlQnl0ZXMpOwogCiAgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBmb3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAK
QEAgLTkzLDYgKzk3LDEwIEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9waXhlbHNVcGxvYWRlZFRy
YW5zbHVjZW50OwogICAgIC8vIENvdW50IG9mIHRpbGVzIHRoYXQgd2VyZSBpbnZhbGlkYXRlZCBi
dXQgbm90IHVwbG9hZGVkLgogICAgIGludCBtX3RpbGVzQ3VsbGVkRm9yVXBsb2FkOworICAgIC8v
IENvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gY29udGVudHMgdGV4dHVyZXMuCisgICAgdW5z
aWduZWQgbG9uZyBsb25nIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXM7CisgICAgLy8gQ291bnQg
dGhlIG51bWJlciBvZiBieXRlcyBpbiBSZW5kZXJTdXJmYWNlIHRleHR1cmVzLgorICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBtX3JlbmRlclN1cmZhY2VUZXh0dXJlVXNlQnl0ZXM7CiAKICAgICAvLyBU
aGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNhdmluZyBtZXRyaWNzIGR1cmluZyBkcmF3LgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAppbmRl
eCAyNTA4NWI4ZDVjZTNiZDA4OGQ0NTZmZjBiNmVkODg2OThlYzM3YWMyLi41YWY1M2RmMDRiZGVi
NjdlMmEwZWNjMWEzNGE5ZWE2YmNlOTlmMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKQEAgLTM2LDEzICszNiwxMSBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlM
aW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywgaW50KQorQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90
IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCkKICAgICA6IG1fbWF4TWVtb3J5TGltaXRCeXRlcyht
YXhNZW1vcnlMaW1pdEJ5dGVzKQotICAgICwgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHBy
ZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMpCi0gICAgLCBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2Zm
KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxlUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJpb3Jp
dHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCkpCiAgICAgLCBt
X21lbW9yeVVzZUJ5dGVzKDApCiAgICAgLCBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoMCkKKyAg
ICAsIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMoMCkKIHsKIH0KIApAQCAtNTcsMTcgKzU1LDcgQEAg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
KCkKICAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1fYmFja2luZ3MuYmVnaW4oKSwgMCk7CiB9CiAK
LXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpzZXRNZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykKLXsKLSAgICBzZXRNYXhNZW1vcnlMaW1p
dEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMpOwotCi0gICAgLy8gRklYTUU6IFByZWZlcnJlZCBsaW1p
dCBzaG91bGQgZ28gYXdheS4gV2UgY2FuIHJlbW92ZSBpdCBhcyBzb29uCi0gICAgLy8gICAgICAg
IGFzIHdlIG5vIGxvbmdlciB1c2UgdGhlICdyZW1haW5kZXInIG9mIHRoaXMgbWFuYWdlciBmb3IK
LSAgICAvLyAgICAgICAgYW55dGhpbmcuCi0gICAgc2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRl
cyhtZW1vcnlMaW1pdEJ5dGVzIC8gNCAqIDMpOwotfQotCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VzTWVtb3J5
Qnl0ZXMpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyIpOwogCkBAIC04OSwyMSArNzcsMzIgQEAgdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiAgICAgICAg
IHNvcnRlZFRleHR1cmVzLmFwcGVuZCgqaXQpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRUZXh0dXJl
cy5iZWdpbigpLCBzb3J0ZWRUZXh0dXJlcy5lbmQoKSwgY29tcGFyZVRleHR1cmVzKTsKIAorICAg
IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgPSBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgbV9w
cmlvcml0eUN1dG9mZiA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOwor
ICAgIGJvb2wgcmVzZXJ2ZWRSZW5kZXJTdXJmYWNlcyA9IGZhbHNlOwogICAgIHNpemVfdCBtZW1v
cnlCeXRlcyA9IDA7CiAgICAgZm9yIChUZXh0dXJlVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRl
ZFRleHR1cmVzLmJlZ2luKCk7IGl0ICE9IHNvcnRlZFRleHR1cmVzLmVuZCgpOyArK2l0KSB7CiAg
ICAgICAgIGlmICgoKml0KS0+cmVxdWVzdFByaW9yaXR5KCkgPT0gQ0NQcmlvcml0eUNhbGN1bGF0
b3I6Omxvd2VzdFByaW9yaXR5KCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgc2l6ZV90
IG5ld01lbW9yeUJ5dGVzID0gbWVtb3J5Qnl0ZXMgKyAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7
Ci0gICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSkgewot
ICAgICAgICAgICAgbV9wcmlvcml0eUN1dG9mZiA9ICgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKTsK
LSAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gbWFrZSBwbGFj
ZWhvbGRlciBvYmplY3RzIHNpbWlsYXIgdG8gdGV4dHVyZXMgdG8gcmVwcmVzZW50IHRoZSByZW5k
ZXIgc3VyZmFjZSBtZW1vcnkgcmVxdWVzdC4KKyAgICAgICAgaWYgKCFyZXNlcnZlZFJlbmRlclN1
cmZhY2VzICYmIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzTG93ZXIoKCppdCktPnJl
cXVlc3RQcmlvcml0eSgpLCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9y
aXR5KCkpKSB7CisgICAgICAgICAgICBzaXplX3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRl
cyArIHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXM7CisgICAgICAgICAgICBpZiAobmV3TWVtb3J5
Qnl0ZXMgPiBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzKSB7CisgICAgICAgICAgICAgICAgbV9wcmlv
cml0eUN1dG9mZiA9ICgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKTsKKyAgICAgICAgICAgICAgICBt
X21lbW9yeUF2YWlsYWJsZUJ5dGVzID0gbWVtb3J5Qnl0ZXM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzIC09
IHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXM7CisgICAgICAgICAgICByZXNlcnZlZFJlbmRlclN1
cmZhY2VzID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAobmV3TWVtb3J5Qnl0ZXMgPiBw
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgQ0NQcmlv
cml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcigoKml0KS0+cmVxdWVzdFByaW9yaXR5KCks
IG1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKCkpKSB7CisKKyAgICAgICAgc2l6ZV90IG5ld01lbW9y
eUJ5dGVzID0gbWVtb3J5Qnl0ZXMgKyAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7CisgICAgICAg
IGlmIChuZXdNZW1vcnlCeXRlcyA+IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMpIHsKICAgICAgICAg
ICAgIG1fcHJpb3JpdHlDdXRvZmYgPSAoKml0KS0+cmVxdWVzdFByaW9yaXR5KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIG1lbW9yeUJ5dGVzID0gbmV3TWVtb3J5
Qnl0ZXM7CiAgICAgfQogCkBAIC0xMTcsNyArMTE2LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiAgICAgICAgIGlmIChpc0Fib3ZlUHJp
b3JpdHlDdXRvZmYpCiAgICAgICAgICAgICBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgKz0gKCpp
dCktPm1lbW9yeVNpemVCeXRlcygpOwogICAgIH0KLSAgICBBU1NFUlQobV9tZW1vcnlBYm92ZUN1
dG9mZkJ5dGVzIDw9IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSk7CisgICAgQVNTRVJUKG1fbWVtb3J5
QWJvdmVDdXRvZmZCeXRlcyA8PSBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzKTsKIAogICAgIC8vIFB1
dCBiYWNraW5ncyBpbiBldmljdGlvbi9yZWN5Y2xpbmcgb3JkZXIuCiAgICAgZm9yIChCYWNraW5n
U2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5l
bmQoKTsgKytpdCkKQEAgLTE1NSw4ICsxNTQsMTEgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogICAg
IGlmICh0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKKyAgICBpZiAoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcih0ZXh0
dXJlLT5yZXF1ZXN0UHJpb3JpdHkoKSwgbV9wcmlvcml0eUN1dG9mZikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIHNpemVfdCBuZXdNZW1vcnlCeXRlcyA9IG1fbWVtb3J5QWJvdmVDdXRv
ZmZCeXRlcyArIHRleHR1cmUtPm1lbW9yeVNpemVCeXRlcygpOwotICAgIGlmIChuZXdNZW1vcnlC
eXRlcyA+IG1fbWF4TWVtb3J5TGltaXRCeXRlcykKKyAgICBpZiAobmV3TWVtb3J5Qnl0ZXMgPiBt
X21lbW9yeUF2YWlsYWJsZUJ5dGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX21l
bW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPSBuZXdNZW1vcnlCeXRlczsKQEAgLTE4OSw4ICsxOTEsNyBA
QCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJl
SWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogCiAgICAgLy8gT3RoZXJ3aXNlIHJlZHVjZSBtZW1v
cnkgYW5kIGp1c3QgYWxsb2NhdGUgYSBuZXcgYmFja2luZyB0ZXh1cmVzLgogICAgIGlmICghYmFj
a2luZykgewotICAgICAgICBzaXplX3QgbGltaXQgPSBzdGQ6Om1heChtX21lbW9yeUFib3ZlQ3V0
b2ZmQnl0ZXMsIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcykgLSB0ZXh0dXJlLT5tZW1vcnlT
aXplQnl0ZXMoKTsKLSAgICAgICAgcmVkdWNlTWVtb3J5KGxpbWl0LCBhbGxvY2F0b3IpOworICAg
ICAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcyAtIHRleHR1cmUtPm1lbW9y
eVNpemVCeXRlcygpLCBhbGxvY2F0b3IpOwogICAgICAgICBiYWNraW5nID0gY3JlYXRlQmFja2lu
Zyh0ZXh0dXJlLT5zaXplKCksIHRleHR1cmUtPmZvcm1hdCgpLCBhbGxvY2F0b3IpOwogICAgIH0K
IApAQCAtMjE4LDggKzIxOSw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpy
ZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIFRleHR1cmVBbGxvY2F0CiAKIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yKQogewotICAgIHNpemVfdCBsaW1pdCA9IHN0ZDo6bWF4KG1fbWVtb3J5QWJvdmVD
dXRvZmZCeXRlcywgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKTsKLSAgICByZWR1Y2VNZW1v
cnkobGltaXQsIGFsbG9jYXRvcik7CisgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxl
Qnl0ZXMsIGFsbG9jYXRvcik7CiAgICAgQVNTRVJUKG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWF4TWVt
b3J5TGltaXRCeXRlcygpKTsKIAogICAgIC8vIFdlIGN1cnJlbnRseSBjb2xsZWN0IGJhY2tpbmdz
IGZyb20gZGVsZXRlZCB0ZXh0dXJlcyBmb3IgbGF0ZXIgcmVjeWNsaW5nLgpAQCAtMjMzLDcgKzIz
Myw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHdh
c3RlZE1lbW9yeSArPSAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7CiAgICAgfQotICAgIHNpemVf
dCB0ZW5QZXJjZW50T2ZNZW1vcnkgPSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkgLyAxMDsKKyAgICBz
aXplX3QgdGVuUGVyY2VudE9mTWVtb3J5ID0gbV9tZW1vcnlBdmFpbGFibGVCeXRlcyAvIDEwOwog
ICAgIGlmICh3YXN0ZWRNZW1vcnkgPD0gdGVuUGVyY2VudE9mTWVtb3J5KQogICAgICAgICByZXR1
cm47CiAgICAgcmVkdWNlTWVtb3J5KG1lbW9yeVVzZUJ5dGVzKCkgLSAod2FzdGVkTWVtb3J5IC0g
dGVuUGVyY2VudE9mTWVtb3J5KSwgYWxsb2NhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKaW5kZXggZjg3MGU3N2UxYWJiMDQwZGE1YmNiODQy
ZjQ3NmU0MTUyYjEzZDlhMy4uM2M3MGIyYjJhMDIzMDljYTE2NGQ2ZGNhOTFjZDkwYmM0MmFmZTZl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgK
QEAgLTQwLDkgKzQwLDkgQEAgY2xhc3MgQ0NQcmlvcml0eUNhbGN1bGF0b3I7CiBjbGFzcyBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiBjcmVhdGUoc2l6ZV90IG1heE1lbW9yeUxpbWl0
Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNp
emUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiBj
cmVhdGUoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyKG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRl
eHR1cmVTaXplKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyKG1heE1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CiAgICAg
fQogICAgIFBhc3NPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoSW50
U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCiAgICAgewpAQCAtNTYsMjEgKzU2LDEyIEBAIHB1
YmxpYzoKICAgICAvLyBtZW1vcnlVc2VCeXRlcygpIDw9IG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMo
KSBzaG91bGQgYWx3YXlzIGJlIHRydWUuCiAgICAgc2l6ZV90IG1lbW9yeVVzZUJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsgfQogICAgIHNpemVfdCBtZW1vcnlBYm92ZUN1
dG9mZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzOyB9Cisg
ICAgc2l6ZV90IG1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSBjb25zdCB7IHJldHVybiBt
X21heE1lbW9yeUxpbWl0Qnl0ZXMgLSBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzOyB9CiAKLSAgICB2
b2lkIHNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCk7Ci0KLSAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGdldCByaWQgb2YgdGhlIHByZWZlcnJlZC9tYXggbGltaXRzIGFuZCBsZXQg
R3B1TWVtb3J5TWFuYWdlcgotICAgIC8vIGp1c3QgYWRqdXN0IHRoZSBtYXggbGltaXQgYmFzZWQg
b24gaGludHMgd2UgY2FuIHByb3ZpZGUgZnJvbSB0aGlzIGNsYXNzLgotICAgIC8vIElkZWFsbHkg
aXQgd2lsbCBiZSBhZGp1c3RlZCByZWxhdGl2ZWx5IHJhcmVseSBzdWNoIHRoYXQgcmVjeWNsaW5n
IGlzIG1heGltaXplZC4KICAgICB2b2lkIHNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IGJ5
dGVzKSB7IG1fbWF4TWVtb3J5TGltaXRCeXRlcyA9IGJ5dGVzOyB9CiAgICAgc2l6ZV90IG1heE1l
bW9yeUxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7IH0K
LSAgICB2b2lkIHNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IGJ5dGVzKSB7IG1f
cHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyA9IGJ5dGVzOyB9Ci0gICAgc2l6ZV90IHByZWZlcnJl
ZE1lbW9yeUxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0
Qnl0ZXM7IH0KLQotICAgIHZvaWQgc2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoc2l6ZV90IGN1
dG9mZikgeyBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2ZmID0gY3V0b2ZmOyB9Ci0gICAgdW5zaWdu
ZWQgbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoKSBjb25zdCB7IHJldHVybiBtX21heE1lbW9yeVBy
aW9yaXR5Q3V0b2ZmOyB9CiAKLSAgICB2b2lkIHByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHZv
aWQgcHJpb3JpdGl6ZVRleHR1cmVzKHNpemVfdCByZW5kZXJTdXJmYWNlc01lbW9yeUJ5dGVzKTsK
ICAgICB2b2lkIGNsZWFyUHJpb3JpdGllcygpOwogCiAgICAgYm9vbCByZXF1ZXN0TGF0ZShDQ1By
aW9yaXRpemVkVGV4dHVyZSopOwpAQCAtMTA3LDcgKzk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzTG93ZXIocHJpb3JpdHlBLCBw
cmlvcml0eUIpOwogICAgIH0KIAotICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXpl
X3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMs
IGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNp
emVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCiAgICAgdm9p
ZCByZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0LCBUZXh0dXJlQWxsb2NhdG9yKik7CiAKQEAgLTEx
OCwxMSArMTA5LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZyosIFRleHR1cmVBbGxvY2F0b3IqKTsKIAogICAgIHNpemVf
dCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7Ci0gICAgc2l6ZV90IG1fcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlczsKLSAgICB1bnNpZ25lZCBtX21heE1lbW9yeVByaW9yaXR5Q3V0b2ZmOwogICAgIHVu
c2lnbmVkIG1fcHJpb3JpdHlDdXRvZmY7CiAgICAgc2l6ZV90IG1fbWVtb3J5VXNlQnl0ZXM7CiAg
ICAgc2l6ZV90IG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlczsKKyAgICBzaXplX3QgbV9tZW1vcnlB
dmFpbGFibGVCeXRlczsKIAogICAgIHR5cGVkZWYgSGFzaFNldDxDQ1ByaW9yaXRpemVkVGV4dHVy
ZSo+IFRleHR1cmVTZXQ7CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZyo+IEJhY2tpbmdTZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2Fs
Y3VsYXRvci5jcHAKaW5kZXggODUwMTBhMTA3MGI4MTVjMjNmZDhmNTBkMzA2YjM2MTA2ZmUwNmI0
ZS4uOTAwODQwNDNkOTcxOTg0MGE5ZWNiMjM0NThjZTc1ZmIzMDEyOTYxOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNh
bGN1bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcApAQCAtMzMsMTUgKzMzLDIxIEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIHN0YXRpYwotaW50IEND
UHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KCkKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRv
cjo6dWlQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSkKIHsKLSAgICByZXR1cm4gLTE7
CisgICAgcmV0dXJuIGRyYXdzVG9Sb290U3VyZmFjZSA/IC0xIDogMjsKIH0KIAogLy8gc3RhdGlj
Ci1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eSgpCitpbnQgQ0NQcmlv
cml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSkK
IHsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZHJhd3NUb1Jvb3RTdXJmYWNlID8gMCA6IDM7
Cit9CisKKy8vIHN0YXRpYworaW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNl
UHJpb3JpdHkoKQoreworICAgIHJldHVybiAxOwogfQogCiAvLyBzdGF0aWMKQEAgLTY1LDE5ICs3
MSwyNCBAQCB1bnNpZ25lZCBtYW5oYXR0YW5EaXN0YW5jZShjb25zdCBJbnRSZWN0JiBhLCBjb25z
dCBJbnRSZWN0JiBiKQogfQogfQogCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5
RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0
ZXh0dXJlUmVjdCkgY29uc3QKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9t
RGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1
cmVSZWN0LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdmlz
aWJsZVByaW9yaXR5KCkgKyBtYW5oYXR0YW5EaXN0YW5jZSh2aXNpYmxlUmVjdCwgdGV4dHVyZVJl
Y3QpOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gbWFuaGF0dGFuRGlzdGFuY2UodmlzaWJsZVJl
Y3QsIHRleHR1cmVSZWN0KTsKKyAgICBpZiAoIWRpc3RhbmNlKQorICAgICAgICByZXR1cm4gdmlz
aWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgcmV0dXJuIHZpc2libGVQcmlv
cml0eShmYWxzZSkgKyBkaXN0YW5jZTsKIH0KIAotaW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpw
cmlvcml0eUZyb21EaXN0YW5jZSh1bnNpZ25lZCBwaXhlbHMpIGNvbnN0CitpbnQgQ0NQcmlvcml0
eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscywgYm9vbCBk
cmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHZpc2libGVQcmlvcml0eSgp
ICsgcGl4ZWxzOworICAgIGlmICghcGl4ZWxzKQorICAgICAgICByZXR1cm4gdmlzaWJsZVByaW9y
aXR5KGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgcmV0dXJuIHZpc2libGVQcmlvcml0eShmYWxz
ZSkgKyBwaXhlbHM7CiB9CiAKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9t
VmlzaWJpbGl0eShib29sIHZpc2libGUpIGNvbnN0CitpbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6
OnByaW9yaXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlLCBib29sIGRyYXdzVG9Sb290U3Vy
ZmFjZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdmlzaWJsZSA/IHZpc2libGVQcmlvcml0eSgpIDog
bG93ZXN0UHJpb3JpdHkoKTsKKyAgICByZXR1cm4gdmlzaWJsZSA/IHZpc2libGVQcmlvcml0eShk
cmF3c1RvUm9vdFN1cmZhY2UpIDogbG93ZXN0UHJpb3JpdHkoKTsKIH0KIAogfSAvLyBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuaAppbmRleCBmNGZlYWZlOWI4NGNm
MzMzNDg3NDY3MWYyMTcwMTczZjU1MWEyNTAyLi42OGEyMjViZTBiOWVmMzI2NWYwZjg5OGE2MmZk
YzU4ZGNjZWZiN2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmgKQEAg
LTM0LDEyICszNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDUHJpb3JpdHlD
YWxjdWxhdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW50IHVpUHJpb3JpdHkoKTsKLSAgICBz
dGF0aWMgaW50IHZpc2libGVQcmlvcml0eSgpOworICAgIHN0YXRpYyBpbnQgdWlQcmlvcml0eShi
b29sIGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgc3RhdGljIGludCB2aXNpYmxlUHJpb3JpdHko
Ym9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpOworICAgIHN0YXRpYyBpbnQgcmVuZGVyU3VyZmFjZVBy
aW9yaXR5KCk7CiAgICAgc3RhdGljIGludCBsaW5nZXJpbmdQcmlvcml0eShpbnQgcHJldmlvdXNQ
cmlvcml0eSk7Ci0gICAgaW50IHByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVjdCkgY29uc3Q7Ci0gICAgaW50IHBy
aW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscykgY29uc3Q7Ci0gICAgaW50IHByaW9y
aXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlKSBjb25zdDsKKyAgICBpbnQgcHJpb3JpdHlG
cm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRl
eHR1cmVSZWN0LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7CisgICAgaW50IHByaW9y
aXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscywgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2Up
IGNvbnN0OworICAgIGludCBwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSwgYm9v
bCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0OwogCiAgICAgc3RhdGljIGlubGluZSBpbnQgaGln
aGVzdFByaW9yaXR5KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsg
fQogICAgIHN0YXRpYyBpbmxpbmUgaW50IGxvd2VzdFByaW9yaXR5KCkgeyByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCmluZGV4IDU0MWU1
MTU5OGZiZmU5OTJjYzgxZmFlZjdkNmU4MTAzNjI4NWU1Y2EuLjQ2OGFmMzZiYmE1MGUzZWU4MTY1
ZjNhY2FjNzRlMWU0OWY2Zjk1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKQEAgLTUzLDkgKzUzLDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVz
KG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkgKiB0ZXh0dXJlQ291bnQ7CiAgICAgfQog
Ci0gICAgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IGNyZWF0ZU1hbmFn
ZXIoc2l6ZV90IG1heFRleHR1cmVzLCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMpCisgICAgUGFz
c093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IGNyZWF0ZU1hbmFnZXIoc2l6ZV90
IG1heFRleHR1cmVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcyksIHRleHR1cmVz
TWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIDEwMjQpOworICAgICAgICByZXR1cm4gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZXNNZW1vcnlTaXplKG1heFRl
eHR1cmVzKSwgMTAyNCk7CiAgICAgfQogCiAgICAgYm9vbCB2YWxpZGF0ZVRleHR1cmUoT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlPiYgdGV4dHVyZSwgYm9vbCByZXF1ZXN0TGF0ZSkKQEAgLTgy
LDk4ICs4MiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgR0MzRGVudW0gbV90ZXh0dXJlRm9y
bWF0OwogfTsKIAotVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1
cmVJblByZWZlcnJlZExpbWl0KQotewotICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7
Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIo
bWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmU+IHRleHR1cmVzW3ByZWZlcnJlZFRleHR1cmVzXTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsraSkKLSAgICAgICAgdGV4dHVyZXNbaV0g
PSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVG
b3JtYXQpOwotCi0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0g
ICAgLy8gTG93ZXN0IHByaW9yaXR5IHRleHR1cmVzIHNob3VsZG4ndCBiZSBhdmFpbGFibGUuCi0g
ICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzFdLCBmYWxzZSkpOwotICAg
IEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMl0sIGZhbHNlKSk7Ci0gICAg
RVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsraSkKLSAgICAgICAg
dGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwotCi0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1sxXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbMl0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRl
eHR1cmVzWzNdLCBmYWxzZSkpOwotCi0gICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShw
cmVmZXJyZWRUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVz
KCkpOwotICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4
dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0KLSAgICB0ZXh0dXJlTWFu
YWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwotfQotCi1URVNUX0YoQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ1ByZWZlcnJlZExpbWl0KQot
ewotICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHBy
ZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJl
ZFRleHR1cmVzKTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21h
eFRleHR1cmVzXTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsr
aSkKLSAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZSht
X3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwotCi0gICAgLy8gU2V0IGRlY3JlYXNpbmcg
cHJpb3JpdGllcwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkK
LSAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBPbmx5IGxvd2Vy
IGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzNdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbNF0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1s3XSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHBy
ZWZlcnJlZFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMo
KSk7Ci0gICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIC8vIFNldCBpbmNy
ZWFzaW5nIHByaW9yaXRpZXMKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVz
OyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgLy8gT25s
eSB1cHBlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCi0gICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRl
VGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRl
eHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5
U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9m
ZkJ5dGVzKCkpOwotICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMo
KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0KLSAgICAvLyBN
YWtlIGFsbCB0ZXh0dXJlcyBpbXBvcnRhbnQgKGFib3ZlIG1heC1tZW1vcnkgcHJpb3JpdHkgY3V0
b2ZmKQotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgLy8gQWxsIHRleHR1cmVzIHNob3VsZCBiZSBh
dmFpbGFibGUKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpIHsK
LSAgICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSk7
Ci0gICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZXNbaV0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsK
LSAgICB9Ci0KLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwg
dGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNUX0xF
KHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5
QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9y
eShhbGxvY2F0b3IoKSk7Ci19Ci0KLQogVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
cmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkKIHsKICAgICBjb25zdCBzaXplX3QgbWF4
VGV4dHVyZXMgPSA4OwotICAgIGNvbnN0IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDQ7Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBj
cmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzLCBwcmVmZXJyZWRUZXh0dXJlcyk7CisgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5h
Z2VyKG1heFRleHR1cmVzKTsKIAogICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyBmb3IgZG91YmxlIG91
ciBtZW1vcnkgbGltaXQuCiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJl
c1ttYXhUZXh0dXJlcyoyXTsKQEAgLTE4MiwyNCArOTQsMjIgQEAgVEVTVF9GKENDUHJpb3JpdGl6
ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkKICAgICAgICAg
dGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXpl
LCBtX3RleHR1cmVGb3JtYXQpOwogCiAgICAgLy8gU2V0IGRlY3JlYXNpbmcgcHJpb3JpdGllcwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRl
eHR1cmVzKjI7ICsraSkKICAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgx
MDAgKyBpKTsKIAogICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4
dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1s4XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzE1XSwgZmFsc2UpKTsKIAogICAgIC8vIFNldCBpbmNyZWFzaW5nIHByaW9yaXRp
ZXMKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXhUZXh0dXJlcyoyOyArK2kpCiAgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3Jp
dHkoMTAwIC0gaSk7CiAKICAgICAvLyBPbmx5IHVwcGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJs
ZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzWzhdLCBmYWxzZSkpOwpAQCAtMjE0LDEyICsxMjQsOSBAQCBURVNUX0Yo
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0
KQogVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQog
ewogICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90IHBy
ZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJl
ZFRleHR1cmVzKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOwogICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOwogCi0gICAgdGV4dHVyZU1h
bmFnZXItPnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKENDUHJpb3JpdHlDYWxjdWxhdG9yOjps
b3dlc3RQcmlvcml0eSgpKTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVy
ZXM7ICsraSkKICAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4
dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKQEAgLTIyNyw3ICsxMzQsNyBAQCBURVNUX0YoQ0NQ
cmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAgICAvLyBTZXQg
bWF4IGxpbWl0IHRvIDggdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5
TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUoOCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAg
ICAgICAgdmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSk7CiAgICAgdGV4dHVyZU1h
bmFnZXItPnJlZHVjZU1lbW9yeShhbGxvY2F0b3IoKSk7CkBAIC0yMzcsNyArMTQ0LDcgQEAgVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogCiAgICAg
Ly8gU2V0IG1heCBsaW1pdCB0byA1IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1h
eE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDUpKTsKLSAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyAr
K2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNl
KSwgaSA8IDUpOwogICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkoYWxsb2NhdG9yKCkp
OwpAQCAtMjQ3LDcgKzE1NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNo
YW5nZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gNCB0ZXh0dXJlcwog
ICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5
U2l6ZSg0KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA0KTsKICAgICB0ZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5KGFsbG9jYXRvcigpKTsKQEAgLTI1OCwyMyArMTY1LDIyIEBAIFRFU1RfRihD
Q1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKICAgICB0ZXh0dXJl
TWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwogfQogCi0KIFRFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0ZVRleHR1cmVz
KQogewotICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAgY29uc3Qgc2l6ZV90
IHByZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZl
cnJlZFRleHR1cmVzKTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVz
W3ByZWZlcnJlZFRleHR1cmVzXTsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IG1v
cmVUZXh0dXJlc1twcmVmZXJyZWRUZXh0dXJlc107CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1
cmVzID0gNDsKKyAgICBjb25zdCBzaXplX3QgbnVtVGV4dHVyZXMgPSA0OworICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdl
cihtYXhUZXh0dXJlcyk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJl
c1tudW1UZXh0dXJlc107CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiBtb3JlVGV4
dHVyZXNbbnVtVGV4dHVyZXNdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVmZXJy
ZWRUZXh0dXJlczsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJl
czsgKytpKSB7CiAgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRl
eHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKICAgICAgICAgbW9yZVRleHR1
cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90
ZXh0dXJlRm9ybWF0KTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZl
cnJlZFRleHR1cmVzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJl
czsgKytpKQogICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDIwMCArIGkp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgLy8gQWxsb2NhdGUgdGV4dHVy
ZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBoaWdoIHByaW9yaXR5LgogICAgIEVYUEVDVF9UUlVFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKQEAgLTI4Nyw5ICsxOTMsOSBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRh
dGVUZXh0dXJlcykKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlc1syXS0+aGF2ZUJhY2tpbmdUZXh0
dXJlKCkpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmVzWzNdLT5oYXZlQmFja2luZ1RleHR1cmUo
KSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRleHR1cmVzOyArK2kp
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJlczsgKytpKQogICAgICAgICBt
b3JlVGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8vIFRleHR1cmVzIGFyZSBub3cgYmVsb3cgY3V0b2Zm
LgogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7
CkBAIC0zMjEsMTIgKzIyNyw5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRl
eHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0ZVRleHR1cmVzKQogVEVTVF9GKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQcmlvcml0aWVzQXJlRXF1YWwpCiB7CiAgICAgY29u
c3Qgc2l6ZV90IG1heFRleHR1cmVzID0gMTY7Ci0gICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRl
eHR1cmVzID0gODsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVz
KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOwogICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOwogCi0gICAgdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
OwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAg
ICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNp
emUsIG1fdGV4dHVyZUZvcm1hdCk7CiAKQEAgLTMzOCw3ICsyNDEsNyBAQCBURVNUX0YoQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIAog
ICAgIC8vIFNldCBtYXggbGltaXQgdG8gOCB0ZXh0dXJlcwogICAgIHRleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg4KSk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAvLyBUaGUgdHdvIGhpZ2ggcHJpb3JpdHkgdGV4dHVy
ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSwgb3RoZXJzIHNob3VsZCBub3QuCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAyOyArK2kpCkBAIC0zNjIsMTQgKzI2NSwxNCBAQCBURVNUX0YoQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIAog
VEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJEZXN0cm95ZWRG
aXJzdCkKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIoMSwgMSk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKDEpOwogICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVh
dGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAKICAgICAvLyBUZXh0
dXJlIGlzIGluaXRpYWxseSBpbnZhbGlkLCBidXQgaXQgd2lsbCBiZWNvbWUgYXZhaWxhYmxlLgog
ICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CiAKICAgICB0
ZXh0dXJlLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwKTsKIAogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlLCBmYWxzZSkp
OwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4dHVyZSgpKTsK
QEAgLTM4NCwxNSArMjg3LDE1IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRl
eHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiAKIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlck9uZSA9IGNyZWF0ZU1hbmFnZXIoMSwg
MSk7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXJUd28gPSBjcmVhdGVNYW5hZ2VyKDEsIDEpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyT25lID0gY3JlYXRlTWFuYWdlcigxKTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlclR3byA9IGNy
ZWF0ZU1hbmFnZXIoMSk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJl
ID0gdGV4dHVyZU1hbmFnZXJPbmUtPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0
dXJlRm9ybWF0KTsKIAogICAgIC8vIFRleHR1cmUgaXMgaW5pdGlhbGx5IGludmFsaWQsIGJ1dCBp
dCB3aWxsIGJlY29tZSBhdmFpbGFibGUuCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUtPmhhdmVC
YWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0eSgxMDAp
OwotICAgIHRleHR1cmVNYW5hZ2VyT25lLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0
dXJlTWFuYWdlck9uZS0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVy
ZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtNDA4LDcgKzMxMSw3IEBAIFRFU1Rf
RihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKIAog
ICAgIHRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKHRleHR1cmVNYW5hZ2VyVHdvLmdldCgpKTsK
IAotICAgIHRleHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0
dXJlTWFuYWdlclR3by0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVy
ZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtNDE2LDQgKzMxOSwxMTkgQEAgVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQog
CiAgICAgdGV4dHVyZU1hbmFnZXJUd28tPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKIH0K
KworVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNSZWR1Y2VN
ZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFN1cmZhY2UpCit7CisgICAgY29uc3Qgc2l6ZV90IG1h
eFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworCisgICAgLy8gSGFs
ZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5IHN1cmZhY2VzLgorICAgIGNvbnN0IHNpemVfdCBy
ZW5kZXJTdXJmYWNlc0J5dGVzID0gdGV4dHVyZXNNZW1vcnlTaXplKDQpOworCisgICAgLy8gQ3Jl
YXRlIHRleHR1cmVzIHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1pdC4KKyAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0
dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQp
OworCisgICAgLy8gU2V0IGRlY3JlYXNpbmcgbm9uLXZpc2libGUgcHJpb3JpdGllcyBvdXRzaWRl
IHJvb3Qgc3VyZmFjZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyAr
K2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwICsgaSk7CisK
KyAgICAvLyBPbmx5IGxvd2VyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKHJlbmRlclN1cmZhY2VzQnl0ZXMpOworICAgIEVY
UEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7CisgICAgRVhQRUNU
X0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2UpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkpOworCisgICAgLy8gU2V0
IGluY3JlYXNpbmcgbm9uLXZpc2libGUgcHJpb3JpdGllcyBvdXRzaWRlIHJvb3Qgc3VyZmFjZS4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIHRl
eHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CisKKyAgICAvLyBPbmx5IHVw
cGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKHJlbmRlclN1cmZhY2VzQnl0ZXMpOworICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZhbHNlKSk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkpOworCisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVt
b3J5U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9y
eUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSk7CisgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2Vy
LT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRl
cygpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7
Cit9CisKK1RFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVk
dWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVzdExhdGUpCit7CisgICAgY29uc3Qgc2l6ZV90IG1h
eFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOworCisgICAgLy8gSGFs
ZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5IHN1cmZhY2VzLgorICAgIGNvbnN0IHNpemVfdCBy
ZW5kZXJTdXJmYWNlc0J5dGVzID0gdGV4dHVyZXNNZW1vcnlTaXplKDQpOworCisgICAgLy8gQ3Jl
YXRlIHRleHR1cmVzIHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1pdC4KKyAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0
dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQp
OworCisgICAgLy8gU2V0IGVxdWFsIHByaW9yaXRpZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFBy
aW9yaXR5KDEwMCk7CisKKyAgICAvLyBUaGUgZmlyc3QgZm91ciB0byBiZSByZXF1ZXN0ZWQgbGF0
ZSB3aWxsIGJlIGF2YWlsYWJsZS4KKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKHJlbmRlclN1cmZhY2VzQnl0ZXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
YXhUZXh0dXJlczsgKytpKQorICAgICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRl
eHR1cmVzW2ldLCBmYWxzZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXhUZXh0
dXJlczsgaSArPSAyKQorICAgICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVy
ZXNbaV0sIHRydWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbWF4VGV4dHVyZXM7
IGkgKz0gMikKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tp
XSwgdHJ1ZSkpOworCisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVy
ZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKHRleHR1
cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2Vz
Qnl0ZXMoKSk7CisgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygp
LCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKworICAgIHRleHR1
cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShhbGxvY2F0b3IoKSk7Cit9CisKK1RFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHdoZW5SZW5kZXJTdXJmYWNlTm90QXZhaWxhYmxlVGV4dHVy
ZXNBbHNvTm90QXZhaWxhYmxlKQoreworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7
CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzKTsKKworICAgIC8vIEhhbGYgb2YgdGhlIG1lbW9y
eSBpcyB0YWtlbiBieSBzdXJmYWNlcy4KKyAgICBjb25zdCBzaXplX3QgcmVuZGVyU3VyZmFjZXNC
eXRlcyA9IHRleHR1cmVzTWVtb3J5U2l6ZSg0KTsKKworICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyB0
byBmaWxsIG91ciBtZW1vcnkgbGltaXQuCisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
PiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
eFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNy
ZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKKworICAgIC8vIFNl
dCA2IHZpc2libGUgdGV4dHVyZXMgaW4gdGhlIHJvb3Qgc3VyZmFjZSwgYW5kIDIgaW4gYSBjaGls
ZCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNjsgKytpKQorICAgICAgICB0
ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNp
YmxlUHJpb3JpdHkodHJ1ZSkpOworICAgIGZvciAoc2l6ZV90IGkgPSA2OyBpIDwgODsgKytpKQor
ICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxh
dG9yOjp2aXNpYmxlUHJpb3JpdHkoZmFsc2UpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRlcyk7CisKKyAgICAvLyBVbmFibGUgdG8g
cmVxdWVzdExhdGUgdGV4dHVyZXMgaW4gdGhlIGNoaWxkIHN1cmZhY2UuCisgICAgRVhQRUNUX0ZB
TFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s2XSwgdHJ1ZSkpOworICAgIEVYUEVDVF9GQUxT
RSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIHRydWUpKTsKKworICAgIC8vIFJvb3Qgc3Vy
ZmFjZSB0ZXh0dXJlcyBhcmUgdmFsaWQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA2OyAr
K2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFs
c2UpKTsKKworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNiksIHRleHR1cmVNYW5h
Z2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01l
bW9yeVNpemUoMiksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlGb3JSZW5kZXJTdXJmYWNlc0J5dGVz
KCkpOworICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4
dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisKKyAgICB0ZXh0dXJlTWFu
YWdlci0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0
Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVz
dENvbW1vbi5jcHAKaW5kZXggMGNmNmIwYTc0ODZjNDNkMzA3NjRjZDZhZjM1ZTdhOGQ1YjRhMzdh
MS4uNTU4Y2JhNTc2MGE3MzI1NGQwN2RmOGYxOGZjNDdlNmZkYTRkM2FkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24u
Y3BwCkBAIC0xMjEsNiArMTIxLDI1IEBAIHZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2NjbHVzaW9uCiAgICAgdXBk
YXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVMYXllclJlY3QoKSwgb2NjbHVzaW9uKTsKIH0K
IAordm9pZCBGYWtlVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyhjb25z
dCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgY2FsY3VsYXRvcikKK3sKKyAgICAvLyBFbnN1cmUgdGhl
cmUgaXMgYWx3YXlzIGEgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGF2YWlsYWJsZS4gSWYgbm9uZSBo
YXMgYmVlbgorICAgIC8vIHNldCAodGhlIGxheWVyIGlzIGFuIG9ycGhhbiBmb3IgdGhlIHRlc3Qp
LCB0aGVuIGp1c3Qgc2V0IGEgc3VyZmFjZSBvbiBpdHNlbGYuCisgICAgYm9vbCBtaXNzaW5nVGFy
Z2V0UmVuZGVyU3VyZmFjZSA9ICF0YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisKKyAgICBpZiAobWlz
c2luZ1RhcmdldFJlbmRlclN1cmZhY2UpIHsKKyAgICAgICAgY3JlYXRlUmVuZGVyU3VyZmFjZSgp
OworICAgICAgICBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UoKSk7CisgICAg
fQorCisgICAgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyhjYWxjdWxh
dG9yKTsKKworICAgIGlmIChtaXNzaW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSkgeworICAgICAgICBj
bGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKTsK
KyAgICB9Cit9CisKIEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kczo6RmFrZVRpbGVkTGF5
ZXJXaXRoU2NhbGVkQm91bmRzKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1h
bmFnZXIpCiAgICAgOiBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0
Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RD
b21tb24uaAppbmRleCAwMjAwYTIzN2UwMWNlYzM1ODE5N2Q5OWRkMzI0YWNlYjU0OTA3NjY2Li4z
NjliYWM5YmU5MjYxODIzYWNkN2QxOGFkNTkyY2UzMGM3MzU4YjdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaApAQCAt
MTE3LDcgKzExNyw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OnNraXBzRHJhdzsKICAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
Om51bVBhaW50ZWRUaWxlczsKICAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OmlkbGVQYWludFJlY3Q7Ci0gICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpz
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXlSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOwogICAgIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGFzdE5lZWRzRGlzcGxheVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2xhc3ROZWVkc0Rpc3BsYXlSZWN0OyB9CkBAIC0xMjUsNiArMTI0LDggQEAgcHVibGljOgog
ICAgIC8vIFVwZGF0ZXMgdGhlIHZpc2libGVMYXllclJlY3QoKS4KICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXImLCBjb25zdCBXZWJDb3JlOjpDQ09jY2x1
c2lvblRyYWNrZXIqKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlUHJp
b3JpdGllcyhjb25zdCBXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvciYpIE9WRVJSSURFOwor
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIqIHRleHR1
cmVNYW5hZ2VyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQog
ICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKiBmYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsg
cmV0dXJuIG1fZmFrZVRleHR1cmVVcGRhdGVyLmdldCgpOyB9CiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHVwZGF0ZVJlY3QoKSB7IHJldHVybiBtX3VwZGF0ZVJlY3Q7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmlu
ZGV4IDI1YjNkNWUzZDQ1NjIxYzFjZmFiZTRhOTA2YzBkMzFlNWU5YTA4OWQuLmM5MzE1OGFiMmQz
NTE0MjI4ZGNhZmU4YTkzZjY4ODUwMTEzMTAxMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTQsMTcg
Kzk0LDE4IEBAIHB1YmxpYzoKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGly
dHlUaWxlcykKIHsKICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvciBwcmlvcml0eUNhbGN1bGF0b3I7
Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0
KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgp
KSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDApKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRo
aXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0
Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBk
YXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7
CkBAIC0xMTcsOCArMTE4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hE
aXJ0eVRpbGVzKQogICAgIC8vIEludmFsaWRhdGVzIGJvdGggdGlsZXMuLi4KICAgICBsYXllci0+
aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIC8vIC4uLi5idXQg
dGhlbiBvbmx5IHVwZGF0ZSBvbmUgb2YgdGhlbS4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1
cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCk7CiAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKIApAQCAtMTMwLDcgKzEzMSw3IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogewogICAgIENDUHJpb3JpdHlD
YWxjdWxhdG9yIHByaW9yaXR5Q2FsY3VsYXRvcjsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVy
SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTE0Miw4ICsx
NDMsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlU
aWxlcykKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwg
MjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygw
KTsKIAogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCksICZvY2NsdWRlZCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKQEAgLTE3NiwxNyAr
MTc3LDE4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0
eVRpbGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxl
cykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAy
KjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0
KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwg
c28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVy
LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJl
Y3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVj
dCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVy
ZXMoKTsKQEAgLTE5OSw3ICsyMDEsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaERlbGV0ZWRUaWxlcykKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7
CiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KCZhbGxvY2F0b3IpOwogICAgIHRl
eHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyg0KjEwMjQqMTAyNCk7
CiAKICAgICAvLyBUaGlzIHNob3VsZCBkcm9wIHRoZSB0aWxlcyBvbiB0aGUgaW1wbCB0aHJlYWQu
CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAgLTIwOSw4
ICsyMTAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxl
cykKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCiAgICAg
Ly8gVGhpcyBzaG91bGQgcmVjcmVhdGUgYW5kIHVwZGF0ZSB0aGUgZGVsZXRlZCB0ZXh0dXJlcy4K
LSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNh
bGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAg
ICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOwpAQCAtMjIyLDcgKzIyMyw3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMjM3LDgg
KzIzOCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGls
ZXMpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwogICAgIGxh
eWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMjUzLDggKzI1
NCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMp
CiAKICAgICAvLyBGb3IgdGhlIG5leHQgZm91ciB1cGRhdGVzLCB3ZSBzaG91bGQgZGV0ZWN0IHdl
IHN0aWxsIG5lZWQgaWRsZSBwYWludGluZy4KICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkr
KykgewotICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoMCk7CiAKICAgICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxl
UmVjdCwgMCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNp
YmxlUmVjdCkpOwpAQCAtMjgxLDcgKzI4Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiB7CiAgICAgLy8gU3RhcnQgd2l0aCAybWIg
b2YgbWVtb3J5LCBidXQgdGhlIHRlc3QgaXMgZ29pbmcgdG8gdHJ5IHRvIHVzZSBqdXN0IG1vcmUg
dGhhbiAxbWIsIHNvIHdlIHJlZHVjZSB0byAxbWIgbGF0ZXIuCi0gICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OmNyZWF0ZSgyKjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMioxMDI0KjEwMjQsIDEwMjQpOwogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsMShhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAg
LTMwNSw5ICszMDYsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVz
QWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAgICAgbGF5ZXIxLT5pbnZhbGlkYXRlUmVjdChsYXllclJl
Y3QpOwogCiAgICAgLy8gUGFpbnQgYSBzaW5nbGUgdGlsZSBpbiBsYXllcjIgc28gdGhhdCBpdCB3
aWxsIGlkbGUgcGFpbnQuCi0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIGxheWVyMlJlY3QpOwotICAgIGxheWVyMS0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllclJlY3QpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllcjItPnNldFRleHR1cmVQ
cmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXIxLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5
ZXJSZWN0LCAwKTsKICAgICBsYXllcjItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSwgMCk7CiAKQEAgLTMyMSwxMiArMzIyLDExIEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIAogICAg
IC8vIFJlZHVjZSBvdXIgbWVtb3J5IGxpbWl0cyB0byAxbWIuCiAgICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoMTAyNCAqIDEwMjQpOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDEwMjQgKiAxMDI0KTsKIAogICAgIC8vIE5v
dyBpZGxlIHBhaW50IGxheWVyMi4gV2UgYXJlIGdvaW5nIHRvIHJ1biBvdXQgb2YgbWVtb3J5IHRo
b3VnaCEKLSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2Fs
Y3VsYXRvciwgbGF5ZXIyUmVjdCk7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGxheWVyUmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
cHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHBy
aW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwKTsKICAgICBsYXllcjItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSwgMCk7CiAgICAgbGF5ZXIyLT5pZGxlVXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IGxheWVyMlJlY3QsIDApOwogCkBAIC0zNDUsOSArMzQ1LDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogICAgIEVYUEVDVF9G
QUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMikpOwogCiAgICAgLy8gTm93IGlmIGxheWVy
MiBiZWNvbWVzIGZ1bGx5IHZpc2libGUsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHBhaW50IGl0IGFu
ZCBwdXNoIHZhbGlkIHRleHR1cmVzLgotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXNJ
blJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllcjJSZWN0KTsKLSAgICBsYXllcjEtPnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5ZXJSZWN0KTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVyMS0+c2V0VGV4
dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyMi0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIGxheWVyMlJlY3QsIDApOwogICAgIGxheWVyMS0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IGxheWVyUmVjdCwgMCk7CiAKQEAgLTM2NSw3ICszNjUsNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogewotICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0
LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOwpAQCAtMzc5LDggKzM3OSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogICAgIGxheWVyLT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDEw
MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJl
Y3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksICZvY2NsdWRlZCk7CiAgICAgbGF5
ZXItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCks
ICZvY2NsdWRlZCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKQEAgLTM5Miw3ICszOTIsNyBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludGVkT2NjbHVkZWRUaWxl
cykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5
RHVyaW5nUGFpbnQpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC00MDIsMTAgKzQwMiwxMSBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWlu
dCkKICAgICAvLyBub3QgcHJldmVudCB0aGUgdGlsZSBmcm9tIGJlaW5nIHB1c2hlZC4KICAgICBs
YXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUw
KSwgbGF5ZXIuZ2V0KCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50
UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5
ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAgLTQxNyw3ICs0MTgsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJp
bmdQYWludCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVy
TWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKQEAgLTQyNSwxNCArNDI2LDE2IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPbk5leHRM
YXllcikKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAgICBsYXllcjEtPnNldEJvdW5k
cyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAgbGF5ZXIxLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllcjEtPmludmFsaWRhdGVSZWN0KEludFJl
Y3QoMCwgMCwgMTAwLCAyMDApKTsKIAogICAgIGxheWVyMi0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAyMDApKTsKKyAgICBsYXllcjItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCkpOwogICAgIGxheWVyMi0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAs
IDIwMCkpOwogCi0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllcjItPnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAg
bGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICBsYXllcjEtPnVwZGF0
ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAKQEAgLTQ1
Myw3ICs0NTYsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5
ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiAKIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPblByZXZp
b3VzTGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
cjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwpAQCAtNDY4
LDkgKzQ3MSw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXll
ck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPblByZXZpb3VzTGF5CiAgICAgbGF5ZXIyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllcjItPmludmFs
aWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKIAotICAgIGxheWVyMS0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
cHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKDApOwogCiAgICAgLy8gSW52YWxpZGF0ZSBhIHRpbGUgb24gbGF5ZXIyCiAgICAgbGF5ZXIx
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3Qo
MCwgNTAsIDEwMCwgNTApLCBsYXllcjIuZ2V0KCkpOwpAQCAtNDk3LDcgKzUwMCw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKICAgICAvLyBX
ZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2ls
bCBydW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJzdCBpZGxlIHBhaW50LgogICAgIGludCBtZW1vcnlM
aW1pdCA9IDQgKiAxMDAgKiAxMDA7IC8vIDEgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgogCi0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgbWVtb3J5TGlt
aXQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5TGlt
aXQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKSk7CkBAIC01MDcsOCArNTEwLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KHZpc2libGVSZWN0KTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3Qp
OwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3Vs
YXRvciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogCiAgICAgLy8gSWRs
ZS1wYWludGluZyBzaG91bGQgc2VlIG5vIG1vcmUgcHJpb3JpdHkgdGlsZXMgZm9yIHBhaW50aW5n
LgpAQCAtNTIwLDggKzUyMyw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnRPdXRPZk1lbW9yeSkKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUg
aW1wbCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEsIDEpKTsK
IAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIHZpc2libGVSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+
dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICBsYXllci0+aWRs
ZVVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAKQEAgLTUzMSw3ICs1
MzQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1v
cnkpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRM
YXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAw
MCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAy
NCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MCkpKTsKQEAgLTU0Myw4ICs1NDYsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
aWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
Y29udGVudFJlY3QpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAK
LSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBjb250ZW50UmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVw
ZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBjb250ZW50UmVjdCwgMCk7CiAKICAgICAvLyBFbXB0eSBs
YXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KQEAgLTU3Miw3ICs1NzUsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRBbmltYXRpbmdMYXllcikKIHsK
LSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAyNCk7
CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAyNCk7CiAgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAg
LTU4Nyw4ICs1OTAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50
WmVyb1NpemVkQW5pbWF0aW5nTGF5ZXIpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
Y29udGVudFJlY3QpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAK
LSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9y
LCBjb250ZW50UmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVw
ZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBjb250ZW50UmVjdCwgMCk7CiAKICAgICAvLyBFbXB0eSBs
YXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KQEAgLTYxOSw3ICs2MjIsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVycykKICAgICBJbnRTaXpl
IGNvbnRlbnRCb3VuZHMoMTAwLCAxMDApOwogICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CiAKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSgyMDAwMCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
ICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTYzMSw4ICs2MzQsOCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVycykKICAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPmludmFsaWRh
dGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
KHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0
LCAwKTsKIAogICAgIC8vIE5vbi12aXNpYmxlIGxheWVycyBkb24ndCBuZWVkIGlkbGUgcGFpbnQu
CkBAIC02NjQsNyArNjY3LDcgQEAgc3RhdGljIHZvaWQgdGVzdEhhdmVPdXRlclRpbGVzKEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKiBsYXllckltcGwsIGludCB3aWR0aCwgaW50IGgKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMp
CiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4MDAwKjgwMDAqOCwgODAw
MCo4MDAwKjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoODAw
MCo4MDAwKjgsIDEwMjQpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OwogCiAgICAgaW50IHRpbGVXaWR0aCA9IEZha2VUaWxlZExheWVyQ2hyb21pdW06OnRpbGVTaXpl
KCkud2lkdGgoKTsKQEAgLTY4OCw4ICs2OTEsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVycykKICAgICAgICAgICAgIGxh
eWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKICAgICAgICAgICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICAgICAgICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsK
LSAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAg
ICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAg
ICAgICAgICAgLy8gSWYgaWRsZVBhaW50UmVjdCBnaXZlcyBiYWNrIGEgbm9uLWVtcHR5IHJlc3Vs
dCB0aGVuIHdlIHNob3VsZCBwYWludCBpdC4gT3RoZXJ3aXNlLAogICAgICAgICAgICAgLy8gd2Ug
c2hvdWQgcGFpbnQgbm90aGluZy4KQEAgLTcwNSwxNiArNzA4LDE2IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAg
ICAgICAgICAgdGVzdEhhdmVPdXRlclRpbGVzKGxheWVySW1wbC5nZXQoKSwgd2lkdGhbaV0sIGhl
aWdodFtqXSwgMCk7CiAKICAgICAgICAgICAgIC8vIFNldCBwcmlvcml0aWVzIGFuZCByZWNyZWF0
ZSB0aWxlcy4KLSAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgICAgICAgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgICAgICAgICAgLy8gTm9ybWFsbHkgd2Ug
ZG9uJ3QgYWxsb3cgbm9uLXZpc2libGUgbGF5ZXJzIHRvIHByZS1wYWludCwgYnV0IGlmIHRoZXkg
YXJlIGFuaW1hdGluZyB0aGVuIHdlIHNob3VsZC4KICAgICAgICAgICAgIEVYUEVDVF9FUShzaG91
bGRQcmVwYWludCwgbGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CiAKICAgICAg
ICAgICAgIC8vIElmIHRoZSBsYXllciBpcyB0byBiZSBwcmVwYWludGVkIGF0IGFsbCwgdGhlbiBh
ZnRlciBmb3VyIHVwZGF0ZXMgd2Ugc2hvdWxkIGhhdmUgdGhlIG91dGVyIHJvdy9jb2x1bW5zIHBh
aW50ZWQuCiAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7ICsraykgewotICAgICAg
ICAgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICAgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgICAgICAgICAgICAgIGxheWVyLT51cGRh
dGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogICAgICAgICAgICAgICAgIGxh
eWVyLT5pZGxlVXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKQEAgLTcy
Niw4ICs3MjksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9u
VmlzaWJsZUFuaW1hdGluZ0xheWVycykKICAgICAgICAgICAgIC8vIFdlIGRvbid0IGN1cnJlbnRs
eSBpZGxlIHBhaW50IHBhc3QgdGhlIG91dGVybW9zdCB0aWxlcy4KICAgICAgICAgICAgIEVYUEVD
VF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKICAgICAgICAgICAg
IGZvciAoaW50IGsgPSAwOyBrIDwgNDsgKytrKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3Qp
OwotICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
KyAgICAgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKDApOwogCiAgICAgICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVy
LCB2aXNpYmxlUmVjdCwgMCk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPmlkbGVVcGRhdGVMYXll
clJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwpAQCAtNzQxLDcgKzc0NCw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5
ZXJzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVw
YXJlKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNzUzLDkgKzc1NiwxMCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogCiAgICAgLy8gVGhlIHRp
bGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0
d28gdGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CisgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAg
IGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVj
dCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVy
LT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwog
ICAgIHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5nZXQoKSwgJmZha2VBbGxvY2F0b3IsICZmYWtl
Q29waWVyLCAmZmFrZVVwbG9hZGVyLCAxMDAwKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOwpAQCAtNzkwLDcgKzc5NCw3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQp
CiAgICAgLy8gVGhlIHVwZGF0ZVJlY3QgKHRoYXQgaW5kaWNhdGVzIHdoYXQgd2FzIGFjdHVhbGx5
IHBhaW50ZWQpIHNob3VsZCBiZSBpbgogICAgIC8vIGxheWVyIHNwYWNlLCBub3QgdGhlIGNvbnRl
bnQgc3BhY2UuCiAKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCox
MDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyV2l0aFNj
YWxlZEJvdW5kcz4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVk
Qm91bmRzKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IGxheWVyQm91bmRz
KDAsIDAsIDMwMCwgMjAwKTsKQEAgLTgwNCwxNSArODA4LDE1IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQp
CiAgICAgLy8gSG93ZXZlciwgaXQgc2hvdWxkIHN0aWxsIGJlIGluIGxheWVyIHNwYWNlLCBub3Qg
Y29udGVudCBzcGFjZS4KICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7
CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRv
cik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXll
ci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRCb3VuZHMsIDApOwogICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMDAsIDMwMCAqIDAuOCksIGxheWVyLT51
cGRhdGVSZWN0KCkpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAvLyBBZnRlciB0aGUg
dGlsZXMgYXJlIHVwZGF0ZWQgb25jZSwgYW5vdGhlciBpbnZhbGlkYXRlIG9ubHkgbmVlZHMgdG8g
dXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91
bmRzKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRCb3VuZHMs
IDApOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdChsYXllckJvdW5kcyksIGxh
eWVyLT51cGRhdGVSZWN0KCkpOwpAQCAtODIxLDI5ICs4MjUsMzAgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxl
ZCkKICAgICAvLyBQYXJ0aWFsIHJlLXBhaW50IHNob3VsZCBhbHNvIGJlIHJlcHJlc2VudGVkIGJ5
IHRoZSB1cGRhdGVSZWN0IGluIGxheWVyIHNwYWNlLCBub3QgY29udGVudCBzcGFjZS4KICAgICBJ
bnRSZWN0IHBhcnRpYWxEYW1hZ2UoMzAsIDEwMCwgMTAsIDEwKTsKICAgICBsYXllci0+aW52YWxp
ZGF0ZVJlY3QocGFydGlhbERhbWFnZSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
SW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBjb250ZW50
Qm91bmRzLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoNDUsIDgwLCAx
NSwgOCksIGxheWVyLT51cGRhdGVSZWN0KCkpOwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCox
MDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCox
MDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbCgwKSkpOwogCiAgICAgLy8gQ3JlYXRlIGEgbGF5ZXIgd2l0aCBvbmUgdGlsZS4KICAg
ICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBsYXllci0+c2V0Vmlz
aWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAKICAgICAvLyBJbnZhbGlk
YXRlIHRoZSBlbnRpcmUgbGF5ZXIuCiAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLT5s
YXN0TmVlZHNEaXNwbGF5UmVjdCgpKTsKIAogICAgIC8vIFB1c2ggdGhlIHRpbGVzIHRvIHRoZSBp
bXBsIHNpZGUgYW5kIGNoZWNrIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUuCi0gICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51
cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDApOwogICAg
IHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
LmdldCgpKTsKQEAgLTg1NSwxMSArODYwLDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgLy8g
Q2hhbmdlIHRoZSBjb250ZW50cyBzY2FsZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNvbnRlbnQgcmVj
dGFuZ2xlIHJlcXVpcmluZyBwYWludGluZwogICAgIC8vIGlzIG5vdCBzY2FsZWQuCiAgICAgbGF5
ZXItPnNldENvbnRlbnRzU2NhbGUoMik7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0
UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLT5sYXN0TmVlZHNEaXNwbGF5UmVjdCgpKTsKIAog
ICAgIC8vIFRoZSBpbXBsIHNpZGUgc2hvdWxkIGdldCAyeDIgdGlsZXMgbm93LgotICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3Qo
MCwgMCwgMjAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+
dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMjAwLCAyMDApLCAwKTsKICAg
ICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CkBAIC04NzEsOSArODc3LDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKICAgICAvLyBJ
bnZhbGlkYXRlIHRoZSBlbnRpcmUgbGF5ZXIgYWdhaW4sIGJ1dCBkbyBub3QgcGFpbnQuIEFsbCB0
aWxlcyBzaG91bGQgYmUgZ29uZSBub3cgZnJvbSB0aGUKICAgICAvLyBpbXBsIHNpZGUuCiAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMjAwLCAyMDApKTsKKyAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKICAgICBs
YXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMSwgMCwgMCwgMSksIDApOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXJJbXBsLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxl
QXQoMCwgMCkpOwpAQCAtODk2LDE1ICs5MDIsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKIAogICAgIC8vIFdlIGhhdmUgZW5vdWdoIG1lbW9y
eSBmb3Igb25seSBvbmUgb2YgdGhlIHR3byBsYXllcnMuCiAgICAgaW50IG1lbW9yeUxpbWl0ID0g
NCAqIDMwMCAqIDMwMDsgLy8gNCBieXRlcyBwZXIgcGl4ZWwuCi0gICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgbWVtb3J5TGltaXQsIG1lbW9yeUxpbWl0KTsK
IAotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBjaGlsZExheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gY2hpbGRMYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVu
dHNUZXh0dXJlTWFuYWdlcigpKSk7CiAgICAgcm9vdExheWVyLT5hZGRDaGlsZChjaGlsZExheWVy
KTsKIAogICAgIHJvb3RMYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIHJvb3RM
YXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAgICAgcm9vdExheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KDE1MCwgMTUwKSk7CiAgICAgY2hpbGRMYXllci0+c2V0Qm91
bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIGNoaWxkTGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
Y29udGVudFJlY3QpOwogICAgIGNoaWxkTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTUw
LCAxNTApKTsKICAgICByb290TGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKICAg
ICBjaGlsZExheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CkBAIC05MTIsOSArOTE5
LDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkK
ICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOwogICAgIGNjTGF5
ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMzAwLCAzMDApKTsKIAotICAgIGNo
aWxkTGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwg
Y29udGVudFJlY3QpOwotICAgIHJvb3RMYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3Qo
cHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVw
ZGF0ZXIsIG1lbW9yeUxpbWl0KTsKIAogICAgIC8vIFdlJ2xsIHNraXAgdGhlIHJvb3QgbGF5ZXIu
CkBAIC05MjYsMTQgKzkzMCwxMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tp
cHNEcmF3R2V0c1Jlc2V0KQogICAgIC8vIFJlbW92ZSB0aGUgY2hpbGQgbGF5ZXIuCiAgICAgcm9v
dExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogCi0gICAgLy8gRHJvcCB0ZXh0dXJlIHByaW9y
aXRpZXMgb24gdGhlIGNoaWxkLgotICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMo
KTsKLQotICAgIHJvb3RMYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIG1l
bW9yeUxpbWl0KTsKICAgICBFWFBFQ1RfRkFMU0Uocm9vdExheWVyLT5za2lwc0RyYXcoKSk7CiAK
KyAgICBjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y2xlYXJBbGxN
ZW1vcnkoJmFsbG9jYXRvcik7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7
CiAgICAgY2NMYXllclRyZWVIb3N0LmNsZWFyKCk7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOwpAQCAtOTQxLDE0ICs5NDEsMTUgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHJlc2l6ZVRvU21hbGxlcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDYwKjEwMjQqMTAyNCwgNjAqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIGxheWVyLT5zZXRCb3VuZHMo
SW50U2l6ZSg3MDAsIDcwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoMCwgMCwgNzAwLCA3MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgw
LCAwLCA3MDAsIDcwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50
UmVjdCgwLCAwLCA3MDAsIDcwMCksIDApOwogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDIwMCwgMjAwKSk7CkBAIC05NTcsMTYgKzk1OCwxNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcmVzaXplVG9TbWFsbGVyKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgaHVnZUxheWVyVXBkYXRlQ3Jhc2gpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDYwKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBpbnQgc2l6ZSA9IDEgPDwg
MzA7CiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKHNpemUsIHNpemUpKTsKKyAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7CiAgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSkpOwogCiAgICAgLy8g
RW5zdXJlIG5vIGNyYXNoIGZvciBib3VuZHMgd2hlcmUgc2l6ZSAqIHNpemUgd291bGQgb3ZlcmZs
b3cgYW4gaW50LgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
KHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwg
MCwgNzAwLCA3MDApLCAwKTsKIH0KIApAQCAtOTgyLDcgKzk4NCw3IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgmZmFrZUNDTGF5
ZXJUcmVlSG9zdENsaWVudCwgc2V0dGluZ3MpOwogICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXJUcmVl
SG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJJZk5lZWRlZCgpKTsKIAotICAgIC8vIENyZWF0
ZSBvbmUgNTAwIHggMzAwIHRpbGVkIGxheWVyLgorICAgIC8vIENyZWF0ZSBvbmUgMzAwIHggMjAw
IHRpbGVkIGxheWVyIHdpdGggMyB4IDIgdGlsZXMuCiAgICAgSW50U2l6ZSBjb250ZW50Qm91bmRz
KDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNv
bnRlbnRCb3VuZHMpOwogCkBAIC0xMDk3LDcgKzEwOTksNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAgLy8gVGhlIHRp
bGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0
d28gdGlsZXMuCkBAIC0xMTA1LDE1ICsxMTA3LDE1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52YWxp
ZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAxMDAs
IDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXll
clJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDApOwogICAgIEVYUEVDVF9F
USgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgp
KTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApA
QCAtMTEyNiw4ICsxMTI4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
UGFpbnRlZFdpdGhPY2NsdXNpb24pCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJl
Y3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQ
RUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVj
dENvdW50KCkpOwogCkBAIC0xMTYwLDcgKzExNjIsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJh
aW50cykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0x
MTc0LDggKzExNzYsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNjApKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCi0gICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2
MDAsIDM2MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVM
YXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDM2MCksICZvY2NsdWRlZCk7CiAg
ICAgRVhQRUNUX0VRKDI0LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVw
YXJlUmVjdENvdW50KCkpOwogCkBAIC0xMTg5LDggKzExOTEsOCBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0
cmFpbnRzKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDIwMCwgMjAwLCAzMDAs
IDE1MCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNjAw
LCAzNTApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCAzNTApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygw
KTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAw
LCAzNTApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApAQCAtMTIwNCw4ICsxMjA2
LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2Ns
dXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24o
SW50UmVjdCgyMDAsIDIwMCwgMzAwLCAxNTApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVy
UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgMzQwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0
KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzQwKSk7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzQwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEo
MjQtNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQo
KSk7CiAKQEAgLTEyMTcsNyArMTIxOSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAKIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxp
ZGF0aW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAg
LTEyMjksOCArMTIzMSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc05v
dFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJ
bnRSZWN0KDIwMCwgMjAwLCAzMDAsIDEwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
SW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
c0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgz
Ni0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgp
KTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTI1Miw3ICsxMjU0LDcgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24p
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVz
aW9uQW5kVHJhbnNmb3JtcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
ZGVkOwogCkBAIC0xMjY5LDggKzEyNzEsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiAgICAgb2NjbHVkZWQu
c2V0T2NjbHVzaW9uKEludFJlY3QoMTAwLCAxMDAsIDE1MCwgNTApKTsKICAgICBsYXllci0+c2V0
VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwog
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50
UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxh
eWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZv
Y2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMjgxLDcgKzEyODMsNyBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRy
YW5zZm9ybXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRX
aXRoT2NjbHVzaW9uQW5kU2NhbGluZykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2Vy
IG9jY2x1ZGVkOwogCkBAIC0xMjk3LDggKzEyOTksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgb2NjbHVk
ZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTAwKSk7CiAgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91bmRzKCkp
KTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3Is
IEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2Fs
Y3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAg
ICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAwLCA2MDAp
LCAmb2NjbHVkZWQpOwogICAgIC8vIFRoZSBjb250ZW50IGlzIGhhbGYgdGhlIHNpemUgb2YgdGhl
IGxheWVyIChzbyB0aGUgbnVtYmVyIG9mIHRpbGVzIGlzIGZld2VyKS4KICAgICAvLyBJbiB0aGlz
IGNhc2UsIHRoZSBjb250ZW50IGlzIDMwMHgzMDAsIGFuZCBzaW5jZSB0aGUgdGlsZSBzaXplIGlz
IDEwMCwgdGhlCkBAIC0xMzE3LDggKzEzMTksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgb2NjbHVkZWQu
c2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMjAwKSk7CiAgICAgbGF5ZXItPnNl
dFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91bmRzKCkpKTsK
ICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIElu
dFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3Vs
YXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBs
YXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAm
b2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSg5LTEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0xMzM3LDggKzEzMzksOCBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNj
YWxpbmcpCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMTAwLCAxMDAsIDE1MCwg
MTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBsYXllci0+Ym91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgw
LCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJl
Y3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSg5LTEsIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCkBAIC0x
MzQ5LDcgKzEzNTEsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNp
b25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMzY2LDggKzEzNjgsOCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUJvdW5kcyk7CiAgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KDEpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9y
aXR5Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0
eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7
CiAKICAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUgY29udGVudCwgdGhl
biB0aGUgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24gc2hvdWxkIGJlIGVtcHR5LgogICAgIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVj
dCgpKTsKQEAgLTE0NTAsNyArMTQ1Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTE0NjcsOCArMTQ2OSw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmljcykKICAgICBsYXllci0+c2V0VmlzaWJs
ZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7
CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRv
cik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8v
IEludmFsaWRhdGVzIGFuZCBwYWludHMgdGhlIHdob2xlIGxheWVyLgogICAgIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKQEAg
LTE1MDEsNiArMTUwMywxNjAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVs
c1BhaW50ZWRNZXRyaWNzKQogICAgIEVYUEVDVF9FUSgwLCBvY2NsdWRlZC5vdmVyZHJhd01ldHJp
Y3MoKS50aWxlc0N1bGxlZEZvclVwbG9hZCgpKTsKIH0KIAorVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGRvbnRBbGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxv
Y2F0ZWQpCit7CisgICAgLy8gSW5pdGlhbGl6ZSB3aXRob3V0IHRocmVhZGluZyBzdXBwb3J0Lgor
ICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKworICAgIC8vIFRpbGUg
c2l6ZSBpcyAxMDB4MTAwLgorICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMzAwLCAyMDApOwor
ICAgIEludFJlY3QgY2hpbGRSZWN0KDAsIDAsIDMwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxk
MlJlY3QoMCwgMTAwLCAzMDAsIDEwMCk7CisKKyAgICBDQ0xheWVyVHJlZVNldHRpbmdzIHNldHRp
bmdzOworICAgIEZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQgZmFrZUNDTGF5ZXJUcmVlSG9zdENs
aWVudDsKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xh
eWVyVHJlZUhvc3Q6OmNyZWF0ZSgmZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCwgc2V0dGluZ3Mp
OworICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJJZk5lZWRlZCgpKTsKKworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiByb290
ID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5j
b250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc3Vy
ZmFjZSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBjaGlsZCA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKGNj
TGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKSk7CisgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKSk7CisK
KyAgICByb290LT5zZXRCb3VuZHMocm9vdFJlY3Quc2l6ZSgpKTsKKyAgICByb290LT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KCkpOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3Qocm9v
dFJlY3QpOworICAgIHJvb3QtPmFkZENoaWxkKHN1cmZhY2UpOworCisgICAgc3VyZmFjZS0+c2V0
Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworICAgIHN1cmZhY2UtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoKSk7CisgICAgc3VyZmFjZS0+c2V0T3BhY2l0eSgwLjUpOworICAgIHN1cmZhY2Ut
PmFkZENoaWxkKGNoaWxkKTsKKyAgICBzdXJmYWNlLT5hZGRDaGlsZChjaGlsZDIpOworCisgICAg
Y2hpbGQtPnNldEJvdW5kcyhjaGlsZFJlY3Quc2l6ZSgpKTsKKyAgICBjaGlsZC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgpKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oY2hpbGRSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIGNoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNoaWxkUmVjdCk7CisK
KyAgICBjaGlsZDItPnNldEJvdW5kcyhjaGlsZDJSZWN0LnNpemUoKSk7CisgICAgY2hpbGQyLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkpOworICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oY2hp
bGQyUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjaGlsZDItPnNldFZpc2libGVMYXllclJlY3QoY2hp
bGQyUmVjdCk7CisKKyAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290KTsKKyAg
ICBjY0xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290UmVjdC5zaXplKCkpOworCisg
ICAgLy8gV2l0aCBhIGh1Z2UgbWVtb3J5IGxpbWl0LCBhbGwgbGF5ZXJzIHNob3VsZCB1cGRhdGUg
YW5kIHB1c2ggdGhlaXIgdGV4dHVyZXMuCisgICAgcm9vdC0+aW52YWxpZGF0ZVJlY3Qocm9vdFJl
Y3QpOworICAgIGNoaWxkLT5pbnZhbGlkYXRlUmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkMi0+
aW52YWxpZGF0ZVJlY3QoY2hpbGQyUmVjdCk7CisgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVM
YXllcnModXBkYXRlciwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAg
eworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAg
dXBkYXRlVGV4dHVyZXMoMTAwMCk7CisgICAgICAgIEVYUEVDVF9FUSg2LCByb290LT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDMs
IGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDMsIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRl
Q291bnQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1cGRhdGVyLmhhc01vcmVVcGRhdGVzKCkp
OworCisgICAgICAgIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRl
Q291bnQoKTsKKyAgICAgICAgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFy
VXBkYXRlQ291bnQoKTsKKyAgICAgICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5jbGVhclVwZGF0ZUNvdW50KCk7CisKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiByb290SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwocm9vdC0+aWQo
KSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZEltcGwoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkLT5pZCgpKSkpOworICAgICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKKyAgICAgICAgcm9vdC0+cHVzaFByb3Bl
cnRpZXNUbyhyb290SW1wbC5nZXQoKSk7CisgICAgICAgIGNoaWxkLT5wdXNoUHJvcGVydGllc1Rv
KGNoaWxkSW1wbC5nZXQoKSk7CisgICAgICAgIGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGls
ZDJJbXBsLmdldCgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytp
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgMjsgKytqKQorICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKHJvb3RJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwg
aikpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JU
aWxlQXQoaSwgMCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGQySW1wbC0+aGFzVGV4
dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjY0xheWVyVHJl
ZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAvLyBXaXRoIGEgbWVtb3J5IGxpbWl0IHRo
YXQgaW5jbHVkZXMgb25seSB0aGUgcm9vdCBsYXllciAoM3gyIHRpbGVzKSBhbmQgaGFsZiB0aGUg
c3VyZmFjZSB0aGF0CisgICAgLy8gdGhlIGNoaWxkIGxheWVycyBkcmF3IGludG8sIHRoZSBjaGls
ZCBsYXllcnMgd2lsbCBub3QgYmUgYWxsb2NhdGVkLiBJZiB0aGUgc3VyZmFjZSBpc24ndAorICAg
IC8vIGFjY291bnRlZCBmb3IsIHRoZW4gb25lIG9mIHRoZSBjaGlsZHJlbiB3b3VsZCBmaXQgd2l0
aGluIHRoZSBtZW1vcnkgbGltaXQuCisgICAgcm9vdC0+aW52YWxpZGF0ZVJlY3Qocm9vdFJlY3Qp
OworICAgIGNoaWxkLT5pbnZhbGlkYXRlUmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkMi0+aW52
YWxpZGF0ZVJlY3QoY2hpbGQyUmVjdCk7CisgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXll
cnModXBkYXRlciwgKDMgKiAyICsgMyAqIDEpICogKDEwMCAqIDEwMCkgKiA0KTsKKyAgICB7Cisg
ICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICB1cGRh
dGVUZXh0dXJlcygxMDAwKTsKKyAgICAgICAgRVhQRUNUX0VRKDYsIHJvb3QtPmZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgY2hp
bGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBF
WFBFQ1RfRVEoMCwgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3Vu
dCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CisK
KyAgICAgICAgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3Vu
dCgpOworICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRh
dGVDb3VudCgpOworICAgICAgICBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNs
ZWFyVXBkYXRlQ291bnQoKTsKKworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkp
OworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkpKSk7CisgICAgICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGls
ZWRMYXllckltcGwoY2hpbGQyLT5pZCgpKSkpOworICAgICAgICByb290LT5wdXNoUHJvcGVydGll
c1RvKHJvb3RJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hp
bGRJbXBsLmdldCgpKTsKKyAgICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMklt
cGwuZ2V0KCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAg
ICAgICAgRVhQRUNUX1RSVUUocm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBqKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxl
QXQoaSwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMkltcGwtPmhhc1RleHR1
cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2NMYXllclRyZWVI
b3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgLy8gV2l0aCBhIG1lbW9yeSBsaW1pdCB0aGF0
IGluY2x1ZGVzIG9ubHkgaGFsZiB0aGUgcm9vdCBsYXllciwgbm8gY29udGVudHMgd2lsbCBiZQor
ICAgIC8vIGFsbG9jYXRlZC4gSWYgcmVuZGVyIHN1cmZhY2UgbWVtb3J5IHdhc24ndCBhY2NvdW50
ZWQgZm9yLCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKKyAgICAvLyBmb3Igb25lIG9mIHRoZSBjaGls
ZHJlbiBsYXllcnMsIGJ1dCB0aGV5IGRyYXcgaW50byBhIHN1cmZhY2UgdGhhdCBjYW4ndCBiZQor
ICAgIC8vIGFsbG9jYXRlZC4KKyAgICByb290LT5pbnZhbGlkYXRlUmVjdChyb290UmVjdCk7Cisg
ICAgY2hpbGQtPmludmFsaWRhdGVSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQyLT5pbnZhbGlk
YXRlUmVjdChjaGlsZDJSZWN0KTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1
cGRhdGVyLCAoMyAqIDEpICogKDEwMCAqIDEwMCkgKiA0KTsKKyAgICB7CisgICAgICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICB1cGRhdGVUZXh0dXJlcygx
MDAwKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQtPmZha2VMYXll
clRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwg
Y2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CisKKyAgICAgICAgcm9v
dC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAg
ICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwor
ICAgICAgICBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291
bnQoKTsKKworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFk
b3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOworICAgICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
Y2hpbGQyLT5pZCgpKSkpOworICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBs
LmdldCgpKTsKKyAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgp
KTsKKyAgICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKHJvb3RJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgaikpOworICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKGNoaWxkSW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsK
KyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxl
QXQoaSwgMCkpOworICAgICAgICB9CisgICAgfQorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0
Q29tcGxldGUoKTsKKworICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdl
cigpLT5jbGVhckFsbE1lbW9yeSgmYWxsb2NhdG9yKTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnNl
dFJvb3RMYXllcigwKTsKKyAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJLaXQ6
OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisKIGNsYXNzIFRyYWNraW5nTGF5ZXJQYWlu
dGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxUcmFja2luZ0xheWVyUGFpbnRlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IFRyYWNraW5nTGF5ZXJQYWludGVyKCkpOyB9CkBAIC0xNTQyLDcgKzE2OTgsNyBAQCBw
cml2YXRlOgogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRl
bnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ1BhaW50KQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDAsIDQwMDAwMDApKTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlcihDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAwLCA0MDAwMDAwKSk7CiAgICAgQ0NQcmlvcml0
eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKIAogICAgIFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKQEAgLTE1NTcsNiArMTcxMyw3IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlz
Tm90RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qo
Y29udGVudFJlY3QpOwogCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKGNhbGN1bGF0
b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAv
LyBVcGRhdGUgdGhlIHdob2xlIHRpbGUuCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBjb250ZW50UmVjdCwgMCk7CkBAIC0xNTc1LDcgKzE3MzIsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1
cmluZ1BhaW50KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNv
bnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ0ludmFsaWRhdGlvbikKIHsKLSAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlcihDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAwLCA0MDAwMDAwLCA0MDAwMDAwKSk7Cisg
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCkpOwogICAg
IENDUHJpb3JpdHlDYWxjdWxhdG9yIGNhbGN1bGF0b3I7CiAKICAgICBSZWZQdHI8VXBkYXRlVHJh
Y2tpbmdUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNr
aW5nVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CkBAIC0xNTg5LDYg
KzE3NDYsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRl
bnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ0ludmFsaQogICAgIGxheWVyLT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhjYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAp
OwogCiAgICAgLy8gVXBkYXRlIHRoZSB3aG9sZSB0aWxlLgogICAgIGxheWVyLT51cGRhdGVMYXll
clJlY3QodXBkYXRlciwgY29udGVudFJlY3QsIDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150828</attachid>
            <date>2012-07-04 11:48:27 -0700</date>
            <delta_ts>2012-07-04 13:51:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89901-20120704144826.patch</filename>
            <type>text/plain</type>
            <size>110704</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY1NjA1NGEwMjI5YmI2
MDg3NzUxM2NkMDQ2OWJlYjAyMGE4OTk3OC4uOGNiOTBmNDhhMDI2OTliZTg4ZWYyZjBiODI1OWEw
ODExYzRjNTQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA2LTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVz
cGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2VydmluZyBjb250
ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUcmVhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZ2l2ZW4gdG8gYSB0YWIgYXMgYW4gYWxs
b2NhdGlvbiBmb3IgaXRzCisgICAgICAgIGNvbnRlbnRzIGFuZCBzdXJmYWNlcy4gVGhlbiBvbmx5
IHVzZSB1cCBjb250ZW50cyBtZW1vcnkgc3VjaCB0aGF0CisgICAgICAgIHRoZSBzdXJmYWNlIHRl
eHR1cmVzIHdpbGwgc3RpbGwgZml0IHdpdGhpbiB0aGUgbGltaXQuIFJlcG9ydCBoaXN0b2dyYW1z
CisgICAgICAgIGZvciB0aGUgYW1vdW50IG9mIGNvbnRlbnRzIGFuZCBzdXJmYWNlIHRleHR1cmUg
bWVtb3J5IHVzZWQgYnkgZWFjaAorICAgICAgICBmcmFtZSBnZW5lcmF0ZWQgYnkgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHViZXJjb21wLCBlYWNoIG5lc3Rl
ZCBjb21wb3NpdG9yIHdpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGZvciBjb250ZW50cyBl
bnN1cmluZyB0aGF0IHRoZSByb290IGNvbXBvc2l0b3IgaGFzIHNwYWNlIGZvciBzdXJmYWNlcwor
ICAgICAgICBjYXVzZWQgYnkgdGhhdCBuZXN0ZWQgY29tcG9zaXRvci4KKworICAgICAgICBTaW5j
ZSBzdXJmYWNlIG1lbW9yeSBjYW4gbm8gbG9uZ2VyIGJlIHRha2VuIGJ5IGNvbnRlbnRzLCB3ZSBy
ZW1vdmUgdGhlCisgICAgICAgIHByZWZlcnJlZCBtZW1vcnkgbGltaXQgZnJvbSB0aGUgdGV4dHVy
ZSBtYW5hZ2VyLgorCisgICAgICAgIFRlc3RzOiBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmRvbnRB
bGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2F0ZWQKKyAgICAgICAg
ICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5yZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9y
eUF2YWlsYWJsZU91dHNpZGVSb290U3VyZmFjZQorICAgICAgICAgICAgICAgQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LnJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVz
dExhdGUKKyAgICAgICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC53aGVuUmVuZGVy
U3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxzb05vdEF2YWlsYWJsZQorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06
OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChUaWxl
ZExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ092ZXJkcmF3
TWV0cmljczo6Q0NPdmVyZHJhd01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJh
d01ldHJpY3M6OmRpZFVzZUNvbnRlbnRzVGV4dHVyZU1lbW9yeUJ5dGVzKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJhd01ldHJpY3M6OmRpZFVzZVJlbmRl
clN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPdmVyZHJh
d01ldHJpY3M6OnJlY29yZE1ldHJpY3NJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuaDoKKyAgICAgICAgKENDT3ZlcmRy
YXdNZXRyaWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1
ZXN0TGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6bWVtb3J5Rm9yUmVu
ZGVyU3VyZmFjZXNCeXRlcyk6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxj
dWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVBy
aW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxl
UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuaDoKKyAgICAgICAgKENDUHJpb3JpdHlDYWxjdWxhdG9yKToKKwogMjAxMi0wNy0wNCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENv
cnJlY3RseSByZWplY3QgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3aXRoIGNlcnRhaW4gcm90YXRp
b25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2ZGI1MTAyMzEyZDg4NTRhMDQyNWJk
YmZiMjgxMDgxY2I2YmNjYzQxLi41OWQ3ZmVkMjNjNGQ1Nzg3YjFhOGFiNmYwNTkzZDM1MzBmM2Q5
NDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA2
LTI5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gUmVzcGVjdCBtZW1vcnkgbmVlZGVkIGZvciBSZW5kZXJTdXJmYWNlcyB3aGVuIHJlc2Vy
dmluZyBjb250ZW50cyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODk5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHRlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHA6CisgICAg
ICAgIChXVEY6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdDo6Y3JlYXRlTWFuYWdlcik6CisgICAg
ICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIHRlc3RzL0NDVGls
ZWRMYXllclRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxlZExh
eWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
KToKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6CisgICAgICAgIChG
YWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKwogMjAxMi0wNy0wNCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvcnJlY3RseSByZWplY3QgYWNjZWxlcmF0ZWQg
YW5pbWF0aW9ucyB3aXRoIGNlcnRhaW4gcm90YXRpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZGRkN2Q1MTUzM2U1ZTgyODBlMGNiYWQwM2EzODI0YTBjMDRh
ZmVkYS4uODM1ZGZiZDdmMTk3YzA5NGQ3NDkzNDg5MTRjYmM2NGFmODgxOTdiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01MDQsNiArNTA0LDggQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXUKICAgICAvLwogICAgIC8vIFBpeGVsIGNvcGllcyBpbiB0aGlzIGFs
Z29yaXRobSBvY2N1ciBhdCBzdGVwcyAyLCAzLCA0LCBhbmQgNS4KIAorICAgIC8vIEZJWE1FOiBX
aGVuIHRoaXMgYWxnb3JpdGhtIGNoYW5nZXMsIHVwZGF0ZSBDQ0xheWVyVHJlZUhvc3Q6OnByaW9y
aXRpemVUZXh0dXJlcygpIGFjY29yZGluZ2x5LgorCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3
aW5nU3VyZmFjZSA9IHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlm
IChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcAppbmRleCBkZDZhNDNkMDI5ODc3
YjcxZDBlMjg4MWZiNWQ1Yzk4NmU0ZTVjNThmLi43NTgwYjYzMzc5OTRhZTM2MzdhMTJkZDkxMzkz
OGJhNjNhNjM3OGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcApA
QCAtMjU4LDE4ICsyNTgsMTkgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlUHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYpCiAKICAgICBjcmVhdGVU
ZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7CiAKKyAgICBib29sIGRyYXdzVG9Sb290U3VyZmFjZSA9
ICF0YXJnZXRSZW5kZXJTdXJmYWNlKCktPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKICAgICBpZiAo
bV9iYWNrVHJhY2spIHsKICAgICAgICAgbV9iYWNrVHJhY2stPnRleHR1cmUoKS0+c2V0RGltZW5z
aW9ucyhjb250ZW50Qm91bmRzKCksIG1fdGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIG1fYmFja1Ry
YWNrLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6
dWlQcmlvcml0eSgpKTsKKyAgICAgICAgbV9iYWNrVHJhY2stPnRleHR1cmUoKS0+c2V0UmVxdWVz
dFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KGRyYXdzVG9Sb290U3Vy
ZmFjZSkpOwogICAgIH0KICAgICBpZiAobV9mb3JlVHJhY2spIHsKICAgICAgICAgbV9mb3JlVHJh
Y2stPnRleHR1cmUoKS0+c2V0RGltZW5zaW9ucyhjb250ZW50Qm91bmRzKCksIG1fdGV4dHVyZUZv
cm1hdCk7Ci0gICAgICAgIG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0
eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eSgpKTsKKyAgICAgICAgbV9mb3JlVHJh
Y2stPnRleHR1cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1
aVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgIH0KICAgICBpZiAobV90aHVtYikg
ewogICAgICAgICBJbnRTaXplIHRodW1iU2l6ZSA9IHRoZW1lKCktPnRodW1iUmVjdChtX3Njcm9s
bGJhci5nZXQoKSkuc2l6ZSgpOwogICAgICAgICBtX3RodW1iLT50ZXh0dXJlKCktPnNldERpbWVu
c2lvbnModGh1bWJTaXplLCBtX3RleHR1cmVGb3JtYXQpOwotICAgICAgICBtX3RodW1iLT50ZXh0
dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0
eSgpKTsKKyAgICAgICAgbV90aHVtYi0+dGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQ
cmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBhYjJmNWJlY2M1MjQy
NTlkN2MwYjk5MjFhMTJhNGE1YjI3NmJkM2VhLi42NWNlYWM4MmE0MmFiZDdlM2M5ZmFiMTExNzM4
ZjE2ODUwY2JlODVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTUyMyw2
ICs1MjMsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJ
blJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgcmVzZXRVcGRhdGVTdGF0ZSgp
OwogCiAgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSBpZGxlUGFpbnRSZWN0KHZpc2libGVSZWN0
KTsKKyAgICBib29sIGRyYXdzVG9Sb290U3VyZmFjZSA9ICF0YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnRhcmdldFJlbmRlclN1cmZhY2UoKTsKIAogICAgIC8vIE1pbmltYWxseSBjcmVhdGUgdGhlIHRp
bGVzIGluIHRoZSBkZXNpcmVkIHByZS1wYWludCByZWN0LgogICAgIGlmICghcHJlcGFpbnRSZWN0
LmlzRW1wdHkoKSkgewpAQCAtNTU4LDcgKzU1OSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYK
IAogICAgICAgICAgICAgICAgIHRpbGUtPmRpcnR5UmVjdCA9IG1fdGlsZXItPnRpbGVSZWN0KHRp
bGUpOwogICAgICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIGJhY2tC
dWZmZXIgPSB0aWxlLT50ZXh0dXJlKCk7Ci0gICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+dGV4
dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbVZpc2li
aWxpdHkodHJ1ZSkpOworICAgICAgICAgICAgICAgIGJhY2tCdWZmZXItPnRleHR1cmUoKS0+c2V0
UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21WaXNpYmlsaXR5KHRydWUs
IGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgICAgICAgICAgICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZT4gZnJvbnRCdWZmZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6Y3JlYXRlKGJh
Y2tCdWZmZXItPnRleHR1cmUoKS0+dGV4dHVyZU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPnNpemUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPmZvcm1hdCgpKTsKQEAg
LTU3OCw5ICs1NzksOSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgICAgIC8vIDUxMiBw
aXhlbHMgb2YgcHJlLXBhaW50aW5nLiBMYXRlciB3ZSBjYW4ganVzdCBwYXNzIGFuIGFuaW1hdGlu
ZyBmbGFnIGV0Yy4gdG8gdGhlCiAgICAgICAgIC8vIGNhbGN1bGF0b3IgYW5kIGl0IGNhbiB0YWtl
IGNhcmUgb2YgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2Ugc3RpbGwgbmVlZCBpdC4KICAgICAgICAg
aWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSAmJiAhcHJlcGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnNldFJlcXVlc3RQcmlvcml0eShwcmlv
cml0eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyKSk7CisgICAgICAgICAgICB0aWxlLT5t
YW5hZ2VkVGV4dHVyZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5
RnJvbURpc3RhbmNlKDUxMiwgZHJhd3NUb1Jvb3RTdXJmYWNlKSk7CiAgICAgICAgIGVsc2UgaWYg
KCF2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0aWxlLT5tYW5hZ2VkVGV4dHVy
ZSgpLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbURpc3RhbmNl
KHZpc2libGVSZWN0LCB0aWxlUmVjdCkpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5j
ZSh2aXNpYmxlUmVjdCwgdGlsZVJlY3QsIGRyYXdzVG9Sb290U3VyZmFjZSkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCBlM2NiNzNmYWJkY2NkYmExZjY1MzE3
MTM3M2RlMmFiZTVmYjljYWE1Li5jZGU1NTJjMDllMjllMjI2ZDA0ZDVmZjFkYzllMjY4OTA5YzVh
ZjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtODIsOCArODIsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgLy8gUmVzZXQgc3RhdGUgb24gdGlsZXMgdGhhdCB3aWxsIGJlIHVzZWQgZm9y
IHVwZGF0aW5nIHRoZSBsYXllci4KICAgICB2b2lkIHJlc2V0VXBkYXRlU3RhdGUoKTsKIAotICAg
IHZvaWQgc2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0
b3ImLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KTsKLQogICAgIC8vIFByZXBhcmUg
ZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggbGF5ZXJS
ZWN0LgogICAgIHZvaWQgdXBkYXRlTGF5ZXJSZWN0KENDVGV4dHVyZVVwZGF0ZXImLCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciopOwogCkBAIC0xMDks
NiArMTA3LDggQEAgcHJpdmF0ZToKICAgICBib29sIHRpbGVPbmx5TmVlZHNQYXJ0aWFsVXBkYXRl
KFVwZGF0YWJsZVRpbGUqKTsKICAgICBib29sIHRpbGVOZWVkc0J1ZmZlcmVkVXBkYXRlKFVwZGF0
YWJsZVRpbGUqKTsKIAorICAgIHZvaWQgc2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3Qg
Q0NQcmlvcml0eUNhbGN1bGF0b3ImLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KTsK
KwogICAgIHZvaWQgdXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50
IHJpZ2h0LCBpbnQgYm90dG9tLCBDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgQ0NPY2NsdXNpb25U
cmFja2VyKik7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggYTJmOGJiY2JhOTY1NzY5YjBhM2Ey
MmNmMzI1YmQ4MGFmZTFjOGE5Yy4uZjE3YTg1MDk2YjIyODI1NGQ4MDAxOTJiOWE0ZDc0OWRiMTQ2
NzczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xNTIsNyArMTUyLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKICAgICAv
LyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBwYXJ0aWFsIHVwZGF0ZSBjYXBhYmlsaXR5Lgog
ICAgIG1fc2V0dGluZ3MubWF4UGFydGlhbFRleHR1cmVVcGRhdGVzID0gbWluKG1fc2V0dGluZ3Mu
bWF4UGFydGlhbFRleHR1cmVVcGRhdGVzLCBtX3Byb3h5LT5tYXhQYXJ0aWFsVGV4dHVyZVVwZGF0
ZXMoKSk7CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSgwLCAwLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDAsIG1fcHJveHktPmxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBtX2xheWVyUmVuZGVyZXJJ
bml0aWFsaXplZCA9IHRydWU7CiAKQEAgLTQ0MywxMCArNDQzLDEwIEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkKIH0KIAogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNp
emVfdCBjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlTGF5ZXJzKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIHNpemVfdCBtZW1vcnlBbGxvY2F0
aW9uTGltaXRCeXRlcykKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQp
OwotICAgIEFTU0VSVChjb250ZW50c01lbW9yeUxpbWl0Qnl0ZXMpOworICAgIEFTU0VSVChtZW1v
cnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CiAKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAg
ICByZXR1cm47CkBAIC00NTQsNyArNDU0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0
ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyLCBzaXplX3QgY29udGVudHNNZW0KICAg
ICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKGNv
bnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKIAogICAg
IHVwZGF0ZUxheWVycyhyb290TGF5ZXIoKSwgdXBkYXRlcik7CiB9CkBAIC01MjUsNyArNTI1LDI5
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpwcmlvcml0aXplVGV4dHVyZXMoY29uc3QgTGF5ZXJM
aXN0JiB1cGRhdGVMaXN0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBzaXplX3QgcmVhZGJhY2tCeXRl
cyA9IDA7CisgICAgc2l6ZV90IG1heEJhY2tncm91bmRUZXh0dXJlQnl0ZXMgPSAwOworICAgIHNp
emVfdCBjb250ZW50c1RleHR1cmVCeXRlcyA9IDA7CisKKyAgICAvLyBTdGFydCBpdGVyYXRpb24g
YXQgMSB0byBza2lwIHRoZSByb290IHN1cmZhY2UgYXMgaXQgZG9lcyBub3QgaGF2ZSBhIHRleHR1
cmUgY29zdC4KKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHVwZGF0ZUxpc3Quc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gdXBkYXRl
TGlzdFtpXS5nZXQoKTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICAgICAgc2l6
ZV90IGJ5dGVzID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKHJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCkuc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgICAg
IGNvbnRlbnRzVGV4dHVyZUJ5dGVzICs9IGJ5dGVzOworCisgICAgICAgIGlmIChyZW5kZXJTdXJm
YWNlLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmIChieXRlcyA+IG1heEJhY2tncm91bmRUZXh0dXJlQnl0ZXMpCisgICAg
ICAgICAgICBtYXhCYWNrZ3JvdW5kVGV4dHVyZUJ5dGVzID0gYnl0ZXM7CisgICAgICAgIGlmICgh
cmVhZGJhY2tCeXRlcykKKyAgICAgICAgICAgIHJlYWRiYWNrQnl0ZXMgPSBUZXh0dXJlTWFuYWdl
cjo6bWVtb3J5VXNlQnl0ZXMobV9kZXZpY2VWaWV3cG9ydFNpemUsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKTsKKyAgICB9CisgICAgc2l6ZV90IHJlbmRlclN1cmZhY2VzQnl0ZXMgPSByZWFkYmFj
a0J5dGVzICsgbWF4QmFja2dyb3VuZFRleHR1cmVCeXRlcyArIGNvbnRlbnRzVGV4dHVyZUJ5dGVz
OworCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocmVu
ZGVyU3VyZmFjZXNCeXRlcyk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNTc4LDYgKzYwMCw4IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIubGVhdmVMYXll
cihpdCk7CiAgICAgfQogCisgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5k
aWRVc2VDb250ZW50c1RleHR1cmVNZW1vcnlCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIt
Pm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CisgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJh
d01ldHJpY3MoKS5kaWRVc2VSZW5kZXJTdXJmYWNlVGV4dHVyZU1lbW9yeUJ5dGVzKG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRlcygpKTsKICAgICBv
Y2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcAppbmRleCBjMGYwYmQ3N2QzM2U1
YWYyYjg3NzQ4MzU1NDBlNjQzMWUwZjQ2MDZmLi5jNWI2ZjNhZTc3ZDU1ZDMyYjk2YzMwYmJmZDU2
NDQ1NTA1ODc3ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwCkBAIC00
Nyw2ICs0Nyw4IEBAIENDT3ZlcmRyYXdNZXRyaWNzOjpDQ092ZXJkcmF3TWV0cmljcyhib29sIHJl
Y29yZE1ldHJpY3NGb3JGcmFtZSkKICAgICAsIG1fcGl4ZWxzVXBsb2FkZWRPcGFxdWUoMCkKICAg
ICAsIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCgwKQogICAgICwgbV90aWxlc0N1bGxlZEZv
clVwbG9hZCgwKQorICAgICwgbV9jb250ZW50c1RleHR1cmVVc2VCeXRlcygwKQorICAgICwgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzKDApCiAgICAgLCBtX3BpeGVsc0RyYXduT3BhcXVl
KDApCiAgICAgLCBtX3BpeGVsc0RyYXduVHJhbnNsdWNlbnQoMCkKICAgICAsIG1fcGl4ZWxzQ3Vs
bGVkRm9yRHJhd2luZygwKQpAQCAtMTA1LDYgKzEwNywyMiBAQCB2b2lkIENDT3ZlcmRyYXdNZXRy
aWNzOjpkaWRVcGxvYWQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRv
VGFyZwogICAgIG1fcGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCArPSB1cGxvYWRBcmVhIC0gdXBs
b2FkT3BhcXVlQXJlYTsKIH0KIAordm9pZCBDQ092ZXJkcmF3TWV0cmljczo6ZGlkVXNlQ29udGVu
dHNUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKQorewor
ICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMgKz0gY29udGVudHNUZXh0dXJlVXNlQnl0ZXM7Cit9
CisKK3ZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVt
b3J5Qnl0ZXMoc2l6ZV90IHJlbmRlclN1cmZhY2VVc2VCeXRlcykKK3sKKyAgICBpZiAoIW1fcmVj
b3JkTWV0cmljc0ZvckZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlVXNlQnl0ZXMgKz0gcmVuZGVyU3VyZmFjZVVzZUJ5dGVzOworfQorCiB2b2lkIEND
T3ZlcmRyYXdNZXRyaWNzOjpkaWRDdWxsRm9yRHJhd2luZyhjb25zdCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQsIGNvbnN0IEludFJlY3QmIGJlZm9yZUN1bGxSZWN0
LCBjb25zdCBJbnRSZWN0JiBhZnRlckN1bGxSZWN0KQogewogICAgIGlmICghbV9yZWNvcmRNZXRy
aWNzRm9yRnJhbWUpCkBAIC0xNDcsNiArMTY1LDggQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmljczo6
cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25zdCBMYXkK
ICAgICBmbG9hdCBub3JtYWxpemF0aW9uID0gMTAwMC5mIC8gKGxheWVyVHJlZUhvc3QtPmRldmlj
ZVZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsYXllclRyZWVIb3N0LT5kZXZpY2VWaWV3cG9ydFNp
emUoKS5oZWlnaHQoKSk7CiAgICAgLy8gVGhpcyBnaXZlcyBhcHByb3hpbWF0ZWx5IDEwMHggdGhl
IHBlcmNlbnRhZ2Ugb2YgdGlsZXMgdG8gZmlsbCB0aGUgdmlld3BvcnQgb25jZSwgaWYgYWxsIHRp
bGVzIHdlcmUgMjU2eDI1Ni4KICAgICBmbG9hdCB0aWxlTm9ybWFsaXphdGlvbiA9IDEwMDAwLmYg
LyAobGF5ZXJUcmVlSG9zdC0+ZGV2aWNlVmlld3BvcnRTaXplKCkud2lkdGgoKSAvIDI1Ni5mICog
bGF5ZXJUcmVlSG9zdC0+ZGV2aWNlVmlld3BvcnRTaXplKCkuaGVpZ2h0KCkgLyAyNTYuZik7Cisg
ICAgLy8gVGhpcyBnaXZlcyBhcHByb3hpbWF0ZWx5IDEweCB0aGUgcGVyY2VudGFnZSBvZiBieXRl
cyB0byBmaWxsIHRoZSB2aWV3cG9ydCBvbmNlLCBhc3N1bWluZyA0IGJ5dGVzIHBlciBwaXhlbC4K
KyAgICBmbG9hdCBieXRlTm9ybWFsaXphdGlvbiA9IG5vcm1hbGl6YXRpb24gLyA0OwogCiAgICAg
c3dpdGNoIChtZXRyaWNzVHlwZSkgewogICAgIGNhc2UgRHJhd2luZ1RvU2NyZWVuOgpAQCAtMTY0
LDYgKzE4NCwxMCBAQCB2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpyZWNvcmRNZXRyaWNzSW50ZXJu
YWwoTWV0cmljc1R5cGUgbWV0cmljc1R5cGUsIGNvbnN0IExheQogICAgICAgICBXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnBpeGVs
Q291bnRPcGFxdWVfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pihub3JtYWxpemF0aW9uICogbV9w
aXhlbHNVcGxvYWRlZE9wYXF1ZSksIDEwMCwgMTAwMDAwMCwgNTApOwogICAgICAgICBXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnBp
eGVsQ291bnRUcmFuc2x1Y2VudF9VcGxvYWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG5vcm1hbGl6YXRp
b24gKiBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQpLCAxMDAsIDEwMDAwMDAsIDUwKTsKICAg
ICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMo
IlJlbmRlcmVyNC50aWxlQ291bnRDdWxsZWRfVXBsb2FkIiwgc3RhdGljX2Nhc3Q8aW50Pih0aWxl
Tm9ybWFsaXphdGlvbiAqIG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQpLCAxMDAsIDEwMDAwMDAwLCA1
MCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+aGlzdG9ncmFtQ3VzdG9t
Q291bnRzKCJSZW5kZXJlcjQucmVuZGVyU3VyZmFjZVRleHR1cmVCeXRlc19WaWV3cG9ydFNjYWxl
ZCIsIHN0YXRpY19jYXN0PGludD4oYnl0ZU5vcm1hbGl6YXRpb24gKiBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlVXNlQnl0ZXMpLCAxMCwgMTAwMDAwMCwgNTApOworICAgICAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LnJlbmRlclN1
cmZhY2VUZXh0dXJlQnl0ZXNfVW5zY2FsZWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVVc2VCeXRlcyAvIDEwMDApLCAxMDAwLCAxMDAwMDAwMDAsIDUwKTsKKyAgICAg
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIlJl
bmRlcmVyNC5jb250ZW50c1RleHR1cmVCeXRlc19WaWV3cG9ydFNjYWxlZCIsIHN0YXRpY19jYXN0
PGludD4oYnl0ZU5vcm1hbGl6YXRpb24gKiBtX2NvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKSwgMTAs
IDEwMDAwMDAsIDUwKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5oaXN0
b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5jb250ZW50c1RleHR1cmVCeXRlc19VbnNjYWxl
ZCIsIHN0YXRpY19jYXN0PGludD4obV9jb250ZW50c1RleHR1cmVVc2VCeXRlcyAvIDEwMDApLCAx
MDAwLCAxMDAwMDAwMDAsIDUwKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBUUkFDRV9DT1VO
VEVSX0lEMSgiY2MiLCAiVXBsb2FkVGlsZXNDdWxsZWQiLCBsYXllclRyZWVIb3N0LCBtX3RpbGVz
Q3VsbGVkRm9yVXBsb2FkKTsKQEAgLTE3Myw2ICsxOTcsMTAgQEAgdm9pZCBDQ092ZXJkcmF3TWV0
cmljczo6cmVjb3JkTWV0cmljc0ludGVybmFsKE1ldHJpY3NUeXBlIG1ldHJpY3NUeXBlLCBjb25z
dCBMYXkKICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBpbiBhIGRpZmZlcmVudCBzY29wZSB0
aGFuIHRoZSBUUkFDRV9FVkVOVDIgYWJvdmUuCiAgICAgICAgICAgICBUUkFDRV9FVkVOVDEoImNj
IiwgIkNDT3ZlcmRyYXdQYWludE1ldHJpY3MiLCAiUGl4ZWxzUGFpbnRlZCIsIG1fcGl4ZWxzUGFp
bnRlZCk7CiAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJl
IGluIGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gdGhlIFRSQUNFX0VWRU5UcyBhYm92ZS4KKyAgICAg
ICAgICAgIFRSQUNFX0VWRU5UMigiY2MiLCAiQ0NPdmVyZHJhd1BhaW50TWV0cmljcyIsICJDb250
ZW50c1RleHR1cmVCeXRlcyIsIG1fY29udGVudHNUZXh0dXJlVXNlQnl0ZXMsICJSZW5kZXJTdXJm
YWNlVGV4dHVyZUJ5dGVzIiwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJp
Y3MuaAppbmRleCA3MTVmNWUxNTFiYmFkZGExNzk3NmM3ZTM5ZmUzNzEzNzdiZGY4ZTMzLi5mMGRh
YjBlOTNjOTVlYTU1NGQ4MGE3MjQzYjJkOTg1NTkxNjk1N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3Zl
cmRyYXdNZXRyaWNzLmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEN1
bGxUaWxlRm9yVXBsb2FkKCk7CiAgICAgLy8gUmVjb3JkcyBwaXhlbHMgdGhhdCB3ZXJlIHVwbG9h
ZGVkIHRvIHRleHR1cmUgbWVtb3J5LgogICAgIHZvaWQgZGlkVXBsb2FkKGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0
JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKKyAgICAvLyBSZWNvcmQg
Y29udGVudHMgdGV4dHVyZShzKSBiZWhpbmQgcHJlc2VudCB1c2luZyB0aGUgZ2l2ZW4gbnVtYmVy
IG9mIGJ5dGVzLgorICAgIHZvaWQgZGlkVXNlQ29udGVudHNUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6
ZV90IGNvbnRlbnRzVGV4dHVyZVVzZUJ5dGVzKTsKKyAgICAvLyBSZWNvcmQgUmVuZGVyU3VyZmFj
ZSB0ZXh0dXJlKHMpIGJlaW5nIHByZXNlbnQgdXNpbmcgdGhlIGdpdmVuIG51bWJlciBvZiBieXRl
cy4KKyAgICB2b2lkIGRpZFVzZVJlbmRlclN1cmZhY2VUZXh0dXJlTWVtb3J5Qnl0ZXMoc2l6ZV90
IHJlbmRlclN1cmZhY2VVc2VCeXRlcyk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2Vk
IGZvciBzYXZpbmcgbWV0cmljcyBkdXJpbmcgZHJhdy4KIApAQCAtOTMsNiArOTcsMTAgQEAgcHJp
dmF0ZToKICAgICBmbG9hdCBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQ7CiAgICAgLy8gQ291
bnQgb2YgdGlsZXMgdGhhdCB3ZXJlIGludmFsaWRhdGVkIGJ1dCBub3QgdXBsb2FkZWQuCiAgICAg
aW50IG1fdGlsZXNDdWxsZWRGb3JVcGxvYWQ7CisgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBi
eXRlcyBpbiBjb250ZW50cyB0ZXh0dXJlcy4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9jb250
ZW50c1RleHR1cmVVc2VCeXRlczsKKyAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlu
IFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVVc2VCeXRlczsKIAogICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBm
b3Igc2F2aW5nIG1ldHJpY3MgZHVyaW5nIGRyYXcuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDI1MDg1YjhkNWNlM2JkMDg4ZDQ1
NmZmMGI2ZWQ4ODY5OGVjMzdhYzIuLjVhZjUzZGYwNGJkZWI2N2UyYTBlY2MxYTM0YTllYTZiY2U5
OWYzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmNwcApAQCAtMzYsMTMgKzM2LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQpCitDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywg
aW50KQogICAgIDogbV9tYXhNZW1vcnlMaW1pdEJ5dGVzKG1heE1lbW9yeUxpbWl0Qnl0ZXMpCi0g
ICAgLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVycmVkTWVtb3J5TGltaXRCeXRl
cykKLSAgICAsIG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6
OnZpc2libGVQcmlvcml0eSgpKQotICAgICwgbV9wcmlvcml0eUN1dG9mZihDQ1ByaW9yaXR5Q2Fs
Y3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAg
ICAsIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcygwKQorICAgICwgbV9tZW1vcnlBdmFpbGFibGVC
eXRlcygwKQogewogfQogCkBAIC01NywxNyArNTUsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6On5DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoKQogICAgICAgICBkZXN0cm95QmFj
a2luZygqbV9iYWNraW5ncy5iZWdpbigpLCAwKTsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlM
aW1pdEJ5dGVzKQotewotICAgIHNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRl
cyk7Ci0KLSAgICAvLyBGSVhNRTogUHJlZmVycmVkIGxpbWl0IHNob3VsZCBnbyBhd2F5LiBXZSBj
YW4gcmVtb3ZlIGl0IGFzIHNvb24KLSAgICAvLyAgICAgICAgYXMgd2Ugbm8gbG9uZ2VyIHVzZSB0
aGUgJ3JlbWFpbmRlcicgb2YgdGhpcyBtYW5hZ2VyIGZvcgotICAgIC8vICAgICAgICBhbnl0aGlu
Zy4KLSAgICBzZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMgLyA0
ICogMyk7Ci19Ci0KLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXpl
VGV4dHVyZXMoKQordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVU
ZXh0dXJlcyhzaXplX3QgcmVuZGVyU3VyZmFjZXNNZW1vcnlCeXRlcykKIHsKICAgICBUUkFDRV9F
VkVOVDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1
cmVzIik7CiAKQEAgLTg5LDIxICs3NywzMiBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAgICAgc29ydGVkVGV4dHVyZXMuYXBwZW5k
KCppdCk7CiAgICAgc3RkOjpzb3J0KHNvcnRlZFRleHR1cmVzLmJlZ2luKCksIHNvcnRlZFRleHR1
cmVzLmVuZCgpLCBjb21wYXJlVGV4dHVyZXMpOwogCisgICAgbV9tZW1vcnlBdmFpbGFibGVCeXRl
cyA9IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKICAgICBtX3ByaW9yaXR5Q3V0b2ZmID0gQ0NQcmlv
cml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7CisgICAgYm9vbCByZXNlcnZlZFJlbmRl
clN1cmZhY2VzID0gZmFsc2U7CiAgICAgc2l6ZV90IG1lbW9yeUJ5dGVzID0gMDsKICAgICBmb3Ig
KFRleHR1cmVWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkVGV4dHVyZXMuYmVnaW4oKTsgaXQg
IT0gc29ydGVkVGV4dHVyZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5yZXF1
ZXN0UHJpb3JpdHkoKSA9PSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzaXplX3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1v
cnlCeXRlcyArICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMoKTsKLSAgICAgICAgaWYgKG5ld01lbW9y
eUJ5dGVzID4gbWF4TWVtb3J5TGltaXRCeXRlcygpKSB7Ci0gICAgICAgICAgICBtX3ByaW9yaXR5
Q3V0b2ZmID0gKCppdCktPnJlcXVlc3RQcmlvcml0eSgpOwotICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBtYWtlIHBsYWNlaG9sZGVyIG9iamVjdHMgc2ltaWxh
ciB0byB0ZXh0dXJlcyB0byByZXByZXNlbnQgdGhlIHJlbmRlciBzdXJmYWNlIG1lbW9yeSByZXF1
ZXN0LgorICAgICAgICBpZiAoIXJlc2VydmVkUmVuZGVyU3VyZmFjZXMgJiYgQ0NQcmlvcml0eUNh
bGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcigoKml0KS0+cmVxdWVzdFByaW9yaXR5KCksIENDUHJp
b3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJpb3JpdHkoKSkpIHsKKyAgICAgICAgICAg
IHNpemVfdCBuZXdNZW1vcnlCeXRlcyA9IG1lbW9yeUJ5dGVzICsgcmVuZGVyU3VyZmFjZXNNZW1v
cnlCeXRlczsKKyAgICAgICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IG1fbWVtb3J5QXZhaWxh
YmxlQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBtX3ByaW9yaXR5Q3V0b2ZmID0gKCppdCktPnJl
cXVlc3RQcmlvcml0eSgpOworICAgICAgICAgICAgICAgIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMg
PSBtZW1vcnlCeXRlczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLT0gcmVuZGVyU3VyZmFjZXNNZW1vcnlC
eXRlczsKKyAgICAgICAgICAgIHJlc2VydmVkUmVuZGVyU3VyZmFjZXMgPSB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0
ZXMoKQotICAgICAgICAgICAgICAgICAgICAmJiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3Jp
dHlJc0xvd2VyKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSwgbWF4TWVtb3J5UHJpb3JpdHlDdXRv
ZmYoKSkpIHsKKworICAgICAgICBzaXplX3QgbmV3TWVtb3J5Qnl0ZXMgPSBtZW1vcnlCeXRlcyAr
ICgqaXQpLT5tZW1vcnlTaXplQnl0ZXMoKTsKKyAgICAgICAgaWYgKG5ld01lbW9yeUJ5dGVzID4g
bV9tZW1vcnlBdmFpbGFibGVCeXRlcykgewogICAgICAgICAgICAgbV9wcmlvcml0eUN1dG9mZiA9
ICgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisKICAgICAgICAgbWVtb3J5Qnl0ZXMgPSBuZXdNZW1vcnlCeXRlczsKICAgICB9CiAKQEAgLTEx
Nyw3ICsxMTYsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6
ZVRleHR1cmVzKCkKICAgICAgICAgaWYgKGlzQWJvdmVQcmlvcml0eUN1dG9mZikKICAgICAgICAg
ICAgIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyArPSAoKml0KS0+bWVtb3J5U2l6ZUJ5dGVzKCk7
CiAgICAgfQotICAgIEFTU0VSVChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPD0gbWF4TWVtb3J5
TGltaXRCeXRlcygpKTsKKyAgICBBU1NFUlQobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzIDw9IG1f
bWVtb3J5QXZhaWxhYmxlQnl0ZXMpOwogCiAgICAgLy8gUHV0IGJhY2tpbmdzIGluIGV2aWN0aW9u
L3JlY3ljbGluZyBvcmRlci4KICAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9i
YWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KQpAQCAtMTU1LDgg
KzE1NCwxMSBAQCBib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUo
Q0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiAgICAgaWYgKHRleHR1cmUtPmlzQWJvdmVQ
cmlvcml0eUN1dG9mZigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIGlmIChDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKHRleHR1cmUtPnJlcXVlc3RQcmlvcml0eSgp
LCBtX3ByaW9yaXR5Q3V0b2ZmKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgc2l6ZV90
IG5ld01lbW9yeUJ5dGVzID0gbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzICsgdGV4dHVyZS0+bWVt
b3J5U2l6ZUJ5dGVzKCk7Ci0gICAgaWYgKG5ld01lbW9yeUJ5dGVzID4gbV9tYXhNZW1vcnlMaW1p
dEJ5dGVzKQorICAgIGlmIChuZXdNZW1vcnlCeXRlcyA+IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyA9
IG5ld01lbW9yeUJ5dGVzOwpAQCAtMTg5LDggKzE5MSw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVk
VGV4CiAKICAgICAvLyBPdGhlcndpc2UgcmVkdWNlIG1lbW9yeSBhbmQganVzdCBhbGxvY2F0ZSBh
IG5ldyBiYWNraW5nIHRleHVyZXMuCiAgICAgaWYgKCFiYWNraW5nKSB7Ci0gICAgICAgIHNpemVf
dCBsaW1pdCA9IHN0ZDo6bWF4KG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcywgbV9wcmVmZXJyZWRN
ZW1vcnlMaW1pdEJ5dGVzKSAtIHRleHR1cmUtPm1lbW9yeVNpemVCeXRlcygpOwotICAgICAgICBy
ZWR1Y2VNZW1vcnkobGltaXQsIGFsbG9jYXRvcik7CisgICAgICAgIHJlZHVjZU1lbW9yeShtX21l
bW9yeUF2YWlsYWJsZUJ5dGVzIC0gdGV4dHVyZS0+bWVtb3J5U2l6ZUJ5dGVzKCksIGFsbG9jYXRv
cik7CiAgICAgICAgIGJhY2tpbmcgPSBjcmVhdGVCYWNraW5nKHRleHR1cmUtPnNpemUoKSwgdGV4
dHVyZS0+Zm9ybWF0KCksIGFsbG9jYXRvcik7CiAgICAgfQogCkBAIC0yMTgsOCArMjE5LDcgQEAg
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGlt
aXRCeXRlcywgVGV4dHVyZUFsbG9jYXQKIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OnJlZHVjZU1lbW9yeShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7Ci0gICAgc2l6
ZV90IGxpbWl0ID0gc3RkOjptYXgobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzLCBtX3ByZWZlcnJl
ZE1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIHJlZHVjZU1lbW9yeShsaW1pdCwgYWxsb2NhdG9yKTsK
KyAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcywgYWxsb2NhdG9yKTsKICAg
ICBBU1NFUlQobWVtb3J5VXNlQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogCiAg
ICAgLy8gV2UgY3VycmVudGx5IGNvbGxlY3QgYmFja2luZ3MgZnJvbSBkZWxldGVkIHRleHR1cmVz
IGZvciBsYXRlciByZWN5Y2xpbmcuCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgd2FzdGVkTWVtb3J5ICs9ICgqaXQpLT5t
ZW1vcnlTaXplQnl0ZXMoKTsKICAgICB9Ci0gICAgc2l6ZV90IHRlblBlcmNlbnRPZk1lbW9yeSA9
IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSAvIDEwOworICAgIHNpemVfdCB0ZW5QZXJjZW50T2ZNZW1v
cnkgPSBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzIC8gMTA7CiAgICAgaWYgKHdhc3RlZE1lbW9yeSA8
PSB0ZW5QZXJjZW50T2ZNZW1vcnkpCiAgICAgICAgIHJldHVybjsKICAgICByZWR1Y2VNZW1vcnko
bWVtb3J5VXNlQnl0ZXMoKSAtICh3YXN0ZWRNZW1vcnkgLSB0ZW5QZXJjZW50T2ZNZW1vcnkpLCBh
bGxvY2F0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIuaAppbmRleCBmODcwZTc3ZTFhYmIwNDBkYTViY2I4NDJmNDc2ZTQxNTJiMTNkOWEzLi4zYzcw
YjJiMmEwMjMwOWNhMTY0ZDZkY2E5MWNkOTBiYzQyYWZlNmVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaApAQCAtNDAsOSArNDAsOSBAQCBjbGFz
cyBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjsKIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHByZWZlcnJl
ZE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5
TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIobWF4TWVtb3J5TGltaXRCeXRl
cywgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIobWF4TWVtb3J5
TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9CiAgICAgUGFzc093blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4gY3JlYXRlVGV4dHVyZShJbnRTaXplIHNpemUsIEdDM0RlbnVtIGZv
cm1hdCkKICAgICB7CkBAIC01NiwyMSArNTYsMTIgQEAgcHVibGljOgogICAgIC8vIG1lbW9yeVVz
ZUJ5dGVzKCkgPD0gbWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpIHNob3VsZCBhbHdheXMgYmUgdHJ1
ZS4KICAgICBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVz
ZUJ5dGVzOyB9CiAgICAgc2l6ZV90IG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXM7IH0KKyAgICBzaXplX3QgbWVtb3J5Rm9yUmVu
ZGVyU3VyZmFjZXNCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWVtb3J5TGltaXRCeXRlcyAt
IG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXM7IH0KIAotICAgIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlv
bkxpbWl0Qnl0ZXMoc2l6ZV90KTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ2V0IHJpZCBv
ZiB0aGUgcHJlZmVycmVkL21heCBsaW1pdHMgYW5kIGxldCBHcHVNZW1vcnlNYW5hZ2VyCi0gICAg
Ly8ganVzdCBhZGp1c3QgdGhlIG1heCBsaW1pdCBiYXNlZCBvbiBoaW50cyB3ZSBjYW4gcHJvdmlk
ZSBmcm9tIHRoaXMgY2xhc3MuCi0gICAgLy8gSWRlYWxseSBpdCB3aWxsIGJlIGFkanVzdGVkIHJl
bGF0aXZlbHkgcmFyZWx5IHN1Y2ggdGhhdCByZWN5Y2xpbmcgaXMgbWF4aW1pemVkLgogICAgIHZv
aWQgc2V0TWF4TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpIHsgbV9tYXhNZW1vcnlMaW1p
dEJ5dGVzID0gYnl0ZXM7IH0KICAgICBzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4TWVtb3J5TGltaXRCeXRlczsgfQotICAgIHZvaWQgc2V0UHJlZmVycmVk
TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpIHsgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5
dGVzID0gYnl0ZXM7IH0KLSAgICBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlczsgfQotCi0gICAgdm9pZCBz
ZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihzaXplX3QgY3V0b2ZmKSB7IG1fbWF4TWVtb3J5UHJp
b3JpdHlDdXRvZmYgPSBjdXRvZmY7IH0KLSAgICB1bnNpZ25lZCBtYXhNZW1vcnlQcmlvcml0eUN1
dG9mZigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmY7IH0KIAotICAg
IHZvaWQgcHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdm9pZCBwcmlvcml0aXplVGV4dHVyZXMo
c2l6ZV90IHJlbmRlclN1cmZhY2VzTWVtb3J5Qnl0ZXMpOwogICAgIHZvaWQgY2xlYXJQcmlvcml0
aWVzKCk7CiAKICAgICBib29sIHJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKik7CkBA
IC0xMDcsNyArOTgsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gQ0NQcmlvcml0eUNhbGN1
bGF0b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEsIHByaW9yaXR5Qik7CiAgICAgfQogCi0g
ICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVz
LCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsK
KyAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0
ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICB2b2lkIHJlZHVjZU1lbW9yeShzaXplX3Qg
bGltaXQsIFRleHR1cmVBbGxvY2F0b3IqKTsKIApAQCAtMTE4LDExICsxMDksMTAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5n
KiwgVGV4dHVyZUFsbG9jYXRvciopOwogCiAgICAgc2l6ZV90IG1fbWF4TWVtb3J5TGltaXRCeXRl
czsKLSAgICBzaXplX3QgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzOwotICAgIHVuc2lnbmVk
IG1fbWF4TWVtb3J5UHJpb3JpdHlDdXRvZmY7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0eUN1dG9m
ZjsKICAgICBzaXplX3QgbV9tZW1vcnlVc2VCeXRlczsKICAgICBzaXplX3QgbV9tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzOworICAgIHNpemVfdCBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzOwogCiAgICAg
dHlwZWRlZiBIYXNoU2V0PENDUHJpb3JpdGl6ZWRUZXh0dXJlKj4gVGV4dHVyZVNldDsKICAgICB0
eXBlZGVmIExpc3RIYXNoU2V0PENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKj4gQmFja2lu
Z1NldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcAppbmRleCA4NTAx
MGExMDcwYjgxNWMyM2ZkOGY1MGQzMDZiMzYxMDZmZTA2YjRlLi45MDA4NDA0M2Q5NzE5ODQwYTll
Y2IyMzQ1OGNlNzVmYjMwMTI5NjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1
bGF0b3IuY3BwCkBAIC0zMywxNSArMzMsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGljCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVp
UHJpb3JpdHkoKQoraW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KGJvb2wgZHJh
d3NUb1Jvb3RTdXJmYWNlKQogewotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gZHJhd3NUb1Jv
b3RTdXJmYWNlID8gLTEgOiAyOwogfQogCiAvLyBzdGF0aWMKLWludCBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6dmlzaWJsZVByaW9yaXR5KCkKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJs
ZVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKQogewotICAgIHJldHVybiAwOworICAg
IHJldHVybiBkcmF3c1RvUm9vdFN1cmZhY2UgPyAwIDogMzsKK30KKworLy8gc3RhdGljCitpbnQg
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZhY2VQcmlvcml0eSgpCit7CisgICAgcmV0
dXJuIDE7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNjUsMTkgKzcxLDI0IEBAIHVuc2lnbmVkIG1hbmhh
dHRhbkRpc3RhbmNlKGNvbnN0IEludFJlY3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCiB9CiB9CiAK
LWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1cmVSZWN0KSBjb25zdAoraW50
IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0
JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jv
b3RTdXJmYWNlKSBjb25zdAogewotICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoKSArIG1hbmhh
dHRhbkRpc3RhbmNlKHZpc2libGVSZWN0LCB0ZXh0dXJlUmVjdCk7CisgICAgdW5zaWduZWQgZGlz
dGFuY2UgPSBtYW5oYXR0YW5EaXN0YW5jZSh2aXNpYmxlUmVjdCwgdGV4dHVyZVJlY3QpOworICAg
IGlmICghZGlzdGFuY2UpCisgICAgICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jv
b3RTdXJmYWNlKTsKKyAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGZhbHNlKSArIGRpc3RhbmNl
OwogfQogCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKHVu
c2lnbmVkIHBpeGVscykgY29uc3QKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlG
cm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KCkgKyBwaXhlbHM7CisgICAgaWYgKCFw
aXhlbHMpCisgICAgICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNl
KTsKKyAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGZhbHNlKSArIHBpeGVsczsKIH0KIAotaW50
IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlzaWJs
ZSkgY29uc3QKK2ludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0
eShib29sIHZpc2libGUsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAogewotICAgIHJl
dHVybiB2aXNpYmxlID8gdmlzaWJsZVByaW9yaXR5KCkgOiBsb3dlc3RQcmlvcml0eSgpOworICAg
IHJldHVybiB2aXNpYmxlID8gdmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSkgOiBs
b3dlc3RQcmlvcml0eSgpOwogfQogCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXR5Q2FsY3VsYXRvci5oCmluZGV4IGY0ZmVhZmU5Yjg0Y2YzMzM0ODc0NjcxZjIxNzAxNzNmNTUx
YTI1MDIuLjY4YTIyNWJlMGI5ZWYzMjY1ZjBmODk4YTYyZmRjNThkY2NlZmI3YTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3Jp
dHlDYWxjdWxhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuaApAQCAtMzQsMTIgKzM0LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQcmlvcml0eUNhbGN1bGF0b3IgewogcHVibGljOgot
ICAgIHN0YXRpYyBpbnQgdWlQcmlvcml0eSgpOwotICAgIHN0YXRpYyBpbnQgdmlzaWJsZVByaW9y
aXR5KCk7CisgICAgc3RhdGljIGludCB1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNl
KTsKKyAgICBzdGF0aWMgaW50IHZpc2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFj
ZSk7CisgICAgc3RhdGljIGludCByZW5kZXJTdXJmYWNlUHJpb3JpdHkoKTsKICAgICBzdGF0aWMg
aW50IGxpbmdlcmluZ1ByaW9yaXR5KGludCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICBpbnQgcHJp
b3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRleHR1cmVSZWN0KSBjb25zdDsKLSAgICBpbnQgcHJpb3JpdHlGcm9tRGlzdGFuY2UodW5z
aWduZWQgcGl4ZWxzKSBjb25zdDsKLSAgICBpbnQgcHJpb3JpdHlGcm9tVmlzaWJpbGl0eShib29s
IHZpc2libGUpIGNvbnN0OworICAgIGludCBwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NU
b1Jvb3RTdXJmYWNlKSBjb25zdDsKKyAgICBpbnQgcHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWdu
ZWQgcGl4ZWxzLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7CisgICAgaW50IHByaW9y
aXR5RnJvbVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkg
Y29uc3Q7CiAKICAgICBzdGF0aWMgaW5saW5lIGludCBoaWdoZXN0UHJpb3JpdHkoKSB7IHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOyB9CiAgICAgc3RhdGljIGlubGluZSBp
bnQgbG93ZXN0UHJpb3JpdHkoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKaW5kZXggNTQxZTUxNTk4ZmJmZTk5MmNjODFmYWVmN2Q2
ZTgxMDM2Mjg1ZTVjYS4uNDY4YWYzNmJiYTUwZTNlZTgxNjVmM2FjYWM3NGUxZTQ5ZjZmOTU1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LmNwcApAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV90ZXh0dXJlU2l6ZSwgbV90ZXh0
dXJlRm9ybWF0KSAqIHRleHR1cmVDb3VudDsKICAgICB9CiAKLSAgICBQYXNzT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gY3JlYXRlTWFuYWdlcihzaXplX3QgbWF4VGV4dHVyZXMs
IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcykKKyAgICBQYXNzT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gY3JlYXRlTWFuYWdlcihzaXplX3QgbWF4VGV4dHVyZXMpCiAgICAgewot
ICAgICAgICByZXR1cm4gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVy
ZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRl
eHR1cmVzKSwgMTAyNCk7CisgICAgICAgIHJldHVybiBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCAxMDI0KTsKICAgICB9
CiAKICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+
JiB0ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQpAQCAtODIsOTggKzgyLDEwIEBAIHByb3RlY3Rl
ZDoKICAgICBjb25zdCBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CiB9OwogCi1URVNUX0YoQ0NQ
cmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUluUHJlZmVycmVkTGltaXQpCi17
Ci0gICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJl
ZmVycmVkVGV4dHVyZXMgPSA0OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVk
VGV4dHVyZXMpOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbcHJl
ZmVycmVkVGV4dHVyZXNdOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVmZXJyZWRU
ZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVh
dGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7Ci0KLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBMb3dlc3QgcHJpb3JpdHkg
dGV4dHVyZXMgc2hvdWxkbid0IGJlIGF2YWlsYWJsZS4KLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbMV0sIGZhbHNlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRl
VGV4dHVyZSh0ZXh0dXJlc1syXSwgZmFsc2UpKTsKLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVU
ZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcmVmZXJyZWRUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVz
dFByaW9yaXR5KDEwMCk7Ci0KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7Ci0KLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNl
KSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzFdLCBmYWxzZSkp
OwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1syXSwgZmFsc2UpKTsK
LSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7Ci0K
LSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwgdGV4
dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNUX0xFKHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJv
dmVDdXRvZmZCeXRlcygpKTsKLQotICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShh
bGxvY2F0b3IoKSk7Ci19Ci0KLVRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVl
c3RUZXh0dXJlRXhjZWVkaW5nUHJlZmVycmVkTGltaXQpCi17Ci0gICAgY29uc3Qgc2l6ZV90IG1h
eFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0Owot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Y3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOwotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tp
XSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVy
ZUZvcm1hdCk7Ci0KLSAgICAvLyBTZXQgZGVjcmVhc2luZyBwcmlvcml0aWVzCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXS0+
c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKLQotICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxh
YmxlLgotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2Up
KTsKLSAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7
Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2UpKTsK
LSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzddLCBmYWxzZSkpOwot
ICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUocHJlZmVycmVkVGV4dHVyZXMpLCB0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1RfTEUodGV4
dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzKCkpOwotCi0gICAgLy8gU2V0IGluY3JlYXNpbmcgcHJpb3JpdGllcwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKLSAgICAgICAgdGV4dHVy
ZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBPbmx5IHVwcGVyIGhhbGYgc2hvdWxkIGJl
IGF2YWlsYWJsZS4KLSAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBd
LCBmYWxzZSkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10s
IGZhbHNlKSk7Ci0gICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBm
YWxzZSkpOwotICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFs
c2UpKTsKLSAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVz
KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7Ci0gICAgRVhQRUNU
X0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVt
b3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKLQotICAgIC8vIE1ha2UgYWxsIHRleHR1cmVzIGltcG9y
dGFudCAoYWJvdmUgbWF4LW1lbW9yeSBwcmlvcml0eSBjdXRvZmYpCi0gICAgdGV4dHVyZU1hbmFn
ZXItPnNldE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dl
c3RQcmlvcml0eSgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
Ci0KLSAgICAvLyBBbGwgdGV4dHVyZXMgc2hvdWxkIGJlIGF2YWlsYWJsZQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkgewotICAgICAgIEVYUEVDVF9UUlVFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKLSAgICAgICBFWFBFQ1RfVFJVRSh0
ZXh0dXJlc1tpXS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwotICAgIH0KLQotICAgIEVYUEVDVF9F
USh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5
QWJvdmVDdXRvZmZCeXRlcygpKTsKLSAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9y
eVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwot
Ci0gICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKLX0KLQot
CiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGlu
Z01heExpbWl0KQogewogICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7Ci0gICAgY29u
c3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVy
ZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4dHVyZXMpOwogCiAg
ICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBkb3VibGUgb3VyIG1lbW9yeSBsaW1pdC4KICAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVzKjJdOwpAQCAt
MTgyLDI0ICs5NCwyMiBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0
VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVN
YW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CiAK
ICAgICAvLyBTZXQgZGVjcmVhc2luZyBwcmlvcml0aWVzCi0gICAgdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeVByaW9yaXR5Q3V0b2ZmKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXMqMjsgKytpKQogICAgICAg
ICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwogCiAgICAgLy8gT25s
eSBsb3dlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoMCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxz
ZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwgZmFsc2Up
KTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzhdLCBmYWxzZSkp
OwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMTVdLCBmYWxzZSkp
OwogCiAgICAgLy8gU2V0IGluY3JlYXNpbmcgcHJpb3JpdGllcwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5zZXRNYXhNZW1vcnlQcmlvcml0eUN1dG9mZihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzKjI7ICsraSkKICAg
ICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKIAogICAgIC8v
IE9ubHkgdXBwZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKDApOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0s
IGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s3XSwg
ZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbOF0sIGZh
bHNlKSk7CkBAIC0yMTQsMTIgKzEyNCw5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRl
c3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiB7CiAgICAgY29uc3Qgc2l6ZV90IG1h
eFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0Owot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Y3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOworICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFu
YWdlcihtYXhUZXh0dXJlcyk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0
dXJlc1ttYXhUZXh0dXJlc107CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5UHJp
b3JpdHlDdXRvZmYoQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCkpOwotCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICB0ZXh0
dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1f
dGV4dHVyZUZvcm1hdCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsg
KytpKQpAQCAtMjI3LDcgKzEzNCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qs
IGNoYW5nZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gOCB0ZXh0dXJl
cwogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVt
b3J5U2l6ZSg4KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICB2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB0ZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5KGFs
bG9jYXRvcigpKTsKQEAgLTIzNyw3ICsxNDQsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1
cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDUg
dGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0
dXJlc01lbW9yeVNpemUoNSkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgRVhQRUNUX0VR
KHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpLCBpIDwgNSk7CiAgICAgdGV4dHVy
ZU1hbmFnZXItPnJlZHVjZU1lbW9yeShhbGxvY2F0b3IoKSk7CkBAIC0yNDcsNyArMTU0LDcgQEAg
VEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogCiAg
ICAgLy8gU2V0IG1heCBsaW1pdCB0byA0IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDQpKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygwKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVz
OyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZh
bHNlKSwgaSA8IDQpOwogICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkoYWxsb2NhdG9y
KCkpOwpAQCAtMjU4LDIzICsxNjUsMjIgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVz
dCwgY2hhbmdlTWVtb3J5TGltaXRzKQogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9y
eShhbGxvY2F0b3IoKSk7CiB9CiAKLQogVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
dGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiB7Ci0gICAgY29uc3Qgc2l6ZV90
IG1heFRleHR1cmVzID0gODsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA0
OwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gY3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOwotICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbcHJlZmVycmVkVGV4dHVyZXNdOwot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gbW9yZVRleHR1cmVzW3ByZWZlcnJlZFRl
eHR1cmVzXTsKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA0OworICAgIGNvbnN0IHNp
emVfdCBudW1UZXh0dXJlcyA9IDQ7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRleHR1cmVzKTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW251bVRleHR1cmVzXTsKKyAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IG1vcmVUZXh0dXJlc1tudW1UZXh0dXJlc107CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRleHR1cmVzOyArK2kpIHsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyArK2kpIHsKICAgICAgICAgdGV4
dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBt
X3RleHR1cmVGb3JtYXQpOwogICAgICAgICBtb3JlVGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdl
ci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwogICAgIH0K
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsraSkKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAgIHRleHR1
cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMjAwICsgaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0ZXh0dXJlcyB3aGljaCBhcmUgY3VycmVudGx5
IGhpZ2ggcHJpb3JpdHkuCiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVz
WzBdLCBmYWxzZSkpOwpAQCAtMjg3LDkgKzE5Myw5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0ZVRleHR1cmVzKQogICAgIEVYUEVD
VF9UUlVFKHRleHR1cmVzWzJdLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CiAgICAgRVhQRUNUX1RS
VUUodGV4dHVyZXNbM10tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJlZmVycmVkVGV4dHVyZXM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAgIG1vcmVUZXh0dXJlc1tpXS0+c2V0UmVx
dWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAg
ICAgLy8gVGV4dHVyZXMgYXJlIG5vdyBiZWxvdyBjdXRvZmYuCiAgICAgRVhQRUNUX0ZBTFNFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKQEAgLTMyMSwxMiArMjI3LDkgQEAg
VEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBk
YXRlVGV4dHVyZXMpCiBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFu
YWdlclByaW9yaXRpZXNBcmVFcXVhbCkKIHsKICAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMg
PSAxNjsKLSAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4dHVyZXMgPSA4OwotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFu
YWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOworICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdlcihtYXhU
ZXh0dXJlcyk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhU
ZXh0dXJlc107CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5UHJpb3JpdHlDdXRv
ZmYoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0KICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVy
ZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsK
IApAQCAtMzM4LDcgKzI0MSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRl
eHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0
byA4IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMo
dGV4dHVyZXNNZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAog
ICAgIC8vIFRoZSB0d28gaGlnaCBwcmlvcml0eSB0ZXh0dXJlcyBzaG91bGQgYmUgYXZhaWxhYmxl
LCBvdGhlcnMgc2hvdWxkIG5vdC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkK
QEAgLTM2MiwxNCArMjY1LDE0IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRl
eHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogCiBURVNUX0YoQ0NQcmlvcml0aXplZFRl
eHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlckRlc3Ryb3llZEZpcnN0KQogewotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlTWFuYWdl
cigxLCAxKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIoMSk7CiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlPiB0ZXh0dXJlID0gdGV4dHVyZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6
ZSwgbV90ZXh0dXJlRm9ybWF0KTsKIAogICAgIC8vIFRleHR1cmUgaXMgaW5pdGlhbGx5IGludmFs
aWQsIGJ1dCBpdCB3aWxsIGJlY29tZSBhdmFpbGFibGUuCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1
cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlv
cml0eSgxMDApOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgRVhQRUNUX1RS
VUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4
dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtMzg0LDE1ICsyODcsMTUgQEAg
VEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJEZXN0cm95ZWRG
aXJzdCkKIAogVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9O
ZXdNYW5hZ2VyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyT25lID0gY3JlYXRlTWFuYWdlcigxLCAxKTsKLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlclR3byA9IGNyZWF0ZU1hbmFnZXIo
MSwgMSk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXJPbmUgPSBjcmVhdGVNYW5hZ2VyKDEpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyVHdvID0gY3JlYXRlTWFuYWdlcigxKTsKICAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmUgPSB0ZXh0dXJlTWFuYWdlck9uZS0+
Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwogCiAgICAgLy8g
VGV4dHVyZSBpcyBpbml0aWFsbHkgaW52YWxpZCwgYnV0IGl0IHdpbGwgYmVjb21lIGF2YWlsYWJs
ZS4KICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAg
ICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXJP
bmUtPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyT25lLT5wcmlvcml0
aXplVGV4dHVyZXMoMCk7CiAKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVy
ZSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1Rl
eHR1cmUoKSk7CkBAIC00MDgsNyArMzExLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQogCiAgICAgdGV4dHVyZS0+c2V0VGV4dHVy
ZU1hbmFnZXIodGV4dHVyZU1hbmFnZXJUd28uZ2V0KCkpOwogCi0gICAgdGV4dHVyZU1hbmFnZXJU
d28tPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0
aXplVGV4dHVyZXMoMCk7CiAKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVy
ZSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1Rl
eHR1cmUoKSk7CkBAIC00MTYsNCArMzE5LDExOSBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1
cmVUZXN0LCB0ZXh0dXJlTW92ZWRUb05ld01hbmFnZXIpCiAKICAgICB0ZXh0dXJlTWFuYWdlclR3
by0+Y2xlYXJBbGxNZW1vcnkoYWxsb2NhdG9yKCkpOwogfQorCitURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCByZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZU91dHNpZGVS
b290U3VyZmFjZSkKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRl
TWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAgICAvLyBIYWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFr
ZW4gYnkgc3VyZmFjZXMuCisgICAgY29uc3Qgc2l6ZV90IHJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0
ZXh0dXJlc01lbW9yeVNpemUoNCk7CisKKyAgICAvLyBDcmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBv
dXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVy
ZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJl
czsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0
dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQgZGVjcmVh
c2luZyBub24tdmlzaWJsZSBwcmlvcml0aWVzIG91dHNpZGUgcm9vdCBzdXJmYWNlLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNb
aV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKKworICAgIC8vIE9ubHkgbG93ZXIgaGFs
ZiBzaG91bGQgYmUgYXZhaWxhYmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRlcyk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzRdLCBmYWxzZSkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbN10sIGZhbHNlKSk7CisKKyAgICAvLyBTZXQgaW5jcmVhc2luZyBub24tdmlzaWJs
ZSBwcmlvcml0aWVzIG91dHNpZGUgcm9vdCBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQ
cmlvcml0eSgxMDAgLSBpKTsKKworICAgIC8vIE9ubHkgdXBwZXIgaGFsZiBzaG91bGQgYmUgYXZh
aWxhYmxlLgorICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocmVuZGVyU3Vy
ZmFjZXNCeXRlcyk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1sw
XSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNd
LCBmYWxzZSkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwg
ZmFsc2UpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZh
bHNlKSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFu
YWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNN
ZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRl
cygpKTsKKyAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworCisgICAgdGV4dHVyZU1h
bmFnZXItPmNsZWFyQWxsTWVtb3J5KGFsbG9jYXRvcigpKTsKK30KKworVEVTVF9GKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVGb3JS
ZXF1ZXN0TGF0ZSkKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAgIE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRl
TWFuYWdlcihtYXhUZXh0dXJlcyk7CisKKyAgICAvLyBIYWxmIG9mIHRoZSBtZW1vcnkgaXMgdGFr
ZW4gYnkgc3VyZmFjZXMuCisgICAgY29uc3Qgc2l6ZV90IHJlbmRlclN1cmZhY2VzQnl0ZXMgPSB0
ZXh0dXJlc01lbW9yeVNpemUoNCk7CisKKyAgICAvLyBDcmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBv
dXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVy
ZXNbbWF4VGV4dHVyZXNdOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJl
czsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVhdGVUZXh0
dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQgZXF1YWwg
cHJpb3JpdGllcy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kp
CisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKKworICAgIC8v
IFRoZSBmaXJzdCBmb3VyIHRvIGJlIHJlcXVlc3RlZCBsYXRlIHdpbGwgYmUgYXZhaWxhYmxlLgor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMocmVuZGVyU3VyZmFjZXNCeXRl
cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAg
ICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpICs9IDIpCisgICAgICAg
IEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgdHJ1ZSkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBtYXhUZXh0dXJlczsgaSArPSAyKQorICAgICAgICBFWFBF
Q1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCB0cnVlKSk7CisKKyAgICBFWFBF
Q1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVD
dXRvZmZCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0
dXJlTWFuYWdlci0+bWVtb3J5Rm9yUmVuZGVyU3VyZmFjZXNCeXRlcygpKTsKKyAgICBFWFBFQ1Rf
TEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1v
cnlBYm92ZUN1dG9mZkJ5dGVzKCkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVt
b3J5KGFsbG9jYXRvcigpKTsKK30KKworVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
d2hlblJlbmRlclN1cmZhY2VOb3RBdmFpbGFibGVUZXh0dXJlc0Fsc29Ob3RBdmFpbGFibGUpCit7
CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4VGV4
dHVyZXMpOworCisgICAgLy8gSGFsZiBvZiB0aGUgbWVtb3J5IGlzIHRha2VuIGJ5IHN1cmZhY2Vz
LgorICAgIGNvbnN0IHNpemVfdCByZW5kZXJTdXJmYWNlc0J5dGVzID0gdGV4dHVyZXNNZW1vcnlT
aXplKDQpOworCisgICAgLy8gQ3JlYXRlIHRleHR1cmVzIHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1p
dC4KKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+IHRleHR1cmVzW21heFRleHR1cmVz
XTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAg
ICAgdGV4dHVyZXNbaV0gPSB0ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVT
aXplLCBtX3RleHR1cmVGb3JtYXQpOworCisgICAgLy8gU2V0IDYgdmlzaWJsZSB0ZXh0dXJlcyBp
biB0aGUgcm9vdCBzdXJmYWNlLCBhbmQgMiBpbiBhIGNoaWxkIHN1cmZhY2UuCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCA2OyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0
UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eSh0cnVlKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDY7IGkgPCA4OyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldLT5z
ZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eShm
YWxzZSkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcyhyZW5kZXJT
dXJmYWNlc0J5dGVzKTsKKworICAgIC8vIFVuYWJsZSB0byByZXF1ZXN0TGF0ZSB0ZXh0dXJlcyBp
biB0aGUgY2hpbGQgc3VyZmFjZS4KKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRl
eHR1cmVzWzZdLCB0cnVlKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0
dXJlc1s3XSwgdHJ1ZSkpOworCisgICAgLy8gUm9vdCBzdXJmYWNlIHRleHR1cmVzIGFyZSB2YWxp
ZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDY7ICsraSkKKyAgICAgICAgRVhQRUNUX1RS
VUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSkpOworCisgICAgRVhQRUNUX0VR
KHRleHR1cmVzTWVtb3J5U2l6ZSg2KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2Zm
Qnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSgyKSwgdGV4dHVyZU1h
bmFnZXItPm1lbW9yeUZvclJlbmRlclN1cmZhY2VzQnl0ZXMoKSk7CisgICAgRVhQRUNUX0xFKHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJv
dmVDdXRvZmZCeXRlcygpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShh
bGxvY2F0b3IoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcAppbmRleCAwY2Y2
YjBhNzQ4NmM0M2QzMDc2NGNkNmFmMzVlN2E4ZDViNGEzN2ExLi41NThjYmE1NzYwYTczMjU0ZDA3
ZGY4ZjE4ZmM0N2U2ZmRhNGQzYWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAKQEAgLTEyMSw2ICsxMjEsMjUg
QEAgdm9pZCBGYWtlVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBkYXRlciYg
dXBkYXRlciwgY29uc3QgQ0NPY2NsdXNpb24KICAgICB1cGRhdGVMYXllclJlY3QodXBkYXRlciwg
dmlzaWJsZUxheWVyUmVjdCgpLCBvY2NsdXNpb24pOwogfQogCit2b2lkIEZha2VUaWxlZExheWVy
Q2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9y
JiBjYWxjdWxhdG9yKQoreworICAgIC8vIEVuc3VyZSB0aGVyZSBpcyBhbHdheXMgYSB0YXJnZXQg
cmVuZGVyIHN1cmZhY2UgYXZhaWxhYmxlLiBJZiBub25lIGhhcyBiZWVuCisgICAgLy8gc2V0ICh0
aGUgbGF5ZXIgaXMgYW4gb3JwaGFuIGZvciB0aGUgdGVzdCksIHRoZW4ganVzdCBzZXQgYSBzdXJm
YWNlIG9uIGl0c2VsZi4KKyAgICBib29sIG1pc3NpbmdUYXJnZXRSZW5kZXJTdXJmYWNlID0gIXRh
cmdldFJlbmRlclN1cmZhY2UoKTsKKworICAgIGlmIChtaXNzaW5nVGFyZ2V0UmVuZGVyU3VyZmFj
ZSkgeworICAgICAgICBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHNldFRhcmdldFJl
bmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSgpKTsKKyAgICB9CisKKyAgICBUaWxlZExheWVyQ2hy
b21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNhbGN1bGF0b3IpOworCisgICAgaWYgKG1pc3Np
bmdUYXJnZXRSZW5kZXJTdXJmYWNlKSB7CisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZSgpOwor
ICAgICAgICBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDApOworICAgIH0KK30KKwogRmFrZVRpbGVk
TGF5ZXJXaXRoU2NhbGVkQm91bmRzOjpGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMoQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcikKICAgICA6IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCmluZGV4IDAyMDBhMjM3
ZTAxY2VjMzU4MTk3ZDk5ZGQzMjRhY2ViNTQ5MDc2NjYuLjM2OWJhYzliZTkyNjE4MjNhY2Q3ZDE4
YWQ1OTJjZTMwYzczNThiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0xMTcsNyArMTE3LDYgQEAgcHVibGlj
OgogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2tpcHNEcmF3OwogICAg
IHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFpbnRlZFRpbGVzOwogICAg
IHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdDsKLSAgICB1
c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5S
ZWN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBs
YXN0TmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE5lZWRzRGlzcGxheVJl
Y3Q7IH0KQEAgLTEyNSw2ICsxMjQsOCBAQCBwdWJsaWM6CiAgICAgLy8gVXBkYXRlcyB0aGUgdmlz
aWJsZUxheWVyUmVjdCgpLgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoV2ViQ29yZTo6Q0NUZXh0
dXJlVXBkYXRlciYsIGNvbnN0IFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlciopIE9WRVJSSURF
OwogCisgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IFdlYkNvcmU6
OkNDUHJpb3JpdHlDYWxjdWxhdG9yJikgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CiAgICAgRmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIqIGZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV9mYWtlVGV4dHVyZVVw
ZGF0ZXIuZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlUmVjdCgpIHsgcmV0
dXJuIG1fdXBkYXRlUmVjdDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggMjViM2Q1ZTNkNDU2MjFjMWNm
YWJlNGE5MDZjMGQzMWU1ZTlhMDg5ZC4uYzkzMTU4YWIyZDM1MTQyMjhkY2FmZThhOTNmNjg4NTAx
MTMxMDEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05NCwxNyArOTQsMTggQEAgcHVibGljOgogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogewogICAgIENDUHJp
b3JpdHlDYWxjdWxhdG9yIHByaW9yaXR5Q2FsY3VsYXRvcjsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAg
IC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhl
biBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIw
MCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAy
MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkp
OwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3Vs
YXRvciwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAp
OwogCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKQEAgLTExNyw4ICsxMTgsOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgLy8gSW52
YWxpZGF0ZXMgYm90aCB0aWxlcy4uLgogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0
KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgLy8gLi4uLmJ1dCB0aGVuIG9ubHkgdXBkYXRlIG9uZSBv
ZiB0aGVtLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNh
bGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHBy
aW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwg
MTAwLCAxMDApLCAwKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0
KCkpOwogCkBAIC0xMzAsNyArMTMxLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hEaXJ0eVRpbGVzKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2Ns
dWRlZERpcnR5VGlsZXMpCiB7CiAgICAgQ0NQcmlvcml0eUNhbGN1bGF0b3IgcHJpb3JpdHlDYWxj
dWxhdG9yOwotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMTQyLDggKzE0Myw4IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgbGF5ZXItPnVwZGF0
ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgJm9jY2x1ZGVkKTsK
ICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTc2LDE3ICsxNzcsMTggQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogewotICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAg
ICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwog
CiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFu
ZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEw
MCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwg
MjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhw
cmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoMCk7CiAKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwg
MCwgMTAwLCAyMDApLCAwKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwpAQCAtMTk5LDcgKzIwMSw2
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAg
IHRleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMoKTsKICAgICB0ZXh0dXJlTWFuYWdlci0+
Y2xlYXJBbGxNZW1vcnkoJmFsbG9jYXRvcik7CiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1l
bW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRQcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKIAogICAgIC8vIFRoaXMgc2hvdWxk
IGRyb3AgdGhlIHRpbGVzIG9uIHRoZSBpbXBsIHRocmVhZC4KICAgICBsYXllci0+cHVzaFByb3Bl
cnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpAQCAtMjA5LDggKzIxMCw4IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShs
YXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAgICAvLyBUaGlzIHNob3VsZCByZWNyZWF0
ZSBhbmQgdXBkYXRlIHRoZSBkZWxldGVkIHRleHR1cmVzLgotICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAy
MDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJS
ZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKICAgICB1cGRhdGVUZXh0
dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBA
IC0yMjIsNyArMjIzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxl
dGVkVGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50
VGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0yMzcsOCArMjM4LDggQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKICAgICBsYXllci0+c2V0Vmlz
aWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNv
bnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlv
cml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5
Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsK
IAogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwog
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CkBAIC0yNTMsOCArMjU0LDggQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKIAogICAgIC8vIEZvciB0aGUgbmV4
dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwgbmVlZCBpZGxlIHBhaW50
aW5nLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIHZpc2libGVSZWN0
KTsKLSAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICAg
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgICAgICBsYXll
ci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CkBAIC0yODEsNyAr
MjgyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxl
cykKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWlu
dEZhaWxlZCkKIHsKICAgICAvLyBTdGFydCB3aXRoIDJtYiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVz
dCBpcyBnb2luZyB0byB0cnkgdG8gdXNlIGp1c3QgbW9yZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNl
IHRvIDFtYiBsYXRlci4KLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSgyKjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgp
KSk7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwxKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtMzA1LDkgKzMwNiw5IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkK
ICAgICBsYXllcjEtPmludmFsaWRhdGVSZWN0KGxheWVyUmVjdCk7CiAKICAgICAvLyBQYWludCBh
IHNpbmdsZSB0aWxlIGluIGxheWVyMiBzbyB0aGF0IGl0IHdpbGwgaWRsZSBwYWludC4KLSAgICBs
YXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgbGF5
ZXIyUmVjdCk7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0
eUNhbGN1bGF0b3IsIGxheWVyUmVjdCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxj
dWxhdG9yKTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3Vs
YXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBs
YXllcjEtPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBsYXllclJlY3QsIDApOwogICAgIGxheWVy
Mi0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsK
IApAQCAtMzIxLDEyICszMjIsMTEgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogCiAgICAgLy8gUmVkdWNlIG91ciBtZW1vcnkg
bGltaXRzIHRvIDFtYi4KICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRl
cygxMDI0ICogMTAyNCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnNldFByZWZlcnJlZE1lbW9yeUxp
bWl0Qnl0ZXMoMTAyNCAqIDEwMjQpOwogCiAgICAgLy8gTm93IGlkbGUgcGFpbnQgbGF5ZXIyLiBX
ZSBhcmUgZ29pbmcgdG8gcnVuIG91dCBvZiBtZW1vcnkgdGhvdWdoIQotICAgIGxheWVyMi0+c2V0
VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllcjJSZWN0KTsK
LSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRv
ciwgbGF5ZXJSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyMi0+dXBk
YXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAwKTsKICAgICBs
YXllcjItPmlkbGVVcGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5ZXIyUmVjdCwgMCk7CiAKQEAg
LTM0NSw5ICszNDUsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVz
QWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbDItPmhhc1Rp
bGVBdCgwLCAyKSk7CiAKICAgICAvLyBOb3cgaWYgbGF5ZXIyIGJlY29tZXMgZnVsbHkgdmlzaWJs
ZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcGFpbnQgaXQgYW5kIHB1c2ggdmFsaWQgdGV4dHVyZXMu
Ci0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0
b3IsIGxheWVyMlJlY3QpOwotICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3Qo
cHJpb3JpdHlDYWxjdWxhdG9yLCBsYXllclJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0
eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7
CiAgICAgbGF5ZXIyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5ZXIyUmVjdCwgMCk7CiAg
ICAgbGF5ZXIxLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgbGF5ZXJSZWN0LCAwKTsKIApAQCAt
MzY1LDcgKzM2NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNB
ZnRlcklkbGVQYWludEZhaWxlZCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CkBAIC0zNzksOCAr
Mzc5LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9j
Y2x1ZGVkVGlsZXMpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMTAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3Jp
dHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkKTsKICAgICBsYXllci0+aWRsZVVwZGF0ZUxheWVyUmVj
dCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkKTsKICAgICB1cGRh
dGVUZXh0dXJlcygpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogCiBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkKIHsKLSAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwg
MTAyNCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwg
MTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpKTsKQEAgLTQwMiwxMCArNDAyLDExIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogICAgIC8vIG5vdCBwcmV2ZW50
IHRoZSB0aWxlIGZyb20gYmVpbmcgcHVzaGVkLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6
ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCkpOwogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0
VG9JbnZhbGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwgNTApLCBsYXllci5nZXQoKSk7CiAKLSAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1
bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAg
bGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwg
MCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOwpAQCAtNDE3LDcgKzQxOCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogCiBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50
T25OZXh0TGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwpAQCAt
NDI1LDE0ICs0MjYsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxl
c0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsK
KyAgICBsYXllcjEtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkp
OwogICAgIGxheWVyMS0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwog
CiAgICAgbGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOworICAgIGxheWVyMi0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXIy
LT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAKLSAgICBsYXllcjEt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3Qo
cHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyMS0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICBsYXllcjItPnNldFRleHR1cmVQcmlv
cml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygwKTsKIAogICAgIGxheWVyMS0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwKTsKIApAQCAtNDUzLDcgKzQ1Niw3IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFp
bnRPbk5leHRMYXllcikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxl
c0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXllcikKIHsKLSAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAy
NCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CkBAIC00NjgsOSArNDcxLDkgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWlu
dE9uUHJldmlvdXNMYXkKICAgICBsYXllcjItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyMi0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChw
cmlvcml0eUNhbGN1bGF0b3IsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllcjIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7
CisgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwor
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAvLyBJbnZh
bGlkYXRlIGEgdGlsZSBvbiBsYXllcjIKICAgICBsYXllcjEtPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnNldFJlY3RUb0ludmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxheWVy
Mi5nZXQoKSk7CkBAIC00OTcsNyArNTAwLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIC8vIFdlIGhhdmUgZW5vdWdoIG1lbW9yeSBm
b3Igb25seSB0aGUgdmlzaWJsZSByZWN0LCBzbyB3ZSB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGlu
IGZpcnN0IGlkbGUgcGFpbnQuCiAgICAgaW50IG1lbW9yeUxpbWl0ID0gNCAqIDEwMCAqIDEwMDsg
Ly8gMSB0aWxlcywgNCBieXRlcyBwZXIgcGl4ZWwuCiAKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCwgMTAyNCk7CisgICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgMTAyNCk7CiAgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKQEAgLTUwNyw4
ICs1MTAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZN
ZW1vcnkpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwogICAg
IGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCB2aXNpYmxlUmVjdCwgMCk7CiAKICAgICAvLyBJZGxlLXBhaW50aW5nIHNob3VsZCBzZWUg
bm8gbW9yZSBwcmlvcml0eSB0aWxlcyBmb3IgcGFpbnRpbmcuCkBAIC01MjAsOCArNTIzLDggQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAg
IC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUuCiAgICAgRVhQRUNU
X1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMSkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRl
ciwgdmlzaWJsZVJlY3QsIDApOwogICAgIGxheWVyLT5pZGxlVXBkYXRlTGF5ZXJSZWN0KHVwZGF0
ZXIsIHZpc2libGVSZWN0LCAwKTsKIApAQCAtNTMxLDcgKzUzNCw3IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKIAogVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogewotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0KTsKKyAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNTQzLDggKzU0Niw4
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXll
cikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IGNvbnRlbnRSZWN0LCAwKTsKIAogICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVz
LgpAQCAtNTcyLDcgKzU3NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnRaZXJvU2l6ZWRMYXllcikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlk
bGVQYWludFplcm9TaXplZEFuaW1hdGluZ0xheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwpAQCAtNTg3LDggKzU5MCw4IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRBbmltYXRpbmdMYXll
cikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0KTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIs
IGNvbnRlbnRSZWN0LCAwKTsKIAogICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVz
LgpAQCAtNjE5LDcgKzYyMiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIEludFNpemUgY29udGVudEJvdW5kcygxMDAsIDEw
MCk7CiAgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91
bmRzKTsKIAotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAw
LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0
KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgw
KSkpOwpAQCAtNjMxLDggKzYzNCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBp
ZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KHZpc2libGVSZWN0KTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwog
Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRv
ciwgdmlzaWJsZVJlY3QpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51
cGRhdGVMYXllclJlY3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwogCiAgICAgLy8gTm9uLXZp
c2libGUgbGF5ZXJzIGRvbid0IG5lZWQgaWRsZSBwYWludC4KQEAgLTY2NCw3ICs2NjcsNyBAQCBz
dGF0aWMgdm9pZCB0ZXN0SGF2ZU91dGVyVGlsZXMoRmFrZUNDVGlsZWRMYXllckltcGwqIGxheWVy
SW1wbCwgaW50IHdpZHRoLCBpbnQgaAogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
aWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVycykKIHsKLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCA4MDAwKjgwMDAqNCwgMTAyNCk7CisgICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4MDAwKjgwMDAqOCwgMTAyNCk7CiAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKICAgICBpbnQgdGlsZVdpZHRo
ID0gRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUoKS53aWR0aCgpOwpAQCAtNjg4LDgg
KzY5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNp
YmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJl
Y3QodmlzaWJsZVJlY3QpOwogICAgICAgICAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRl
bnRSZWN0KTsKIAotICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwotICAgICAgICAgICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgICAgICAgICAvLyBJZiBpZGxlUGFp
bnRSZWN0IGdpdmVzIGJhY2sgYSBub24tZW1wdHkgcmVzdWx0IHRoZW4gd2Ugc2hvdWxkIHBhaW50
IGl0LiBPdGhlcndpc2UsCiAgICAgICAgICAgICAvLyB3ZSBzaG91ZCBwYWludCBub3RoaW5nLgpA
QCAtNzA1LDE2ICs3MDgsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQ
YWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMpCiAgICAgICAgICAgICB0ZXN0SGF2ZU91dGVy
VGlsZXMobGF5ZXJJbXBsLmdldCgpLCB3aWR0aFtpXSwgaGVpZ2h0W2pdLCAwKTsKIAogICAgICAg
ICAgICAgLy8gU2V0IHByaW9yaXRpZXMgYW5kIHJlY3JlYXRlIHRpbGVzLgotICAgICAgICAgICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlz
aWJsZVJlY3QpOwotICAgICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2Fs
Y3VsYXRvcik7CisgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDApOwogCiAgICAgICAgICAgICAvLyBOb3JtYWxseSB3ZSBkb24ndCBhbGxvdyBub24tdmlzaWJs
ZSBsYXllcnMgdG8gcHJlLXBhaW50LCBidXQgaWYgdGhleSBhcmUgYW5pbWF0aW5nIHRoZW4gd2Ug
c2hvdWxkLgogICAgICAgICAgICAgRVhQRUNUX0VRKHNob3VsZFByZXBhaW50LCBsYXllci0+bmVl
ZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKIAogICAgICAgICAgICAgLy8gSWYgdGhlIGxheWVy
IGlzIHRvIGJlIHByZXBhaW50ZWQgYXQgYWxsLCB0aGVuIGFmdGVyIGZvdXIgdXBkYXRlcyB3ZSBz
aG91bGQgaGF2ZSB0aGUgb3V0ZXIgcm93L2NvbHVtbnMgcGFpbnRlZC4KICAgICAgICAgICAgIGZv
ciAoaW50IGsgPSAwOyBrIDwgNDsgKytrKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgdmlzaWJsZVJlY3QpOwot
ICAgICAgICAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICAgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KDApOwogCiAgICAgICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2
aXNpYmxlUmVjdCwgMCk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPmlkbGVVcGRhdGVMYXllclJl
Y3QodXBkYXRlciwgdmlzaWJsZVJlY3QsIDApOwpAQCAtNzI2LDggKzcyOSw4IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJz
KQogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGlkbGUgcGFpbnQgcGFzdCB0aGUg
b3V0ZXJtb3N0IHRpbGVzLgogICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lk
bGVQYWludCh2aXNpYmxlUmVjdCkpOwogICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0
OyArK2spIHsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3QocHJpb3JpdHlDYWxjdWxhdG9yLCB2aXNpYmxlUmVjdCk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICAgICAgICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgICAgICAgICAg
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAgICAgICAg
ICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIHZpc2libGVSZWN0LCAwKTsKICAg
ICAgICAgICAgICAgICBsYXllci0+aWRsZVVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCB2aXNpYmxl
UmVjdCwgMCk7CkBAIC03NDEsNyArNzQ0LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMpCiAKIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVByZXBhcmUpCiB7Ci0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwog
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7
CkBAIC03NTMsOSArNzU2LDEwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZh
bGlkYXRlRnJvbVByZXBhcmUpCiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNv
IHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+
c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVy
UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0
KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRh
dGVyLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgdXBkYXRlci51cGRhdGUoY2ND
b250ZXh0LmdldCgpLCAmZmFrZUFsbG9jYXRvciwgJmZha2VDb3BpZXIsICZmYWtlVXBsb2FkZXIs
IDEwMDApOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBA
IC03OTAsNyArNzk0LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVw
ZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKICAgICAvLyBUaGUgdXBkYXRlUmVj
dCAodGhhdCBpbmRpY2F0ZXMgd2hhdCB3YXMgYWN0dWFsbHkgcGFpbnRlZCkgc2hvdWxkIGJlIGlu
CiAgICAgLy8gbGF5ZXIgc3BhY2UsIG5vdCB0aGUgY29udGVudCBzcGFjZS4KIAotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0
KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0
KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHModGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKIAogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMoMCwgMCwgMzAwLCAyMDApOwpAQCAt
ODA0LDE1ICs4MDgsMTUgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVw
ZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKICAgICAvLyBIb3dldmVyLCBpdCBz
aG91bGQgc3RpbGwgYmUgaW4gbGF5ZXIgc3BhY2UsIG5vdCBjb250ZW50IHNwYWNlLgogICAgIGxh
eWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRzKTsKIAotICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBk
YXRlciwgY29udGVudEJvdW5kcywgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDAsIDAsIDMwMCwgMzAwICogMC44KSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBk
YXRlVGV4dHVyZXMoKTsKIAogICAgIC8vIEFmdGVyIHRoZSB0aWxlcyBhcmUgdXBkYXRlZCBvbmNl
LCBhbm90aGVyIGludmFsaWRhdGUgb25seSBuZWVkcyB0byB1cGRhdGUgdGhlIGJvdW5kcyBvZiB0
aGUgbGF5ZXIuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5
Q2FsY3VsYXRvciwgY29udGVudEJvdW5kcyk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNh
bGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAg
ICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOwogICAgIGxheWVyLT51cGRh
dGVMYXllclJlY3QodXBkYXRlciwgY29udGVudEJvdW5kcywgMCk7CiAgICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoRmxvYXRSZWN0KGxheWVyQm91bmRzKSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CkBA
IC04MjEsMjkgKzgyNSwzMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIC8vIFBhcnRpYWwgcmUt
cGFpbnQgc2hvdWxkIGFsc28gYmUgcmVwcmVzZW50ZWQgYnkgdGhlIHVwZGF0ZVJlY3QgaW4gbGF5
ZXIgc3BhY2UsIG5vdCBjb250ZW50IHNwYWNlLgogICAgIEludFJlY3QgcGFydGlhbERhbWFnZSgz
MCwgMTAwLCAxMCwgMTApOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChwYXJ0aWFsRGFtYWdl
KTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxh
dG9yLCBjb250ZW50Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRv
cik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKICAgICBsYXll
ci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRCb3VuZHMsIDApOwogICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg0NSwgODAsIDE1LCA4KSwgbGF5ZXItPnVwZGF0ZVJl
Y3QoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlk
YXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAgICAv
LyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSgxMDAsIDEwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3Qo
MCwgMCwgMTAwLCAxMDApKTsKIAogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllci4K
ICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXItPmxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkp
OwogCiAgICAgLy8gUHVzaCB0aGUgdGlsZXMgdG8gdGhlIGltcGwgc2lkZSBhbmQgY2hlY2sgdGhh
dCB0aGVyZSBpcyBleGFjdGx5IG9uZS4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJ
blJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVy
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAg
ICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwpAQCAtODU1LDExICs4
NjAsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlv
bldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKICAgICAvLyBDaGFuZ2UgdGhlIGNvbnRlbnRzIHNj
YWxlIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGVudCByZWN0YW5nbGUgcmVxdWlyaW5nIHBhaW50
aW5nCiAgICAgLy8gaXMgbm90IHNjYWxlZC4KICAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZSgy
KTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDIwMCwgMjAw
KSk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwg
bGF5ZXItPmxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkpOwogCiAgICAgLy8gVGhlIGltcGwgc2lkZSBz
aG91bGQgZ2V0IDJ4MiB0aWxlcyBub3cuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVz
SW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRl
ciwgSW50UmVjdCgwLCAwLCAyMDAsIDIwMCksIDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAg
ICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAgLTg3MSw5ICs4
NzcsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9u
V2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBs
YXllciBhZ2FpbiwgYnV0IGRvIG5vdCBwYWludC4gQWxsIHRpbGVzIHNob3VsZCBiZSBnb25lIG5v
dyBmcm9tIHRoZQogICAgIC8vIGltcGwgc2lkZS4KICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3Vs
YXRvciwgSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3Qo
dXBkYXRlciwgSW50UmVjdCgxLCAwLCAwLCAxKSwgMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoMCk7CiAKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwog
ICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC04OTYsMTUg
KzkwMiwxNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jl
c2V0KQogCiAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IG9uZSBvZiB0aGUg
dHdvIGxheWVycy4KICAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMzAwICogMzAwOyAvLyA0IGJ5
dGVzIHBlciBwaXhlbC4KLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9y
eUxpbWl0LCBtZW1vcnlMaW1pdCwgbWVtb3J5TGltaXQpOwogCi0gICAgUmVmUHRyPEZha2VUaWxl
ZExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNo
cm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGNoaWxkTGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiByb290TGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xh
eWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBjaGlsZExheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsK
ICAgICByb290TGF5ZXItPmFkZENoaWxkKGNoaWxkTGF5ZXIpOwogCiAgICAgcm9vdExheWVyLT5z
ZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgcm9vdExheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KGNvbnRlbnRSZWN0KTsKICAgICByb290TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTUwLCAxNTApKTsKICAgICBjaGlsZExheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7Cisg
ICAgY2hpbGRMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAgICAgY2hp
bGRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgxNTAsIDE1MCkpOwogICAgIHJvb3RMYXll
ci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogICAgIGNoaWxkTGF5ZXItPmludmFsaWRh
dGVSZWN0KGNvbnRlbnRSZWN0KTsKQEAgLTkxMiw5ICs5MTksNiBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+
c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRWaWV3cG9y
dFNpemUoSW50U2l6ZSgzMDAsIDMwMCkpOwogCi0gICAgY2hpbGRMYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50UmVjdCk7Ci0gICAgcm9v
dExheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNv
bnRlbnRSZWN0KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAg
ICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgbWVtb3J5TGltaXQpOwog
CiAgICAgLy8gV2UnbGwgc2tpcCB0aGUgcm9vdCBsYXllci4KQEAgLTkyNiwxNCArOTMwLDEwIEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAg
Ly8gUmVtb3ZlIHRoZSBjaGlsZCBsYXllci4KICAgICByb290TGF5ZXItPnJlbW92ZUFsbENoaWxk
cmVuKCk7CiAKLSAgICAvLyBEcm9wIHRleHR1cmUgcHJpb3JpdGllcyBvbiB0aGUgY2hpbGQuCi0g
ICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotCi0gICAgcm9vdExheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRSZWN0
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAgICAgY2NMYXll
clRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgbWVtb3J5TGltaXQpOwogICAgIEVYUEVD
VF9GQUxTRShyb290TGF5ZXItPnNraXBzRHJhdygpKTsKIAorICAgIGNjTGF5ZXJUcmVlSG9zdC0+
Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFsbE1lbW9yeSgmYWxsb2NhdG9yKTsKICAg
ICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3Qu
Y2xlYXIoKTsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CkBAIC05NDEs
MTQgKzk0MSwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0
c1Jlc2V0KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcmVzaXplVG9TbWFsbGVy
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0LCA2
MCoxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NjAqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDcwMCwgNzAwKSk7Cisg
ICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA3MDAsIDcwMCkpOwog
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7CiAKLSAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJ
bnRSZWN0KDAsIDAsIDcwMCwgNzAwKSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1
bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAg
bGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSwg
MCk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMjAwLCAyMDApKTsKQEAgLTk1Nywx
NiArOTU4LDE3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCByZXNpemVUb1NtYWxs
ZXIpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFz
aCkKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwg
NjAqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDYwKjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKIAogICAgIGludCBzaXplID0gMSA8PCAzMDsKICAgICBsYXllci0+c2V0Qm91
bmRzKEludFNpemUoc2l6ZSwgc2l6ZSkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50
UmVjdCgwLCAwLCBzaXplLCBzaXplKSk7CiAKICAgICAvLyBFbnN1cmUgbm8gY3Jhc2ggZm9yIGJv
dW5kcyB3aGVyZSBzaXplICogc2l6ZSB3b3VsZCBvdmVyZmxvdyBhbiBpbnQuCi0gICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgw
LCAwLCA3MDAsIDcwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsK
KyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51
cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA3MDAsIDcwMCksIDApOwogfQog
CkBAIC05ODIsNyArOTg0LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRp
YWxVcGRhdGVzKQogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9
IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBzZXR0
aW5ncyk7CiAgICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcklmTmVlZGVkKCkpOwogCi0gICAgLy8gQ3JlYXRlIG9uZSA1MDAgeCAzMDAgdGlsZWQg
bGF5ZXIuCisgICAgLy8gQ3JlYXRlIG9uZSAzMDAgeCAyMDAgdGlsZWQgbGF5ZXIgd2l0aCAzIHgg
MiB0aWxlcy4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAyMDApOwogICAgIEludFJl
Y3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CiAKQEAgLTEw
OTcsNyArMTA5OSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBk
YXRlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhv
dXRPY2NsdXNpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNv
IHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KQEAgLTExMDUsMTUg
KzExMDcsMTUgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdp
dGhvdXRPY2NsdXNpb24pCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJp
b3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMjAwKSwgMCk7CiAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogfQogCiBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKIHsKLSAgICBPd25Q
dHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAy
NCk7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMTI2LDggKzExMjgsOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikK
ICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVy
LT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYw
MCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3Jp
dHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRSZWN0KDAs
IDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTExNjAs
NyArMTE2Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRX
aXRoT2NjbHVzaW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogewotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsK
KyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsK
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTExNzQsOCArMTE3Niw4IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlz
aWJsaXR5Q29uc3RyYWludHMpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVj
dCgwLCAwLCA2MDAsIDM2MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAs
IDAsIDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3Qo
cHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzYwKSk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBJbnRS
ZWN0KDAsIDAsIDYwMCwgMzYwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoMjQtMywgbGF5
ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAg
LTExODksOCArMTE5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1Bh
aW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAgb2NjbHVkZWQu
c2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTUwKSk7CiAgICAgbGF5ZXItPnNl
dFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDM1MCkpOwogICAgIGxheWVyLT5p
bnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2
MDAsIDM1MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVM
YXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDM1MCksICZvY2NsdWRlZCk7CiAg
ICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVw
YXJlUmVjdENvdW50KCkpOwogCkBAIC0xMjA0LDggKzEyMDYsOCBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0
cmFpbnRzKQogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDIwMCwgMjAwLCAzMDAs
IDE1MCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgNjAw
LCAzNDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1
bGF0b3IsIEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygw
KTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoMCwgMCwgNjAw
LCAzNDApLCAmb2NjbHVkZWQpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIApAQCAtMTIxNyw3ICsxMjE5
LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2Ns
dXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRy
PENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQp
OworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQp
OwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtMTIyOSw4ICsxMjMxLDggQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlk
YXRpb24pCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwg
MTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA2MDAs
IDYwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAw
KSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3Vs
YXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3Jp
dHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDAp
OwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAs
IDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogICAgIHVwZGF0ZVRleHR1cmVz
KCk7CkBAIC0xMjUyLDcgKzEyNTQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
dGlsZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRUcmFuc2Zvcm1zKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCox
MDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCox
MDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTEyNjksOCArMTI3
MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2Nj
bHVzaW9uQW5kVHJhbnNmb3JtcykKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgx
MDAsIDEwMCwgMTUwLCA1MCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhwcmlvcml0eUNhbGN1bGF0b3IpOworICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1
cGRhdGVyLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1Rf
RVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291
bnQoKSk7CiAKQEAgLTEyODEsNyArMTI4Myw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNmb3JtcykKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2FsaW5n
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIq
MTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTEyOTcs
OCArMTI5OSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRX
aXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVj
dCgyMDAsIDIwMCwgMzAwLCAxMDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJl
Y3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgLy8g
VGhlIGNvbnRlbnQgaXMgaGFsZiB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgKHNvIHRoZSBudW1iZXIg
b2YgdGlsZXMgaXMgZmV3ZXIpLgogICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGNvbnRlbnQgaXMg
MzAweDMwMCwgYW5kIHNpbmNlIHRoZSB0aWxlIHNpemUgaXMgMTAwLCB0aGUKQEAgLTEzMTcsOCAr
MTMxOSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRo
T2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgy
MDAsIDIwMCwgMzAwLCAyMDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRS
ZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRl
UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3Qo
dXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNU
X0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291
bnQoKSk7CiAKQEAgLTEzMzcsOCArMTMzOSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBvY2NsdWRlZC5z
ZXRPY2NsdXNpb24oSW50UmVjdCgxMDAsIDEwMCwgMTUwLCAxMDApKTsKICAgICBsYXllci0+c2V0
VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwog
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KHByaW9yaXR5Q2FsY3VsYXRvciwgSW50
UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxh
dG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogICAgIGxh
eWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZv
Y2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKQEAgLTEzNDksNyArMTM1MSw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2Nh
bGluZykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3Bh
cXVlUmVnaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAK
QEAgLTEzNjYsOCArMTM2OCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNp
YmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2
aXNpYmxlQm91bmRzKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKLSAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlDYWxjdWxhdG9yLCBjb250ZW50
Qm91bmRzKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKHByaW9yaXR5Q2FsY3VsYXRvcik7CisgICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8vIElmIHRoZSBsYXll
ciBkb2Vzbid0IHBhaW50IG9wYXF1ZSBjb250ZW50LCB0aGVuIHRoZSB2aXNpYmxlQ29udGVudE9w
YXF1ZVJlZ2lvbiBzaG91bGQgYmUgZW1wdHkuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0KCkpOwpAQCAtMTQ1MCw3ICsxNDUy
LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1l
dHJpY3MpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAt
MTQ2Nyw4ICsxNDY5LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1Bh
aW50ZWRNZXRyaWNzKQogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVCb3Vu
ZHMpOwogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKIAotICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGN1bGF0b3IsIGNvbnRlbnRCb3VuZHMpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMocHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKDApOwogCiAgICAgLy8gSW52YWxpZGF0ZXMgYW5kIHBhaW50
cyB0aGUgd2hvbGUgbGF5ZXIuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0KCkpOwpAQCAtMTUwMSw2ICsxNTAzLDE2MCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiAgICAg
RVhQRUNUX0VRKDAsIG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnRpbGVzQ3VsbGVkRm9yVXBs
b2FkKCkpOwogfQogCitURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRl
Q29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYXRlZCkKK3sKKyAgICAvLyBJbml0
aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQuCisgICAgV2ViS2l0OjpXZWJDb21wb3Np
dG9yOjppbml0aWFsaXplKDApOworCisgICAgLy8gVGlsZSBzaXplIGlzIDEwMHgxMDAuCisgICAg
SW50UmVjdCByb290UmVjdCgwLCAwLCAzMDAsIDIwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3Qo
MCwgMCwgMzAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGQyUmVjdCgwLCAxMDAsIDMwMCwgMTAw
KTsKKworICAgIENDTGF5ZXJUcmVlU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgRmFrZUNDTGF5ZXJU
cmVlSG9zdENsaWVudCBmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50OworICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZm
YWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBzZXR0aW5ncyk7CisgICAgQVNTRVJUX1RSVUUoY2NM
YXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcklmTmVlZGVkKCkpOworCisgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IHJvb3QgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KSkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBzdXJmYWNlID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGNoaWxkID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
Y2hpbGQyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVI
b3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKKworICAgIHJvb3QtPnNldEJvdW5kcyhy
b290UmVjdC5zaXplKCkpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7
CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChyb290UmVjdCk7CisgICAgcm9vdC0+YWRk
Q2hpbGQoc3VyZmFjZSk7CisKKyAgICBzdXJmYWNlLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1
ZSk7CisgICAgc3VyZmFjZS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKKyAgICBzdXJm
YWNlLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgc3VyZmFjZS0+YWRkQ2hpbGQoY2hpbGQpOworICAg
IHN1cmZhY2UtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICBjaGlsZC0+c2V0Qm91bmRzKGNoaWxk
UmVjdC5zaXplKCkpOworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkpOwor
ICAgIGNoaWxkLT5zZXRQb3NpdGlvbihjaGlsZFJlY3QubG9jYXRpb24oKSk7CisgICAgY2hpbGQt
PnNldFZpc2libGVMYXllclJlY3QoY2hpbGRSZWN0KTsKKworICAgIGNoaWxkMi0+c2V0Qm91bmRz
KGNoaWxkMlJlY3Quc2l6ZSgpKTsKKyAgICBjaGlsZDItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQoKSk7CisgICAgY2hpbGQyLT5zZXRQb3NpdGlvbihjaGlsZDJSZWN0LmxvY2F0aW9uKCkpOwor
ICAgIGNoaWxkMi0+c2V0VmlzaWJsZUxheWVyUmVjdChjaGlsZDJSZWN0KTsKKworICAgIGNjTGF5
ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0
Vmlld3BvcnRTaXplKHJvb3RSZWN0LnNpemUoKSk7CisKKyAgICAvLyBXaXRoIGEgaHVnZSBtZW1v
cnkgbGltaXQsIGFsbCBsYXllcnMgc2hvdWxkIHVwZGF0ZSBhbmQgcHVzaCB0aGVpciB0ZXh0dXJl
cy4KKyAgICByb290LT5pbnZhbGlkYXRlUmVjdChyb290UmVjdCk7CisgICAgY2hpbGQtPmludmFs
aWRhdGVSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQyLT5pbnZhbGlkYXRlUmVjdChjaGlsZDJS
ZWN0KTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsK
KyAgICAgICAgRVhQRUNUX0VRKDYsIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVw
ZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMywgY2hpbGQtPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMywgY2hpbGQy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CisKKyAgICAgICAgcm9vdC0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAgICBjaGls
ZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworICAgICAg
ICBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsK
KworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOworICAgICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoY2hpbGQtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQy
LT5pZCgpKSkpOworICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgp
KTsKKyAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKKyAg
ICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUo
cm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRShjaGlsZEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShjaGlsZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkp
OworICAgICAgICB9CisgICAgfQorICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUo
KTsKKworICAgIC8vIFdpdGggYSBtZW1vcnkgbGltaXQgdGhhdCBpbmNsdWRlcyBvbmx5IHRoZSBy
b290IGxheWVyICgzeDIgdGlsZXMpIGFuZCBoYWxmIHRoZSBzdXJmYWNlIHRoYXQKKyAgICAvLyB0
aGUgY2hpbGQgbGF5ZXJzIGRyYXcgaW50bywgdGhlIGNoaWxkIGxheWVycyB3aWxsIG5vdCBiZSBh
bGxvY2F0ZWQuIElmIHRoZSBzdXJmYWNlIGlzbid0CisgICAgLy8gYWNjb3VudGVkIGZvciwgdGhl
biBvbmUgb2YgdGhlIGNoaWxkcmVuIHdvdWxkIGZpdCB3aXRoaW4gdGhlIG1lbW9yeSBsaW1pdC4K
KyAgICByb290LT5pbnZhbGlkYXRlUmVjdChyb290UmVjdCk7CisgICAgY2hpbGQtPmludmFsaWRh
dGVSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQyLT5pbnZhbGlkYXRlUmVjdChjaGlsZDJSZWN0
KTsKKyAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCAoMyAqIDIgKyAz
ICogMSkgKiAoMTAwICogMTAwKSAqIDQpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOworICAg
ICAgICBFWFBFQ1RfRVEoNiwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRl
Q291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZDItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKKworICAgICAgICByb290LT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkLT5m
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNo
aWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworCisg
ICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbChjaGlsZC0+aWQoKSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiBjaGlsZDJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZDItPmlk
KCkpKSk7CisgICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOwor
ICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkpOworICAgICAg
ICBjaGlsZDItPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IDI7ICsraikKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShyb290
SW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRShjaGlsZEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGQySW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CisKKyAgICAvLyBXaXRoIGEgbWVtb3J5IGxpbWl0IHRoYXQgaW5jbHVkZXMgb25seSBoYWxmIHRo
ZSByb290IGxheWVyLCBubyBjb250ZW50cyB3aWxsIGJlCisgICAgLy8gYWxsb2NhdGVkLiBJZiBy
ZW5kZXIgc3VyZmFjZSBtZW1vcnkgd2Fzbid0IGFjY291bnRlZCBmb3IsIHRoZXJlIGlzIGVub3Vn
aCBzcGFjZQorICAgIC8vIGZvciBvbmUgb2YgdGhlIGNoaWxkcmVuIGxheWVycywgYnV0IHRoZXkg
ZHJhdyBpbnRvIGEgc3VyZmFjZSB0aGF0IGNhbid0IGJlCisgICAgLy8gYWxsb2NhdGVkLgorICAg
IHJvb3QtPmludmFsaWRhdGVSZWN0KHJvb3RSZWN0KTsKKyAgICBjaGlsZC0+aW52YWxpZGF0ZVJl
Y3QoY2hpbGRSZWN0KTsKKyAgICBjaGlsZDItPmludmFsaWRhdGVSZWN0KGNoaWxkMlJlY3QpOwor
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsICgzICogMSkgKiAoMTAw
ICogMTAwKSAqIDQpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CisgICAgICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOworICAgICAgICBFWFBFQ1Rf
RVEoMCwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBk
YXRlQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZDItPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodXBkYXRl
ci5oYXNNb3JlVXBkYXRlcygpKTsKKworICAgICAgICByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgIGNoaWxkMi0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOworCisgICAgICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKHJvb3QtPmlkKCkpKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZC0+
aWQoKSkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7CisgICAg
ICAgIHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOworICAgICAgICBjaGls
ZC0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkpOworICAgICAgICBjaGlsZDItPnB1
c2hQcm9wZXJ0aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IDI7ICsraikKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uocm9vdEltcGwtPmhhc1Rl
eHR1cmVJZEZvclRpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRJ
bXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKGNoaWxkMkltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgY2NM
YXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KCZh
bGxvY2F0b3IpOworICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOworICAgIGNj
TGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKK30KKwogY2xhc3MgVHJhY2tpbmdMYXllclBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWlu
dGVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNraW5nTGF5
ZXJQYWludGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVHJhY2tpbmdMYXllclBh
aW50ZXIoKSk7IH0KQEAgLTE1NDIsNyArMTY5OCw3IEBAIHByaXZhdGU6CiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVk
RHVyaW5nUGFpbnQpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNDAwMDAw
MCwgNDAwMDAwMCwgNDAwMDAwMCkpOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDQwMDAwMDAsIDQwMDAwMDApKTsKICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9y
OwogCiAgICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9
IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwpAQCAtMTU1Nyw2ICsxNzEzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQYWlu
dCkKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CiAKICAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMoY2FsY3VsYXRvcik7CisgICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygwKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgd2hvbGUgdGls
ZS4KICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGNvbnRlbnRSZWN0LCAwKTsK
QEAgLTE1NzUsNyArMTczMiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25J
bnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiAKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9y
dGVkRHVyaW5nSW52YWxpZGF0aW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDQwMDAwMDAsIDQwMDAwMDAsIDQwMDAwMDApKTsKKyAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlcihDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0MDAwMDAwLCA0MDAwMDAwKSk7CiAgICAgQ0NQcmlvcml0eUNhbGN1bGF0b3Ig
Y2FsY3VsYXRvcjsKIAogICAgIFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKQEAgLTE1ODksNiArMTc0Niw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVk
RHVyaW5nSW52YWxpCiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoY29udGVudFJlY3Qp
OwogCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKGNhbGN1bGF0b3IpOworICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoMCk7CiAKICAgICAvLyBVcGRhdGUgdGhl
IHdob2xlIHRpbGUuCiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUmVjdCh1cGRhdGVyLCBjb250ZW50
UmVjdCwgMCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>