<?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>87167</bug_id>
          
          <creation_ts>2012-05-22 14:20:37 -0700</creation_ts>
          <short_desc>[chromium] Cleanup scissor rect computation/use with damage</short_desc>
          <delta_ts>2012-06-04 08:42:38 -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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter>zlieber</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>630754</commentid>
    <comment_count>0</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-05-22 14:20:37 -0700</bug_when>
    <thetext>[chromium] Cleanup scissor rect computation/use with damage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630768</commentid>
    <comment_count>1</comment_count>
      <attachid>143362</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-22 14:31:09 -0700</bug_when>
    <thetext>Created attachment 143362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630862</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-22 15:57:21 -0700</bug_when>
    <thetext>Sorry for this sad news but apparently I was misusing clipRects in the occlusion tracker. For a RenderSurface R, its RenderSurface::clipRect should be in the space of R&apos;s target, and used to clip R. It&apos;s not in the space of R, and not used to clip children drawing into R.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630892</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-22 16:20:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Sorry for this sad news but apparently I was misusing clipRects in the occlusion tracker. For a RenderSurface R, its RenderSurface::clipRect should be in the space of R&apos;s target, and used to clip R. It&apos;s not in the space of R, and not used to clip children drawing into R.

For the slower of us, what does that mean for this patch?  Are you describing a bug that this patch fixes, or an issue with this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630894</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-22 16:22:44 -0700</bug_when>
    <thetext>Oh sorry this was to Zeev. We went back and forth a bit on what a clipRect on a RenderSurface means, and we ended up treating it as being in the surface&apos;s own coordinate space. But it is actually in the target, so I think this patch is wrong as is, and we really need a unit test to demonstrate this distinction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632753</commentid>
    <comment_count>5</comment_count>
      <attachid>143826</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-24 07:17:17 -0700</bug_when>
    <thetext>Created attachment 143826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632929</commentid>
    <comment_count>6</comment_count>
      <attachid>143848</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-24 10:41:34 -0700</bug_when>
    <thetext>Created attachment 143848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632935</commentid>
    <comment_count>7</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-05-24 10:43:47 -0700</bug_when>
    <thetext>I re-uploaded the patch as I forgot to intersect the parentSurface-&gt;contentRect with thisSurface-&gt;drawableContentRect. No extra unit tests required as existing tests caught this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635379</commentid>
    <comment_count>8</comment_count>
      <attachid>143848</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-28 13:11:29 -0700</bug_when>
    <thetext>Comment on attachment 143848
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        test end-to-end drawing using mock graphic context, and added more

nit: mock GraphicsContext3D

&gt; Source/WebKit/chromium/ChangeLog:8
&gt; +        Added unit tests to CCLayerTreeHostImpl using mock graphic context

ditto nit

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:312
&gt; +    // Uses layer&apos;s content space

nit: Comments in WebKit are complete sentences, including periods.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:315
&gt; +    // During drawing, identifies the region outside of which nothing should be drawn.

So this layer is never used during drawing, and currently this value is always == clipRect, right? But the method/value exists for templated code to work, and in the future this will replace clipRect entirely hopefully. I think this comment should reflect this instead.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:451
&gt; +void LayerRendererChromium::drawRenderPass(const CCRenderPass* renderPass, const FloatRect&amp; rootDamageRect)

I think we should rename this parameter to be the rootScissorRect. LRC doesn&apos;t really know/care about damage, to it this rect indicates the part of the root/surface it should be drawing.

Can we do the transform to this surface outside before calling this function, and pass in a rect on the current RenderPass instead?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:464
&gt; +void LayerRendererChromium::drawQuad(const CCDrawQuad* quad, const IntRect&amp; clipRect)

The scissorRect on the quad should be == clipRect when there is no partial swap, right? Can we just remove this clipRect parameter entirely? I think then we can remove the whole if/else dealie.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:475
&gt;      if (scissorRect.isEmpty())
&gt;          GLC(m_context, m_context-&gt;disable(GraphicsContext3D::SCISSOR_TEST));

This logic is probably wrong now, as I think always have a valid scissorRect on the quad to clip with now. Shouldn&apos;t the meaning of an empty quad-&gt;scissorRect be that the quad doesn&apos;t need to be drawn, regardless of partial swap enabled?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:630
&gt; +    if (!layer-&gt;renderSurface()-&gt;calcScissorRect(m_capabilities.usingPartialSwap, quad-&gt;surfaceDamageRect(), scissorRect))

Can we use quad-&gt;scissorRect() here, which should be == layer-&gt;renderSurface()-&gt;scissorRect()?

I guess the root is a special case that we have to deal with. We could
a) Set the root surface&apos;s scissorRect to be == its clipRect which is == the viewport rect.
b) Check if we are the root surface here, and disable scissor on that condition instead. Assume all other surfaces have valid scissorRect().

I am leaning toward b being nicer, wdyt?

&gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:143
&gt; +    // During drawing, identifies the region outside of which nothing should be drawn.

ditto with LayerChromium.h

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:508
&gt; +        FloatRect damageRect(FloatPoint(0, 0), viewportSize());

nit: this would be more clear as rootDamageRect

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:86
&gt; +    if (layer-&gt;usesLayerClipping())
&gt; +        return layer-&gt;clipRect();
&gt; +    return layer-&gt;targetRenderSurface()-&gt;contentRect();

This could still intersect the rootDamageRect (which is the viewport rect in the main thread case). In fact I think the above function, templated, could be used for both threads.

If not, then unused parameter names should be excluded from the function&apos;s parameter list.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:92
&gt; +    CCRenderSurface* parentSurface = parentLayer-&gt;targetRenderSurface();

nit: This isn&apos;t the parentSurface, it&apos;s the target surface of our surface. Maybe just &quot;targetSurface&quot;?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:93
&gt; +    CCRenderSurface* thisSurface = layer-&gt;renderSurface();

nit: can shorten this variable just to &quot;surface&quot;, or use some more descriptive prefix? I don&apos;t think I&apos;ve seen &quot;this&quot; as a prefix in WebKit like this before.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:103
&gt; +static IntRect calculateSurfaceScissorRect(LayerChromium* layer, const FloatRect&amp; rootDamageRect)

Same here, could template the above function and use it for both threads, since CCLTH is giving a valid rootDamageRect (the viewport)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:109
&gt; +        clipRect = parentSurface-&gt;contentRect();

If we keep this separate, intersect with surface-&gt;drawableContentRect() like the above function?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:740
&gt; +static void walkLayersAndCalculateScissorRects(const LayerList&amp; renderSurfaceLayerList, const FloatRect&amp; rootDamageRect)

visibleLayerRect isn&apos;t a scissor rect, so if this function is doing both, the name should probably list both. CalculateVisibleLayerAndScissorRects?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:766
&gt;  void CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(CCLayerImpl* layer, CCLayerImpl* rootLayer, const TransformationMatrix&amp; parentMatrix, const TransformationMatrix&amp; fullHierarchyMatrix, Vector&lt;CCLayerImpl*&gt;&amp; renderSurfaceLayerList, Vector&lt;CCLayerImpl*&gt;&amp; layerList, CCLayerSorter* layerSorter, int maxTextureSize)

This method name is a bit of a lie with this change. The &quot;AndVisibility&quot; refers to the visibleLayerRects.

It would be nice if we could make this method compute scissor rects as well, instead of not computing visibleLayerRects. Is that reasonable to do? Or if not, then this method name should change.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:263
&gt; +    FloatRect damageRect;

nit: rootDamageRect

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:269
&gt; +    CCLayerTreeHostCommon::calculateVisibleAndScissorRects(renderSurfaceLayerList, damageRect);

I&apos;m worried that we are not calculating the visibleLayerRects anymore in calculateRenderSurfaceLayerList. If someone calls that function, they would expect those variables to be computed, as it&apos;s a wrapper for calculateDrawTransformsAndVisibility.

What if we pass a rootDamageRect over to calculateRenderSurfaceLayerList, that way we can always do this computation along with calculateDrawTransforms(AndVisibility).

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:309
&gt; +            if (!layerRendererCapabilities().usingPartialSwap || !it-&gt;scissorRect().isEmpty())

If we&apos;re not using partial swap, why would we still want to draw this if the scissorRect is empty? Wouldn&apos;t the frame be scissored by the entire viewport, and this layer&apos;s scissorRect still be a valid representation of what we should draw? Can&apos;t we just check &quot;if (!isEmpty)&quot; here?

Also, I think we should be checking the scissor rect of the layer&apos;s surface, not the layer itself? The surface&apos;s scissor can be non-empty when the owning layer&apos;s is. Can we add a unit test for this case?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:315
&gt; +            if (!layerRendererCapabilities().usingPartialSwap || !it-&gt;scissorRect().isEmpty())

ditto, why check partial swap here?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:329
&gt; +    if (!layerRendererCapabilities().usingPartialSwap || !m_rootLayerImpl-&gt;scissorRect().isEmpty())

These quads here are meant to fill the viewport, they are not scissored by the root layer&apos;s scissor rect. So I think this if() should go away.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:-77
&gt; +    CCRenderSurface* surface = layer-&gt;renderSurface();
&gt; +
&gt;      // FIXME: render surface layers should be a CCLayerImpl-derived class and
&gt;      // not be handled specially here.
&gt;      CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker, layer-&gt;hasDebugBorders());
&gt;  
&gt; -    CCRenderSurface* surface = layer-&gt;renderSurface();

This looks unneeded.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:85
&gt; -    quadCuller.appendSurface(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, surfaceDamageRect(), isReplica));
&gt; +    quadCuller.appendSurface(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, this-&gt;targetSurface()-&gt;damageInSurfaceSpace(rootDamageRect), isReplica));

Why not use the surface-&gt;scissorRect() here?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:96
&gt; -        quadCuller.appendReplica(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, surfaceDamageRect(), isReplica));
&gt; +        quadCuller.appendReplica(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, this-&gt;targetSurface()-&gt;damageInSurfaceSpace(rootDamageRect), isReplica));

ditto

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:211
&gt; +bool CCRenderSurface::calcScissorRect(bool usingPartialSwap, const FloatRect&amp; surfaceDamageRect, IntRect&amp; scissorRect) const

Don&apos;t abbreviate names, use calculateScissorRect. But why does this need to exist if we have CCRenderSurface::scissorRect()? Shouldn&apos;t any code that used to use this, now use that instead?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:484
&gt; +FloatRect CCRenderSurface::screenToSurfaceSpace(const FloatRect&amp; rect) const
&gt; +{
&gt; +    TransformationMatrix inverseScreenSpaceTransform = m_screenSpaceTransform.inverse();
&gt; +    return inverseScreenSpaceTransform.mapRect(rect);
&gt; +}

Like below, we should just do this directly I think with the transform. Or if this is just for CCRS::damageInSurfaceSpace(), you could use a file-static inline method, if that makes the code more clear.

Some notes about mapRect also..
- Don&apos;t use TransformationMatrix::mapRect right now, it&apos;s buggy. Use CCMathUtil::mapClippedRect or CCMathUtil::mapQuad instead to deal with the possibility that the transformed rect is clipped by the camera, and this changes its bounds (they would become a larger bounding box).
- Use map* to apply a transform. Use project* to apply the inverse of a transform.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:489
&gt; +FloatRect CCRenderSurface::surfaceToScreenSpace(const FloatRect&amp; rect) const
&gt; +{
&gt; +    return m_screenSpaceTransform.mapRect(rect);
&gt;  }

I think this should just be done with the transform directly, we don&apos;t need to add a method for this.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:162
&gt; +    /**
&gt; +     * Transforms a damage rect into surface space. In some cases may decide
&gt; +     * to return the entire surface contentRect.
&gt; +     */

Use C++ style comment.
nit: &quot;In some cases it may&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:206
&gt; +    // Uses the space of target surface of parent layer

&quot;This is in the space of the surface&apos;s target surface.&quot;
I think that &quot;target surface of parent layer&quot; is kinda an implementation detail, the conceptual idea is it&apos;s the surface&apos;s target.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637200</commentid>
    <comment_count>9</comment_count>
      <attachid>143848</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 07:37:28 -0700</bug_when>
    <thetext>Comment on attachment 143848
Patch

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

Implemented all except as indicated.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:630
&gt;&gt; +    if (!layer-&gt;renderSurface()-&gt;calcScissorRect(m_capabilities.usingPartialSwap, quad-&gt;surfaceDamageRect(), scissorRect))
&gt; 
&gt; Can we use quad-&gt;scissorRect() here, which should be == layer-&gt;renderSurface()-&gt;scissorRect()?
&gt; 
&gt; I guess the root is a special case that we have to deal with. We could
&gt; a) Set the root surface&apos;s scissorRect to be == its clipRect which is == the viewport rect.
&gt; b) Check if we are the root surface here, and disable scissor on that condition instead. Assume all other surfaces have valid scissorRect().
&gt; 
&gt; I am leaning toward b being nicer, wdyt?

If the calling code may make a more universal assumption it should be better. Otherwise we end up having the same condition in multiple places, until someone forgets it. So I&apos;d go with (a) unless there is an efficiency issue with GL.

&gt;&gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:143
&gt;&gt; +    // During drawing, identifies the region outside of which nothing should be drawn.
&gt; 
&gt; ditto with LayerChromium.h

I&apos;d say the knowledge of how this value is computed belongs to where it is computed. Since it&apos;s computed outside the class, that&apos;s where the comment should be. If someone changed the algorithm of scissorRect computation they will not know to go to class header file and update the comment. But that&apos;s a minor point.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:86
&gt;&gt; +    return layer-&gt;targetRenderSurface()-&gt;contentRect();
&gt; 
&gt; This could still intersect the rootDamageRect (which is the viewport rect in the main thread case). In fact I think the above function, templated, could be used for both threads.
&gt; 
&gt; If not, then unused parameter names should be excluded from the function&apos;s parameter list.

Can this be postponed until we have a base class for layers and surfaces? Otherwise we&apos;re not saving anything: we&apos;re blending two functions, but duplicating another one - damageInSurfaceSpace. One could argue that damageInSurfaceSpace can be a static function of CCLayerTreeHostCommon, but that&apos;s even worse - this side-steps the entire concept of data encapsulation and provides code that operates on RenderSurface&apos;s data outside the class, using getters/setters to access private variables.

The second parameter is hard to remove as the code calling this is templated, and doesn&apos;t distinguish between layer/surface types.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:103
&gt;&gt; +static IntRect calculateSurfaceScissorRect(LayerChromium* layer, const FloatRect&amp; rootDamageRect)
&gt; 
&gt; Same here, could template the above function and use it for both threads, since CCLTH is giving a valid rootDamageRect (the viewport)?

Just noticed the clipRects are taken from different surfaces between the two functions. Which one is right? These two can be blended.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:766
&gt;&gt;  void CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(CCLayerImpl* layer, CCLayerImpl* rootLayer, const TransformationMatrix&amp; parentMatrix, const TransformationMatrix&amp; fullHierarchyMatrix, Vector&lt;CCLayerImpl*&gt;&amp; renderSurfaceLayerList, Vector&lt;CCLayerImpl*&gt;&amp; layerList, CCLayerSorter* layerSorter, int maxTextureSize)
&gt; 
&gt; This method name is a bit of a lie with this change. The &quot;AndVisibility&quot; refers to the visibleLayerRects.
&gt; 
&gt; It would be nice if we could make this method compute scissor rects as well, instead of not computing visibleLayerRects. Is that reasonable to do? Or if not, then this method name should change.

Not sure if effort justifies the benefits - sounds just moving code around. I changed the name.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:269
&gt;&gt; +    CCLayerTreeHostCommon::calculateVisibleAndScissorRects(renderSurfaceLayerList, damageRect);
&gt; 
&gt; I&apos;m worried that we are not calculating the visibleLayerRects anymore in calculateRenderSurfaceLayerList. If someone calls that function, they would expect those variables to be computed, as it&apos;s a wrapper for calculateDrawTransformsAndVisibility.
&gt; 
&gt; What if we pass a rootDamageRect over to calculateRenderSurfaceLayerList, that way we can always do this computation along with calculateDrawTransforms(AndVisibility).

The question is what this expectation is based on and what is the contract of calculateRenderSurfaceLayerList. It cannot be because it&apos;s a wrapper (this may change and is transparent to the caller), but it can be because it&apos;s expected to calculate render surface list in some valid state. So if that &quot;valid state&quot; heavily implies presence of valid visibleRects, then we shouldn&apos;t have moved it in the first place. If it doesn&apos;t, we could say the contract is adjusted (I did update all calling code). I&apos;m not sure what the expectation is so do not have an opinion. It is some extra work to move it back.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:85
&gt;&gt; +    quadCuller.appendSurface(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, this-&gt;targetSurface()-&gt;damageInSurfaceSpace(rootDamageRect), isReplica));
&gt; 
&gt; Why not use the surface-&gt;scissorRect() here?

surface-&gt;scissorRect uses coordinate space of target surface of parent layer, while damageInSurfaceSpace uses our surface and contains extra logic which I&apos;m not sure if needed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:211
&gt;&gt; +bool CCRenderSurface::calcScissorRect(bool usingPartialSwap, const FloatRect&amp; surfaceDamageRect, IntRect&amp; scissorRect) const
&gt; 
&gt; Don&apos;t abbreviate names, use calculateScissorRect. But why does this need to exist if we have CCRenderSurface::scissorRect()? Shouldn&apos;t any code that used to use this, now use that instead?

Method removed

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:484
&gt;&gt; +}
&gt; 
&gt; Like below, we should just do this directly I think with the transform. Or if this is just for CCRS::damageInSurfaceSpace(), you could use a file-static inline method, if that makes the code more clear.
&gt; 
&gt; Some notes about mapRect also..
&gt; - Don&apos;t use TransformationMatrix::mapRect right now, it&apos;s buggy. Use CCMathUtil::mapClippedRect or CCMathUtil::mapQuad instead to deal with the possibility that the transformed rect is clipped by the camera, and this changes its bounds (they would become a larger bounding box).
&gt; - Use map* to apply a transform. Use project* to apply the inverse of a transform.

I see two reasons to have separate place to implement the transformations:

1. Precisely because of the delicacies such as those you just mentioned, you don&apos;t want to make people remember these things, but rather just call a single method with a straightforward name that will do the right thing.

2. You want the calling code to read like simple English sentence that communicates the intent. And the intent here is to transform a rect into a different coordinate space. Accessing a transform, inverting it and calling CCMathUtil is just implementation detail.

That said, I&apos;d agree that CCRenderSurface is not the best place for these methods because it&apos;s not the only class that may want to expose them. So I removed them right now but I think we should find a better place for them.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:489
&gt;&gt;  }
&gt; 
&gt; I think this should just be done with the transform directly, we don&apos;t need to add a method for this.

Actually after tweaks to the scissorRect computation alg this method is not used anymore. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637271</commentid>
    <comment_count>10</comment_count>
      <attachid>143848</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 08:41:57 -0700</bug_when>
    <thetext>Comment on attachment 143848
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:630
&gt;&gt;&gt; +    if (!layer-&gt;renderSurface()-&gt;calcScissorRect(m_capabilities.usingPartialSwap, quad-&gt;surfaceDamageRect(), scissorRect))
&gt;&gt; 
&gt;&gt; Can we use quad-&gt;scissorRect() here, which should be == layer-&gt;renderSurface()-&gt;scissorRect()?
&gt;&gt; 
&gt;&gt; I guess the root is a special case that we have to deal with. We could
&gt;&gt; a) Set the root surface&apos;s scissorRect to be == its clipRect which is == the viewport rect.
&gt;&gt; b) Check if we are the root surface here, and disable scissor on that condition instead. Assume all other surfaces have valid scissorRect().
&gt;&gt; 
&gt;&gt; I am leaning toward b being nicer, wdyt?
&gt; 
&gt; If the calling code may make a more universal assumption it should be better. Otherwise we end up having the same condition in multiple places, until someone forgets it. So I&apos;d go with (a) unless there is an efficiency issue with GL.

sgtm

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:143
&gt;&gt;&gt; +    // During drawing, identifies the region outside of which nothing should be drawn.
&gt;&gt; 
&gt;&gt; ditto with LayerChromium.h
&gt; 
&gt; I&apos;d say the knowledge of how this value is computed belongs to where it is computed. Since it&apos;s computed outside the class, that&apos;s where the comment should be. If someone changed the algorithm of scissorRect computation they will not know to go to class header file and update the comment. But that&apos;s a minor point.

Yeh, I agree. Sorry to confuse, I meant &quot;same comment as I made in LayerChromium.h for this same field.&quot;

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:86
&gt;&gt;&gt; +    return layer-&gt;targetRenderSurface()-&gt;contentRect();
&gt;&gt; 
&gt;&gt; This could still intersect the rootDamageRect (which is the viewport rect in the main thread case). In fact I think the above function, templated, could be used for both threads.
&gt;&gt; 
&gt;&gt; If not, then unused parameter names should be excluded from the function&apos;s parameter list.
&gt; 
&gt; Can this be postponed until we have a base class for layers and surfaces? Otherwise we&apos;re not saving anything: we&apos;re blending two functions, but duplicating another one - damageInSurfaceSpace. One could argue that damageInSurfaceSpace can be a static function of CCLayerTreeHostCommon, but that&apos;s even worse - this side-steps the entire concept of data encapsulation and provides code that operates on RenderSurface&apos;s data outside the class, using getters/setters to access private variables.
&gt; 
&gt; The second parameter is hard to remove as the code calling this is templated, and doesn&apos;t distinguish between layer/surface types.

Ah I see your point. Since the function is using some logic with contentRect etc, this is awkward. However, I don&apos;t think it needs to do that anymore with CCMathUtil. See comment in CCRenderSurface::damageInSurfaceSpace.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:103
&gt;&gt;&gt; +static IntRect calculateSurfaceScissorRect(LayerChromium* layer, const FloatRect&amp; rootDamageRect)
&gt;&gt; 
&gt;&gt; Same here, could template the above function and use it for both threads, since CCLTH is giving a valid rootDamageRect (the viewport)?
&gt; 
&gt; Just noticed the clipRects are taken from different surfaces between the two functions. Which one is right? These two can be blended.

I think surface-&gt;clipRect is right (not parent). We want the scissor rect for this surface, which is its clip along with its target&apos;s damage.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:766
&gt;&gt;&gt;  void CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(CCLayerImpl* layer, CCLayerImpl* rootLayer, const TransformationMatrix&amp; parentMatrix, const TransformationMatrix&amp; fullHierarchyMatrix, Vector&lt;CCLayerImpl*&gt;&amp; renderSurfaceLayerList, Vector&lt;CCLayerImpl*&gt;&amp; layerList, CCLayerSorter* layerSorter, int maxTextureSize)
&gt;&gt; 
&gt;&gt; This method name is a bit of a lie with this change. The &quot;AndVisibility&quot; refers to the visibleLayerRects.
&gt;&gt; 
&gt;&gt; It would be nice if we could make this method compute scissor rects as well, instead of not computing visibleLayerRects. Is that reasonable to do? Or if not, then this method name should change.
&gt; 
&gt; Not sure if effort justifies the benefits - sounds just moving code around. I changed the name.

You&apos;re right, it is. My concern is with the contract.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:269
&gt;&gt;&gt; +    CCLayerTreeHostCommon::calculateVisibleAndScissorRects(renderSurfaceLayerList, damageRect);
&gt;&gt; 
&gt;&gt; I&apos;m worried that we are not calculating the visibleLayerRects anymore in calculateRenderSurfaceLayerList. If someone calls that function, they would expect those variables to be computed, as it&apos;s a wrapper for calculateDrawTransformsAndVisibility.
&gt;&gt; 
&gt;&gt; What if we pass a rootDamageRect over to calculateRenderSurfaceLayerList, that way we can always do this computation along with calculateDrawTransforms(AndVisibility).
&gt; 
&gt; The question is what this expectation is based on and what is the contract of calculateRenderSurfaceLayerList. It cannot be because it&apos;s a wrapper (this may change and is transparent to the caller), but it can be because it&apos;s expected to calculate render surface list in some valid state. So if that &quot;valid state&quot; heavily implies presence of valid visibleRects, then we shouldn&apos;t have moved it in the first place. If it doesn&apos;t, we could say the contract is adjusted (I did update all calling code). I&apos;m not sure what the expectation is so do not have an opinion. It is some extra work to move it back.

I&apos;m hesitant about changing this contract. If we have a RenderSurfaceLayerList, it should be complete - all the data needed for drawing a frame should be computed for the tree together, I think.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:85
&gt;&gt;&gt; +    quadCuller.appendSurface(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, this-&gt;targetSurface()-&gt;damageInSurfaceSpace(rootDamageRect), isReplica));
&gt;&gt; 
&gt;&gt; Why not use the surface-&gt;scissorRect() here?
&gt; 
&gt; surface-&gt;scissorRect uses coordinate space of target surface of parent layer, while damageInSurfaceSpace uses our surface and contains extra logic which I&apos;m not sure if needed.

Oh! This argument/member should be removed from the CCRenderSurfaceDrawQuad (yay). We are not using the surfaceDamageRect anymore in LayerRendererChromium::drawRenderSurfaceQuad if we use the scissorRect instead.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:460
&gt; +FloatRect CCRenderSurface::damageInSurfaceSpace(const FloatRect&amp; damageRect) const

This damageRect parameter is in screen space, can the method and parameter names identify this please?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:474
&gt; +        surfaceDamageRect = inverseScreenSpaceTransform.mapRect(damageRect);

This should be using CCMathUtil::projectClippedRect. And the hasPerspective check can just go away. Does that make it more reasonable to do this externally, as it&apos;s just a project on the root rect using the surface&apos;s screen space inverse transform?

Shawn can you verify what I just said here is true?

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:484
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; Like below, we should just do this directly I think with the transform. Or if this is just for CCRS::damageInSurfaceSpace(), you could use a file-static inline method, if that makes the code more clear.
&gt;&gt; 
&gt;&gt; Some notes about mapRect also..
&gt;&gt; - Don&apos;t use TransformationMatrix::mapRect right now, it&apos;s buggy. Use CCMathUtil::mapClippedRect or CCMathUtil::mapQuad instead to deal with the possibility that the transformed rect is clipped by the camera, and this changes its bounds (they would become a larger bounding box).
&gt;&gt; - Use map* to apply a transform. Use project* to apply the inverse of a transform.
&gt; 
&gt; I see two reasons to have separate place to implement the transformations:
&gt; 
&gt; 1. Precisely because of the delicacies such as those you just mentioned, you don&apos;t want to make people remember these things, but rather just call a single method with a straightforward name that will do the right thing.
&gt; 
&gt; 2. You want the calling code to read like simple English sentence that communicates the intent. And the intent here is to transform a rect into a different coordinate space. Accessing a transform, inverting it and calling CCMathUtil is just implementation detail.
&gt; 
&gt; That said, I&apos;d agree that CCRenderSurface is not the best place for these methods because it&apos;s not the only class that may want to expose them. So I removed them right now but I think we should find a better place for them.

Yeh, we&apos;ve been thinking about having a place where we can methods to transform between spaces reliably for some time, but haven&apos;t done so yet..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637345</commentid>
    <comment_count>11</comment_count>
      <attachid>143848</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 10:04:41 -0700</bug_when>
    <thetext>Comment on attachment 143848
Patch

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

Just one detail below, the rest is implemented.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:474
&gt;&gt; +        surfaceDamageRect = inverseScreenSpaceTransform.mapRect(damageRect);
&gt; 
&gt; This should be using CCMathUtil::projectClippedRect. And the hasPerspective check can just go away. Does that make it more reasonable to do this externally, as it&apos;s just a project on the root rect using the surface&apos;s screen space inverse transform?
&gt; 
&gt; Shawn can you verify what I just said here is true?

It sure would if we could remove the call to this from CCLayerTreeHostImpl::drawLayers and just use root surface&apos;s scissorRect instead. Would that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637395</commentid>
    <comment_count>12</comment_count>
      <attachid>143848</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-30 10:32:23 -0700</bug_when>
    <thetext>Comment on attachment 143848
Patch

I havent looked closely, but here&apos;s one reply you guys asked about.  I&apos;ll take a closer look at the next patch whenever Zeev has time to submit it.

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:474
&gt;&gt;&gt; +        surfaceDamageRect = inverseScreenSpaceTransform.mapRect(damageRect);
&gt;&gt; 
&gt;&gt; This should be using CCMathUtil::projectClippedRect. And the hasPerspective check can just go away. Does that make it more reasonable to do this externally, as it&apos;s just a project on the root rect using the surface&apos;s screen space inverse transform?
&gt;&gt; 
&gt;&gt; Shawn can you verify what I just said here is true?
&gt; 
&gt; It sure would if we could remove the call to this from CCLayerTreeHostImpl::drawLayers and just use root surface&apos;s scissorRect instead. Would that make sense?

In theory, yes, we can use CCMathUtil and remove the hasPerspective() case.  However, I had wanted to double-check this before changing it.  For unrelated reasons, it turns out I&apos;ll need to verify this and make the change sometime this week, so that works out.

Zeev, it looks like you have basically taken this code from a different place, right?  I think its OK to leave it the way it is for now, and I&apos;ll probably end up changing it in a different patch myself very soon.  Lets just keep tabs on who lands their patch first, and the other person can accommodate the new code in their patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637434</commentid>
    <comment_count>13</comment_count>
      <attachid>144871</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 11:06:08 -0700</bug_when>
    <thetext>Created attachment 144871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637477</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-30 11:32:41 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=144871) [details]
&gt; Patch

I went ahead and tested whether the CCMathUtil usage would be correct, and I verified it should work correctly.

So, Zeev, if you wanted to do that in this patch, then I don&apos;t think I&apos;ll even need to submit a separate patch for it.

Also, I have a separate bug on me already to add appropriate unit tests for it, and a moderate amount of test coverage exists for this same usage in other parts of code, so I think its OK for you to just make the change as you were hoping =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637523</commentid>
    <comment_count>15</comment_count>
      <attachid>144892</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 12:18:40 -0700</bug_when>
    <thetext>Created attachment 144892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637540</commentid>
    <comment_count>16</comment_count>
      <attachid>144892</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 12:30:23 -0700</bug_when>
    <thetext>Comment on attachment 144892
Patch

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

This is looking really great! A few small nits left from me.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:623
&gt; -    layer-&gt;renderSurface()-&gt;setScissorRect(this, quad-&gt;surfaceDamageRect());
&gt; +    setScissorToRect(quad-&gt;scissorRect());
&gt; +

Let&apos;s just remove this, as it&apos;s already done in drawQuad now :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:88
&gt; +static IntRect calculateLayerScissorRect(LayerChromium* layer, const FloatRect&amp; rootDamageRect)
&gt; +{
&gt; +    if (layer-&gt;usesLayerClipping())
&gt; +        return layer-&gt;clipRect();
&gt; +    return layer-&gt;targetRenderSurface()-&gt;contentRect();
&gt; +}

Could remove this and template with the above function now?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:101
&gt; +    FloatRect result = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootDamageRect);

nit: s/result/clipAndDamage/ like above? This and calculateLayerScissorRect are more similar than they appear, maybe just reordering stuff inside one of them would make that more obvious. I like that this methods has a clipRect var, then clipAndDamage var. Can we follow this pattern in calculateLayerScissorRect also?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:738
&gt; +static void calculateVisibleLayersAndScissorRects(const LayerList&amp; renderSurfaceLayerList, const FloatRect&amp; rootDamageRect)

nit: calculateVisibleAndScissorRectsInternal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637550</commentid>
    <comment_count>17</comment_count>
      <attachid>144892</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 12:35:51 -0700</bug_when>
    <thetext>Comment on attachment 144892
Patch

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

Oh I skipped a couple files somehow, oops. A few more small comments.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:317
&gt; +        if (it.representsContributingRenderSurface()) {
&gt; +            if (!it-&gt;renderSurface()-&gt;scissorRect().isEmpty())

These two lines can be merged.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:324
&gt;          else if (it.representsItself() &amp;&amp; !it-&gt;visibleLayerRect().isEmpty()) {
&gt;              it-&gt;willDraw(m_layerRenderer.get());
&gt; -            pass-&gt;appendQuadsForLayer(*it, &amp;occlusionTracker, hadMissingTiles);
&gt; +
&gt; +            if (!it-&gt;scissorRect().isEmpty())
&gt; +                pass-&gt;appendQuadsForLayer(*it, &amp;occlusionTracker, hadMissingTiles);

Oh, put this scissorRect check in with the visibleLayerRect check. We must call append if we call willDraw.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:71
&gt; +void CCRenderPass::appendQuadsForRenderSurfaceLayer(CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker, const FloatRect&amp; rootDamageRect)

rootDamageRect isn&apos;t used in here anymore, so we can avoid adding it now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637610</commentid>
    <comment_count>18</comment_count>
      <attachid>144905</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 13:25:48 -0700</bug_when>
    <thetext>Created attachment 144905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637625</commentid>
    <comment_count>19</comment_count>
      <attachid>144908</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 13:31:52 -0700</bug_when>
    <thetext>Created attachment 144908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637630</commentid>
    <comment_count>20</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-05-30 13:32:49 -0700</bug_when>
    <thetext>Re-uploaded to fix the bug title in changelog; no code changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637655</commentid>
    <comment_count>21</comment_count>
      <attachid>144908</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 13:48:57 -0700</bug_when>
    <thetext>Comment on attachment 144908
Patch

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

Wonderful :)

jamesr/enne can you please take a look?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:467
&gt;      if (scissorRect.isEmpty())

Let&apos;s ASSERT(!scissorRect.isEmpty()) as well, since we should be preventing these quads from being added in CCLTHImpl?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:78
&gt; +

extra whitespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637691</commentid>
    <comment_count>22</comment_count>
      <attachid>144908</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-30 14:28:41 -0700</bug_when>
    <thetext>Comment on attachment 144908
Patch

Looks really awesome Zeev!  I did have a lot of comments...  Hopefully they don&apos;t contradict Dana =)


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

&gt; Source/WebCore/ChangeLog:13
&gt; +        Covered by existing layout tests. Introduced more unit tests to

Its worth pointing out that damage tracking and scissoring aren&apos;t actually covered by layout tests.  DumpRenderTree reads back from the backbuffer, and therefore partial swap (and hence the scissoring) doesn&apos;t apply in those cases.  This can possibly be fixed in the long run for &quot;repaint&quot; layout tests, but in general it is just the nature of layout tests that prevents it.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:74
&gt; +    FloatRect clipAndDamage = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootDamageRect);

Since we removed that helper function, I think we should add a comment here now that makes it clear what we&apos;re doing with this transform (i.e. that we&apos;re computing the damage in local surface space, where the rootDamageRect is in root surface space.)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:79
&gt; +    if (layer-&gt;usesLayerClipping())
&gt; +        clipAndDamage.intersect(layer-&gt;clipRect());
&gt; +    else
&gt; +        clipAndDamage.intersect(renderSurface-&gt;contentRect());

I&apos;m guessing you just copied the code the way I had written it in the past, but now I see a more readable way we could write this (ignoring my abbreviated variables):

FloatRect rootSurfaceDamageInLocalSurfaceSpace = projectClippedRect(inverse, rootDamageRect)
FloatRect clipAndDamageRect;
if (layer-&gt;usesLayerClipping())
    clipAndDamageRect = intersection(layer-&gt;clipRect(), rootSurfaceDamageInLocalSurfaceSpace);
else
    clipAndDamageRect = intersection(renderSurface-&gt;contentRect(), rootSurfaceDamageInLocalSurfaceSpace);

The advantage of this is that we don&apos;t accidentally mislead anyone by temporarily assigning the transformed damage to the clipAndDamage.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:89
&gt; +    RenderSurfaceType* targetSurface = parentLayer-&gt;targetRenderSurface();
&gt; +    RenderSurfaceType* surface = layer-&gt;renderSurface();

can we add an ASSERT(surface) and ASSERT(targetSurface) just after this?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:91
&gt; +    if (clipRect.isEmpty())

We should definitely add a comment here saying that checking isEmpty() is how (for now) we encoded whether the clipRect is supposed to be used or not, for surfaces, unlike layers which have usesLayerClipping().

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:97
&gt; +    FloatRect clipAndDamage = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootDamageRect);
&gt; +
&gt; +    clipAndDamage.intersect(clipRect);

If you were OK with creating the more readable version in the previous function, then let&apos;s do it here, too.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:749
&gt; +        }

should we put an else { assert not reached } here?   I&apos;m genuinely asking, not suggesting - maybe reviewers can say more definitively if its appropriate.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:277
&gt; +    FloatRect rootDamageRect = calculateRenderSurfaceLayerList(renderSurfaceLayerList);
&gt;  
&gt;      TRACE_EVENT1(&quot;webkit&quot;, &quot;CCLayerTreeHostImpl::calculateRenderPasses&quot;, &quot;renderSurfaceLayerList.size()&quot;, static_cast&lt;long long unsigned&gt;(renderSurfaceLayerList.size()));
&gt;  
&gt; -    if (layerRendererCapabilities().usingPartialSwap || settings().showSurfaceDamageRects)
&gt; -        trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList);
&gt; -    m_rootDamageRect = m_rootLayerImpl-&gt;renderSurface()-&gt;damageTracker()-&gt;currentDamageRect();
&gt; +    m_rootLayerImpl-&gt;setScissorRect(enclosingIntRect(rootDamageRect));

Personally I don&apos;t like the idea that calculateRenderSurfaceLayerList() would have any return value.  It feels right as a purely imperative, procedural function that changes state of the class.  It looks like the reason we needed this return value is to call setScissorRect for the rootLayerImpl.  Do we need this, however?  wouldn&apos;t this be correctly set by calculateVisibleAndScissorRects() ?

At the very least, how about we put this inside of calculateRenderSurfaceLayerList() so that we don&apos;t need to return that local rootDamageRect?  It makes sense for that line to be as closely grouped to calculateVisibleAndScissorRects as possible, if its not actually be computed inside of it.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:425
&gt; +        TransformationMatrix inverseScreenSpaceTransform = renderPass-&gt;targetSurface()-&gt;screenSpaceTransform().inverse();
&gt; +        FloatRect surfaceSwapRect = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, m_rootDamageRect);
&gt; +        m_layerRenderer-&gt;drawRenderPass(renderPass, surfaceSwapRect);

I&apos;m unclear why we need to pass surfaceSwapRect here (and the name seems awkward, since surfaces don&apos;t do swapping?)... isnt the whole point of this patch that we already computed the scissor rects we want to use by this point?  So this would be redundant and unnecessary, because the scissors for all surfaces and layers (and hence, quads) are already known by this time, right?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:178
&gt; +    // Exposed for testing. Returns root damage rect or full viewport if not using partial swap.
&gt; +    FloatRect calculateRenderSurfaceLayerList(CCLayerList&amp;);

If you agree with my earlier comment about removing this return value, then don&apos;t forget to fix this comment, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637705</commentid>
    <comment_count>23</comment_count>
      <attachid>144908</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 14:41:07 -0700</bug_when>
    <thetext>Comment on attachment 144908
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:79
&gt;&gt; +        clipAndDamage.intersect(renderSurface-&gt;contentRect());
&gt; 
&gt; I&apos;m guessing you just copied the code the way I had written it in the past, but now I see a more readable way we could write this (ignoring my abbreviated variables):
&gt; 
&gt; FloatRect rootSurfaceDamageInLocalSurfaceSpace = projectClippedRect(inverse, rootDamageRect)
&gt; FloatRect clipAndDamageRect;
&gt; if (layer-&gt;usesLayerClipping())
&gt;     clipAndDamageRect = intersection(layer-&gt;clipRect(), rootSurfaceDamageInLocalSurfaceSpace);
&gt; else
&gt;     clipAndDamageRect = intersection(renderSurface-&gt;contentRect(), rootSurfaceDamageInLocalSurfaceSpace);
&gt; 
&gt; The advantage of this is that we don&apos;t accidentally mislead anyone by temporarily assigning the transformed damage to the clipAndDamage.

rootSurfaceDamageInLocalSurfaceSpace == surfaceSwapRect, right? Can we call it that instead? Then we&apos;re saying scissor = intersection(clip, swapRect) which is more precise yes?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:749
&gt;&gt; +        }
&gt; 
&gt; should we put an else { assert not reached } here?   I&apos;m genuinely asking, not suggesting - maybe reviewers can say more definitively if its appropriate.

It would be reached, with it.representsTargetRenderSurface(). We just don&apos;t do anything in that case, we use the contributing surface case instead. This avoids trying to set a scissor on the root surface (it&apos;s not contributing) based on its non-existent parent.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:261
&gt; +            rootDamageRect = FloatRect(FloatPoint(0, 0), viewportSize());

This should use deviceViewportSize() like the similar computation below does.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:277
&gt;&gt; +    m_rootLayerImpl-&gt;setScissorRect(enclosingIntRect(rootDamageRect));
&gt; 
&gt; Personally I don&apos;t like the idea that calculateRenderSurfaceLayerList() would have any return value.  It feels right as a purely imperative, procedural function that changes state of the class.  It looks like the reason we needed this return value is to call setScissorRect for the rootLayerImpl.  Do we need this, however?  wouldn&apos;t this be correctly set by calculateVisibleAndScissorRects() ?
&gt; 
&gt; At the very least, how about we put this inside of calculateRenderSurfaceLayerList() so that we don&apos;t need to return that local rootDamageRect?  It makes sense for that line to be as closely grouped to calculateVisibleAndScissorRects as possible, if its not actually be computed inside of it.

The return value is actually the rootSwapRect right now, not the rootDamageRect I guess. This return value could also be used by the CCOcclusionTracker instead of recomputing it again below.

I agree the rootLayer&apos;s scissor should be set in CCLayerTreeHostCommon::calculateVisibleAndScissorRects. Right now it&apos;s not being set on the main thread right? If it&apos;s inside there then it would be always set when the others are set.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:425
&gt;&gt; +        m_layerRenderer-&gt;drawRenderPass(renderPass, surfaceSwapRect);
&gt; 
&gt; I&apos;m unclear why we need to pass surfaceSwapRect here (and the name seems awkward, since surfaces don&apos;t do swapping?)... isnt the whole point of this patch that we already computed the scissor rects we want to use by this point?  So this would be redundant and unnecessary, because the scissors for all surfaces and layers (and hence, quads) are already known by this time, right?

(In debug) We clear everything in the surface that is going to be drawn. This area is its swap rect, not its scissor rect (which is in its target). Can also think of it as the union of all scissorRects of things that draw into it.

Swap rect is the partial swap rect transformed into the surface, or the part of the surface that will be included in the swap. I got that name idea from convo with you about distinguishing damage rect vs partial swap rect. Do you think a different name would be more clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637743</commentid>
    <comment_count>24</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-30 15:10:22 -0700</bug_when>
    <thetext>I think we&apos;re having a little bit of terminology confusion:

Swapping doesn&apos;t really have meaning, in my opinion, for renderSurfaces.  The way I see it, we should have the following definitions:

damageRect: the rect that represents a region that has changed on a surface

clipRect: the rect that represents a region that clips a layer/surface

scissorRect:  the rect that is actually given to glScissor, used to avoid redrawing stuff that hasn&apos;t changed, or to avoid drawing stuff that should actually be clipped.  that means its the intersection of damage and clip (assuming both damage and clip are being used on that particular layer)

swapRect: The rect that needs to be swapped from back-buffer to front buffer at the very end of our compositing algorithm. -- doesn&apos;t seem to be relevant to this patch, and maybe the word swap shouldn&apos;t even come up?

If we use that terminology, I think it makes sense to *not* use swapRect. in those places. I think we really do mean damage in those cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637748</commentid>
    <comment_count>25</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-30 15:15:05 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; rootSurfaceDamageInLocalSurfaceSpace == surfaceSwapRect, right? Can we call it that instead? Then we&apos;re saying scissor = intersection(clip, swapRect) which is more precise yes?
&gt; 

so based on my previous comment - I think they are not the same at all... surfaceSwap in my opinion doesn&apos;t have meaning, the swap concept doesn&apos;t exist on surfaces.  So I would say it is more precise to say intersection(clip, rootSurfaceDamageInLocalSurfaceSpace).


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:261
&gt; &gt; +            rootDamageRect = FloatRect(FloatPoint(0, 0), viewportSize());
&gt; 
&gt; This should use deviceViewportSize() like the similar computation below does.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:277
&gt; &gt;&gt; +    m_rootLayerImpl-&gt;setScissorRect(enclosingIntRect(rootDamageRect));
&gt; &gt; 
&gt; &gt; Personally I don&apos;t like the idea that calculateRenderSurfaceLayerList() would have any return value.  It feels right as a purely imperative, procedural function that changes state of the class.  It looks like the reason we needed this return value is to call setScissorRect for the rootLayerImpl.  Do we need this, however?  wouldn&apos;t this be correctly set by calculateVisibleAndScissorRects() ?
&gt; &gt; 
&gt; &gt; At the very least, how about we put this inside of calculateRenderSurfaceLayerList() so that we don&apos;t need to return that local rootDamageRect?  It makes sense for that line to be as closely grouped to calculateVisibleAndScissorRects as possible, if its not actually be computed inside of it.
&gt; 
&gt; The return value is actually the rootSwapRect right now, not the rootDamageRect I guess. This return value could also be used by the CCOcclusionTracker instead of recomputing it again below.
&gt; 
&gt; I agree the rootLayer&apos;s scissor should be set in CCLayerTreeHostCommon::calculateVisibleAndScissorRects. Right now it&apos;s not being set on the main thread right? If it&apos;s inside there then it would be always set when the others are set.
&gt; 

Is it possible the swap/scissor/damage definition clarification changes what you&apos;re saying here?  If you still think we need this return value, lets discuss offline and then update this bug with a summary of our discussion?


&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:425
&gt; &gt;&gt; +        m_layerRenderer-&gt;drawRenderPass(renderPass, surfaceSwapRect);
&gt; &gt; 
&gt; &gt; I&apos;m unclear why we need to pass surfaceSwapRect here (and the name seems awkward, since surfaces don&apos;t do swapping?)... isnt the whole point of this patch that we already computed the scissor rects we want to use by this point?  So this would be redundant and unnecessary, because the scissors for all surfaces and layers (and hence, quads) are already known by this time, right?
&gt; 
&gt; (In debug) We clear everything in the surface that is going to be drawn. This area is its swap rect, not its scissor rect (which is in its target). Can also think of it as the union of all scissorRects of things that draw into it.
&gt; 
&gt; Swap rect is the partial swap rect transformed into the surface, or the part of the surface that will be included in the swap. I got that name idea from convo with you about distinguishing damage rect vs partial swap rect. Do you think a different name would be more clear?

Same for here - if needed lets discuss offline briefly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637946</commentid>
    <comment_count>26</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 19:47:59 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; rootSurfaceDamageInLocalSurfaceSpace == surfaceSwapRect, right? Can we call it that instead? Then we&apos;re saying scissor = intersection(clip, swapRect) which is more precise yes?
&gt; &gt; 
&gt; 
&gt; so based on my previous comment - I think they are not the same at all... surfaceSwap in my opinion doesn&apos;t have meaning, the swap concept doesn&apos;t exist on surfaces.  So I would say it is more precise to say intersection(clip, rootSurfaceDamageInLocalSurfaceSpace).

Shawn and I spoke offline about this naming stuff.. calling it &quot;swap&quot; rect is correct now, but he has plans that will make it less-so in the future. We arrived at the following naming scheme:

- the rect in root space that is the aggregate of all damage is the &quot;rootScissorRect&quot;. (this is currently called &quot;rootDamageRect&quot; in the code which is a misnomer.)

- this same rect, transformed to a non-root surface is called &quot;rootScissorRectInCurrentSurface&quot; (or ...TargetSurface etc if appropriate). This indicates that its the rootScissorRect transformed to some other surface.

Can we use these names throughout this patch? Sorry for the name churn :/

&gt; &gt; &gt; At the very least, how about we put this inside of calculateRenderSurfaceLayerList() so that we don&apos;t need to return that local rootDamageRect?  It makes sense for that line to be as closely grouped to calculateVisibleAndScissorRects as possible, if its not actually be computed inside of it.
&gt; &gt; 
&gt; &gt; The return value is actually the rootSwapRect right now, not the rootDamageRect I guess. This return value could also be used by the CCOcclusionTracker instead of recomputing it again below.
&gt; &gt; 
&gt; &gt; I agree the rootLayer&apos;s scissor should be set in CCLayerTreeHostCommon::calculateVisibleAndScissorRects. Right now it&apos;s not being set on the main thread right? If it&apos;s inside there then it would be always set when the others are set.
&gt; &gt; 
&gt; 
&gt; Is it possible the swap/scissor/damage definition clarification changes what you&apos;re saying here?  If you still think we need this return value, lets discuss offline and then update this bug with a summary of our discussion?

We use the rootScissorRect as input for the CCOcclusionTracker, so it&apos;d be nice to get that from the calculateRenderSurfaceLayerList function somehow instead of computing it again. Perhaps just using a reference parameter would feel nicer instead of a return value, as it has a name. The meaning of a FloatRect being returned from calculateRSLL is a bit vague.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638296</commentid>
    <comment_count>27</comment_count>
      <attachid>144908</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-31 05:59:59 -0700</bug_when>
    <thetext>Comment on attachment 144908
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        Covered by existing layout tests. Introduced more unit tests to
&gt; 
&gt; Its worth pointing out that damage tracking and scissoring aren&apos;t actually covered by layout tests.  DumpRenderTree reads back from the backbuffer, and therefore partial swap (and hence the scissoring) doesn&apos;t apply in those cases.  This can possibly be fixed in the long run for &quot;repaint&quot; layout tests, but in general it is just the nature of layout tests that prevents it.

I meant that the code changes were not supposed to change any functionality therefore no new e2e tests are needed. Existing tests would catch if we broke something unrelated. The scissorRect computation is covered by unit tests.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:74
&gt;&gt; +    FloatRect clipAndDamage = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootDamageRect);
&gt; 
&gt; Since we removed that helper function, I think we should add a comment here now that makes it clear what we&apos;re doing with this transform (i.e. that we&apos;re computing the damage in local surface space, where the rootDamageRect is in root surface space.)

Let&apos;s bring back the helper function. It will be duplicated in 2 places now (because we merged the calcScissorRects, but oh well), but right now I&apos;ll need to paste the same comment in THREE places. When we merge the surface classes, one implementation will go away, and then we can move it into more appropriate place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638321</commentid>
    <comment_count>28</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-31 06:23:11 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 144908 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144908&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:13
&gt; &gt;&gt; +        Covered by existing layout tests. Introduced more unit tests to
&gt; &gt; 
&gt; &gt; Its worth pointing out that damage tracking and scissoring aren&apos;t actually covered by layout tests.  DumpRenderTree reads back from the backbuffer, and therefore partial swap (and hence the scissoring) doesn&apos;t apply in those cases.  This can possibly be fixed in the long run for &quot;repaint&quot; layout tests, but in general it is just the nature of layout tests that prevents it.
&gt; 
&gt; I meant that the code changes were not supposed to change any functionality therefore no new e2e tests are needed. Existing tests would catch if we broke something unrelated. The scissorRect computation is covered by unit tests.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:74
&gt; &gt;&gt; +    FloatRect clipAndDamage = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootDamageRect);
&gt; &gt; 
&gt; &gt; Since we removed that helper function, I think we should add a comment here now that makes it clear what we&apos;re doing with this transform (i.e. that we&apos;re computing the damage in local surface space, where the rootDamageRect is in root surface space.)
&gt; 
&gt; Let&apos;s bring back the helper function. It will be duplicated in 2 places now (because we merged the calcScissorRects, but oh well), but right now I&apos;ll need to paste the same comment in THREE places. When we merge the surface classes, one implementation will go away, and then we can move it into more appropriate place.

Sure, let&apos;s call it like the variable would be, something like computeRootScissorRectInCurrentSurface(rootScissorRect)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638363</commentid>
    <comment_count>29</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-05-31 06:56:02 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; (From update of attachment 144908 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144908&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/ChangeLog:13
&gt; &gt; &gt;&gt; +        Covered by existing layout tests. Introduced more unit tests to
&gt; &gt; &gt; 
&gt; &gt; &gt; Its worth pointing out that damage tracking and scissoring aren&apos;t actually covered by layout tests.  DumpRenderTree reads back from the backbuffer, and therefore partial swap (and hence the scissoring) doesn&apos;t apply in those cases.  This can possibly be fixed in the long run for &quot;repaint&quot; layout tests, but in general it is just the nature of layout tests that prevents it.
&gt; &gt; 
&gt; &gt; I meant that the code changes were not supposed to change any functionality therefore no new e2e tests are needed. Existing tests would catch if we broke something unrelated. The scissorRect computation is covered by unit tests.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:74
&gt; &gt; &gt;&gt; +    FloatRect clipAndDamage = CCMathUtil::projectClippedRect(inverseScreenSpaceTransform, rootDamageRect);
&gt; &gt; &gt; 
&gt; &gt; &gt; Since we removed that helper function, I think we should add a comment here now that makes it clear what we&apos;re doing with this transform (i.e. that we&apos;re computing the damage in local surface space, where the rootDamageRect is in root surface space.)
&gt; &gt; 
&gt; &gt; Let&apos;s bring back the helper function. It will be duplicated in 2 places now (because we merged the calcScissorRects, but oh well), but right now I&apos;ll need to paste the same comment in THREE places. When we merge the surface classes, one implementation will go away, and then we can move it into more appropriate place.
&gt; 
&gt; Sure, let&apos;s call it like the variable would be, something like computeRootScissorRectInCurrentSurface(rootScissorRect)

Shawn are you OK with this name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638420</commentid>
    <comment_count>30</comment_count>
      <attachid>144908</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-05-31 07:55:02 -0700</bug_when>
    <thetext>Comment on attachment 144908
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:277
&gt;&gt;&gt; +    m_rootLayerImpl-&gt;setScissorRect(enclosingIntRect(rootDamageRect));
&gt;&gt; 
&gt;&gt; Personally I don&apos;t like the idea that calculateRenderSurfaceLayerList() would have any return value.  It feels right as a purely imperative, procedural function that changes state of the class.  It looks like the reason we needed this return value is to call setScissorRect for the rootLayerImpl.  Do we need this, however?  wouldn&apos;t this be correctly set by calculateVisibleAndScissorRects() ?
&gt;&gt; 
&gt;&gt; At the very least, how about we put this inside of calculateRenderSurfaceLayerList() so that we don&apos;t need to return that local rootDamageRect?  It makes sense for that line to be as closely grouped to calculateVisibleAndScissorRects as possible, if its not actually be computed inside of it.
&gt; 
&gt; The return value is actually the rootSwapRect right now, not the rootDamageRect I guess. This return value could also be used by the CCOcclusionTracker instead of recomputing it again below.
&gt; 
&gt; I agree the rootLayer&apos;s scissor should be set in CCLayerTreeHostCommon::calculateVisibleAndScissorRects. Right now it&apos;s not being set on the main thread right? If it&apos;s inside there then it would be always set when the others are set.

After discussing with Dana briefly, I&apos;ll just make m_rootDamageRect (now m_rootScissorRect) to be set to deviceViewPortSize when not using partial swap. This will remove the need for either return value or out param.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638580</commentid>
    <comment_count>31</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-31 11:10:16 -0700</bug_when>
    <thetext>&gt; &gt; Sure, let&apos;s call it like the variable would be, something like computeRootScissorRectInCurrentSurface(rootScissorRect)
&gt; 
&gt; Shawn are you OK with this name?

Sure, I&apos;m OK with it. =)

Please forgive me if I bring this up again a little bit down the road when we have some retrospective about what better naming we can have.  But there is definitely no need to block you on this naming stuff for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639371</commentid>
    <comment_count>32</comment_count>
      <attachid>145316</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-06-01 08:36:36 -0700</bug_when>
    <thetext>Created attachment 145316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639381</commentid>
    <comment_count>33</comment_count>
      <attachid>145316</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-01 08:43:32 -0700</bug_when>
    <thetext>Comment on attachment 145316
Patch

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

If Shawn&apos;s happy I think we&apos;re definitely ready for a more formal review :)

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:388
&gt; +void LayerRendererChromium::clearRenderSurface(CCRenderSurface* renderSurface, CCRenderSurface* rootRenderSurface, const FloatRect&amp; surfaceSwapRect)

last nit: Thanks for switching the naming elsewhere, just in the LRC .cpp/.h files: s/surfaceSwapRect/rootScissorRectInCurrentSurface/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639506</commentid>
    <comment_count>34</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-01 10:36:50 -0700</bug_when>
    <thetext>I tested this most recent patch manually on several pages with --enable-partial-swap, and it seems to work just fine =)   pretty awesome, Zeev!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639771</commentid>
    <comment_count>35</comment_count>
      <attachid>145316</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-01 15:13:18 -0700</bug_when>
    <thetext>Comment on attachment 145316
Patch

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

Calculating scissor rects along with visibility rather than during drawing seems great.  (Although those two calculate functions really should eventually be combined...)  I like the code changes here a lot, but have some questions about your tests.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:390
&gt; +        /* empty list */

nit: Don&apos;t use C-style comments unless it&apos;s multiline.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1217
&gt; +        // 0 is the hardcoded return value of getUniformLocation
&gt; +        // 1 is count ???
&gt; +        // Boolean cast to str??
&gt; +        // float* values
&gt; +        EXPECT_CALL(*m_context, uniformMatrix4fv(0, 1, _, _))
&gt; +            .WillOnce(Return())
&gt; +            .RetiresOnSaturation();
&gt; +
&gt; +        // 0 is the hardcoded return value of getUniformLocation
&gt; +        // 3 floats are color / 255
&gt; +        // 1 is Alpha
&gt; +        EXPECT_CALL(*m_context, uniform4f(0, _, _, _, 1))
&gt; +            .WillOnce(Return())
&gt; +            .RetiresOnSaturation();

Do you really need to expect all of these uniforms? This seems a bit overtested. Is drawElements and useProgram(1) enough to catch this?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1262
&gt; +    // Set up mock graphics context

I love all the comments you have in headers in this patch, but I feel like a lot of these tests are a bit over-commented.  You don&apos;t need to say what you&apos;re doing unless it&apos;s not obvious.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1270
&gt; +    harness.mustSetScissor(0, 0, 10, 10);
&gt; +    harness.mustSetScissor(0, 0, 10, 10);

Why is the scissor set twice? Can we not do that or at worst make the test not have to care about that implementation detail?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1336
&gt; +static PassOwnPtr&lt;CCLayerTreeHostImpl&gt; setupLayersForOpacity(bool partialSwap, CCLayerTreeHostImplClient* client)
&gt; +{
&gt; +    CCSettings settings;
&gt; +    settings.partialSwapEnabled = true;

What&apos;s the partialSwap parameter supposed to be doing? Are the tests using this wrong?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1440
&gt; +TEST_F(CCLayerTreeHostImplTest, quadsToFillScreen)

What does this test do that viewportCovered doesn&apos;t do?

&gt; Source/WebKit/chromium/tests/CCRenderSurfaceTest.cpp:116
&gt; +    

nit: useless whitespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639924</commentid>
    <comment_count>36</comment_count>
      <attachid>145316</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-06-01 19:27:39 -0700</bug_when>
    <thetext>Comment on attachment 145316
Patch

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

Thanks; fixed all except where indicated

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:390
&gt;&gt; +        /* empty list */
&gt; 
&gt; nit: Don&apos;t use C-style comments unless it&apos;s multiline.

Actually didn&apos;t need this comment at all; removed.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1217
&gt;&gt; +            .RetiresOnSaturation();
&gt; 
&gt; Do you really need to expect all of these uniforms? This seems a bit overtested. Is drawElements and useProgram(1) enough to catch this?

Yes that would be enough; Moved them to be ignored.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1262
&gt;&gt; +    // Set up mock graphics context
&gt; 
&gt; I love all the comments you have in headers in this patch, but I feel like a lot of these tests are a bit over-commented.  You don&apos;t need to say what you&apos;re doing unless it&apos;s not obvious.

Removed more obvious comments

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1270
&gt;&gt; +    harness.mustSetScissor(0, 0, 10, 10);
&gt; 
&gt; Why is the scissor set twice? Can we not do that or at worst make the test not have to care about that implementation detail?

First is for clearing the surface, second for drawing the quads; added comment to that effect. It seems important to distinguish this in the tests, in the sense that either 3 calls or 1 would be wrong.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1336
&gt;&gt; +    settings.partialSwapEnabled = true;
&gt; 
&gt; What&apos;s the partialSwap parameter supposed to be doing? Are the tests using this wrong?

Good catch thanks. The parameter was not used, but it only affected test coverage, not correctness. This is because the expectations are identical in both cases.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1440
&gt;&gt; +TEST_F(CCLayerTreeHostImplTest, quadsToFillScreen)
&gt; 
&gt; What does this test do that viewportCovered doesn&apos;t do?

I see two differences - one that this one is using partial swap, and two that we have more surfaces. I also remember needing this to catch something, though cannot remember what right now.

&gt;&gt; Source/WebKit/chromium/tests/CCRenderSurfaceTest.cpp:116
&gt;&gt; +    
&gt; 
&gt; nit: useless whitespace

Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639925</commentid>
    <comment_count>37</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-01 19:36:14 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; &gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1440
&gt; &gt;&gt; +TEST_F(CCLayerTreeHostImplTest, quadsToFillScreen)
&gt; &gt; 
&gt; &gt; What does this test do that viewportCovered doesn&apos;t do?
&gt; 
&gt; I see two differences - one that this one is using partial swap, and two that we have more surfaces. I also remember needing this to catch something, though cannot remember what right now.

Maybe it can be called viewportCoveredWithPartialSwap then? makes the reason it exists more clear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639935</commentid>
    <comment_count>38</comment_count>
      <attachid>145424</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-06-01 19:52:10 -0700</bug_when>
    <thetext>Created attachment 145424
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639942</commentid>
    <comment_count>39</comment_count>
      <attachid>145424</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-01 20:31:13 -0700</bug_when>
    <thetext>Comment on attachment 145424
Patch

Attachment 145424 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12861844</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640020</commentid>
    <comment_count>40</comment_count>
      <attachid>145444</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-06-02 06:36:45 -0700</bug_when>
    <thetext>Created attachment 145444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640021</commentid>
    <comment_count>41</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-06-02 06:37:37 -0700</bug_when>
    <thetext>Rebased and uploaded again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640071</commentid>
    <comment_count>42</comment_count>
      <attachid>145444</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-02 12:52:07 -0700</bug_when>
    <thetext>Comment on attachment 145444
Patch

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

Thanks for the changes.  R=me, with two small changes:

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1275
&gt; +    // One scissor for clearing surface, another for drawing the quads
&gt; +    harness.mustSetScissor(0, 8, 2, 2);
&gt; +    harness.mustSetScissor(0, 8, 2, 2);

Hmm.  I still think mustSetScissor should allow any number of redundant scissor settings.  If we start shadowing state locally in LRC and not repeatedly setting scissors, then this test would needlessly fail because of that implementation detail.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:1421
&gt; +TEST_F(CCLayerTreeHostImplTest, quadsToFillScreen)

I still don&apos;t think this really adds anything over the other test (or occlusion tests that have multiple surfaces) and should probably just get removed.  If you&apos;re going to add a gutter quad test related to partial swap, then it should probably be something where the scissor is smaller than the viewport and then you verify that the quads fill the scissor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640073</commentid>
    <comment_count>43</comment_count>
      <attachid>145458</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-06-02 13:34:33 -0700</bug_when>
    <thetext>Created attachment 145458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640074</commentid>
    <comment_count>44</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-06-02 13:39:45 -0700</bug_when>
    <thetext>Thanks; implemented the two changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640565</commentid>
    <comment_count>45</comment_count>
      <attachid>145584</attachid>
    <who name="">zlieber</who>
    <bug_when>2012-06-04 07:22:44 -0700</bug_when>
    <thetext>Created attachment 145584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640569</commentid>
    <comment_count>46</comment_count>
    <who name="">zlieber</who>
    <bug_when>2012-06-04 07:25:05 -0700</bug_when>
    <thetext>Rebased and re-uploaded with reviewer information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640615</commentid>
    <comment_count>47</comment_count>
      <attachid>145584</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-04 08:42:31 -0700</bug_when>
    <thetext>Comment on attachment 145584
Patch

Clearing flags on attachment: 145584

Committed r119401: &lt;http://trac.webkit.org/changeset/119401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640616</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-04 08:42:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143362</attachid>
            <date>2012-05-22 14:31:09 -0700</date>
            <delta_ts>2012-05-24 07:17:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120522173108.patch</filename>
            <type>text/plain</type>
            <size>73353</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRkOTI1MWI2ZjJjMTlk
MzMxMDJhNWI0ZWVhM2RhYzRlMDM2Mjg3MS4uMTkzZWFjMDRhNGE4ZjA1YTU2NDNiOTMxY2UyMjJk
YWZkYzc1NWU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA1LTIyICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorICAgICAgICAKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMuIEludHJvZHVjZWQgbW9yZSB1bml0
IHRlc3RzIHRvCisgICAgICAgIHRlc3QgZW5kLXRvLWVuZCBkcmF3aW5nIHVzaW5nIG1vY2sgZ3Jh
cGhpYyBjb250ZXh0LCBhcyB3ZWxsIGFzCisgICAgICAgIHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9u
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5
ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVy
Q2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVt
OjpzY2lzc29yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OndhbGtMYXllcnNBbmRDYWxjdWxhdGVTY2lzc29yUmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAg
KENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorICAgICAg
ICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpjYWxjU2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpj
cmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNjcmVlblRvU3VyZmFjZVNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVRvU2NyZWVuU3BhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5oOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpzY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6
Q0NTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2hhcmVkUXVhZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJlZFF1YWRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3NvclJlY3QpOgorCiAyMDEy
LTA1LTIyICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CiAKICAg
ICAgICAgW1F0XSBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLnBhdGguc3Ryb2tlLm92ZXJsYXAuaHRt
bCBmYWlscyB3aXRoIFF0LTQuNi4yIG9yIGhpZ2hlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBjZTJlNDI4ZmE0NzczYzI1Zjk3NWVhZjA4YjMzMjhjNzdhMDU2NjllLi45YjU4NDY2MTVh
MGJjMDQ5YjM1ZDJhYjFhZDMwNjU0ZDg3OWVmZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA1LTIyICBaZWV2IExpZWJlciAgPHpsaWViZXJAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xlYW51cCBzY2lzc29yIHJlY3QgY29t
cHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6CisgICAgICAg
IChXZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6CisgICAgICAgICog
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0
czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgICog
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDT2Nj
bHVzaW9uVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9u
VHJhY2tlclRlc3Q6OmNhbGNEcmF3RXRjKToKKyAgICAgICAgKiB0ZXN0cy9DQ1JlbmRlclN1cmZh
Y2VUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTA1LTIyICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBhc3NlcnRzIGluIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoKgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IDZiNDM3MGQxYTEwYzhlNDc5NzMyNDZmMzk4ODUwZjFiNmM0NTBhMGMuLjU4OWVi
Zjg2ODBhZDRiYzc2MWI2YjE0NGQwMDg2Mjc5ZjliNjY0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
QEAgLTEzOSw2ICsxMzksOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxh
eWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVyUmVjdDsgfQogICAgIHZvaWQg
c2V0VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KSB7IG1f
dmlzaWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0KIAorICAgIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZv
aWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29y
UmVjdCA9IHNjaXNzb3JSZWN0OyB9CisKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogCkBAIC0zMDYsNiArMzA5LDcgQEAgcHJpdmF0
ZToKICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAg
SW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0Owog
ICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAg
ICAgYm9vbCBtX3Nob3VsZFNjcm9sbE9uTWFpblRocmVhZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IGE5ZjNkNDY2NWQzNmU1MjhkM2ZlM2ZjOTFjODYwMjVmNGU5
YTg3ZWQuLjcyMzk2NWFmNTg3OWEyYmFhNDk3Y2NkMWMwMjkxMjcxZjUxMjljZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDQ4LDMxICs0NDgsMjggQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRvTm9PcCgpCiAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5mbHVzaCgpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBh
c3MsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CiAgICAgQ0NSZW5kZXJTdXJm
YWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlm
ICghdXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY2xlYXJSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZh
Y2UsIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIGNsZWFyUmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCByZW5kZXJTdXJmYWNl
LT5kYW1hZ2VJblN1cmZhY2VTcGFjZShyb290RGFtYWdlUmVjdCkpOwogCiAgICAgY29uc3QgQ0NR
dWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwogICAgIGZvciAoQ0NR
dWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVhZExpc3QuYmFja1RvRnJv
bnRCZWdpbigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK2l0KQotICAgICAg
ICBkcmF3UXVhZChpdC0+Z2V0KCksIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOwor
ICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCksIHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkp
OwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3
UXVhZCogcXVhZCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwogICAgIGlm
IChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBj
bGlwQW5kRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgICAgICBpZiAoIXF1YWQt
PmNsaXBSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50
ZXJzZWN0KHF1YWQtPmNsaXBSZWN0KCkpOwotICAgICAgICBzY2lzc29yUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpOworICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQt
PnNjaXNzb3JSZWN0KCk7CiAgICAgICAgIGlmIChzY2lzc29yUmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gcXVhZC0+
Y2xpcFJlY3QoKTsKKyAgICAgICAgc2Npc3NvclJlY3QgPSBjbGlwUmVjdDsKIAogICAgIGlmIChz
Y2lzc29yUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CkBAIC02MjksNyArNjI2
LDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyU3VyZmFjZVF1YWQo
Y29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAKICAgICBkcmF3QmFja2dyb3VuZEZpbHRl
cnMocXVhZCk7CiAKLSAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRTY2lzc29yUmVjdCh0
aGlzLCBxdWFkLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBJbnRSZWN0IHNjaXNzb3JSZWN0
OworICAgIGlmICghbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y2FsY1NjaXNzb3JSZWN0KG1fY2Fw
YWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXAsIHF1YWQtPnN1cmZhY2VEYW1hZ2VSZWN0KCksIHNj
aXNzb3JSZWN0KSkKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICBlbHNlCisgICAgICAgIHNldFNj
aXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOworCiAgICAgaWYgKHF1YWQtPmlzUmVwbGljYSgpKQog
ICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3UmVwbGljYSh0aGlzKTsKICAgICBl
bHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDFhMmViZWQwZTg2Yjk5
ZjU4MTk2ODMxYmNlY2U0NjMwMTQ3MmM5NTkuLmY3ZGFmZWYxZDdkNThkNTZmNjNjYmZlZWIxZDUw
YzMwYzAwZjJkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC05Myw3
ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdwb3J0Q2hhbmdlZCgpOwogCiAgICAgdm9p
ZCBiZWdpbkRyYXdpbmdGcmFtZShDQ1JlbmRlclN1cmZhY2UqIGRlZmF1bHRSZW5kZXJTdXJmYWNl
KTsKLSAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHZv
aWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBy
b290RGFtYWdlUmVjdCk7CiAgICAgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKTsKIAogICAgIHZv
aWQgZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgaHVk
U2l6ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgcHJpdmF0ZToKICAgICBpbnQgdmlld3BvcnRXaWR0
aCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCk7IH0KICAgICBpbnQgdmlld3BvcnRI
ZWlnaHQoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS5oZWlnaHQoKTsgfQogCi0gICAgdm9pZCBk
cmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdl
UmVjdCk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpOwogICAgIHZvaWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVj
a2VyYm9hcmREcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBD
Q0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhj
b25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaAppbmRleCA4ZDAxN2EzMTMyMjBkYzMxNzA3Njk4NmUxZDViZDFiMmEwNTQ1MmM5Li42
MDY1MGRkMmYyZjk3NzIwOGE1MzQxNmQzZWNjNjM0NWU5NDM5MTBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtOTEsNiArOTEsOSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9p
ZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgeyBtX2NsaXBSZWN0ID0gY2xp
cFJlY3Q7IH0KIAorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVj
dCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CisKICAgICB2
b2lkIHNldEZpbHRlcnMoY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KIApAQCAtMTMz
LDYgKzEzNiw3IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1f
ZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmls
dGVyczsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0
OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsKIAogICAg
IC8vIFRoZSBuZWFyZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRoYXQgd2lsbCBjb250YWlu
IHRoZSBjb250ZW50cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlzIGdvaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Ry
YXdRdWFkLmgKaW5kZXggZjRlZjJkM2YyMWMxZmFlNTc2NjYzY2QzMjJmY2IxMjdiODdjYmZlYi4u
NzE4MTEyYmM2ZjE5MTcyNjMwOTMyZTRlNWJhMmM0MGMzYzNjOTJhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1
YWQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+
cXVhZFRyYW5zZm9ybSgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVy
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNm
b3JtKCk7IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJSZWN0KCk7IH0KLSAgICBjb25zdCBJbnRSZWN0JiBjbGlw
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5jbGlwUmVjdCgpOyB9Cisg
ICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1
YWRTdGF0ZS0+c2Npc3NvclJlY3QoKTsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0eSgpOyB9CiAgICAgLy8gRm9yIHRoZSBwdXJw
b3NlcyBvZiBibGVuZGluZywgd2hhdCBwYXJ0IG9mIHRoZSBjb250ZW50cyBvZiB0aGlzIHF1YWQg
YXJlIG9wYXF1ZT8KICAgICBJbnRSZWN0IG9wYXF1ZVJlY3QoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAppbmRleCBiNzQ2ZDk4NDFkMTc1MWE1MjMwOTY0ZDI3NzExOGZiM2U2ZDMzY2I4
Li45NGUyNGMxNGU1OTFjOTM0NzZlMDQ4OTc5ZmJhNTRiMDRhOTRlNjM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCkBAIC0xMzYsMTAgKzEzNiw3IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2Nl
bmRhbnREcmF3c0NvbnRlbnQoKQogCiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ0xh
eWVySW1wbDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGxh
eWVyQ2xpcFJlY3Q7Ci0gICAgaWYgKHVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVy
Q2xpcFJlY3QgPSBjbGlwUmVjdCgpOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKHF1YWRUcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCB2aXNpYmxlTGF5ZXJSZWN0KCks
IGxheWVyQ2xpcFJlY3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1ZSgpKTsKKyAgICByZXR1cm4gQ0NT
aGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwg
dmlzaWJsZUxheWVyUmVjdCgpLCBtX3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBvcGFxdWUo
KSk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA5N2M1NjA3ZmNmYWE0OGQ0Nzk5ZjEyNzJkMjA1
ZWZiMTY4NmVkNmU0Li4wYmEzZmEyODc5YzhkOGUyOTIxN2EyZDg4MjkyN2JhMDg4YjMwMTczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE2MCw2ICsxNjAsMTAgQEAgcHVibGljOgogICAgIC8v
IFVzYWdlOiBpZiB0aGlzLT51c2VzTGF5ZXJDbGlwcGluZygpIGlzIGZhbHNlLCB0aGVuIHRoaXMg
Y2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkLgogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgeyBtX2NsaXBSZWN0ID0gcmVjdDsgfQorCisgICAgY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAg
dm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3Qg
PSByZWN0OyB9CisKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdl
dFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVy
U3VyZmFjZSA9IHN1cmZhY2U7IH0KIApAQCAtMzQ4LDYgKzM1Miw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBp
ZiB0aGlzIGxheWVyIG1hc2tzCiAgICAgLy8gdG8gYm91bmRzLgogICAgIEludFJlY3QgbV9jbGlw
UmVjdDsKKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CiAKICAgICAvLyBSZW5kZXIgc3VyZmFj
ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFu
dHMKICAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCBmODJhYzM3M2NjMzQzZGFkYjMyODIwYjg5OTZlZjk5ZjFhNzBm
MmNhLi4xN2RjODBiYzJkYTJmNDBmNjFmOTA4ODI1NjZmODBlZGY3NzYzMzQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTUwNCw2ICs1MDQsOSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgQ0NUZXh0dXJl
VXBkYXRlciYgdQogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5z
Zm9ybTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5ncy5kZXZp
Y2VTY2FsZUZhY3Rvcik7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VT
Y2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVT
aXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCB2
aWV3cG9ydFNpemUoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyh1cGRhdGVMaXN0LCBkYW1hZ2VSZWN0KTsKICAgICB9CiAK
ICAgICAvLyBSZXNldCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJlcXVlc3RzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggM2YxYzM4ZjcyNWNkMjMxMjgw
N2Y4ODJmYTZkMzg1ZjJiOGI3YWY3NC4uZjM3MjE4NjMyYmFkZjc3ZDM4N2RiMDA2NDMwODAwZGQ4
YWMyZmI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBA
IC02NSw2ICs2NSw1MCBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIHJldHVybiBsYXll
clJlY3Q7CiB9CiAKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoQ0NM
YXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQoreworICAg
IENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCk7CisKKyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IHJlbmRlclN1cmZhY2UtPmRh
bWFnZUluU3VyZmFjZVNwYWNlKHJvb3REYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllci0+dXNl
c0xheWVyQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3QobGF5ZXIt
PmNsaXBSZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3Qo
cmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJT
Y2lzc29yUmVjdChMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFt
YWdlUmVjdCkKK3sKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCisgICAgICAg
IHJldHVybiBsYXllci0+Y2xpcFJlY3QoKTsKKyAgICByZXR1cm4gbGF5ZXItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
U3VyZmFjZVNjaXNzb3JSZWN0KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBy
b290RGFtYWdlUmVjdCkKK3sKKyAgICBDQ0xheWVySW1wbCogcGFyZW50TGF5ZXIgPSBsYXllci0+
cGFyZW50KCk7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBwYXJlbnRTdXJmYWNlID0gcGFyZW50TGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0ID0gcGFyZW50
U3VyZmFjZS0+Y2xpcFJlY3QoKTsKKyAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICBjbGlwUmVjdCA9IHBhcmVudFN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisKKyAgICBGbG9hdFJl
Y3QgcmVzdWx0ID0gcGFyZW50U3VyZmFjZS0+c3VyZmFjZVRvU2NyZWVuU3BhY2Uocm9vdERhbWFn
ZVJlY3QpOworICAgIHJlc3VsdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVN1cmZh
Y2VTY2lzc29yUmVjdChMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290
RGFtYWdlUmVjdCkKK3sKKyAgICBMYXllckNocm9taXVtKiBwYXJlbnRMYXllciA9IGxheWVyLT5w
YXJlbnQoKTsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHBhcmVudFN1cmZhY2UgPSBwYXJl
bnRMYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworICAgIEludFJlY3QgY2xpcFJlY3QgPSBw
YXJlbnRTdXJmYWNlLT5jbGlwUmVjdCgpOworICAgIGlmIChjbGlwUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIGNsaXBSZWN0ID0gcGFyZW50U3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICByZXR1
cm4gY2xpcFJlY3Q7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KIHN0YXRpYyBp
bmxpbmUgYm9vbCBsYXllcklzSW5FeGlzdGluZzNEUmVuZGVyaW5nQ29udGV4dChMYXllclR5cGUq
IGxheWVyKQogewpAQCAtNjU4LDcgKzcwMiw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAv
LyB0cmVlIHBhc3MsIHJldmlzZSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KCkgc28gdGhhdCB0
aGlzIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlCiAvLyBwYXNzIGluc2lkZSBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDw+KCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
Ci1zdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorc3RhdGljIHZvaWQgd2Fsa0xh
eWVyc0FuZENhbGN1bGF0ZVNjaXNzb3JSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CiAgICAgLy8g
VXNlIEJhY2tUb0Zyb250IHNpbmNlIGl0J3MgY2hlYXAgYW5kIHRoaXMgaXNuJ3Qgb3JkZXItZGVw
ZW5kZW50LgogICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgTGF5ZXJMaXN0
LCBSZW5kZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+
IENDTGF5ZXJJdGVyYXRvclR5cGU7CkBAIC02NjksMTkgKzcxMywzNCBAQCBzdGF0aWMgdm9pZCB3
YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYQogICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3Vs
YXRlVmlzaWJsZUxheWVyUmVjdCgqaXQpOwogICAgICAgICAgICAgaXQtPnNldFZpc2libGVMYXll
clJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGl0LnJlcHJl
c2VudHNJdHNlbGYoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1
bGF0ZUxheWVyU2Npc3NvclJlY3QoKml0LCByb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICBp
dC0+c2V0U2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAgICB9IGVsc2UgaWYgKGl0LnJl
cHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEludFJl
Y3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoKml0LCByb290RGFt
YWdlUmVjdCk7CisgICAgICAgICAgICBpdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRTY2lzc29yUmVj
dChzY2lzc29yUmVjdCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxI
aWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3Qs
IGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4obGF5ZXIsIHJvb3RM
YXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5ZXJz
QW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHM8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwq
IHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYg
bGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXpl
KQogewogICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPEND
TGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVy
U29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1h
eFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVj
dHM8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFn
ZVJlY3QpCit7CisgICAgd2Fsa0xheWVyc0FuZENhbGN1bGF0ZVNjaXNzb3JSZWN0czxMYXllckNo
cm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZVJlY3QpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhW
ZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3QgRmxvYXRS
ZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlU2Npc3Nv
clJlY3RzPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNl
PihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlUmVjdCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5k
ZXggMzc2MmY2NGIxOWIzMTM0OTk4ZTQwYjQ0NzYzOGEyNDZmMTI0OGJiYi4uMmVmMzRkODcxNDg0
NzllMTY0YWM1MDNhZDUwNWFmOWIyZmYwNGMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiwgTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50
TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVT
aXplKTsKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVs
bEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBp
bnQgbWF4VGV4dHVyZVNpemUpOwogCisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCk7CisgICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJl
Y3QpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5k
ZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFj
ZUxheWVySUQpOwogCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA5ZWUyZGYyMjNmNTIxMjQxMDE2ZTUzMjgw
YWJiNzYxZWU0NTc5NmIwLi5lN2FhMTYxNTQ2NGExZDNiYjAyNmY0MjY4MTNmMGI4MjUwMmZlY2Ux
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjI2LDI2ICsy
MjYsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMgRmxvYXRS
ZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHN1cmZh
Y2VEYW1hZ2VSZWN0OwotICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUg
cm9vdCBkYW1hZ2UgYXMgdGhlIGRhbWFnZSBmb3IKLSAgICAvLyBhbGwgc3VyZmFjZXMsIGV4Y2Vw
dCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOwotICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9y
bS5oYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25z
IGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mCi0gICAgICAgIC8vIGludmVyc2UgdHJh
bnNmb3Jtcy4gSW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bwotICAgICAgICAv
LyBqdXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1cmZhY2UuCi0gICAgICAgIC8vIEZJWE1FOiB1c2Ug
Y2FsY3VsYXRlVmlzaWJsZVJlY3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgotICAgICAgICBDQ1Jl
bmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSByZW5kZXJTdXJmYWNlLT5jb250
ZW50UmVjdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlu
dmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2Uo
KTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zv
cm0ubWFwUmVjdChyb290RGFtYWdlUmVjdCk7Ci0gICAgfQotICAgIHJldHVybiBzdXJmYWNlRGFt
YWdlUmVjdDsKLX0KLQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewog
ICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CkBAIC0yODAsNiAr
MjYwLDE0IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2Vz
KENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIHRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKIAorICAgIEZsb2F0UmVj
dCBkYW1hZ2VSZWN0OworICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQ
YXJ0aWFsU3dhcCkKKyAgICAgICAgZGFtYWdlUmVjdCA9IG1fcm9vdERhbWFnZVJlY3Q7CisgICAg
ZWxzZQorICAgICAgICBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZp
ZXdwb3J0U2l6ZSgpKTsKKyAgICAKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGFtYWdlUmVj
dCk7CisKICAgICAvLyBDcmVhdGUgdGhlIHJlbmRlciBwYXNzZXMgaW4gZGVwZW5kZW5jeSBvcmRl
ci4KICAgICBIYXNoTWFwPENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyUGFzcyo+IHN1cmZhY2VQ
YXNzTWFwOwogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewpAQCAt
Mjg3LDEyICsyNzUsNiBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogICAgICAgICBDQ1JlbmRl
clN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZh
Y2UoKTsKIAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5kZXJQYXNz
OjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1h
Z2VSZWN0OwotICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFy
dGlhbFN3YXApCi0gICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGRhbWFnZUluU3VyZmFj
ZVNwYWNlKHJlbmRlclN1cmZhY2VMYXllciwgbV9yb290RGFtYWdlUmVjdCk7Ci0gICAgICAgIHBh
c3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKLQogICAgICAgICBz
dXJmYWNlUGFzc01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CiAgICAgICAgIHBh
c3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTMyMywxMSArMzA1LDE1IEBA
IGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVy
UGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5lbnRl
ckxheWVyKGl0KTsKIAotICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRl
clN1cmZhY2UoKSkKLSAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFj
ZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIpOworICAgICAgICBpZiAoaXQucmVwcmVzZW50
c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgaWYgKCFsYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8fCAhaXQtPnNjaXNzb3JSZWN0
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVy
U3VyZmFjZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIsIG1fcm9vdERhbWFnZVJlY3QpOwor
ICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQt
PnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGl0LT53aWxsRHJh
dyhtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwotICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNG
b3JMYXllcigqaXQsICZvY2NsdXNpb25UcmFja2VyLCBoYWRNaXNzaW5nVGlsZXMpOworCisgICAg
ICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
IHx8ICFpdC0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcGFzcy0+
YXBwZW5kUXVhZHNGb3JMYXllcigqaXQsICZvY2NsdXNpb25UcmFja2VyLCBoYWRNaXNzaW5nVGls
ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGhhZE1pc3NpbmdUaWxlcykgewpAQCAtMzM5
LDcgKzMyNSw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIG9jY2x1c2lvblRy
YWNrZXIubGVhdmVMYXllcihpdCk7CiAgICAgfQogCi0gICAgcGFzc2VzLmxhc3QoKS0+YXBwZW5k
UXVhZHNUb0ZpbGxTY3JlZW4obV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX2JhY2tncm91bmRDb2xv
ciwgb2NjbHVzaW9uVHJhY2tlcik7CisKKyAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8ICFtX3Jvb3RMYXllckltcGwtPnNjaXNzb3JSZWN0KCku
aXNFbXB0eSgpKQorICAgICAgICBwYXNzZXMubGFzdCgpLT5hcHBlbmRRdWFkc1RvRmlsbFNjcmVl
bihtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fYmFja2dyb3VuZENvbG9yLCBvY2NsdXNpb25UcmFj
a2VyKTsKIAogICAgIGlmIChkcmF3RnJhbWUpCiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIub3Zl
cmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsKQEAgLTQyOCw3ICs0MTYsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFt
ZSkKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKG1fcm9vdExheWVySW1w
bC0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWUu
cmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdS
ZW5kZXJQYXNzKGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MoZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpLCBtX3Jv
b3REYW1hZ2VSZWN0KTsKIAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0
dGluZ3MoKSkpCiAgICAgICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVjdHNGb3JD
dXJyZW50RnJhbWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBzZXR0aW5ncygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IDg0ODcz
MGEyYzdiNjBiNzYyMzg5OWZkN2Y5YjQxMzMwYTJlOTdjYjcuLjAxOTZkOTM3YjNhZDU1ZGI3ZGE3
OGZjZmJhNWMzZDExYWZlYTI5YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtNjgs
MjAgKzY4LDIxIEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5
ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXNpb25UcmFja2VySW1wCiAgICAgbV9zaGFyZWRRdWFkU3Rh
dGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBDQ1Jl
bmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBs
YXllciwgQ0NPY2NsdXNpb25UcmFja2VySW1wbCogb2NjbHVzaW9uVHJhY2tlcikKK3ZvaWQgQ0NS
ZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCog
bGF5ZXIsIENDT2NjbHVzaW9uVHJhY2tlckltcGwqIG9jY2x1c2lvblRyYWNrZXIsIGNvbnN0IEZs
b2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNl
ID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKwogICAgIC8vIEZJWE1FOiByZW5kZXIgc3VyZmFj
ZSBsYXllcnMgc2hvdWxkIGJlIGEgQ0NMYXllckltcGwtZGVyaXZlZCBjbGFzcyBhbmQKICAgICAv
LyBub3QgYmUgaGFuZGxlZCBzcGVjaWFsbHkgaGVyZS4KICAgICBDQ1F1YWRDdWxsZXIgcXVhZEN1
bGxlcihtX3F1YWRMaXN0LCBsYXllciwgb2NjbHVzaW9uVHJhY2tlciwgbGF5ZXItPmhhc0RlYnVn
Qm9yZGVycygpKTsKIAotICAgIENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3Rh
dGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBpZiAobGF5ZXItPmhh
c0RlYnVnQm9yZGVycygpKSB7CiAgICAgICAgIENvbG9yIGNvbG9yKGRlYnVnU3VyZmFjZUJvcmRl
ckNvbG9yUmVkLCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuLCBkZWJ1Z1N1cmZhY2VCb3Jk
ZXJDb2xvckJsdWUsIGRlYnVnU3VyZmFjZUJvcmRlckFscGhhKTsKICAgICAgICAgcXVhZEN1bGxl
ci5hcHBlbmRTdXJmYWNlKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3VyZmFjZUJv
cmRlcldpZHRoKSk7CiAgICAgfQogICAgIGJvb2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0gICAgcXVh
ZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hh
cmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgc3VyZmFj
ZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNhKSk7CisgICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNl
KENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBz
dXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgdGhpcy0+dGFyZ2V0U3VyZmFjZSgpLT5kYW1h
Z2VJblN1cmZhY2VTcGFjZShyb290RGFtYWdlUmVjdCksIGlzUmVwbGljYSkpOwogICAgIG1fc2hh
cmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiAKICAg
ICAvLyBBZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVhcnMgYmVs
b3cgdGhlIHN1cmZhY2UuCkBAIC05Miw3ICs5Myw3IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBl
bmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVz
CiAgICAgICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgp
LCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKICAgICAgICAgfQogICAgICAgICBi
b29sIGlzUmVwbGljYSA9IHRydWU7Ci0gICAgICAgIHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3Vy
ZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCksIGlzUmVwbGlj
YSkpOworICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0
KCksIGxheWVyLCB0aGlzLT50YXJnZXRTdXJmYWNlKCktPmRhbWFnZUluU3VyZmFjZVNwYWNlKHJv
b3REYW1hZ2VSZWN0KSwgaXNSZXBsaWNhKSk7CiAgICAgICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlz
dC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaAppbmRleCA0NTJhODYxMGY1YTlkYmMwMjE0YThjZGRiZmY2ZjAyNTRmZWNkYTI2
Li4zNDc4NDQ5MmViYTI2MjI3YzMzNmY5YzliMjJiNjg3YzZkOTZjNGQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaApAQCAtNTYsMjIgKzU2LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAgIHZvaWQg
YXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCosIENDT2NjbHVzaW9uVHJhY2tlckltcGwq
LCBib29sJiBoYWRNaXNzaW5nVGlsZXMpOwotICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5kZXJT
dXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqLCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKik7CisgICAg
dm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCosIENDT2Nj
bHVzaW9uVHJhY2tlckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KTsKICAg
ICB2b2lkIGFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNv
bnN0IENvbG9yJiBzY3JlZW5CYWNrZ3JvdW5kQ29sb3IsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tl
ckltcGwmKTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQogCi0gICAgdm9pZCBzZXRTdXJmYWNlRGFt
YWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSB7IG1fc3VyZmFjZURh
bWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQotICAgIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0K
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSopOwog
CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZhY2U7CiAgICAgQ0NRdWFkTGlzdCBt
X3F1YWRMaXN0OwogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFy
ZWRRdWFkU3RhdGVMaXN0OwotICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogfTsK
IAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NMaXN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggNmFiNTA5OThkNDMzZjU2MzRk
YmUwZjIwYmM2NzE4MjdkNmU5MmIzMi4uNjA1NTNjNjE3M2E5M2M1MGE4Yzc1Njk4YTlkYTMwZWY4
YzViOTFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0yMDgsMTggKzIw
OCwyMCBAQCBpbmxpbmUgc3RhdGljIGludCBnZXRTa0JpdG1hcFRleHR1cmVJZChjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBpbnQgZmFsbGJhY2spCiAgICAgcmV0dXJuIHRleHR1cmUtPmdldFRleHR1
cmVIYW5kbGUoKTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCkgY29uc3QKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpjYWxjU2Npc3NvclJl
Y3QoYm9vbCB1c2luZ1BhcnRpYWxTd2FwLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VS
ZWN0LCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9vd25pbmdMYXll
ci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5n
KCkgJiYgbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkgewor
ICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQo
KS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiB1c2luZ1BhcnRpYWxTd2FwKSB7CiAgICAgICAgIEZs
b2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IG1fY2xpcFJlY3Q7CiAgICAgICAgIGNsaXBBbmRE
YW1hZ2VSZWN0LmludGVyc2VjdChzdXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIGxheWVyUmVu
ZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVj
dCkpOwotICAgIH0gZWxzZSBpZiAobGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQ
YXJ0aWFsU3dhcCkKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNs
b3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KSk7CisgICAgICAgIHNjaXNzb3JSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCk7CisgICAgfSBlbHNlIGlmICh1c2lu
Z1BhcnRpYWxTd2FwKQorICAgICAgICBzY2lzc29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3Vy
ZmFjZURhbWFnZVJlY3QpOwogICAgIGVsc2UgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYm
IG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBs
YXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KG1fY2xpcFJlY3QpOworICAgICAgICBzY2lz
c29yUmVjdCA9IG1fY2xpcFJlY3Q7CiAgICAgZWxzZQotICAgICAgICBHTEMobGF5ZXJSZW5kZXJl
ci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdDb250ZW50cyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCkBAIC00NDYsMTMgKzQ0OCw0NCBAQCBi
b29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2Vu
ZGFudCgpIGNvbnN0CiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRlclN1cmZh
Y2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1ZSA9
IGZhbHNlOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9yaWdpblRyYW5z
Zm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCksIGRyYXdP
cGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZShvcmlnaW5UcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBtX3Nj
aXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKIFBhc3NPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRT
dGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAgIHJldHVybiBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGlj
YURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09wYWNpdHko
KSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxp
Y2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3Qo
KSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOworfQorCitGbG9hdFJl
Y3QgQ0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZShjb25zdCBGbG9hdFJlY3Qm
IGRhbWFnZVJlY3QpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0Owor
CisgICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBh
cyB0aGUgZGFtYWdlIGZvcgorICAgIC8vIGFsbCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZl
IHRyYW5zZm9ybXMuCisgICAgaWYgKG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3Rp
dmUoKSkgeworICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBu
aWNlIHdpdGggbWFwUmVjdCBvZgorICAgICAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMuIEluIHRo
aXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KKyAgICAgICAgLy8ganVzdCByZWRyYXcg
dGhlIGVudGlyZSBzdXJmYWNlLgorICAgICAgICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0ZVZpc2li
bGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KKyAgICAgICAgc3VyZmFjZURhbWFnZVJlY3Qg
PSBtX2NvbnRlbnRSZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0u
aW52ZXJzZSgpOworICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFj
ZVRyYW5zZm9ybS5tYXBSZWN0KGRhbWFnZVJlY3QpOworICAgIH0KKworICAgIHJldHVybiBzdXJm
YWNlRGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6c2NyZWVuVG9T
dXJmYWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1fc2NyZWVuU3BhY2VU
cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIHJldHVybiBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zv
cm0ubWFwUmVjdChyZWN0KTsKK30KKworRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6c3VyZmFj
ZVRvU2NyZWVuU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIHJldHVy
biBtX3NjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggYTZkZWUxMGVjZWQwOTdjODIwYTRhOTgyMzVjZDgyZWI5
ZTE4ZTVhZC4uMWMxYjViYmI0NDI0Y2Y5MWFmMDlkZjI2YjI3Y2IzYTYwNjM3ZWFmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIGJv
b2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAg
IHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7CiAKLSAgICB2b2lkIHNldFNjaXNzb3JS
ZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFn
ZVJlY3QpIGNvbnN0OworICAgIGJvb2wgY2FsY1NjaXNzb3JSZWN0KGJvb2wgdXNpbmdQYXJ0aWFs
U3dhcCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgSW50UmVjdCYgc2Npc3Nv
clJlY3QpIGNvbnN0OwogCiAgICAgdm9pZCBkcmF3Q29udGVudHMoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7CiAgICAgdm9pZCBkcmF3UmVwbGljYShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKQEAg
LTEyMyw2ICsxMjMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRS
ZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Ns
aXBSZWN0OyB9CiAKKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorICAgIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorCiAgICAg
dm9pZCBzZXRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CiAKQEAgLTE1Myw2
ICsxNTYsMTUgQEAgcHVibGljOgogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNy
ZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IGNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKIAorICAgIC8qKgor
ICAgICAqIFRyYW5zZm9ybXMgYSBkYW1hZ2UgcmVjdCBpbnRvIHN1cmZhY2Ugc3BhY2UuIEluIHNv
bWUgY2FzZXMgbWF5IGRlY2lkZQorICAgICAqIHRvIHJldHVybiB0aGUgZW50aXJlIHN1cmZhY2Ug
Y29udGVudFJlY3QuCisgICAgICovCisgICAgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNl
KGNvbnN0IEZsb2F0UmVjdCYgZGFtYWdlUmVjdCkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3Qgc2Ny
ZWVuVG9TdXJmYWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgRmxvYXRSZWN0
IHN1cmZhY2VUb1NjcmVlblNwYWNlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIEludFJlY3QgY29tcHV0ZURldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsK
ICAgICBJbnRSZWN0IGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBj
b25zdDsKQEAgLTE4Niw2ICsxOTgsOCBAQCBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1f
YmFja2dyb3VuZEZpbHRlcnM7CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworICAgIEludFJlY3Qg
bV9zY2lzc29yUmVjdDsKKwogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IG1fbGF5ZXJMaXN0Owog
CiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3aWxsIGNv
bnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29pbmcKQEAg
LTE5NCw5ICsyMDgsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPENDRGFtYWdlVHJhY2tlcj4g
bV9kYW1hZ2VUcmFja2VyOwogCi0gICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFjZSIg
d2hlcmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCi0gICAgRmxvYXRS
ZWN0IG1fZGFtYWdlUmVjdDsKLQogICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCiAg
ICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OwogICAgIGludCBt
X2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRl
LmNwcAppbmRleCA5YmY3NjkyNWJiOGNmMmJiYWM1MzljMDE0MzFjNTU3ODQzMzlmZDA1Li45MDc3
N2FiNDFiYjg0YjA4ODkxY2IyMjQyODg1ZTBmMzgxYjI4MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuY3BwCkBAIC0yOSwxNiArMjksMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1NoYXJlZFF1YWRTdGF0ZTo6
Y3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVy
UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVl
KQorUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qs
IGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkK
IHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zv
cm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIGNsaXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUp
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zv
cm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIHNjaXNzb3JSZWN0LCBvcGFjaXR5LCBvcGFx
dWUpKTsKIH0KIAotQ0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorQ0NTaGFyZWRRdWFk
U3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFk
VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0
IG9wYWNpdHksIGJvb2wgb3BhcXVlKQogICAgIDogbV9xdWFkVHJhbnNmb3JtKHF1YWRUcmFuc2Zv
cm0pCiAgICAgLCBtX2xheWVyVHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtKQogICAgICwgbV9sYXll
clJlY3QobGF5ZXJSZWN0KQotICAgICwgbV9jbGlwUmVjdChjbGlwUmVjdCkKKyAgICAsIG1fc2Np
c3NvclJlY3Qoc2Npc3NvclJlY3QpCiAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKICAgICAsIG1f
b3BhcXVlKG9wYXF1ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCmluZGV4IDQy
MDZhYTVjMmRlMmE3NTRjOWNhOTFmNGU4ZTg4OTM4MjIxMWZmMjIuLjZiMTUwMDBiYjU3ZTZkYjA0
ZGZhNWY5NDc1ZDM0MDdiMzlhODJiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aApAQCAtMzYsMjcgKzM2LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDU2hhcmVk
UXVhZFN0YXRlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0
ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CiAKICAgICAvLyBU
aGUgdHJhbnNmb3JtIHRoYXQgcXVhZHMgaW4gYSBDQ0RyYXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zv
cm1lZCB3aXRoLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkVHJhbnNmb3JtOyB9CiAgICAgLy8gVGhlIHRyYW5zZm9y
bSB0aGF0IGxheWVyUmVjdCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJUcmFuc2Zvcm07IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyUmVjdDsgfQotICAgIC8vIFVzYWdlOiBpZiBjbGlwUmVjdCBpcyBlbXB0
eSwgdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisgICAgY29uc3QgSW50UmVj
dCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CiAKICAgICBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAgICAgYm9vbCBpc09w
YXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgYm9vbCBpc0xheWVyQXhpc0Fs
aWduZWRJbnRSZWN0KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ0NTaGFyZWRRdWFkU3RhdGUo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOworICAg
IENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNm
b3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNp
dHksIGJvb2wgb3BhcXVlKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcXVhZFRyYW5z
Zm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVyVHJhbnNmb3JtOwogICAgIElu
dFJlY3QgbV9sYXllclJlY3Q7Ci0gICAgSW50UmVjdCBtX2NsaXBSZWN0OworICAgIEludFJlY3Qg
bV9zY2lzc29yUmVjdDsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgYm9vbCBtX29wYXF1ZTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJh
Y2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNr
ZXJUZXN0LmNwcAppbmRleCBiYmVhOTcxZGQ1YTRlZmU2N2QzMzYxNjFjOWEwZGZiNzE1YWQ3YWI3
Li5iNWQyMWFhY2UwNDAzNWU1ZDdmZmYwNDg1OWNkNTNjOGRmNGMzMTk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAg
LTU5LDYgKzU5LDcgQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8Q0NMYXkKICAgICByb290LT5yZW5kZXJT
dXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocm9vdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29y
dGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIH0KIAogdm9pZCBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKaW5kZXggZjVlYWU3Zjg0ZGQ1
MTI1YzgwOTk1YjljZDQyOWI5OWJjYmY2OTMzNC4uZjk4Mzg2MjM2Zjk0MzUwMjUxMmJkMmY0NmVk
YjI4Y2JmNjUwZGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySXRlcmF0b3JUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAgVEVTVChDQ0xheWVy
SXRlcmF0b3JUZXN0LCBzaW1wbGVUcmVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
bGF5ZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RM
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNr
VG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RM
YXllciwgMCwgLTEsIDEpOwpAQCAtMTg5LDYgKzE5MCw3IEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9y
VGVzdCwgY29tcGxleFRyZWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250
KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAw
LCAtMSwgMSk7CkBAIC0yNDgsNiArMjUwLDcgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBj
b21wbGV4VHJlZU11bHRpU3VyZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxh
eWVyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1Rv
RnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5
ZXIsIDAsIC0xLCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGI2N2Y0NDk4N2QzMTUwZTc0
NzNjMTZmNGE4MGZiZGIxMTkzNTk5NmUuLjBiNTgzMDU0MTNkMzBlOGUzODk5MGMwYjFjN2E0ODI0
ZDFkYTgyNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzIsNyArMzIsMTIgQEAKICNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIK
KyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJl
YWQuaCIKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KQEAgLTU5LDYgKzY0LDcgQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXQpCkBAIC0zMTcsNiArMzIzLDIxNCBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQog
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNm
b3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY2lzc29yUmVj
dHMpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhy
ZWFkOworCisKKyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisK
KyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwg
Ky0tLS0rICAyIHwgICAgIHwKKyAgICAgICAgIHwgIHwgfCAgMyB8ICAgIHwgICAgIHwKKyAgICAg
ICAgIHwgIHwgKy0tLS0rICAgIHwgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAg
IHwKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0t
LS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAg
ICAgKi8KKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMSk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDIpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hp
bGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworCisgICAgICAgIHJvb3QtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAw
KSk7CisgICAgICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAg
ICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICByb290LT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAg
ICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgY2hp
bGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAsIDEwKSk7CisgICAgICAgIGNoaWxkLT5zZXRP
cGFjaXR5KDAuNWYpOworICAgICAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoNTAsIDUwKSk7
CisgICAgICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAgICAgZ3JhbmRD
aGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIGdyYW5kQ2hp
bGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNSwgNSkpOworICAgICAgICBncmFuZENoaWxkLT5z
ZXRCb3VuZHMoSW50U2l6ZSgyMCwgMjApKTsKKyAgICAgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworCisgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdl
dCgpOworICAgICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0
KCk7CisKKyAgICAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAg
ICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgICAgICBWZWN0b3I8
Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgICAgICB7CisgICAgICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgICAgIFZl
Y3RvcjxDQ0xheWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAgICAgICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworICAgICAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsK
KworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7
CisKKyAgICAgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0
KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
ICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIEFTU0VSVF9G
QUxTRShncmFuZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgICAgICBFWFBF
Q1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDJVKTsKKyAgICAKKyAgICAgICAg
QVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgICAg
ICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgNTAsIDUwKSk7
CisgICAgICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKyAgICAKKyAgICAgICAgQVNTRVJUX0ZBTFNFKHJvb3QtPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgICAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBw
aW5nKCkpOworICAgICAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSk7CisgICAgCisgICAgICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAg
ICAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZShGbG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUoMTAw
LCAxMDApKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAg
IAorICAgICAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAgICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMTAw
LCAxMDApKTsKKyAgICAKKyAgICAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICAgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOworICAgICAgICBFWFBFQ1RfRVEoZ3Jh
bmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKKyAgICAK
KyAgICAgICAgLy8gRW1wdHkgZGFtYWdlCisgICAgICAgIHJvb3REYW1hZ2UgPSBGbG9hdFJlY3Qo
MCwgMCwgMCwgMCk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKyAgICAKKyAgICAgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JS
ZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgICAg
IC8vIFBhcnRpYWwgZGFtYWdlCisgICAgICAgIHJvb3REYW1hZ2UgPSBGbG9hdFJlY3QoMTAsIDEw
LCAyMCwgMjApOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7Cisg
ICAgCisgICAgICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgxMCwgMTAs
IDIwLCAyMCkpOworICAgIAorICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgxMCwgMTAsIDIwLCAyMCkpOworICAgICAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMjAsIDIwKSk7CisgICAgICAgIEVYUEVDVF9FUShn
cmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDIwLCAyMCkpOworICAg
IH0KKyAgICAKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5k
Q2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgICAgCisgICAgICAgIHJvb3QtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkp
OworICAgICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBy
b290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkp
OworICAgICAgCisgICAgICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDAp
KTsKKyAgICAgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTAsIDEwKSk7CisgICAg
ICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgICAgICBjaGlsZC0+c2V0Qm91bmRzKElu
dFNpemUoNTAsIDUwKSk7CisgICAgICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Cisg
ICAgICAKKyAgICAgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAw
KSk7CisgICAgICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNSwgNSkpOwor
ICAgICAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgyMCwgMjApKTsKKyAgICAgICAg
Z3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgCisgICAgICAgIENDTGF5
ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgICAgICBDQ0xheWVySW1wbCogZ3Jh
bmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICAgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVs
ZWFzZSgpKTsKKyAgICAKKyAgICAgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKwor
ICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgICAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICAg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgICAgICBDQ0xheWVyU29y
dGVyIGxheWVyU29ydGVyOworCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChyb290LmdldCgpKTsKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
bGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAg
ICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX1RS
VUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHJvb3Qt
PnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSwgMlUpOworCisgICAgICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xp
cFJlY3QoKSwgSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKKyAgICAgICAgQVNTRVJUX0VRKGdyYW5k
Q2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgICAgIEFT
U0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgICAgICBBU1NFUlRfRkFM
U0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgICAgICBBU1NFUlRfRkFMU0Uo
Z3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisKKyAgICAgICAgLy8gRGFtYWdl
IHRoZSBlbnRpcmUgc2NyZWVuCisgICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlID0gRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHJvb3Qt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisgICAgICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisKKyAgICAgICAgRVhQRUNU
X0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDUwLCA1
MCkpOworICAgICAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCA1MCwgNTApKTsKKworICAgICAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICAgICAg
cm9vdERhbWFnZSA9IEZsb2F0UmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2UpOworCisgICAgICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAg
ICAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHJvb3QtPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgICAgICBFWFBF
Q1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisKKyAgICAgICAgLy8gUGFydGlhbCBkYW1hZ2UKKyAgICAgICAgcm9vdERhbWFnZSA9IEZsb2F0
UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKworICAgICAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MTAsIDEwLCAyMCwgMjApKTsKKworICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgxMCwgMTAsIDIwLCAyMCkpOworICAgICAgICBFWFBFQ1RfRVEoY2hpbGRQdHIt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMjAsIDIwKSk7CisgICAgICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDIwLCAyMCkpOwor
ICAgIH0gICAKK30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yUmVwbGljYSkKIHsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01NDYsNiArNzYwLDkgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikK
ICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAg
ICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKICAgICAvLyBUaGUgY2hp
bGQgbGF5ZXIncyBjb250ZW50IGlzIGVudGlyZWx5IG91dHNpZGUgdGhlIHBhcmVudCdzIGNsaXAg
cmVjdCwgc28gdGhlIGludGVybWVkaWF0ZQogICAgIC8vIHJlbmRlciBzdXJmYWNlIHNob3VsZCBo
YXZlIGJlZW4gcmVtb3ZlZC4gUmVuZGVyIHN1cmZhY2VzIHdpdGhvdXQgY2hpbGRyZW4gb3Igdmlz
aWJsZQogICAgIC8vIGNvbnRlbnQgYXJlIHVuZXhwZWN0ZWQgYXQgZHJhdyB0aW1lIChlLmcuIHdl
IG1pZ2h0IHRyeSB0byBjcmVhdGUgYSBjb250ZW50IHRleHR1cmUgb2Ygc2l6ZSAwKS4KQEAgLTU3
NCw2ICs3OTEsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRl
clN1cmZhY2VMaXN0Rm9yVHJhbnNwYXJlbnRDaGlsZCkKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgLy8gU2luY2Ug
dGhlIGxheWVyIGlzIHRyYW5zcGFyZW50LCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgp
IHNob3VsZCBub3QgaGF2ZSBnb3R0ZW4gYWRkZWQgYW55d2hlcmUuCiAgICAgLy8gQWxzbywgdGhl
IGRyYXdhYmxlIGNvbnRlbnQgcmVjdCBzaG91bGQgbm90IGhhdmUgYmVlbiBleHRlbmRlZCBieSB0
aGUgY2hpbGRyZW4uCiAgICAgRVhQRUNUX0VRKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKS5zaXplKCksIDBVKTsKQEAgLTYzNiw2ICs4NTUsMTAgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAKICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CiAKKyAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CisKKwogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwog
ICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlk
KCkpOwogICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsx
XS0+aWQoKSk7CkBAIC02OTUsNiArOTE4LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQogCiAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOwogCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpOwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1
cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+aWQoKSk7CkBAIC03NTMsNiArOTc4LDkgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJl
Y3RseVRvTGF5ZXJzKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKworCiAgICAgRVhQ
RUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjAp
KSwgZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCkpOwogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQyLT5jbGlw
UmVjdCgpKTsKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgxNSwgMTUp
LCBJbnRTaXplKDUsIDUpKSwgZ3JhbmRDaGlsZDMtPmNsaXBSZWN0KCkpOwpAQCAtODI1LDYgKzEw
NTMsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQ
cm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3Qo
KSk7CisKICAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAg
ICBBU1NFUlRfVFJVRShncmFuZENoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkMy0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTEyOTUsNiArMTUyNSw4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nKQog
CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwogCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+
cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdTdXJmYWNlLT5yZW5k
ZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9GQUxTRShjaGlsZE9mQW5pbWF0aW5nU3VyZmFjZS0+
cmVuZGVyU3VyZmFjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggOTFjMmQxZGZmMTIxMjc5YTdj
NzQ2MDcwYzVjYmRjMjIyNGYyYjY1YS4uOGY4MWRkZGUyYzEwYmNkYTY0OTFmNzJiYmFjYmY3MzE0
YjIzMmRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM2LDEwICszNiwxMiBAQAogI2luY2x1ZGUg
ImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDU29s
aWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAj
aW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgorI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VmlkZW9GcmFtZS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4K
QEAgLTQ5LDYgKzUxLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAordXNpbmcgOjp0ZXN0
aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyA6OnRlc3Rpbmc6OkFu
eU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6XzsKKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCwgcHVibGljIENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQgewpAQCAtNzAsNiArNzcsMjggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBh
c3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkg
T1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RTZXRDb250ZW50c01lbW9yeUFsbG9j
YXRpb25MaW1pdEJ5dGVzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKHNpemVfdCkgT1ZFUlJJREUg
eyB9CiAKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJl
ZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3Jh
cGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByb290UHRyKQorICAgIHsKKyAg
ICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKworICAgICAgICBzZXR0aW5ncy5wYXJ0aWFsU3dh
cEVuYWJsZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgICAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0aW5ncywg
dGhpcyk7CisKKyAgICAgICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoZ3Jh
cGhpY3NDb250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+
c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisKKyAgICAgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gcm9vdFB0cjsKKworICAgICAgICByb290LT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgw
LCAwKSk7CisgICAgICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgICAg
ICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7CisgICAg
ICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+c2V0
Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIG15SG9zdEltcGwucmVs
ZWFzZSgpOworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIGV4cGVjdENsZWFyZWRTY3JvbGxEZWx0
YXNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHsKICAgICAgICAgQVNTRVJUX0VR
KGxheWVyLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKCkpOwpAQCAtMTA5OSw2ICsxMTI4LDE5MiBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwUmVjZWl2ZXNEYW1h
Z2VSZWN0KQogICAgIEVYUEVDVF9FUShleHBlY3RlZFN3YXBSZWN0LmhlaWdodCgpLCBhY3R1YWxT
d2FwUmVjdC5oZWlnaHQoKSk7CiB9CiAKK2NsYXNzIEZha2VMYXllcldpdGhRdWFkcyA6IHB1Ymxp
YyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RmFrZUxheWVy
V2l0aFF1YWRzPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUxheWVy
V2l0aFF1YWRzKGlkKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRD
dWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRl
LCBib29sJikgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGNvbnN0IENvbG9yIGdyYXkoMTAwLCAx
MDAsIDEwMCk7CisgICAgICAgIEludFJlY3QgcXVhZFJlY3QoMCwgMCwgNSwgNSk7CisgICAgICAg
IE93blB0cjxDQ0RyYXdRdWFkPiBteVF1YWQgPSBDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRl
KHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGdyYXkpOworICAgICAgICBxdWFkTGlzdC5hcHBl
bmQobXlRdWFkLnJlbGVhc2UoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZha2VMYXllcldp
dGhRdWFkcyhpbnQgaWQpCisgICAgICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgeworICAgIH0K
K307CisKK2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQz
RCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QxKHVzZVByb2dyYW0sIHZvaWQoV2ViR0xJZCBw
cm9ncmFtKSk7CisgICAgTU9DS19NRVRIT0Q1KHVuaWZvcm00Ziwgdm9pZChXR0MzRGludCBsb2Nh
dGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9h
dCB3KSk7CisgICAgTU9DS19NRVRIT0Q0KHVuaWZvcm1NYXRyaXg0ZnYsIHZvaWQoV0dDM0RpbnQg
bG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IFdHQzNEZmxvYXQqIHZhbHVlKSk7CisgICAgTU9DS19NRVRIT0Q0KGRyYXdFbGVtZW50cywgdm9p
ZChXR0MzRGVudW0gbW9kZSwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0RlbnVtIHR5cGUsIFdHQzNE
aW50cHRyIG9mZnNldCkpOworICAgIE1PQ0tfTUVUSE9EMShnZXRTdHJpbmcsIFdlYlN0cmluZyhX
R0MzRGVudW0gbmFtZSkpOworICAgIE1PQ0tfTUVUSE9EMChnZXRSZXF1ZXN0YWJsZUV4dGVuc2lv
bnNDSFJPTUlVTSwgV2ViU3RyaW5nKCkpOworICAgIE1PQ0tfTUVUSE9EMShlbmFibGUsIHZvaWQo
V0dDM0RlbnVtIGNhcCkpOworICAgIE1PQ0tfTUVUSE9ENChzY2lzc29yLCB2b2lkKFdHQzNEaW50
IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0KSk7Cit9
OworCitjbGFzcyBNb2NrQ29udGV4dEhhcm5lc3MgeworcHJpdmF0ZToKKyAgICBNb2NrQ29udGV4
dCogbV9jb250ZXh0OworcHVibGljOgorICAgIE1vY2tDb250ZXh0SGFybmVzcyhNb2NrQ29udGV4
dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgICAg
IC8vIENhdGNoICJ1bmludGVyZXN0aW5nIiBjYWxscworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9j
b250ZXh0LCB1c2VQcm9ncmFtKF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAg
IEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhfLCBfLCBfLCBfKSkKKyAgICAg
ICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlm
b3JtTWF0cml4NGZ2KF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAg
ICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm00ZihfLCBfLCBfLCBfLCBfKSkKKyAg
ICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICAvLyBBbnkgb3RoZXIgc3RyaW5ncyBhcmUg
ZW1wdHkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0U3RyaW5nKF8pKQorICAg
ICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoKSkpOworCisgICAgICAg
IC8vIFN1cHBvcnQgZm9yIHBhcnRpYWwgc3dhcCwgaWYgbmVlZGVkCisgICAgICAgIEVYUEVDVF9D
QUxMKCptX2NvbnRleHQsIGdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6RVhURU5TSU9OUykp
CisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0cmluZygiR0xfQ0hST01J
VU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCBnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpKQorICAgICAgICAgICAgLldpbGxS
ZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIp
KSk7CisKKyAgICAgICAgLy8gQW55IHVuLXNhbmN0aW9uZWQgY2FsbHMgdG8gZW5hYmxlKCkgYXJl
IE9LCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGVuYWJsZShfKSkKKyAgICAgICAg
ICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisgICAgfQorCisgICAgdm9pZCBtdXN0RHJh
d1NvbGlkUXVhZCgpCisgICAgeworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBkcmF3
RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkK
KyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICAgICAgLy8gMCBpcyB0
aGUgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRVbmlmb3JtTG9jYXRpb24KKyAgICAgICAg
Ly8gMSBpcyBjb3VudCA/Pz8KKyAgICAgICAgLy8gQm9vbGVhbiBjYXN0IHRvIHN0cj8/CisgICAg
ICAgIC8vIGZsb2F0KiB2YWx1ZXMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5p
Zm9ybU1hdHJpeDRmdigwLCAxLCBfLCBfKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4o
KSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICAgICAgLy8gMCBp
cyB0aGUgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRVbmlmb3JtTG9jYXRpb24KKyAgICAg
ICAgLy8gMyBmbG9hdHMgYXJlIGNvbG9yIC8gMjU1CisgICAgICAgIC8vIDEgaXMgQWxwaGEKKyAg
ICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybTRmKDAsIF8sIF8sIF8sIDEpKQor
ICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNh
dHVyYXRpb24oKTsKKyAgICAgICAgCisgICAgICAgIC8vIDEgaXMgaGFyZGNvZGVkIHJldHVybiB2
YWx1ZSBvZiBmYWtlIGNyZWF0ZVByb2dyYW0oKQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250
ZXh0LCB1c2VQcm9ncmFtKDEpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAg
ICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgIH0KKworICAgIHZvaWQgbXVz
dFNldFNjaXNzb3IoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgewor
ICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBlbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAg
ICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2Nv
bnRleHQsIHNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAuV2lsbE9u
Y2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworICAgIH0K
KworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub1BhcnRpYWxTd2FwKQor
eworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4dCgpKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBNb2Nr
Q29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQqPihHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0Lmdl
dCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250ZXh0KTsKKwor
ICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFk
KCk7CisKKyAgICAvLyBSdW4gdGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KGZhbHNlLCBjb250ZXh0LCBGYWtl
TGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpG
cmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJh
dyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9z
dEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgcGFydGlhbFN3YXApCit7CisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhpY3MgY29u
dGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQ
dHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2Fz
dDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBo
aWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFy
bmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3QgY2FzZQorICAgIGhh
cm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAs
IDAsIDEwLCAxMCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOwor
CisgICAgLy8gUnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBt
eUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdCh0cnVlLCBjb250ZXh0LCBGYWtlTGF5ZXJX
aXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURh
dGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFt
ZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0
YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgcGFydGlhbFN3YXBOb1VwZGF0ZSkKK3sKKyAgICAvLyBTZXQgdXAgbW9jayBncmFwaGljcyBj
b250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9w
dFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRleHQmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19j
YXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3Jh
cGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAgIE1vY2tDb250ZXh0SGFybmVzcyBo
YXJuZXNzKCZtb2NrQ29udGV4dCk7CisKKyAgICAvLyBDb25maWd1cmUgdGVzdCBjYXNlCisgICAg
aGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3Io
MCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCA4LCAyLCAyKTsKKyAg
ICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3Nv
cigwLCAwLCAxMCwgMTApOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEw
KTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwgRmFrZUxh
eWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworICAgIAorICAgIC8vIERyYXcgb25jZSB0byBtYWtl
IHN1cmUgbGF5ZXIgaXMgbm90IG5ldworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0
YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1l
KSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+
ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAvLyBHZW5lcmF0ZSB1cGRhdGUgaW4gbGF5
ZXIKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG15SG9zdEltcGwtPnJvb3RMYXllcigpOworICAg
IHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDIsIDIpKTsKKworICAgIC8vIFRo
aXMgZHJhdyBzaG91bGQgZ2VuZXJhdGUgbm93IG5ldyB1ZHBhdGVzCisgICAgRVhQRUNUX1RSVUUo
bXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdM
YXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwor
CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKK30K
KwogLy8gTWFrZSBzdXJlIHRoYXQgY29udGV4dCBsb3N0IG5vdGlmaWNhdGlvbnMgYXJlIHByb3Bh
Z2F0ZWQgdGhyb3VnaCB0aGUgdHJlZS4KIGNsYXNzIENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hl
Y2tMYXllciA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRl
eCA5NzZkYzNmMjk4NjQ2ODdjOTA3ZWQyNjc5NzFkODVlMjExMDZiNjNlLi42MGQ2YWVkNzExMzkz
MGJjNTRhNmRlMDEwMjQ2NzcwMjk5MGE3OWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTI2Niw2ICsy
NjYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwu
YXBwZW5kKG1fcm9vdC5nZXQoKSk7CiAKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1t
eUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdEltcGwsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9yQmVnaW4gPSBUeXBl
czo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwpOwog
ICAgIH0KIApAQCAtMjgyLDYgKzI4NSw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9yZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0uYXBwZW5kKG1fcm9vdCk7CiAKICAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VM
YXllckxpc3RDaHJvbWl1bSwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgICAgICBtX2xheWVySXRlcmF0b3IgPSBtX2xh
eWVySXRlcmF0b3JCZWdpbiA9IFR5cGVzOjpMYXllckl0ZXJhdG9yOjpiZWdpbigmbV9yZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKaW5kZXggN2RhYzAwNWQy
NGNhZmFjYzI3MWI4NmFkNWZkZTM4NTY2ZDBiZDg3NC4uOWQ4ZDE5ZjcyMzgzNGQ0NDE0NTljNTc4
M2I5NDk2YWZiMTVjZTllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCkBAIC0xMTIsMTUgKzExMiwxNiBAQCBURVNUKEND
UmVuZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVk
UXVhZFN0YXRlKQogICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShvcmlnaW4p
OwogICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKICAgICBy
ZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgcmVuZGVyU3VyZmFjZS0+
c2V0U2Npc3NvclJlY3QoY2xpcFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFj
aXR5KDEpOwotCisgICAgCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFk
U3RhdGUgPSByZW5kZXJTdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKIAogICAgIEVY
UEVDVF9UUlVFKHNoYXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSk7
CiAgICAgRVhQRUNUX0VRKDMwLCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3JtKCkubTQx
KCkpOwogICAgIEVYUEVDVF9FUSg0MCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgp
Lm00MigpKTsKICAgICBFWFBFQ1RfRVEoY29udGVudFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+bGF5
ZXJSZWN0KCkpOwotICAgIEVYUEVDVF9FUShjbGlwUmVjdCwgc2hhcmVkUXVhZFN0YXRlLT5jbGlw
UmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+c2Npc3Nv
clJlY3QoKSk7CiAgICAgRVhQRUNUX0VRKDEsIHNoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0eSgpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uoc2hhcmVkUXVhZFN0YXRlLT5pc09wYXF1ZSgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143826</attachid>
            <date>2012-05-24 07:17:17 -0700</date>
            <delta_ts>2012-05-24 10:41:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120524101716.patch</filename>
            <type>text/plain</type>
            <size>93859</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjIwMDZhZmI2YzQxYTRi
ZjcwOGYyYzI2ZWIzY2RhYmVkNDBlMTRlZS4uNWQ0ZDI3YWZlNzA0NzkwNzQwNGJmY2E3ZTFhMDc5
OGM0YjUyYzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA1LTI0ICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRl
clBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJT
dXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNzb3JSZWN0
KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NE
cmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpj
cmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OndhbGtMYXllcnNBbmRDYWxjdWxhdGVTY2lzc29yUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9z
dENvbW1vbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6
YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjYWxjU2Npc3NvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNh
U2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OnNjcmVlblRvU3VyZmFjZVNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVRvU2NyZWVuU3BhY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAo
Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0
U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29y
UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3Rh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVh
ZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3NvclJlY3QpOgorCiAyMDEyLTA1LTIzICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQVNTRVJUIGZhaWx1cmUg
dG9SZW5kZXJQcm9ncmVzcyBpbiBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3RhdGVD
aGFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZWVjMmRmNjJiMjI3MTkyNzA0Zjk1
MzIyNmNiMTAzNDgwMjE5ZjE1OS4uN2Y4OGJmOWE1Y2ZmZjdkOWUyYTk1M2RjNjMyODZkOTczNmNh
NjVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0w
NS0yNCAgWmVldiBMaWViZXIgIDx6bGllYmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIENsZWFudXAgc2Npc3NvciByZWN0IGNvbXB1dGF0aW9uL3VzZSB3aXRoIGRhbWFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0
IHRlc3RzIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwgdXNpbmcgbW9jayBncmFwaGljIGNvbnRleHQK
KyAgICAgICAgdG8gdmVyaWZ5IGVuZC10by1lbmQgcXVhZCBkcmF3aW5nLgorCisgICAgICAgIEFk
ZGVkIG1vcmUgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhvc3RDb21tb24gdG8gdmVyaWZ5IGNs
aXAgYW5kCisgICAgICAgIHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbnMuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNU
KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2FsY0Ry
YXdFdGMpOgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDUtMjMgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSB0aGVtZUVuZ2luZSB0byBQ
bGF0Zm9ybS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNmI0MzcwZDFhMTBjOGU0Nzk3MzI0NmYz
OTg4NTBmMWI2YzQ1MGEwYy4uYWMyYjJiMmY2NmQzMGYyNmZhYmNiZTYzYjNiNWVmMTVlNjBiMzI0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTM5LDYgKzEzOSw5IEBAIHB1YmxpYzoKICAgICBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxl
TGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVj
dDsgfQogCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBz
Y2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQg
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKQEAg
LTMwNSw3ICszMDgsMTMgQEAgcHJpdmF0ZToKIAogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAg
ICAgSW50U2l6ZSBtX2JvdW5kczsKKworICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNl
CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2lu
ZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQg
YmUgZHJhd24uCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlCisgICAgSW50UmVj
dCBtX3NjaXNzb3JSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9v
bCBtX3Njcm9sbGFibGU7CiAgICAgYm9vbCBtX3Nob3VsZFNjcm9sbE9uTWFpblRocmVhZDsKQEAg
LTM0MiwxMiArMzUxLDE2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJv
bWl1bT4gbV9yZW5kZXJTdXJmYWNlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9v
bCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNl
IHNwYWNlCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJh
d1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3NjcmVlblNwYWNlVHJhbnNm
b3JtOwogICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmltYXRpbmc7CiAgICAgYm9vbCBtX3Nj
cmVlblNwYWNlVHJhbnNmb3JtSXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBzdXJm
YWNlIHNwYWNlCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAgZmxvYXQg
bV9jb250ZW50c1NjYWxlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBhOWYzZDQ2NjVkMzZlNTI4ZDNmZTNmYzkxYzg2MDI1ZjRlOWE4N2VkLi43MjM5NjVhZjU4
NzlhMmJhYTQ5N2NjZDFjMDI5MTI3MWY1MTI5Y2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ0OCwzMSArNDQ4LDI4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkb05vT3AoKQogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Zmx1c2goKSk7
CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdCBGbG9hdFJl
Y3QmIHJvb3REYW1hZ2VSZWN0KQogewogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFj
ZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKTsKICAgICBpZiAoIXVzZVJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNsZWFyUmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCByZW5kZXJQYXNzLT5z
dXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBjbGVhclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlSW5TdXJmYWNl
U3BhY2Uocm9vdERhbWFnZVJlY3QpKTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0
ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFj
a1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0g
cXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkKLSAgICAgICAgZHJhd1F1YWQoaXQtPmdl
dCgpLCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICAgICAgZHJhd1F1YWQo
aXQtPmdldCgpLCByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpCiB7CiAgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKICAgICBpZiAobV9jYXBhYmlsaXRpZXMu
dXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3Qg
PSBzdXJmYWNlRGFtYWdlUmVjdDsKLSAgICAgICAgaWYgKCFxdWFkLT5jbGlwUmVjdCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChxdWFkLT5jbGlw
UmVjdCgpKTsKLSAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmRE
YW1hZ2VSZWN0KTsKKyAgICAgICAgc2Npc3NvclJlY3QgPSBxdWFkLT5zY2lzc29yUmVjdCgpOwog
ICAgICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0gZWxzZQotICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7CisgICAg
ICAgIHNjaXNzb3JSZWN0ID0gY2xpcFJlY3Q7CiAKICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0
eSgpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwpAQCAtNjI5LDcgKzYyNiwxMiBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkKgogCiAgICAgZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQpOwogCi0gICAg
bGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+c3VyZmFj
ZURhbWFnZVJlY3QoKSk7CisgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKKyAgICBpZiAoIWxheWVy
LT5yZW5kZXJTdXJmYWNlKCktPmNhbGNTY2lzc29yUmVjdChtX2NhcGFiaWxpdGllcy51c2luZ1Bh
cnRpYWxTd2FwLCBxdWFkLT5zdXJmYWNlRGFtYWdlUmVjdCgpLCBzY2lzc29yUmVjdCkpCisgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSk7CisgICAgZWxzZQorICAgICAgICBzZXRTY2lzc29yVG9SZWN0KHNjaXNz
b3JSZWN0KTsKKwogICAgIGlmIChxdWFkLT5pc1JlcGxpY2EoKSkKICAgICAgICAgbGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+ZHJhd1JlcGxpY2EodGhpcyk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAxYTJlYmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYz
MDE0NzJjOTU5Li5mN2RhZmVmMWQ3ZDU4ZDU2ZjYzY2JmZWViMWQ1MGMzMGMwMGYyZGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCB2aWV3cG9ydENoYW5nZWQoKTsKIAogICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJh
bWUoQ0NSZW5kZXJTdXJmYWNlKiBkZWZhdWx0UmVuZGVyU3VyZmFjZSk7Ci0gICAgdm9pZCBkcmF3
UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNz
KGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpOwog
ICAgIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAgICB2b2lkIGRyYXdIZWFkc1VwRGlz
cGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpOwpAQCAtMTUwLDcg
KzE1MCw3IEBAIHByaXZhdGU6CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2aWV3
cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4g
dmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIAotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NE
cmF3UXVhZCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQg
ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKICAg
ICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkKik7CiAgICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOGQw
MTdhMzEzMjIwZGMzMTcwNzY5ODZlMWQ1YmQxYjJhMDU0NTJjOS4uMjNlZDQyZjVhOGJjYmRlMDVm
MjlmNDlkNjk4Yzg4ODA0YjE5NGQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9CiAKKyAgICBj
b25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7
IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7
IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRGaWx0ZXJzKGNv
bnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBm
aWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAKQEAgLTExNyw2ICsxMjAsNyBAQCBwcml2
YXRlOgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7CiAgICAgTGF5ZXJDaHJvbWl1
bSogbV9tYXNrTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRoaXMgc3VyZmFjZSdzIHNwYWNlCiAgICAg
SW50UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAKQEAgLTEzMiw3
ICsxMzYsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJl
QW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAg
ICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisKKyAg
ICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0YXJnZXQgc3VyZmFjZSBvZiBwYXJlbnQgbGF5ZXIKICAg
ICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmll
cyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisg
ICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGFyZ2V0IHN1cmZhY2Ugb2YgcGFyZW50IGxheWVyCisg
ICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IG1fbGF5ZXJMaXN0OwogCiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0
IHN1cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwg
YW5kIHRoYXQgaXMgZ29pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaAppbmRleCBmNGVmMmQzZjIxYzFmYWU1
NzY2NjNjZDMyMmZjYjEyN2I4N2NiZmViLi43MTgxMTJiYzZmMTkxNzI2MzA5MzJlNGU1YmEyYzQw
YzNjM2M5MmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclJlY3QoKTsg
fQotICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPmNsaXBSZWN0KCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5zY2lzc29yUmVjdCgpOyB9CiAgICAg
ZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5vcGFjaXR5
KCk7IH0KICAgICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIGJsZW5kaW5nLCB3aGF0IHBhcnQgb2Yg
dGhlIGNvbnRlbnRzIG9mIHRoaXMgcXVhZCBhcmUgb3BhcXVlPwogICAgIEludFJlY3Qgb3BhcXVl
UmVjdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGI3NDZkOTg0MWQxNzUx
YTUyMzA5NjRkMjc3MTE4ZmIzZTZkMzNjYjguLjk0ZTI0YzE0ZTU5MWM5MzQ3NmUwNDg5NzlmYmE1
NGIwNGE5NGU2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEzNiwxMCArMTM2LDcg
QEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAKIFBhc3NPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUo
KSBjb25zdAogewotICAgIEludFJlY3QgbGF5ZXJDbGlwUmVjdDsKLSAgICBpZiAodXNlc0xheWVy
Q2xpcHBpbmcoKSkKLSAgICAgICAgbGF5ZXJDbGlwUmVjdCA9IGNsaXBSZWN0KCk7Ci0gICAgcmV0
dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNm
b3JtKCksIHZpc2libGVMYXllclJlY3QoKSwgbGF5ZXJDbGlwUmVjdCwgZHJhd09wYWNpdHkoKSwg
b3BhcXVlKCkpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFu
c2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCB2aXNpYmxlTGF5ZXJSZWN0KCksIG1fc2Npc3NvclJl
Y3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1ZSgpKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6d2ls
bERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDk3
YzU2MDdmY2ZhYTQ4ZDQ3OTlmMTI3MmQyMDVlZmIxNjg2ZWQ2ZTQuLjdkZjczMGUxZGE4ZDNiZDVm
NWE5NmZkZWEwZDkzOGRjMTU0YWE5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTYwLDYg
KzE2MCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVXNhZ2U6IGlmIHRoaXMtPnVzZXNMYXllckNsaXBw
aW5nKCkgaXMgZmFsc2UsIHRoZW4gdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCiAg
ICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9
CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3Qg
PSByZWN0OyB9CisKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKwogICAgIENDUmVuZGVyU3VyZmFj
ZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2Uq
IHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCkBAIC0yOTQs
NiArMjk4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHBy
b3BlcnRpZXMgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXll
clByb3BlcnR5Q2hhbmdlZDsKIAorICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlCiAg
ICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7
CiAgICAgYm9vbCBtX29wYXF1ZTsKQEAgLTM0NywxNyArMzUyLDI0IEBAIHByaXZhdGU6CiAgICAg
Ly8gVGhlIHJlY3QgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc2Npc3NvciB3aGVuIHRoaXMgbGF5
ZXIgaXMgZHJhd24uCiAgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1
cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCiAgICAgLy8gdG8gYm91bmRzLgor
ICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZQogICAgIEludFJlY3QgbV9jbGlwUmVj
dDsKIAorICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lk
ZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBVc2VzIHRhcmdldCBz
dXJmYWNlJ3Mgc3BhY2UKKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CisKICAgICAvLyBSZW5k
ZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMg
ZGVzY2VuZGFudHMKICAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCiAgICAgT3du
UHRyPENDUmVuZGVyU3VyZmFjZT4gbV9yZW5kZXJTdXJmYWNlOwogCiAgICAgLy8gSGllcmFyY2hp
Y2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50
cy4KKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UKICAgICBJbnRSZWN0IG1fZHJh
d2FibGVDb250ZW50UmVjdDsKIAogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0IHdhcyByZXBh
aW50ZWQvdXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBwbHVnaW4gbGF5
ZXJzIGJ5cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KKyAgICAvLyBVc2VzIGxheWVyJ3Mg
Y29udGVudCBzcGFjZQogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiAKICAgICAvLyBNYW5h
Z2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAppbmRleCBmODJhYzM3M2NjMzQzZGFkYjMyODIwYjg5OTZlZjk5ZjFhNzBmMmNhLi4xN2Rj
ODBiYzJkYTJmNDBmNjFmOTA4ODI1NjZmODBlZGY3NzYzMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTUwNCw2ICs1MDQsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgQ0NUZXh0dXJlVXBkYXRlciYg
dQogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5zZm9ybTsKICAg
ICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5ncy5kZXZpY2VTY2FsZUZh
Y3Rvcik7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5z
Zm9ybSwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKwor
ICAgICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3cG9ydFNp
emUoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyh1cGRhdGVMaXN0LCBkYW1hZ2VSZWN0KTsKICAgICB9CiAKICAgICAvLyBS
ZXNldCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJlcXVlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggZTMzNTZlNmZkNjMwNTM1ZDc3NjViYmRiN2M1
YzEyM2NiZWRhZGZjZi4uYTg0M2ZmNDJkZjUwOTRmZTU1ZDA4OTQ4MjNmNDNkMTZmMjM5Mzk1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC02NSw2ICs2
NSw1MSBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJl
Y3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIHJldHVybiBsYXllclJlY3Q7CiB9
CiAKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoQ0NMYXllckltcGwq
IGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQoreworICAgIENDUmVuZGVy
U3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisK
KyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IHJlbmRlclN1cmZhY2UtPmRhbWFnZUluU3Vy
ZmFjZVNwYWNlKHJvb3REYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSkKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0
KCkpOworICAgIGVsc2UKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3QocmVuZGVyU3Vy
ZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjbGlw
QW5kRGFtYWdlKTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJTY2lzc29yUmVj
dChMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkK
K3sKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCisgICAgICAgIHJldHVybiBs
YXllci0+Y2xpcFJlY3QoKTsKKyAgICByZXR1cm4gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRlU3VyZmFjZVNj
aXNzb3JSZWN0KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdl
UmVjdCkKK3sKKyAgICBDQ0xheWVySW1wbCogcGFyZW50TGF5ZXIgPSBsYXllci0+cGFyZW50KCk7
CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBwYXJlbnRTdXJmYWNlID0gcGFyZW50TGF5ZXItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHRoaXNTdXJmYWNlID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0ID0gdGhpc1N1cmZhY2Ut
PmNsaXBSZWN0KCk7CisgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgY2xpcFJl
Y3QgPSBwYXJlbnRTdXJmYWNlLT5jb250ZW50UmVjdCgpOyAvLyBpbnRlcnNlY3Qgd2l0aCB0aGlz
U3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpIChpbiB0YXJnZXQgc3BhY2UpCisKKyAgICBG
bG9hdFJlY3QgcmVzdWx0ID0gcGFyZW50U3VyZmFjZS0+c2NyZWVuVG9TdXJmYWNlU3BhY2Uocm9v
dERhbWFnZVJlY3QpOworICAgIHJlc3VsdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0
ZVN1cmZhY2VTY2lzc29yUmVjdChMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICBMYXllckNocm9taXVtKiBwYXJlbnRMYXllciA9IGxh
eWVyLT5wYXJlbnQoKTsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHBhcmVudFN1cmZhY2Ug
PSBwYXJlbnRMYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworICAgIEludFJlY3QgY2xpcFJl
Y3QgPSBwYXJlbnRTdXJmYWNlLT5jbGlwUmVjdCgpOworICAgIGlmIChjbGlwUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIGNsaXBSZWN0ID0gcGFyZW50U3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAg
ICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KIHN0
YXRpYyBpbmxpbmUgYm9vbCBsYXllcklzSW5FeGlzdGluZzNEUmVuZGVyaW5nQ29udGV4dChMYXll
clR5cGUqIGxheWVyKQogewpAQCAtNjkyLDcgKzczNyw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExh
eWVyCiAvLyB0cmVlIHBhc3MsIHJldmlzZSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KCkgc28g
dGhhdCB0aGlzIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlCiAvLyBwYXNzIGluc2lkZSBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDw+KCkuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+Ci1zdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVj
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorc3RhdGljIHZvaWQg
d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVNjaXNzb3JSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CiAg
ICAgLy8gVXNlIEJhY2tUb0Zyb250IHNpbmNlIGl0J3MgY2hlYXAgYW5kIHRoaXMgaXNuJ3Qgb3Jk
ZXItZGVwZW5kZW50LgogICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgTGF5
ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1Rv
RnJvbnQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CkBAIC03MDMsMTkgKzc0OCwzNCBAQCBzdGF0aWMg
dm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYQogICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0g
Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCgqaXQpOwogICAgICAgICAgICAgaXQtPnNldFZpc2li
bGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGl0
LnJlcHJlc2VudHNJdHNlbGYoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9
IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoKml0LCByb290RGFtYWdlUmVjdCk7CisgICAgICAg
ICAgICBpdC0+c2V0U2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAgICB9IGVsc2UgaWYg
KGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAg
IEludFJlY3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoKml0LCBy
b290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICBpdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRTY2lz
c29yUmVjdChzY2lzc29yUmVjdCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXll
ckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4obGF5ZXIs
IHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxr
TGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHM8TGF5ZXJDaHJvbWl1bSwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXll
ckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJp
eCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3Rv
cjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1
cmVTaXplKQogewogICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVy
bmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBD
Q0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJj
aHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0
ZXIsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxh
eWVyUmVjdHM8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZh
Y2U+KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9v
dERhbWFnZVJlY3QpCit7CisgICAgd2Fsa0xheWVyc0FuZENhbGN1bGF0ZVNjaXNzb3JSZWN0czxM
YXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZVJlY3QpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3Qg
RmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRl
U2Npc3NvclJlY3RzPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJT
dXJmYWNlPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlUmVjdCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgKaW5kZXggMzc2MmY2NGIxOWIzMTM0OTk4ZTQwYjQ0NzYzOGEyNDZmMTI0OGJiYi4uMmVmMzRk
ODcxNDg0NzllMTY0YWM1MDNhZDUwNWFmOWIyZmYwNGMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVt
KiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1h
dHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRl
eHR1cmVTaXplKTsKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0
ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCk7CisgICAgc3RhdGljIHZv
aWQgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERh
bWFnZVJlY3QpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9v
bCByZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0
U3VyZmFjZUxheWVySUQpOwogCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA5ZWUyZGYyMjNmNTIxMjQxMDE2
ZTUzMjgwYWJiNzYxZWU0NTc5NmIwLi5lN2FhMTYxNTQ2NGExZDNiYjAyNmY0MjY4MTNmMGI4MjUw
MmZlY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjI2
LDI2ICsyMjYsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxs
U3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMg
RmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNl
TGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCi17Ci0gICAgRmxvYXRSZWN0
IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVz
ZSB0aGUgcm9vdCBkYW1hZ2UgYXMgdGhlIGRhbWFnZSBmb3IKLSAgICAvLyBhbGwgc3VyZmFjZXMs
IGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOwotICAgIGlmIChzY3JlZW5TcGFjZVRy
YW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2pl
Y3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mCi0gICAgICAgIC8vIGludmVy
c2UgdHJhbnNmb3Jtcy4gSW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bwotICAg
ICAgICAvLyBqdXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1cmZhY2UuCi0gICAgICAgIC8vIEZJWE1F
OiB1c2UgY2FsY3VsYXRlVmlzaWJsZVJlY3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgotICAgICAg
ICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJl
bmRlclN1cmZhY2UoKTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSByZW5kZXJTdXJmYWNl
LT5jb250ZW50UmVjdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmlu
dmVyc2UoKTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0ubWFwUmVjdChyb290RGFtYWdlUmVjdCk7Ci0gICAgfQotICAgIHJldHVybiBzdXJm
YWNlRGFtYWdlUmVjdDsKLX0KLQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KQogewogICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CkBAIC0y
ODAsNiArMjYwLDE0IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVy
UGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIHRyYWNrRGFt
YWdlRm9yQWxsU3VyZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKIAorICAgIEZs
b2F0UmVjdCBkYW1hZ2VSZWN0OworICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
dXNpbmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgZGFtYWdlUmVjdCA9IG1fcm9vdERhbWFnZVJlY3Q7
CisgICAgZWxzZQorICAgICAgICBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwg
MCksIHZpZXdwb3J0U2l6ZSgpKTsKKyAgICAKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGFt
YWdlUmVjdCk7CisKICAgICAvLyBDcmVhdGUgdGhlIHJlbmRlciBwYXNzZXMgaW4gZGVwZW5kZW5j
eSBvcmRlci4KICAgICBIYXNoTWFwPENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyUGFzcyo+IHN1
cmZhY2VQYXNzTWFwOwogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkg
ewpAQCAtMjg3LDEyICsyNzUsNiBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0
ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogICAgICAgICBD
Q1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKIAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5k
ZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHN1cmZh
Y2VEYW1hZ2VSZWN0OwotICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVz
aW5nUGFydGlhbFN3YXApCi0gICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGRhbWFnZUlu
U3VyZmFjZVNwYWNlKHJlbmRlclN1cmZhY2VMYXllciwgbV9yb290RGFtYWdlUmVjdCk7Ci0gICAg
ICAgIHBhc3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKLQogICAg
ICAgICBzdXJmYWNlUGFzc01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CiAgICAg
ICAgIHBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTMyMywxMSArMzA1
LDE1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKEND
UmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICAgICAgb2NjbHVzaW9uVHJhY2tl
ci5lbnRlckxheWVyKGl0KTsKIAotICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGlu
Z1JlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVy
U3VyZmFjZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIpOworICAgICAgICBpZiAoaXQucmVw
cmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgaWYgKCFs
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8fCAhaXQtPnNjaXNz
b3JSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9y
UmVuZGVyU3VyZmFjZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIsIG1fcm9vdERhbWFnZVJl
Y3QpOworICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAm
JiAhaXQtPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGl0LT53
aWxsRHJhdyhtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwotICAgICAgICAgICAgcGFzcy0+YXBwZW5k
UXVhZHNGb3JMYXllcigqaXQsICZvY2NsdXNpb25UcmFja2VyLCBoYWRNaXNzaW5nVGlsZXMpOwor
CisgICAgICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRp
YWxTd2FwIHx8ICFpdC0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcigqaXQsICZvY2NsdXNpb25UcmFja2VyLCBoYWRNaXNz
aW5nVGlsZXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGhhZE1pc3NpbmdUaWxlcykgewpA
QCAtMzM5LDcgKzMyNSw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIG9jY2x1
c2lvblRyYWNrZXIubGVhdmVMYXllcihpdCk7CiAgICAgfQogCi0gICAgcGFzc2VzLmxhc3QoKS0+
YXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4obV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX2JhY2tncm91
bmRDb2xvciwgb2NjbHVzaW9uVHJhY2tlcik7CisKKyAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8ICFtX3Jvb3RMYXllckltcGwtPnNjaXNzb3JS
ZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICBwYXNzZXMubGFzdCgpLT5hcHBlbmRRdWFkc1RvRmls
bFNjcmVlbihtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fYmFja2dyb3VuZENvbG9yLCBvY2NsdXNp
b25UcmFja2VyKTsKIAogICAgIGlmIChkcmF3RnJhbWUpCiAgICAgICAgIG9jY2x1c2lvblRyYWNr
ZXIub3ZlcmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsKQEAgLTQyOCw3ICs0MTYs
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRh
JiBmcmFtZSkKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKG1fcm9vdExh
eWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmRyYXdSZW5kZXJQYXNzKGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQoKSk7CisgICAgICAgIG1f
bGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MoZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgp
LCBtX3Jvb3REYW1hZ2VSZWN0KTsKIAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJs
ZWQoc2V0dGluZ3MoKSkpCiAgICAgICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVj
dHNGb3JDdXJyZW50RnJhbWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBzZXR0aW5ncygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4
IDg0ODczMGEyYzdiNjBiNzYyMzg5OWZkN2Y5YjQxMzMwYTJlOTdjYjcuLjAxOTZkOTM3YjNhZDU1
ZGI3ZGE3OGZjZmJhNWMzZDExYWZlYTI5YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApA
QCAtNjgsMjAgKzY4LDIxIEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvckxheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXNpb25UcmFja2VySW1wCiAgICAgbV9zaGFyZWRR
dWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIH0KIAotdm9p
ZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJ
bXBsKiBsYXllciwgQ0NPY2NsdXNpb25UcmFja2VySW1wbCogb2NjbHVzaW9uVHJhY2tlcikKK3Zv
aWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDT2NjbHVzaW9uVHJhY2tlckltcGwqIG9jY2x1c2lvblRyYWNrZXIsIGNv
bnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBz
dXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKwogICAgIC8vIEZJWE1FOiByZW5kZXIg
c3VyZmFjZSBsYXllcnMgc2hvdWxkIGJlIGEgQ0NMYXllckltcGwtZGVyaXZlZCBjbGFzcyBhbmQK
ICAgICAvLyBub3QgYmUgaGFuZGxlZCBzcGVjaWFsbHkgaGVyZS4KICAgICBDQ1F1YWRDdWxsZXIg
cXVhZEN1bGxlcihtX3F1YWRMaXN0LCBsYXllciwgb2NjbHVzaW9uVHJhY2tlciwgbGF5ZXItPmhh
c0RlYnVnQm9yZGVycygpKTsKIAotICAgIENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVy
LT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRR
dWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBpZiAobGF5
ZXItPmhhc0RlYnVnQm9yZGVycygpKSB7CiAgICAgICAgIENvbG9yIGNvbG9yKGRlYnVnU3VyZmFj
ZUJvcmRlckNvbG9yUmVkLCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuLCBkZWJ1Z1N1cmZh
Y2VCb3JkZXJDb2xvckJsdWUsIGRlYnVnU3VyZmFjZUJvcmRlckFscGhhKTsKICAgICAgICAgcXVh
ZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3Vy
ZmFjZUJvcmRlcldpZHRoKSk7CiAgICAgfQogICAgIGJvb2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0g
ICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwg
c3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNhKSk7CisgICAgcXVhZEN1bGxlci5hcHBlbmRT
dXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdl
dCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgdGhpcy0+dGFyZ2V0U3VyZmFjZSgp
LT5kYW1hZ2VJblN1cmZhY2VTcGFjZShyb290RGFtYWdlUmVjdCksIGlzUmVwbGljYSkpOwogICAg
IG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7
CiAKICAgICAvLyBBZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVh
cnMgYmVsb3cgdGhlIHN1cmZhY2UuCkBAIC05Miw3ICs5Myw3IEBAIHZvaWQgQ0NSZW5kZXJQYXNz
OjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIEND
T2NjbHVzCiAgICAgICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50
UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKICAgICAgICAgfQogICAg
ICAgICBib29sIGlzUmVwbGljYSA9IHRydWU7Ci0gICAgICAgIHF1YWRDdWxsZXIuYXBwZW5kUmVw
bGljYShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQo
KSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCksIGlz
UmVwbGljYSkpOworICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRl
bnRSZWN0KCksIGxheWVyLCB0aGlzLT50YXJnZXRTdXJmYWNlKCktPmRhbWFnZUluU3VyZmFjZVNw
YWNlKHJvb3REYW1hZ2VSZWN0KSwgaXNSZXBsaWNhKSk7CiAgICAgICAgIG1fc2hhcmVkUXVhZFN0
YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3MuaAppbmRleCA0NTJhODYxMGY1YTlkYmMwMjE0YThjZGRiZmY2ZjAyNTRm
ZWNkYTI2Li4zNDc4NDQ5MmViYTI2MjI3YzMzNmY5YzliMjJiNjg3YzZkOTZjNGQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3MuaApAQCAtNTYsMjIgKzU2LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAg
IHZvaWQgYXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCosIENDT2NjbHVzaW9uVHJhY2tl
ckltcGwqLCBib29sJiBoYWRNaXNzaW5nVGlsZXMpOwotICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JS
ZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqLCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKik7
CisgICAgdm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCos
IENDT2NjbHVzaW9uVHJhY2tlckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0
KTsKICAgICB2b2lkIGFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKENDTGF5ZXJJbXBsKiByb290TGF5
ZXIsIGNvbnN0IENvbG9yJiBzY3JlZW5CYWNrZ3JvdW5kQ29sb3IsIGNvbnN0IENDT2NjbHVzaW9u
VHJhY2tlckltcGwmKTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQogCi0gICAgdm9pZCBzZXRTdXJm
YWNlRGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSB7IG1fc3Vy
ZmFjZURhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQotICAgIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0
OyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFj
ZSopOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZhY2U7CiAgICAgQ0NRdWFk
TGlzdCBtX3F1YWRMaXN0OwogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4g
bV9zaGFyZWRRdWFkU3RhdGVMaXN0OwotICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0
OwogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBh
c3NMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggNmFiNTA5OThkNDMz
ZjU2MzRkYmUwZjIwYmM2NzE4MjdkNmU5MmIzMi4uNjA1NTNjNjE3M2E5M2M1MGE4Yzc1Njk4YTlk
YTMwZWY4YzViOTFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0yMDgs
MTggKzIwOCwyMCBAQCBpbmxpbmUgc3RhdGljIGludCBnZXRTa0JpdG1hcFRleHR1cmVJZChjb25z
dCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgZmFsbGJhY2spCiAgICAgcmV0dXJuIHRleHR1cmUtPmdl
dFRleHR1cmVIYW5kbGUoKTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnNldFNjaXNzb3JS
ZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3QKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpjYWxjU2Np
c3NvclJlY3QoYm9vbCB1c2luZ1BhcnRpYWxTd2FwLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VE
YW1hZ2VSZWN0LCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9vd25p
bmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNs
aXBwaW5nKCkgJiYgbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dh
cCkgeworICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5w
YXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiB1c2luZ1BhcnRpYWxTd2FwKSB7CiAgICAg
ICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IG1fY2xpcFJlY3Q7CiAgICAgICAgIGNs
aXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChzdXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIGxh
eWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFt
YWdlUmVjdCkpOwotICAgIH0gZWxzZSBpZiAobGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCku
dXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVj
dChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KSk7CisgICAgICAgIHNjaXNzb3JS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCk7CisgICAgfSBlbHNlIGlm
ICh1c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICBzY2lzc29yUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3Qoc3VyZmFjZURhbWFnZVJlY3QpOwogICAgIGVsc2UgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVu
dCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAg
ICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KG1fY2xpcFJlY3QpOworICAgICAg
ICBzY2lzc29yUmVjdCA9IG1fY2xpcFJlY3Q7CiAgICAgZWxzZQotICAgICAgICBHTEMobGF5ZXJS
ZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdDb250ZW50
cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCkBAIC00NDYsMTMgKzQ0OCw0
NCBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9t
RGVzY2VuZGFudCgpIGNvbnN0CiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRl
clN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09w
YXF1ZSA9IGZhbHNlOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9yaWdp
blRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCks
IGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6
OmNyZWF0ZShvcmlnaW5UcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgp
LCBtX3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKIFBhc3NPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNoYXJl
ZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAgIHJl
dHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwg
cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09w
YWNpdHkoKSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVu
dFJlY3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOworfQorCitG
bG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZShjb25zdCBGbG9h
dFJlY3QmIGRhbWFnZVJlY3QpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VS
ZWN0OworCisgICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRh
bWFnZSBhcyB0aGUgZGFtYWdlIGZvcgorICAgIC8vIGFsbCBzdXJmYWNlcywgZXhjZXB0IHBlcnNw
ZWN0aXZlIHRyYW5zZm9ybXMuCisgICAgaWYgKG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVy
c3BlY3RpdmUoKSkgeworICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3Qg
cGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZgorICAgICAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMu
IEluIHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KKyAgICAgICAgLy8ganVzdCBy
ZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgorICAgICAgICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0
ZVZpc2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KKyAgICAgICAgc3VyZmFjZURhbWFn
ZVJlY3QgPSBtX2NvbnRlbnRSZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1fc2NyZWVuU3BhY2VUcmFu
c2Zvcm0uaW52ZXJzZSgpOworICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3Jl
ZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KGRhbWFnZVJlY3QpOworICAgIH0KKworICAgIHJldHVy
biBzdXJmYWNlRGFtYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6c2Ny
ZWVuVG9TdXJmYWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1fc2NyZWVu
U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIHJldHVybiBpbnZlcnNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKK30KKworRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6
c3VyZmFjZVRvU2NyZWVuU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAg
IHJldHVybiBtX3NjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggYTZkZWUxMGVjZWQwOTdjODIwYTRhOTgyMzVj
ZDgyZWI5ZTE4ZTVhZC4uYzg4MWE3ZmVjOTkzZjk3NjM0NWM2NmFlNWQ4YTA4YWQyMDFmYWYyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSop
OwogICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7CiAKLSAgICB2b2lkIHNldFNj
aXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QpIGNvbnN0OworICAgIGJvb2wgY2FsY1NjaXNzb3JSZWN0KGJvb2wgdXNpbmdQ
YXJ0aWFsU3dhcCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgSW50UmVjdCYg
c2Npc3NvclJlY3QpIGNvbnN0OwogCiAgICAgdm9pZCBkcmF3Q29udGVudHMoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CiAgICAgdm9pZCBkcmF3UmVwbGljYShMYXllclJlbmRlcmVyQ2hyb21pdW0q
KTsKQEAgLTEyMyw2ICsxMjMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25z
dCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2NsaXBSZWN0OyB9CiAKKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3Qm
IHNjaXNzb3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorICAgIGNvbnN0
IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQor
CiAgICAgdm9pZCBzZXRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CiAKQEAg
LTE1Myw2ICsxNTYsMTUgQEAgcHVibGljOgogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogICAgIFBhc3NPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+IGNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKIAorICAg
IC8qKgorICAgICAqIFRyYW5zZm9ybXMgYSBkYW1hZ2UgcmVjdCBpbnRvIHN1cmZhY2Ugc3BhY2Uu
IEluIHNvbWUgY2FzZXMgbWF5IGRlY2lkZQorICAgICAqIHRvIHJldHVybiB0aGUgZW50aXJlIHN1
cmZhY2UgY29udGVudFJlY3QuCisgICAgICovCisgICAgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFj
ZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGFtYWdlUmVjdCkgY29uc3Q7CisKKyAgICBGbG9hdFJl
Y3Qgc2NyZWVuVG9TdXJmYWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgRmxv
YXRSZWN0IHN1cmZhY2VUb1NjcmVlblNwYWNlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCiBw
cml2YXRlOgogICAgIEludFJlY3QgY29tcHV0ZURldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBj
b25zdDsKICAgICBJbnRSZWN0IGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtKSBjb25zdDsKQEAgLTE2Niw2ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIENDTGF5ZXJJbXBs
KiBtX293bmluZ0xheWVyOwogICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsKIAorICAgIC8v
IFVzZXMgdGhpcyBzdXJmYWNlJ3Mgc3BhY2UKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAg
ICAgYm9vbCBtX3NraXBzRHJhdzsKICAgICBib29sIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZDsK
QEAgLTE4NSw3ICsxOTgsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFu
c2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2Zp
bHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRl
cnM7CisKKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0YXJnZXQgc3VyZmFjZSBvZiBwYXJlbnQg
bGF5ZXIKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywg
aWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUg
ZHJhd24uCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGFyZ2V0IHN1cmZhY2Ugb2YgcGFyZW50
IGxheWVyCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4gbV9sYXllckxpc3Q7CiAKICAgICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJnZXQg
c3VyZmFjZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNlLCBh
bmQgdGhhdCBpcyBnb2luZwpAQCAtMTk0LDkgKzIxNCw2IEBAIHByaXZhdGU6CiAKICAgICBPd25Q
dHI8Q0NEYW1hZ2VUcmFja2VyPiBtX2RhbWFnZVRyYWNrZXI7CiAKLSAgICAvLyBTdG9yZWQgaW4g
dGhlICJzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Np
c3NvcmluZy4KLSAgICBGbG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwotCiAgICAgLy8gRm9yIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnMKICAgICBpbnQgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRl
eEhpc3Rvcnk7CiAgICAgaW50IG1fY3VycmVudExheWVySW5kZXhIaXN0b3J5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCmluZGV4IDliZjc2OTI1YmI4Y2YyYmJhYzUzOWMwMTQz
MWM1NTc4NDMzOWZkMDUuLjkwNzc3YWI0MWJiODRiMDg4OTFjYjIyNDI4ODVlMGYzODFiMjgyODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2hhcmVkUXVhZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKQEAgLTI5LDE2ICsyOSwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+
IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1
YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwg
Y29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQg
b3BhY2l0eSwgYm9vbCBvcGFxdWUpCitQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1No
YXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9w
YWNpdHksIGJvb2wgb3BhcXVlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaGFyZWRR
dWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVyUmVjdCwgY2xpcFJl
Y3QsIG9wYWNpdHksIG9wYXF1ZSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaGFyZWRR
dWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVyUmVjdCwgc2Npc3Nv
clJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOwogfQogCi1DQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFy
ZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYg
bGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBv
cGFxdWUpCitDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0
JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCiAgICAgOiBtX3F1YWRU
cmFuc2Zvcm0ocXVhZFRyYW5zZm9ybSkKICAgICAsIG1fbGF5ZXJUcmFuc2Zvcm0obGF5ZXJUcmFu
c2Zvcm0pCiAgICAgLCBtX2xheWVyUmVjdChsYXllclJlY3QpCi0gICAgLCBtX2NsaXBSZWN0KGNs
aXBSZWN0KQorICAgICwgbV9zY2lzc29yUmVjdChzY2lzc29yUmVjdCkKICAgICAsIG1fb3BhY2l0
eShvcGFjaXR5KQogICAgICwgbV9vcGFxdWUob3BhcXVlKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVk
UXVhZFN0YXRlLmgKaW5kZXggNDIwNmFhNWMyZGUyYTc1NGM5Y2E5MWY0ZThlODg5MzgyMjExZmYy
Mi4uNmIxNTAwMGJiNTdlNmRiMDRkZmE1Zjk0NzVkMzQwN2IzOWE4MmI0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFk
U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC0zNiwyNyArMzYsMjYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENDU2hhcmVkUXVhZFN0YXRlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNp
dHksIGJvb2wgb3BhcXVlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wg
b3BhcXVlKTsKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBxdWFkcyBpbiBhIENDRHJhd1F1
YWQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3F1YWRUcmFuc2Zvcm07IH0K
ICAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkgc2hvdWxkIGJlIHRyYW5zZm9y
bWVkIHdpdGguCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyYW5zZm9ybTsgfQogICAgIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9Ci0gICAgLy8gVXNhZ2U6
IGlmIGNsaXBSZWN0IGlzIGVtcHR5LCB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4K
LSAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7
IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Np
c3NvclJlY3Q7IH0KIAogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNp
dHk7IH0KICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KICAg
ICBib29sIGlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5z
Zm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5
LCBib29sIG9wYXF1ZSk7CisgICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXll
clRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lz
c29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9xdWFkVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGF5
ZXJUcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2xheWVyUmVjdDsKLSAgICBJbnRSZWN0IG1fY2xp
cFJlY3Q7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwogICAgIGZsb2F0IG1fb3BhY2l0eTsK
ICAgICBib29sIG1fb3BhcXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCmluZGV4IGJiZWE5NzFkZDVhNGVmZTY3ZDMz
NjE2MWM5YTBkZmI3MTVhZDdhYjcuLmI1ZDIxYWFjZTA0MDM1ZTVkN2ZmZjA0ODU5Y2Q1M2M4ZGY0
YzMxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VU
cmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFn
ZVRyYWNrZXJUZXN0LmNwcApAQCAtNTksNiArNTksNyBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xh
eQogICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290KTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwog
fQogCiB2b2lkIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJvb3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNw
cAppbmRleCBmNWVhZTdmODRkZDUxMjVjODA5OTViOWNkNDI5Yjk5YmNiZjY5MzM0Li5mOTgzODYy
MzZmOTQzNTAyNTEyYmQyZjQ2ZWRiMjhjYmY2NTBkZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTE0Miw2ICsx
NDIsNyBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAg
ICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CkBAIC0xODksNiArMTkwLDcgQEAg
VEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGxheWVyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAg
ICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVD
VF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTI0OCw2ICsyNTAsNyBAQCBURVNUKEND
TGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVsdGlTdXJmYWNlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsK
IAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
RVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5k
ZXggMzFkYTUwYzdlMmY0NmY3Y2VlZjkzY2FhYTJmNGIyZDEwMzg4MzlkNC4uYTFkNmJjMTM5YjJk
ZmJkNDEwNjIyYjlhNjIwNjE0MGMxNDk0MTcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0z
Miw3ICszMiwxMiBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVk
ZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCisjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIK
KyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAtNTksNiArNjQsNyBAQCB2b2lkIGV4ZWN1dGVDYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
KQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RM
YXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVtbXlS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVu
dFJlY3QoKSk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZN
YXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKQEAgLTMxNyw2ICszMjMsNTU4
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bmdsZVJlbmRlclN1cmZhY2UpCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHNjaXNzb3JSZWN0Tm9DbGlwKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0
aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0
ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAg
fAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0t
LS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAg
ICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAg
fCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJl
bmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxk
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwg
MTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJ
bnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9v
dFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisK
KyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOwor
ICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6
ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdy
YW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAg
ICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCog
Z3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQo
Z3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2Uo
KSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
ICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisK
KyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAg
ICAgICAgLyogZW1wdHkgbGlzdCAqLworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAg
ICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQ
dHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDJVKTsK
KyAgICAKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisKKyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBjaGls
ZHJlbidzIGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVj
dCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFu
ZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEFTU0VSVF9F
UShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlw
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBBU1NFUlRfRkFMU0Uocm9v
dC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2Vz
TGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xh
eWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCisg
ICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJl
Y3Qocm9vdFJlY3QpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJv
b3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVu
IHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0
cyBjaGlsZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVu
ZCB0aGUgc2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVj
dC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwg
aGF2ZSB0aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFjZQor
ICAgIC8vIG9mIGl0cyBvd24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9v
dFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFt
YWdlCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBl
bXB0eSBzY2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwg
MCwgMCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFn
ZSB3aXRoaW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNj
aXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0
aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFt
YWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBi
dXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVp
Z2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJm
YWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQ
RUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RE
YW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBk
YW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwg
ODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAv
LyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3Qt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZh
Y2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlz
IHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9v
dERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXll
ciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RE
YW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdl
LmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24g
c3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAg
IEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1h
Z2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBy
b290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRp
YWwgZGFtYWdlIGJleW9uZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAx
MTAsIDExMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAor
ICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEo
cm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3Qs
IHNvIGl0cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdl
LgorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCBy
b290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1h
Z2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdo
dCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBs
YXllciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJz
ZWN0IHdpdGggZGFtYWdlCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBp
cyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RS
ZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFt
YWdlLnkoKSkpOworCisgICAgLy8gQ2hpbGRyZW4ncyBjb250ZW50IHJlY3RzIGFyZSBiaWdnZXIg
dGhhbiB0aGUgcm9vdCdzIHNvIHRoZXkgZG9uJ3QgY2xpcCB0aGUgZGFtYWdlIHJlY3QsIGJ1dCBj
aGFuZ2UgaXRzIG9mZnNldC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkp
OworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKK30KKworVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQoreworICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAg
IC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAg
ICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAg
ICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwg
fCAgIDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0t
LS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisg
ICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKwor
ICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRS
ZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1
MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91
bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBy
b290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRS
ZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOwor
ICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0
LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdy
YW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hp
bGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJl
Y3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJl
Y3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBjaGls
ZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0
KCk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJv
b3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91
bmRzKHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBk
dW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29y
dGVyOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkp
OworCisgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSwgcm9v
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisK
KyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9UUlVF
KGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgp
LCAyVSk7CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcwor
ICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisKKyAgICAvLyBMYXll
cidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5kcworICAg
IEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxk
UmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBn
cmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5j
bGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIEFTU0VSVF9FUShyb290LT5y
ZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAg
Ly8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290J3MKKyAg
ICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJl
Y3QpOworICAgIAorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOwor
ICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNT
RVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIAorICAg
IC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290
UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAg
IEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgCisgICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKworICAg
IC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0
YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQg
aXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAod2hpY2gg
ZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53
aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgp
KSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Npc3NvciByZWN0
IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAgICAvLyBvZiBpdHMgb3duCisgICAgRVhQ
RUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJl
Y3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0
LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2UgPSBJbnRS
ZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBFWFBFQ1Rf
RVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAgcm9vdERh
bWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZv
ciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJl
Y3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisg
ICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1Rf
RVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBj
aGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBp
cyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERh
bWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2Uu
aGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAorICAgIHJv
b3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRl
ZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFn
ZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAg
IAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQ
RUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJl
IGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZz
ZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERh
bWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCks
IHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3Jh
bmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJl
Y3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJv
b3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFt
YWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAg
IHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNv
bXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1
cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBi
ZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCBy
b290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAt
IHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7Cisg
ICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250
ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJl
c3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJv
dW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERh
bWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54
KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIE5vdyB0
aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVjdAorICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngo
KSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJl
Y3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1h
Z2UueSgpKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNo
aWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9ybSkKK3sKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisKKyAgICAv
KgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwKKyAgICAg
ICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAyIHwgICAg
IHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwg
ICAzLDQgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0t
LSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAg
ICAgICAgTGF5ZXJzIDEsIDIgYW5kIDMgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoNCk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRS
ZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVj
dCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJv
b3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgp
KSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RS
ZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0
eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCks
IGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAg
ICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdy
YW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC41Zik7Cisg
ICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwg
Z3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgw
LCAwKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRS
ZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldE9wYWNp
dHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRS
ZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGlsZDIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNo
aWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5n
ZXQoKTsKKworICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQyLnJlbGVhc2UoKSk7
CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5h
ZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0
cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsK
KworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKwor
ICAgICAgICAvKiBlbXB0eSBsaXN0ICovCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCksIHJvb3QuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
ICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teURhbWFnZVJlY3QpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGls
ZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAzVSk7
CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcworICAgIEFT
U0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisKKyAgICBBU1NFUlRfRVEoY2hp
bGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgY2hpbGRSZWN0LngoKSArIGdyYW5kQ2hp
bGRSZWN0LndpZHRoKCkgLCBjaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkp
KTsKKworICAgIC8vIEdyYW5kY2hpbGQgbm93IGNsaXBzCisgICAgQVNTRVJUX0VRKGdyYW5kQ2hp
bGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3Jh
bmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3Qu
aGVpZ2h0KCkpKTsKKworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBS
ZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNs
aXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHIt
PnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOworICAgIAorICAgIEFTU0VS
VF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGls
ZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQ
dHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJl
IHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhl
IGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisg
ICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJv
dW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91
bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0Lngo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBj
aGlsZCBpcyBub3cgc2Npc3NvcmVkIGJ5IHRoZSByZW5kZXIgc3VyZmFjZQorICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0Lndp
ZHRoKCkgLSBjaGlsZFJlY3QueCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWln
aHQoKSAtIGNoaWxkUmVjdC55KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAv
LyBFbXB0eSBkYW1hZ2UKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkg
ZGFtYWdlID09IGVtcHR5IHNjaXNzb3IKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQ
dHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIC8vIFBh
cnRpYWwgZGFtYWdlIHdpdGhpbiBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAx
MCwgMjAsIDIwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9v
dCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2Ug
cmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0
KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0
aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgp
LCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9v
dERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3Nv
cmVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZSBhcyB3ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRD
aGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKKyAg
ICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29t
cHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBk
YW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAg
IEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVu
dGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQg
b2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8v
IEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMg
d2VsbCBhcyByb290CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gUGFy
dGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAs
IDExMCwgMTEwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworCisgICAgLy8gUm9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVj
dCwgc28gaXRzIGNvbnRlbnRSZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1h
Z2UuCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0
IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERh
bWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVp
Z2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNl
IGxheWVyIGNsaXBwaW5nLCBzbyBpdHMgY29udGVudCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRl
cnNlY3Qgd2l0aCBkYW1hZ2UKKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0
IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9v
dFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3RE
YW1hZ2UueSgpKSk7CisKKyAgICAvLyBOb3cgdGhlIHNjaXNzb3IgcmVjdHMgYXJlIGNsaXBwZWQg
Ynkgc3VyZmFjZXMgY29udGVudFJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JS
ZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdl
LnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwg
cm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisgICAgLy8gR3JhbmRjaGls
ZCdzIHNjaXNzb3IgcmVjdCBpcyBjbGlwcGVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZQorICAgIEVY
UEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290
RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkg
LSBncmFuZENoaWxkUmVjdC55KCkpKTsKK30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGljYSkKIHsKICAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01NDYsNiArMTEwNCw5
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxp
c3RGb3JDbGlwTGF5ZXIpCiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOwogCisgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwor
CiAgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3MgY29udGVudCBpcyBlbnRpcmVseSBvdXRzaWRlIHRo
ZSBwYXJlbnQncyBjbGlwIHJlY3QsIHNvIHRoZSBpbnRlcm1lZGlhdGUKICAgICAvLyByZW5kZXIg
c3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQuIFJlbmRlciBzdXJmYWNlcyB3aXRob3V0
IGNoaWxkcmVuIG9yIHZpc2libGUKICAgICAvLyBjb250ZW50IGFyZSB1bmV4cGVjdGVkIGF0IGRy
YXcgdGltZSAoZS5nLiB3ZSBtaWdodCB0cnkgdG8gY3JlYXRlIGEgY29udGVudCB0ZXh0dXJlIG9m
IHNpemUgMCkuCkBAIC01NzQsNiArMTEzNSw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxpc3RGb3JUcmFuc3BhcmVudENoaWxkKQogICAgIGlu
dCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CisKICAgICAvLyBTaW5jZSB0aGUgbGF5ZXIgaXMgdHJhbnNwYXJlbnQsIHJlbmRlclN1cmZhY2Ux
LT5yZW5kZXJTdXJmYWNlKCkgc2hvdWxkIG5vdCBoYXZlIGdvdHRlbiBhZGRlZCBhbnl3aGVyZS4K
ICAgICAvLyBBbHNvLCB0aGUgZHJhd2FibGUgY29udGVudCByZWN0IHNob3VsZCBub3QgaGF2ZSBi
ZWVuIGV4dGVuZGVkIGJ5IHRoZSBjaGlsZHJlbi4KICAgICBFWFBFQ1RfRVEocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSwgMFUpOwpAQCAtNjM2LDYgKzExOTksMTAg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVu
ZGVyU3VyZmFjZXMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBGbG9hdFJlY3QgZHVtbXlEYW1h
Z2VSZWN0OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKSk7CisKKwogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZh
Y2VMYXllckxpc3RbMF0tPmlkKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdFsxXS0+aWQoKSk7CkBAIC02OTUsNiArMTI2Miw4IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2Vz
Q3Jhc2hSZXBybykKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKICAgICBBU1NFUlRf
RVEoMlUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEocGFy
ZW50LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsKICAgICBFWFBFQ1Rf
RVEoY2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0tPmlkKCkpOwpAQCAtODI1
LDYgKzEzOTQsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBS
ZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9MYXllcnMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRS
ZWN0KCkpOworCisKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+Y2xpcFJlY3QoKSk7CiAgICAgRVhQ
RUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjAp
KSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCkpOwogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRS
ZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBncmFuZENoaWxkMy0+Y2xpcFJl
Y3QoKSk7CkBAIC04OTcsNiArMTQ2OSw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb1N1cmZhY2VzKQogCiAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOwogCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCkpOwogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJm
YWNlKCkpOwogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCkpOwpA
QCAtMTU2OCw2ICsyMTQyLDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlCYWNrRmFjZUN1bGxpbmdXaXRoQW5pbWF0aW5nVHJhbnNmb3JtcykKIAogICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKIAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+
Y29udGVudFJlY3QoKSk7CisKICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KSk7CiAgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2Uo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDkxYzJkMWRmZjEyMTI3OWE3Yzc0NjA3MGM1Y2JkYzIy
MjRmMmI2NWEuLjhmODFkZGRlMmMxMGJjZGE2NDkxZjcyYmJhY2JmNzMxNGIyMzJkYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwCkBAIC0zNiwxMCArMzYsMTIgQEAKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxs
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVh
ZC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
VGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWUuaD4K
ICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZVByb3ZpZGVyLmg+CkBAIC00OSw2ICs1MSwx
MSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKK3VzaW5nIDo6dGVzdGluZzo6TW9jazsKK3Vz
aW5nIDo6dGVzdGluZzo6UmV0dXJuOwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1iZXI7Cit1c2lu
ZyA6OnRlc3Rpbmc6Ol87CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50IHsKQEAgLTcwLDYgKzc3LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwb3N0U2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChzaXplX3QpIE9WRVJSSURFIHsgfQogCisgICAgUGFz
c093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0KGJvb2wgcGFy
dGlhbFN3YXAsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dCwg
UGFzc093blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKKyAgICB7CisgICAgICAgIENDU2V0dGlu
Z3Mgc2V0dGluZ3M7CisKKyAgICAgICAgc2V0dGluZ3MucGFydGlhbFN3YXBFbmFibGVkID0gcGFy
dGlhbFN3YXA7CisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdElt
cGwgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIHRoaXMpOworCisgICAg
ICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGdyYXBoaWNzQ29udGV4dCwg
VW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgICAgIG15SG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShJbnRTaXplKDEwLCAxMCkpOworCisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IHJvb3RQdHI7CisKKyAgICAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAw
KSk7CisgICAgICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAg
ICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgcm9vdC0+c2V0Vmlz
aWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwLCAxMCkpOworICAgICAgICByb290LT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIG15SG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBteUhvc3RJbXBsLnJlbGVhc2UoKTsKKyAgICB9
CisKICAgICBzdGF0aWMgdm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICB7CiAgICAgICAgIEFTU0VSVF9FUShsYXllci0+c2Nyb2xs
RGVsdGEoKSwgSW50U2l6ZSgpKTsKQEAgLTEwOTksNiArMTEyOCwxOTIgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcFJlY2VpdmVzRGFtYWdlUmVjdCkKICAgICBF
WFBFQ1RfRVEoZXhwZWN0ZWRTd2FwUmVjdC5oZWlnaHQoKSwgYWN0dWFsU3dhcFJlY3QuaGVpZ2h0
KCkpOwogfQogCitjbGFzcyBGYWtlTGF5ZXJXaXRoUXVhZHMgOiBwdWJsaWMgQ0NMYXllckltcGwg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEZha2VMYXllcldpdGhRdWFkcz4gY3Jl
YXRlKGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VMYXllcldpdGhRdWFkcyhpZCkp
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlz
dCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYpIE9WRVJS
SURFCisgICAgeworICAgICAgICBjb25zdCBDb2xvciBncmF5KDEwMCwgMTAwLCAxMDApOworICAg
ICAgICBJbnRSZWN0IHF1YWRSZWN0KDAsIDAsIDUsIDUpOworICAgICAgICBPd25QdHI8Q0NEcmF3
UXVhZD4gbXlRdWFkID0gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3Rh
dGUsIHF1YWRSZWN0LCBncmF5KTsKKyAgICAgICAgcXVhZExpc3QuYXBwZW5kKG15UXVhZC5yZWxl
YXNlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGYWtlTGF5ZXJXaXRoUXVhZHMoaW50IGlk
KQorICAgICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBN
b2NrQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgor
ICAgIE1PQ0tfTUVUSE9EMSh1c2VQcm9ncmFtLCB2b2lkKFdlYkdMSWQgcHJvZ3JhbSkpOworICAg
IE1PQ0tfTUVUSE9ENSh1bmlmb3JtNGYsIHZvaWQoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEZmxv
YXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykpOworICAgIE1P
Q0tfTUVUSE9ENCh1bmlmb3JtTWF0cml4NGZ2LCB2b2lkKFdHQzNEaW50IGxvY2F0aW9uLCBXR0Mz
RHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBXR0MzRGZsb2F0KiB2
YWx1ZSkpOworICAgIE1PQ0tfTUVUSE9ENChkcmF3RWxlbWVudHMsIHZvaWQoV0dDM0RlbnVtIG1v
ZGUsIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGludHB0ciBvZmZzZXQp
KTsKKyAgICBNT0NLX01FVEhPRDEoZ2V0U3RyaW5nLCBXZWJTdHJpbmcoV0dDM0RlbnVtIG5hbWUp
KTsKKyAgICBNT0NLX01FVEhPRDAoZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01JVU0sIFdl
YlN0cmluZygpKTsKKyAgICBNT0NLX01FVEhPRDEoZW5hYmxlLCB2b2lkKFdHQzNEZW51bSBjYXAp
KTsKKyAgICBNT0NLX01FVEhPRDQoc2Npc3Nvciwgdm9pZChXR0MzRGludCB4LCBXR0MzRGludCB5
LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkpOworfTsKKworY2xhc3MgTW9j
a0NvbnRleHRIYXJuZXNzIHsKK3ByaXZhdGU6CisgICAgTW9ja0NvbnRleHQqIG1fY29udGV4dDsK
K3B1YmxpYzoKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MoTW9ja0NvbnRleHQqIGNvbnRleHQpCisg
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgICAgICAvLyBDYXRjaCAidW5p
bnRlcmVzdGluZyIgY2FsbHMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdXNlUHJv
Z3JhbShfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgq
bV9jb250ZXh0LCBkcmF3RWxlbWVudHMoXywgXywgXywgXykpCisgICAgICAgICAgICAuVGltZXMo
MCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybU1hdHJpeDRmdihf
LCBfLCBfLCBfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1RfQ0FM
TCgqbV9jb250ZXh0LCB1bmlmb3JtNGYoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAuVGlt
ZXMoMCk7CisKKyAgICAgICAgLy8gQW55IG90aGVyIHN0cmluZ3MgYXJlIGVtcHR5CisgICAgICAg
IEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFN0cmluZyhfKSkKKyAgICAgICAgICAgIC5XaWxs
UmVwZWF0ZWRseShSZXR1cm4oV2ViU3RyaW5nKCkpKTsKKworICAgICAgICAvLyBTdXBwb3J0IGZv
ciBwYXJ0aWFsIHN3YXAsIGlmIG5lZWRlZAorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCBnZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpKQorICAgICAgICAgICAg
LldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1
ZmZlciIpKSk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0UmVxdWVzdGFi
bGVFeHRlbnNpb25zQ0hST01JVU0oKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1
cm4oV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKSkpOworCisgICAgICAg
IC8vIEFueSB1bi1zYW5jdGlvbmVkIGNhbGxzIHRvIGVuYWJsZSgpIGFyZSBPSworICAgICAgICBF
WFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBlbmFibGUoXykpCisgICAgICAgICAgICAuV2lsbFJlcGVh
dGVkbHkoUmV0dXJuKCkpOworICAgIH0KKworICAgIHZvaWQgbXVzdERyYXdTb2xpZFF1YWQoKQor
ICAgIHsKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZHJhd0VsZW1lbnRzKEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVCwgMCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAu
UmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIC8vIDAgaXMgdGhlIGhhcmRjb2RlZCBy
ZXR1cm4gdmFsdWUgb2YgZ2V0VW5pZm9ybUxvY2F0aW9uCisgICAgICAgIC8vIDEgaXMgY291bnQg
Pz8/CisgICAgICAgIC8vIEJvb2xlYW4gY2FzdCB0byBzdHI/PworICAgICAgICAvLyBmbG9hdCog
dmFsdWVzCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm1NYXRyaXg0ZnYo
MCwgMSwgXywgXykpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAg
ICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIC8vIDAgaXMgdGhlIGhhcmRjb2Rl
ZCByZXR1cm4gdmFsdWUgb2YgZ2V0VW5pZm9ybUxvY2F0aW9uCisgICAgICAgIC8vIDMgZmxvYXRz
IGFyZSBjb2xvciAvIDI1NQorICAgICAgICAvLyAxIGlzIEFscGhhCisgICAgICAgIEVYUEVDVF9D
QUxMKCptX2NvbnRleHQsIHVuaWZvcm00ZigwLCBfLCBfLCBfLCAxKSkKKyAgICAgICAgICAgIC5X
aWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyAxIGlzIGhhcmRjb2RlZCByZXR1cm4gdmFsdWUgb2YgZmFrZSBj
cmVhdGVQcm9ncmFtKCkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdXNlUHJvZ3Jh
bSgxKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRp
cmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICB9CisKKyAgICB2b2lkIG11c3RTZXRTY2lzc29yKGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgRVhQRUNU
X0NBTEwoKm1fY29udGV4dCwgZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
KQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNP
blNhdHVyYXRpb24oKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBzY2lzc29y
KHgsIHksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQor
ICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKyAgICB9CisKK307CisKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9QYXJ0aWFsU3dhcCkKK3sKKyAgICAvLyBTZXQg
dXAgbW9jayBncmFwaGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRG
cm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRleHQmIG1vY2tD
b250ZXh0ID0gKnN0YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAgIE1v
Y2tDb250ZXh0SGFybmVzcyBoYXJuZXNzKCZtb2NrQ29udGV4dCk7CisKKyAgICAvLyBDb25maWd1
cmUgdGVzdCBjYXNlCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworCisgICAgLy8g
UnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBs
ID0gY3JlYXRlTGF5ZXJUcmVlSG9zdChmYWxzZSwgY29udGV4dCwgRmFrZUxheWVyV2l0aFF1YWRz
OjpjcmVhdGUoMSkpOworCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1l
OworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAg
ICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3
QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygm
bW9ja0NvbnRleHQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRp
YWxTd2FwKQoreworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29u
dGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsK
KyAgICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQq
PihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChj
b250ZXh0LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250
ZXh0KTsKKworICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBoYXJuZXNzLm11c3REcmF3
U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOwor
ICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0
ZXN0IGNhc2UKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNy
ZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwgRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVh
dGUoMSkpOworCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAg
IEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0Nv
bnRleHQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2Fw
Tm9VcGRhdGUpCit7CisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhpY3MgY29udGV4dAorICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tD
b250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4
dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNE
KGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFybmVzcygmbW9ja0Nv
bnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3QgY2FzZQorICAgIGhhcm5lc3MubXVzdERy
YXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDgsIDIsIDIpOwor
ICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0
RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEw
KTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICAvLyBS
dW4gdGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwg
PSBjcmVhdGVMYXllclRyZWVIb3N0KHRydWUsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6
Y3JlYXRlKDEpKTsKKyAgICAKKyAgICAvLyBEcmF3IG9uY2UgdG8gbWFrZSBzdXJlIGxheWVyIGlz
IG5vdCBuZXcKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAg
RVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9z
dEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXll
cnMoZnJhbWUpOworCisgICAgLy8gR2VuZXJhdGUgdXBkYXRlIGluIGxheWVyCisgICAgQ0NMYXll
ckltcGwqIHJvb3QgPSBteUhvc3RJbXBsLT5yb290TGF5ZXIoKTsKKyAgICByb290LT5zZXRVcGRh
dGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAyLCAyKSk7CisKKyAgICAvLyBUaGlzIGRyYXcgc2hvdWxk
IGdlbmVyYXRlIG5vdyBuZXcgdWRwYXRlcworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnBy
ZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsK
KyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgIE1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGNvbnRleHQgbG9zdCBub3RpZmljYXRpb25zIGFyZSBwcm9wYWdhdGVkIHRocm91Z2gg
dGhlIHRyZWUuCiBjbGFzcyBDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXIgOiBwdWJs
aWMgQ0NMYXllckltcGwgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKaW5kZXggOTc2ZGMzZjI5ODY0
Njg3YzkwN2VkMjY3OTcxZDg1ZTIxMTA2YjYzZS4uNjBkNmFlZDcxMTM5MzBiYzU0YTZkZTAxMDI0
Njc3MDI5OTBhNzlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCkBAIC0yNjYsNiArMjY2LDkgQEAgcHJvdGVj
dGVkOgogICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZChtX3Jvb3Qu
Z2V0KCkpOwogCiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJ
bXBsLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAgIG1f
bGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRlcmF0
b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsKTsKICAgICB9CiAKQEAgLTI4
Miw2ICsyODUsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dENocm9taXVtLmFwcGVuZChtX3Jvb3QpOwogCiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21p
dW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMobV9yZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVu
dFJlY3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9yQmVn
aW4gPSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dENocm9taXVtKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDdkYWMwMDVkMjRjYWZhY2MyNzFiODZh
ZDVmZGUzODU2NmQwYmQ4NzQuLjlkOGQxOWY3MjM4MzRkNDQxNDU5YzU3ODNiOTQ5NmFmYjE1Y2U5
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJm
YWNlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1
cmZhY2VUZXN0LmNwcApAQCAtMTEyLDE1ICsxMTIsMTYgQEAgVEVTVChDQ1JlbmRlclN1cmZhY2VU
ZXN0LCBzYW5pdHlDaGVja1N1cmZhY2VDcmVhdGVzQ29ycmVjdFNoYXJlZFF1YWRTdGF0ZSkKICAg
ICByZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0ob3JpZ2luKTsKICAgICByZW5kZXJT
dXJmYWNlLT5zZXRDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAgICAgcmVuZGVyU3VyZmFjZS0+
c2V0Q2xpcFJlY3QoY2xpcFJlY3QpOworICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNzb3JSZWN0
KGNsaXBSZWN0KTsKICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3T3BhY2l0eSgxKTsKLQorICAg
IAogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gcmVuZGVy
U3VyZmFjZS0+Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7CiAKICAgICBFWFBFQ1RfVFJVRShzaGFy
ZWRRdWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpOwogICAgIEVYUEVDVF9F
USgzMCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpLm00MSgpKTsKICAgICBFWFBF
Q1RfRVEoNDAsIHNoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKS5tNDIoKSk7CiAgICAg
RVhQRUNUX0VRKGNvbnRlbnRSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpKTsKLSAg
ICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKSk7CisgICAg
RVhQRUNUX0VRKGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCkpOwogICAg
IEVYUEVDVF9FUSgxLCBzaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKHNoYXJlZFF1YWRTdGF0ZS0+aXNPcGFxdWUoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143848</attachid>
            <date>2012-05-24 10:41:34 -0700</date>
            <delta_ts>2012-05-30 11:06:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120524134133.patch</filename>
            <type>text/plain</type>
            <size>94107</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjIwMDZhZmI2YzQxYTRi
ZjcwOGYyYzI2ZWIzY2RhYmVkNDBlMTRlZS4uNWQ0ZDI3YWZlNzA0NzkwNzQwNGJmY2E3ZTFhMDc5
OGM0YjUyYzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA1LTI0ICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRl
clBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJT
dXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNzb3JSZWN0
KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NE
cmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpj
cmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OndhbGtMYXllcnNBbmRDYWxjdWxhdGVTY2lzc29yUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9z
dENvbW1vbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6
YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjYWxjU2Npc3NvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNh
U2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OnNjcmVlblRvU3VyZmFjZVNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVRvU2NyZWVuU3BhY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAo
Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0
U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29y
UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3Rh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVh
ZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3NvclJlY3QpOgorCiAyMDEyLTA1LTIzICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQVNTRVJUIGZhaWx1cmUg
dG9SZW5kZXJQcm9ncmVzcyBpbiBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3RhdGVD
aGFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZWVjMmRmNjJiMjI3MTkyNzA0Zjk1
MzIyNmNiMTAzNDgwMjE5ZjE1OS4uN2Y4OGJmOWE1Y2ZmZjdkOWUyYTk1M2RjNjMyODZkOTczNmNh
NjVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0w
NS0yNCAgWmVldiBMaWViZXIgIDx6bGllYmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIENsZWFudXAgc2Npc3NvciByZWN0IGNvbXB1dGF0aW9uL3VzZSB3aXRoIGRhbWFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0
IHRlc3RzIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwgdXNpbmcgbW9jayBncmFwaGljIGNvbnRleHQK
KyAgICAgICAgdG8gdmVyaWZ5IGVuZC10by1lbmQgcXVhZCBkcmF3aW5nLgorCisgICAgICAgIEFk
ZGVkIG1vcmUgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhvc3RDb21tb24gdG8gdmVyaWZ5IGNs
aXAgYW5kCisgICAgICAgIHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbnMuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNU
KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2FsY0Ry
YXdFdGMpOgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDUtMjMgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSB0aGVtZUVuZ2luZSB0byBQ
bGF0Zm9ybS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNmI0MzcwZDFhMTBjOGU0Nzk3MzI0NmYz
OTg4NTBmMWI2YzQ1MGEwYy4uYWMyYjJiMmY2NmQzMGYyNmZhYmNiZTYzYjNiNWVmMTVlNjBiMzI0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTM5LDYgKzEzOSw5IEBAIHB1YmxpYzoKICAgICBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxl
TGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVj
dDsgfQogCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBz
Y2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQg
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKQEAg
LTMwNSw3ICszMDgsMTMgQEAgcHJpdmF0ZToKIAogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAg
ICAgSW50U2l6ZSBtX2JvdW5kczsKKworICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNl
CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2lu
ZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQg
YmUgZHJhd24uCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlCisgICAgSW50UmVj
dCBtX3NjaXNzb3JSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9v
bCBtX3Njcm9sbGFibGU7CiAgICAgYm9vbCBtX3Nob3VsZFNjcm9sbE9uTWFpblRocmVhZDsKQEAg
LTM0MiwxMiArMzUxLDE2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJv
bWl1bT4gbV9yZW5kZXJTdXJmYWNlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9v
bCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNl
IHNwYWNlCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJh
d1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3NjcmVlblNwYWNlVHJhbnNm
b3JtOwogICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmltYXRpbmc7CiAgICAgYm9vbCBtX3Nj
cmVlblNwYWNlVHJhbnNmb3JtSXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBzdXJm
YWNlIHNwYWNlCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAgZmxvYXQg
bV9jb250ZW50c1NjYWxlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBhOWYzZDQ2NjVkMzZlNTI4ZDNmZTNmYzkxYzg2MDI1ZjRlOWE4N2VkLi43MjM5NjVhZjU4
NzlhMmJhYTQ5N2NjZDFjMDI5MTI3MWY1MTI5Y2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ0OCwzMSArNDQ4LDI4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkb05vT3AoKQogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Zmx1c2goKSk7
CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdCBGbG9hdFJl
Y3QmIHJvb3REYW1hZ2VSZWN0KQogewogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFj
ZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKTsKICAgICBpZiAoIXVzZVJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNsZWFyUmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCByZW5kZXJQYXNzLT5z
dXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBjbGVhclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlSW5TdXJmYWNl
U3BhY2Uocm9vdERhbWFnZVJlY3QpKTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0
ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFj
a1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0g
cXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkKLSAgICAgICAgZHJhd1F1YWQoaXQtPmdl
dCgpLCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICAgICAgZHJhd1F1YWQo
aXQtPmdldCgpLCByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpCiB7CiAgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKICAgICBpZiAobV9jYXBhYmlsaXRpZXMu
dXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3Qg
PSBzdXJmYWNlRGFtYWdlUmVjdDsKLSAgICAgICAgaWYgKCFxdWFkLT5jbGlwUmVjdCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChxdWFkLT5jbGlw
UmVjdCgpKTsKLSAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmRE
YW1hZ2VSZWN0KTsKKyAgICAgICAgc2Npc3NvclJlY3QgPSBxdWFkLT5zY2lzc29yUmVjdCgpOwog
ICAgICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0gZWxzZQotICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7CisgICAg
ICAgIHNjaXNzb3JSZWN0ID0gY2xpcFJlY3Q7CiAKICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0
eSgpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwpAQCAtNjI5LDcgKzYyNiwxMiBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkKgogCiAgICAgZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQpOwogCi0gICAg
bGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+c3VyZmFj
ZURhbWFnZVJlY3QoKSk7CisgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKKyAgICBpZiAoIWxheWVy
LT5yZW5kZXJTdXJmYWNlKCktPmNhbGNTY2lzc29yUmVjdChtX2NhcGFiaWxpdGllcy51c2luZ1Bh
cnRpYWxTd2FwLCBxdWFkLT5zdXJmYWNlRGFtYWdlUmVjdCgpLCBzY2lzc29yUmVjdCkpCisgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSk7CisgICAgZWxzZQorICAgICAgICBzZXRTY2lzc29yVG9SZWN0KHNjaXNz
b3JSZWN0KTsKKwogICAgIGlmIChxdWFkLT5pc1JlcGxpY2EoKSkKICAgICAgICAgbGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+ZHJhd1JlcGxpY2EodGhpcyk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAxYTJlYmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYz
MDE0NzJjOTU5Li5mN2RhZmVmMWQ3ZDU4ZDU2ZjYzY2JmZWViMWQ1MGMzMGMwMGYyZGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCB2aWV3cG9ydENoYW5nZWQoKTsKIAogICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJh
bWUoQ0NSZW5kZXJTdXJmYWNlKiBkZWZhdWx0UmVuZGVyU3VyZmFjZSk7Ci0gICAgdm9pZCBkcmF3
UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNz
KGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpOwog
ICAgIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAgICB2b2lkIGRyYXdIZWFkc1VwRGlz
cGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpOwpAQCAtMTUwLDcg
KzE1MCw3IEBAIHByaXZhdGU6CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2aWV3
cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4g
dmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIAotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NE
cmF3UXVhZCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQg
ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKICAg
ICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkKik7CiAgICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOGQw
MTdhMzEzMjIwZGMzMTcwNzY5ODZlMWQ1YmQxYjJhMDU0NTJjOS4uMjNlZDQyZjVhOGJjYmRlMDVm
MjlmNDlkNjk4Yzg4ODA0YjE5NGQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9CiAKKyAgICBj
b25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7
IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7
IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRGaWx0ZXJzKGNv
bnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBm
aWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAKQEAgLTExNyw2ICsxMjAsNyBAQCBwcml2
YXRlOgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7CiAgICAgTGF5ZXJDaHJvbWl1
bSogbV9tYXNrTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRoaXMgc3VyZmFjZSdzIHNwYWNlCiAgICAg
SW50UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAKQEAgLTEzMiw3
ICsxMzYsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJl
QW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAg
ICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisKKyAg
ICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0YXJnZXQgc3VyZmFjZSBvZiBwYXJlbnQgbGF5ZXIKICAg
ICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmll
cyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisg
ICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGFyZ2V0IHN1cmZhY2Ugb2YgcGFyZW50IGxheWVyCisg
ICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IG1fbGF5ZXJMaXN0OwogCiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0
IHN1cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwg
YW5kIHRoYXQgaXMgZ29pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaAppbmRleCBmNGVmMmQzZjIxYzFmYWU1
NzY2NjNjZDMyMmZjYjEyN2I4N2NiZmViLi43MTgxMTJiYzZmMTkxNzI2MzA5MzJlNGU1YmEyYzQw
YzNjM2M5MmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclJlY3QoKTsg
fQotICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPmNsaXBSZWN0KCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5zY2lzc29yUmVjdCgpOyB9CiAgICAg
ZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5vcGFjaXR5
KCk7IH0KICAgICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIGJsZW5kaW5nLCB3aGF0IHBhcnQgb2Yg
dGhlIGNvbnRlbnRzIG9mIHRoaXMgcXVhZCBhcmUgb3BhcXVlPwogICAgIEludFJlY3Qgb3BhcXVl
UmVjdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGI3NDZkOTg0MWQxNzUx
YTUyMzA5NjRkMjc3MTE4ZmIzZTZkMzNjYjguLjk0ZTI0YzE0ZTU5MWM5MzQ3NmUwNDg5NzlmYmE1
NGIwNGE5NGU2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEzNiwxMCArMTM2LDcg
QEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAKIFBhc3NPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUo
KSBjb25zdAogewotICAgIEludFJlY3QgbGF5ZXJDbGlwUmVjdDsKLSAgICBpZiAodXNlc0xheWVy
Q2xpcHBpbmcoKSkKLSAgICAgICAgbGF5ZXJDbGlwUmVjdCA9IGNsaXBSZWN0KCk7Ci0gICAgcmV0
dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNm
b3JtKCksIHZpc2libGVMYXllclJlY3QoKSwgbGF5ZXJDbGlwUmVjdCwgZHJhd09wYWNpdHkoKSwg
b3BhcXVlKCkpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFu
c2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCB2aXNpYmxlTGF5ZXJSZWN0KCksIG1fc2Npc3NvclJl
Y3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1ZSgpKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6d2ls
bERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDk3
YzU2MDdmY2ZhYTQ4ZDQ3OTlmMTI3MmQyMDVlZmIxNjg2ZWQ2ZTQuLjdkZjczMGUxZGE4ZDNiZDVm
NWE5NmZkZWEwZDkzOGRjMTU0YWE5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTYwLDYg
KzE2MCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVXNhZ2U6IGlmIHRoaXMtPnVzZXNMYXllckNsaXBw
aW5nKCkgaXMgZmFsc2UsIHRoZW4gdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCiAg
ICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9
CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3Qg
PSByZWN0OyB9CisKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKwogICAgIENDUmVuZGVyU3VyZmFj
ZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2Uq
IHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCkBAIC0yOTQs
NiArMjk4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHBy
b3BlcnRpZXMgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXll
clByb3BlcnR5Q2hhbmdlZDsKIAorICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlCiAg
ICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7
CiAgICAgYm9vbCBtX29wYXF1ZTsKQEAgLTM0NywxNyArMzUyLDI0IEBAIHByaXZhdGU6CiAgICAg
Ly8gVGhlIHJlY3QgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc2Npc3NvciB3aGVuIHRoaXMgbGF5
ZXIgaXMgZHJhd24uCiAgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1
cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCiAgICAgLy8gdG8gYm91bmRzLgor
ICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZQogICAgIEludFJlY3QgbV9jbGlwUmVj
dDsKIAorICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lk
ZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBVc2VzIHRhcmdldCBz
dXJmYWNlJ3Mgc3BhY2UKKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CisKICAgICAvLyBSZW5k
ZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMg
ZGVzY2VuZGFudHMKICAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCiAgICAgT3du
UHRyPENDUmVuZGVyU3VyZmFjZT4gbV9yZW5kZXJTdXJmYWNlOwogCiAgICAgLy8gSGllcmFyY2hp
Y2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50
cy4KKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UKICAgICBJbnRSZWN0IG1fZHJh
d2FibGVDb250ZW50UmVjdDsKIAogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0IHdhcyByZXBh
aW50ZWQvdXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBwbHVnaW4gbGF5
ZXJzIGJ5cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KKyAgICAvLyBVc2VzIGxheWVyJ3Mg
Y29udGVudCBzcGFjZQogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiAKICAgICAvLyBNYW5h
Z2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAppbmRleCBmODJhYzM3M2NjMzQzZGFkYjMyODIwYjg5OTZlZjk5ZjFhNzBmMmNhLi4xN2Rj
ODBiYzJkYTJmNDBmNjFmOTA4ODI1NjZmODBlZGY3NzYzMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTUwNCw2ICs1MDQsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgQ0NUZXh0dXJlVXBkYXRlciYg
dQogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5zZm9ybTsKICAg
ICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5ncy5kZXZpY2VTY2FsZUZh
Y3Rvcik7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5z
Zm9ybSwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKwor
ICAgICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3cG9ydFNp
emUoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyh1cGRhdGVMaXN0LCBkYW1hZ2VSZWN0KTsKICAgICB9CiAKICAgICAvLyBS
ZXNldCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJlcXVlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggZTMzNTZlNmZkNjMwNTM1ZDc3NjViYmRiN2M1
YzEyM2NiZWRhZGZjZi4uOWVkNmRiNjgzNjc2NGI2M2QzODg2ODc5MTQ5MTA3NWEwNTY4YmJiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC02NSw2ICs2
NSw1MSBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJl
Y3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIHJldHVybiBsYXllclJlY3Q7CiB9
CiAKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoQ0NMYXllckltcGwq
IGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQoreworICAgIENDUmVuZGVy
U3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisK
KyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IHJlbmRlclN1cmZhY2UtPmRhbWFnZUluU3Vy
ZmFjZVNwYWNlKHJvb3REYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSkKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0
KCkpOworICAgIGVsc2UKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3QocmVuZGVyU3Vy
ZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjbGlw
QW5kRGFtYWdlKTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJTY2lzc29yUmVj
dChMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkK
K3sKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCisgICAgICAgIHJldHVybiBs
YXllci0+Y2xpcFJlY3QoKTsKKyAgICByZXR1cm4gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRlU3VyZmFjZVNj
aXNzb3JSZWN0KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdl
UmVjdCkKK3sKKyAgICBDQ0xheWVySW1wbCogcGFyZW50TGF5ZXIgPSBsYXllci0+cGFyZW50KCk7
CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBwYXJlbnRTdXJmYWNlID0gcGFyZW50TGF5ZXItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHRoaXNTdXJmYWNlID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSB0aGlzU3VyZmFj
ZS0+Y2xpcFJlY3QoKTsKKyAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBjbGlw
UmVjdCA9IGludGVyc2VjdGlvbihwYXJlbnRTdXJmYWNlLT5jb250ZW50UmVjdCgpLCB0aGlzU3Vy
ZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKworICAgIEZsb2F0UmVjdCByZXN1bHQgPSBw
YXJlbnRTdXJmYWNlLT5zY3JlZW5Ub1N1cmZhY2VTcGFjZShyb290RGFtYWdlUmVjdCk7CisgICAg
cmVzdWx0LmludGVyc2VjdChjbGlwUmVjdCk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
cmVzdWx0KTsKK30KKworc3RhdGljIEludFJlY3QgY2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0
KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQor
eworICAgIExheWVyQ2hyb21pdW0qIHBhcmVudExheWVyID0gbGF5ZXItPnBhcmVudCgpOworICAg
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcGFyZW50U3VyZmFjZSA9IHBhcmVudExheWVyLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IHBhcmVudFN1cmZhY2Ut
PmNsaXBSZWN0KCk7CisgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgY2xpcFJl
Y3QgPSBwYXJlbnRTdXJmYWNlLT5jb250ZW50UmVjdCgpOworICAgIHJldHVybiBjbGlwUmVjdDsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIGxh
eWVySXNJbkV4aXN0aW5nM0RSZW5kZXJpbmdDb250ZXh0KExheWVyVHlwZSogbGF5ZXIpCiB7CkBA
IC02OTIsNyArNzM3LDcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIC8vIHRyZWUgcGFzcywg
cmV2aXNlIGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoKSBzbyB0aGF0IHRoaXMgY2FuIGJlIGRv
bmUgaW4gYSBzaW5nbGUKIC8vIHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eUludGVybmFsPD4oKS4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXN0YXRpYyB2b2lk
IHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpCitzdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3Vs
YXRlU2Npc3NvclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
Y29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKIHsKICAgICAvLyBVc2UgQmFja1RvRnJv
bnQgc2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBlbmRlbnQuCiAgICAg
dHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZh
Y2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJh
dG9yVHlwZTsKQEAgLTcwMywxOSArNzQ4LDM0IEBAIHN0YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRD
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhCiAg
ICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KCppdCk7CiAgICAgICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxl
TGF5ZXJSZWN0KTsKICAgICAgICAgfQorICAgICAgICBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigp
KSB7CisgICAgICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlTGF5ZXJTY2lz
c29yUmVjdCgqaXQsIHJvb3REYW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGl0LT5zZXRTY2lzc29y
UmVjdChzY2lzc29yUmVjdCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0NvbnRy
aWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVj
dCA9IGNhbGN1bGF0ZVN1cmZhY2VTY2lzc29yUmVjdCgqaXQsIHJvb3REYW1hZ2VSZWN0KTsKKyAg
ICAgICAgICAgIGl0LT5yZW5kZXJTdXJmYWNlKCktPnNldFNjaXNzb3JSZWN0KHNjaXNzb3JSZWN0
KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiBsYXllciwg
TGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFy
ZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJp
eCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1
cmVTaXplKQogewogICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eUludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRN
YXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxh
eWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNpemUpOwotICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVW
aXNpYmxlTGF5ZXJSZWN0czxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIGxheWVyLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIEND
TGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8Q0NMYXllckltcGwsIFZl
Y3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVy
LCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUp
OwotICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxDQ0xheWVySW1w
bCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAg
ICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlU2Npc3NvclJlY3RzPExheWVyQ2hyb21pdW0sIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtPihyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xheWVy
SW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1h
Z2VSZWN0KQoreworICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVTY2lzc29yUmVjdHM8Q0NMYXll
ckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCAzNzYyZjY0YjE5
YjMxMzQ5OThlNDBiNDQ3NjM4YTI0NmYxMjQ4YmJiLi4yZWYzNGQ4NzE0ODQ3OWUxNjRhYzUwM2Fk
NTA1YWY5YjJmZjA0YzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aApAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiBy
b290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwogICAgIHN0
YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1w
bCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0
cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJl
U2l6ZSk7CiAKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9h
dFJlY3QmIHJvb3REYW1hZ2VSZWN0KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCk7CisKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250
cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAK
ICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCmluZGV4IDllZTJkZjIyM2Y1MjEyNDEwMTZlNTMyODBhYmI3NjFlZTQ1Nzk2
YjAuLmU3YWExNjE1NDY0YTFkM2JiMDI2ZjQyNjgxM2YwYjgyNTAyZmVjZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0yMjYsMjYgKzIyNiw2IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciwKICAgICB9CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5T
dXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvYXRS
ZWN0JiByb290RGFtYWdlUmVjdCkKLXsKLSAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7
Ci0gICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBh
cyB0aGUgZGFtYWdlIGZvcgotICAgIC8vIGFsbCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZl
IHRyYW5zZm9ybXMuCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNl
VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCk7Ci0gICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhhc1BlcnNwZWN0
aXZlKCkpIHsKLSAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlvbnMgZG8gbm90IHBsYXkg
bmljZSB3aXRoIG1hcFJlY3Qgb2YKLSAgICAgICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm1zLiBJbiB0
aGlzIHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRvCi0gICAgICAgIC8vIGp1c3QgcmVkcmF3
IHRoZSBlbnRpcmUgc3VyZmFjZS4KLSAgICAgICAgLy8gRklYTUU6IHVzZSBjYWxjdWxhdGVWaXNp
YmxlUmVjdCB0byBoYW5kbGUgcHJvamVjdGlvbnMuCi0gICAgICAgIENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAg
ICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNw
YWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgICAgICBz
dXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KHJv
b3REYW1hZ2VSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0OwotfQot
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxp
c3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0eSgpKTsKQEAgLTI4MCw2ICsyNjAsMTQgQEAgYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNz
TGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyht
X3Jvb3RMYXllckltcGwuZ2V0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIG1fcm9v
dERhbWFnZVJlY3QgPSBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogCisgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3Q7
CisgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQor
ICAgICAgICBkYW1hZ2VSZWN0ID0gbV9yb290RGFtYWdlUmVjdDsKKyAgICBlbHNlCisgICAgICAg
IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgdmlld3BvcnRTaXplKCkp
OworICAgIAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkYW1hZ2VSZWN0KTsKKwogICAgIC8v
IENyZWF0ZSB0aGUgcmVuZGVyIHBhc3NlcyBpbiBkZXBlbmRlbmN5IG9yZGVyLgogICAgIEhhc2hN
YXA8Q0NSZW5kZXJTdXJmYWNlKiwgQ0NSZW5kZXJQYXNzKj4gc3VyZmFjZVBhc3NNYXA7CiAgICAg
Zm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAx
OyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CkBAIC0yODcsMTIgKzI3NSw2
IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVu
ZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogCiAgICAg
ICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5k
ZXJTdXJmYWNlKTsKLQotICAgICAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAg
ICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAg
ICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gZGFtYWdlSW5TdXJmYWNlU3BhY2UocmVuZGVy
U3VyZmFjZUxheWVyLCBtX3Jvb3REYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFzcy0+c2V0U3VyZmFj
ZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotCiAgICAgICAgIHN1cmZhY2VQYXNzTWFw
LmFkZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAgICAgcGFzc2VzLmFwcGVuZChw
YXNzLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMzIzLDExICszMDUsMTUgQEAgYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFz
c2VzLCBDQ0xheWUKIAogICAgICAgICBvY2NsdXNpb25UcmFja2VyLmVudGVyTGF5ZXIoaXQpOwog
Ci0gICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKQot
ICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoKml0LCAm
b2NjbHVzaW9uVHJhY2tlcik7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5n
UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8ICFpdC0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIo
Kml0LCAmb2NjbHVzaW9uVHJhY2tlciwgbV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgIH0KICAg
ICAgICAgZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpICYmICFpdC0+dmlzaWJsZUxheWVy
UmVjdCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaXQtPndpbGxEcmF3KG1fbGF5ZXJSZW5k
ZXJlci5nZXQoKSk7Ci0gICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvckxheWVyKCppdCwg
Jm9jY2x1c2lvblRyYWNrZXIsIGhhZE1pc3NpbmdUaWxlcyk7CisKKyAgICAgICAgICAgIGlmICgh
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgfHwgIWl0LT5zY2lz
c29yUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0Zv
ckxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIsIGhhZE1pc3NpbmdUaWxlcyk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoaGFkTWlzc2luZ1RpbGVzKSB7CkBAIC0zMzksNyArMzI1LDkgQEAg
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQ
YXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5sZWF2ZUxh
eWVyKGl0KTsKICAgICB9CiAKLSAgICBwYXNzZXMubGFzdCgpLT5hcHBlbmRRdWFkc1RvRmlsbFNj
cmVlbihtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fYmFja2dyb3VuZENvbG9yLCBvY2NsdXNpb25U
cmFja2VyKTsKKworICAgIGlmICghbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFy
dGlhbFN3YXAgfHwgIW1fcm9vdExheWVySW1wbC0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHBhc3Nlcy5sYXN0KCktPmFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKG1fcm9vdExheWVy
SW1wbC5nZXQoKSwgbV9iYWNrZ3JvdW5kQ29sb3IsIG9jY2x1c2lvblRyYWNrZXIpOwogCiAgICAg
aWYgKGRyYXdGcmFtZSkKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3Mo
KS5yZWNvcmRNZXRyaWNzKHRoaXMpOwpAQCAtNDI4LDcgKzQxNiw3IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogICAgIG1fbGF5
ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUobV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJm
YWNlKCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MoZnJh
bWUucmVuZGVyUGFzc2VzW2ldLmdldCgpKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3
UmVuZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXNbaV0uZ2V0KCksIG1fcm9vdERhbWFnZVJlY3Qp
OwogCiAgICAgaWYgKG1fZGVidWdSZWN0SGlzdG9yeS0+ZW5hYmxlZChzZXR0aW5ncygpKSkKICAg
ICAgICAgbV9kZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZSht
X3Jvb3RMYXllckltcGwuZ2V0KCksIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QsIHNldHRp
bmdzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggODQ4NzMwYTJjN2I2MGI3NjIz
ODk5ZmQ3ZjliNDEzMzBhMmU5N2NiNy4uMDE5NmQ5MzdiM2FkNTVkYjdkYTc4ZmNmYmE1YzNkMTFh
ZmVhMjlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC02OCwyMCArNjgsMjEgQEAg
dm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwqIGxheWVy
LCBDQ09jY2x1c2lvblRyYWNrZXJJbXAKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5k
KHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCi12b2lkIENDUmVuZGVyUGFzczo6YXBw
ZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ09jY2x1
c2lvblRyYWNrZXJJbXBsKiBvY2NsdXNpb25UcmFja2VyKQordm9pZCBDQ1JlbmRlclBhc3M6OmFw
cGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2Ns
dXNpb25UcmFja2VySW1wbCogb2NjbHVzaW9uVHJhY2tlciwgY29uc3QgRmxvYXRSZWN0JiByb290
RGFtYWdlUmVjdCkKIHsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpOworCiAgICAgLy8gRklYTUU6IHJlbmRlciBzdXJmYWNlIGxheWVycyBzaG91
bGQgYmUgYSBDQ0xheWVySW1wbC1kZXJpdmVkIGNsYXNzIGFuZAogICAgIC8vIG5vdCBiZSBoYW5k
bGVkIHNwZWNpYWxseSBoZXJlLgogICAgIENDUXVhZEN1bGxlciBxdWFkQ3VsbGVyKG1fcXVhZExp
c3QsIGxheWVyLCBvY2NsdXNpb25UcmFja2VyLCBsYXllci0+aGFzRGVidWdCb3JkZXJzKCkpOwog
Ci0gICAgQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsK
ICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2Ut
PmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogICAgIGlmIChsYXllci0+aGFzRGVidWdCb3JkZXJz
KCkpIHsKICAgICAgICAgQ29sb3IgY29sb3IoZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQsIGRl
YnVnU3VyZmFjZUJvcmRlckNvbG9yR3JlZW4sIGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yQmx1ZSwg
ZGVidWdTdXJmYWNlQm9yZGVyQWxwaGEpOwogICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZh
Y2UoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBz
dXJmYWNlLT5jb250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsK
ICAgICB9CiAgICAgYm9vbCBpc1JlcGxpY2EgPSBmYWxzZTsKLSAgICBxdWFkQ3VsbGVyLmFwcGVu
ZFN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUu
Z2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgp
LCBpc1JlcGxpY2EpKTsKKyAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRl
bnRSZWN0KCksIGxheWVyLCB0aGlzLT50YXJnZXRTdXJmYWNlKCktPmRhbWFnZUluU3VyZmFjZVNw
YWNlKHJvb3REYW1hZ2VSZWN0KSwgaXNSZXBsaWNhKSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVM
aXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAogICAgIC8vIEFkZCByZXBs
aWNhIGFmdGVyIHRoZSBzdXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0aGUgc3VyZmFj
ZS4KQEAgLTkyLDcgKzkzLDcgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVu
ZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXMKICAgICAgICAgICAg
IHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShz
aGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGNvbG9yLCBkZWJ1
Z1N1cmZhY2VCb3JkZXJXaWR0aCkpOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaXNSZXBsaWNh
ID0gdHJ1ZTsKLSAgICAgICAgcXVhZEN1bGxlci5hcHBlbmRSZXBsaWNhKENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50
UmVjdCgpLCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNhKSk7CisgICAgICAg
IHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRl
KHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHRo
aXMtPnRhcmdldFN1cmZhY2UoKS0+ZGFtYWdlSW5TdXJmYWNlU3BhY2Uocm9vdERhbWFnZVJlY3Qp
LCBpc1JlcGxpY2EpKTsKICAgICAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFy
ZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmlu
ZGV4IDQ1MmE4NjEwZjVhOWRiYzAyMTRhOGNkZGJmZjZmMDI1NGZlY2RhMjYuLjM0Nzg0NDkyZWJh
MjYyMjdjMzM2ZjljOWIyMmI2ODdjNmQ5NmM0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBA
IC01NiwyMiArNTYsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVy
UGFzcz4gY3JlYXRlKENDUmVuZGVyU3VyZmFjZSopOwogCiAgICAgdm9pZCBhcHBlbmRRdWFkc0Zv
ckxheWVyKENDTGF5ZXJJbXBsKiwgQ0NPY2NsdXNpb25UcmFja2VySW1wbCosIGJvb2wmIGhhZE1p
c3NpbmdUaWxlcyk7Ci0gICAgdm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihD
Q0xheWVySW1wbCosIENDT2NjbHVzaW9uVHJhY2tlckltcGwqKTsKKyAgICB2b2lkIGFwcGVuZFF1
YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiwgQ0NPY2NsdXNpb25UcmFja2Vy
SW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpOwogICAgIHZvaWQgYXBwZW5k
UXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgQ29sb3ImIHNj
cmVlbkJhY2tncm91bmRDb2xvciwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VySW1wbCYpOwogCiAg
ICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRMaXN0
OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRTdXJmYWNlOyB9CiAKLSAgICB2b2lkIHNldFN1cmZhY2VEYW1hZ2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpIHsgbV9zdXJmYWNlRGFtYWdlUmVjdCA9IHN1
cmZhY2VEYW1hZ2VSZWN0OyB9Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJlY3Q7IH0KLQogcHJpdmF0ZToKICAg
ICBleHBsaWNpdCBDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKik7CiAKICAgICBDQ1JlbmRl
clN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFjZTsKICAgICBDQ1F1YWRMaXN0IG1fcXVhZExpc3Q7CiAg
ICAgVmVjdG9yPE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRTdGF0ZUxp
c3Q7Ci0gICAgRmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJlY3Q7CiB9OwogCiB0eXBlZGVmIFZl
Y3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IENDUmVuZGVyUGFzc0xpc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCA2YWI1MDk5OGQ0MzNmNTYzNGRiZTBmMjBiYzY3MTgy
N2Q2ZTkyYjMyLi42MDU1M2M2MTczYTkzYzUwYThjNzU2OThhOWRhMzBlZjhjNWI5MWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTIwOCwxOCArMjA4LDIwIEBAIGlubGlu
ZSBzdGF0aWMgaW50IGdldFNrQml0bWFwVGV4dHVyZUlkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAs
IGludCBmYWxsYmFjaykKICAgICByZXR1cm4gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwog
fQogCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0
KSBjb25zdAorYm9vbCBDQ1JlbmRlclN1cmZhY2U6OmNhbGNTY2lzc29yUmVjdChib29sIHVzaW5n
UGFydGlhbFN3YXAsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIEludFJlY3Qm
IHNjaXNzb3JSZWN0KSBjb25zdAogewotICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAm
JiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBsYXllclJl
bmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKSB7CisgICAgaWYgKG1fb3du
aW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJD
bGlwcGluZygpICYmIHVzaW5nUGFydGlhbFN3YXApIHsKICAgICAgICAgRmxvYXRSZWN0IGNsaXBB
bmREYW1hZ2VSZWN0ID0gbV9jbGlwUmVjdDsKICAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50
ZXJzZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Np
c3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7Ci0gICAgfSBl
bHNlIGlmIChsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQot
ICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qo
c3VyZmFjZURhbWFnZVJlY3QpKTsKKyAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBBbmREYW1hZ2VSZWN0KTsKKyAgICB9IGVsc2UgaWYgKHVzaW5nUGFydGlhbFN3YXAp
CisgICAgICAgIHNjaXNzb3JSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVj
dCk7CiAgICAgZWxzZSBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXll
ci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVyUmVuZGVyZXIt
PnNldFNjaXNzb3JUb1JlY3QobV9jbGlwUmVjdCk7CisgICAgICAgIHNjaXNzb3JSZWN0ID0gbV9j
bGlwUmVjdDsKICAgICBlbHNlCi0gICAgICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCks
IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd0NvbnRlbnRzKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcikKQEAgLTQ0NiwxMyArNDQ4LDQ0IEBAIGJvb2wgQ0NSZW5kZXJT
dXJmYWNlOjpzdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50KCkgY29uc3QK
IFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlU2hh
cmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKICAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7Ci0gICAg
cmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUob3JpZ2luVHJhbnNmb3JtKCksIGRyYXdU
cmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09wYWNpdHkoKSwgaXNP
cGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9yaWdpblRyYW5z
Zm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIG1fc2Npc3NvclJlY3QsIGRy
YXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKIH0KIAogUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gQ0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QK
IHsKICAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0
YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5zZm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9y
bSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgpLCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7
CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5z
Zm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBtX3NjaXNzb3JS
ZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7Cit9CisKK0Zsb2F0UmVjdCBDQ1JlbmRlclN1
cmZhY2U6OmRhbWFnZUluU3VyZmFjZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGFtYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CisKKyAgICAvLyBGb3Ig
bm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2Ug
Zm9yCisgICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4K
KyAgICBpZiAobV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgpKSB7CisgICAg
ICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBS
ZWN0IG9mCisgICAgICAgIC8vIGludmVyc2UgdHJhbnNmb3Jtcy4gSW4gdGhpcyB1bmNvbW1vbiBj
YXNlLCBpdHMgc2ltcGxlciB0bworICAgICAgICAvLyBqdXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1
cmZhY2UuCisgICAgICAgIC8vIEZJWE1FOiB1c2UgY2FsY3VsYXRlVmlzaWJsZVJlY3QgdG8gaGFu
ZGxlIHByb2plY3Rpb25zLgorICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IG1fY29udGVudFJl
Y3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNj
cmVlblNwYWNlVHJhbnNmb3JtID0gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7Cisg
ICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLm1h
cFJlY3QoZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0
OworfQorCitGbG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpzY3JlZW5Ub1N1cmZhY2VTcGFjZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZl
cnNlKCk7CisgICAgcmV0dXJuIGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KHJl
Y3QpOworfQorCitGbG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpzdXJmYWNlVG9TY3JlZW5TcGFj
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaAppbmRleCBhNmRlZTEwZWNlZDA5N2M4MjBhNGE5ODIzNWNkODJlYjllMThlNWFkLi5jODgx
YTdmZWM5OTNmOTc2MzQ1YzY2YWU1ZDhhMDhhZDIwMWZhZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVwYXJlQmFj
a2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCByZWxlYXNl
QmFja2dyb3VuZFRleHR1cmUoKTsKIAotICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3Q7
CisgICAgYm9vbCBjYWxjU2Npc3NvclJlY3QoYm9vbCB1c2luZ1BhcnRpYWxTd2FwLCBjb25zdCBG
bG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgY29uc3Q7
CiAKICAgICB2b2lkIGRyYXdDb250ZW50cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2
b2lkIGRyYXdSZXBsaWNhKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwpAQCAtMTIzLDYgKzEyMyw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KIAor
ICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9z
Y2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisKICAgICB2b2lkIHNldENvbnRl
bnRSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KIApAQCAtMTUzLDYgKzE1NiwxNSBAQCBw
dWJsaWM6CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVh
ZFN0YXRlKCkgY29uc3Q7CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRl
UmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogCisgICAgLyoqCisgICAgICogVHJhbnNm
b3JtcyBhIGRhbWFnZSByZWN0IGludG8gc3VyZmFjZSBzcGFjZS4gSW4gc29tZSBjYXNlcyBtYXkg
ZGVjaWRlCisgICAgICogdG8gcmV0dXJuIHRoZSBlbnRpcmUgc3VyZmFjZSBjb250ZW50UmVjdC4K
KyAgICAgKi8KKyAgICBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiBkYW1hZ2VSZWN0KSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBzY3JlZW5Ub1N1cmZhY2VT
cGFjZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qgc3VyZmFjZVRvU2Ny
ZWVuU3BhY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgSW50UmVj
dCBjb21wdXRlRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0OwogICAgIEludFJlY3Qg
Y29tcHV0ZVJlYWRiYWNrRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0OwpAQCAtMTY2
LDYgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgQ0NMYXllckltcGwqIG1fb3duaW5nTGF5ZXI7CiAg
ICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOwogCisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2Un
cyBzcGFjZQogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc2tpcHNEcmF3
OwogICAgIGJvb2wgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkOwpAQCAtMTg1LDcgKzE5OCwxNCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7
CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKICAgICBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKKworICAgIC8vIFVzZXMg
dGhlIHNwYWNlIG9mIHRhcmdldCBzdXJmYWNlIG9mIHBhcmVudCBsYXllcgogICAgIEludFJlY3Qg
bV9jbGlwUmVjdDsKKworICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdp
b24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBVc2Vz
IHRoZSBzcGFjZSBvZiB0YXJnZXQgc3VyZmFjZSBvZiBwYXJlbnQgbGF5ZXIKKyAgICBJbnRSZWN0
IG1fc2Npc3NvclJlY3Q7CisKICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBtX2xheWVyTGlzdDsK
IAogICAgIC8vIFRoZSBuZWFyZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRoYXQgd2lsbCBj
b250YWluIHRoZSBjb250ZW50cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlzIGdvaW5nCkBA
IC0xOTQsOSArMjE0LDYgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxDQ0RhbWFnZVRyYWNrZXI+
IG1fZGFtYWdlVHJhY2tlcjsKIAotICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2Ui
IHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgotICAgIEZsb2F0
UmVjdCBtX2RhbWFnZVJlY3Q7Ci0KICAgICAvLyBGb3IgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucwog
ICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKICAgICBpbnQg
bV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0
ZS5jcHAKaW5kZXggOWJmNzY5MjViYjhjZjJiYmFjNTM5YzAxNDMxYzU1Nzg0MzM5ZmQwNS4uOTA3
NzdhYjQxYmI4NGIwODg5MWNiMjI0Mjg4NWUwZjM4MWIyODI4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmNwcApAQCAtMjksMTYgKzI5LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6
OmNyZWF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXll
clJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1
ZSkKK1Bhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVh
dGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0
LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNm
b3JtLCBsYXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0LCBjbGlwUmVjdCwgb3BhY2l0eSwgb3BhcXVl
KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNm
b3JtLCBsYXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0LCBzY2lzc29yUmVjdCwgb3BhY2l0eSwgb3Bh
cXVlKSk7CiB9CiAKLUNDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKK0NDU2hhcmVkUXVh
ZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVh
ZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9h
dCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKICAgICA6IG1fcXVhZFRyYW5zZm9ybShxdWFkVHJhbnNm
b3JtKQogICAgICwgbV9sYXllclRyYW5zZm9ybShsYXllclRyYW5zZm9ybSkKICAgICAsIG1fbGF5
ZXJSZWN0KGxheWVyUmVjdCkKLSAgICAsIG1fY2xpcFJlY3QoY2xpcFJlY3QpCisgICAgLCBtX3Nj
aXNzb3JSZWN0KHNjaXNzb3JSZWN0KQogICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgLCBt
X29wYXF1ZShvcGFxdWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaAppbmRleCA0
MjA2YWE1YzJkZTJhNzU0YzljYTkxZjRlOGU4ODkzODIyMTFmZjIyLi42YjE1MDAwYmI1N2U2ZGIw
NGRmYTVmOTQ3NWQzNDA3YjM5YTgyYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRl
LmgKQEAgLTM2LDI3ICszNiwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ1NoYXJl
ZFF1YWRTdGF0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NTaGFyZWRRdWFkU3RhdGUp
OwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVh
dGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGUoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAgLy8g
VGhlIHRyYW5zZm9ybSB0aGF0IHF1YWRzIGluIGEgQ0NEcmF3UXVhZCBzaG91bGQgYmUgdHJhbnNm
b3JtZWQgd2l0aC4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZFRyYW5zZm9ybTsgfQogICAgIC8vIFRoZSB0cmFuc2Zv
cm0gdGhhdCBsYXllclJlY3QoKSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KICAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X2xheWVyVHJhbnNmb3JtOyB9CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclJlY3Q7IH0KLSAgICAvLyBVc2FnZTogaWYgY2xpcFJlY3QgaXMgZW1w
dHksIHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkLgotICAgIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQorICAgIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQogCiAgICAg
ZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGJvb2wgaXNMYXllckF4aXNB
bGlnbmVkSW50UmVjdCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENDU2hhcmVkUXVhZFN0YXRl
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKyAg
ICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5z
Zm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFj
aXR5LCBib29sIG9wYXF1ZSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3F1YWRUcmFu
c2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sYXllclRyYW5zZm9ybTsKICAgICBJ
bnRSZWN0IG1fbGF5ZXJSZWN0OwotICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKyAgICBJbnRSZWN0
IG1fc2Npc3NvclJlY3Q7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGJvb2wgbV9vcGFxdWU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAKaW5kZXggYmJlYTk3MWRkNWE0ZWZlNjdkMzM2MTYxYzlhMGRmYjcxNWFkN2Fi
Ny4uYjVkMjFhYWNlMDQwMzVlNWQ3ZmZmMDQ4NTljZDUzYzhkZjRjMzE5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBA
IC01OSw2ICs1OSw3IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9yPENDTGF5CiAgICAgcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHJvb3QpOwogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXllclNv
cnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKIHZvaWQgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShDQ0xheWVySW1wbCogcm9vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCmluZGV4IGY1ZWFlN2Y4NGRk
NTEyNWM4MDk5NWI5Y2Q0MjliOTliY2JmNjkzMzQuLmY5ODM4NjIzNmY5NDM1MDI1MTJiZDJmNDZl
ZGIyOGNiZjY1MGRlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcApAQCAtMTQyLDYgKzE0Miw3IEBAIFRFU1QoQ0NMYXll
ckl0ZXJhdG9yVGVzdCwgc2ltcGxlVHJlZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGxheWVyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFj
a1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290
TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTE4OSw2ICsxOTAsNyBAQCBURVNUKENDTGF5ZXJJdGVyYXRv
clRlc3QsIGNvbXBsZXhUcmVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJM
aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+
cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9u
dCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwg
MCwgLTEsIDEpOwpAQCAtMjQ4LDYgKzI1MCw3IEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwg
Y29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBs
YXllckxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tU
b0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9vdExh
eWVyLCAwLCAtMSwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCAzMWRhNTBjN2UyZjQ2Zjdj
ZWVmOTNjYWFhMmY0YjJkMTAzODgzOWQ0Li4yOWMzMmU5N2FiZjRhNWMwZjgwOTBlMmQwNWJmNTA3
N2MzM2Y5NzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTMyLDcgKzMyLDEyIEBACiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRl
ci5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5Lmgi
CisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDVGhy
ZWFkLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CkBAIC01OSw2ICs2NCw3IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOwogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1teVJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIH0KIAogVHJh
bnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0KQpAQCAtMzE3LDYgKzMyMyw1NjEgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkK
ICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3ROb0Ns
aXApCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhy
ZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisg
ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICB8ICAg
ICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAg
ICAgICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0t
LS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICB8
ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGhhdmUgcmVuZGVyIHN1cmZhY2VzCisgICAg
ICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgx
KTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgy
KTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAsIDEwMCk7CisgICAgSW50
UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJlY3QgZ3JhbmRDaGlsZFJl
Y3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55KCkpKTsKKyAgICBy
b290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQo
KSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShyb290
UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNoaWxkLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hpbGQtPnNldE9wYWNp
dHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxkUmVjdC53aWR0aCgp
LCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBn
cmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShn
cmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdy
YW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGls
ZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3Jh
bmRDaGlsZC5nZXQoKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2Uo
KSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIFZlY3RvcjxD
Q0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsK
KyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKworICAgICAgICAvKiBlbXB0eSBsaXN0
ICovCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJT
b3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0UmVjdCBkdW1teURh
bWFnZVJlY3Q7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3Qp
OworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9G
QUxTRShncmFuZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVYUEVDVF9F
UShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgMlUpOworICAgIAorICAgIEFTU0VSVF9F
UShyb290LT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIExheWVy
J3MgY2xpcFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRzCisgICAg
QVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hpbGRS
ZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LnkoKSArIGdy
YW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNs
aXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgQVNTRVJUX0VRKHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgQVNT
RVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIAorICAgIEFTU0VSVF9GQUxTRShyb290LT51c2VzTGF5ZXJDbGlwcGlu
ZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwor
ICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAg
ICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRSZWN0IHJvb3REYW1h
Z2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAg
ICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIGNoaWxkIHN1cmZhY2UgZG9lc24n
dCBoYXZlIGEgY2xpcCByZWN0LCB0aGVyZWZvcmUgaXQgd2lsbCBiZSBjb21wdXRlZCBhcyBpbnRl
cnNlY3Rpb24KKyAgICAvLyBiZXR3ZWVuIHJvb3Qgc3VyZmFjZSdzIGNvbnRlbnRyZWN0IGFuZCBj
aGlsZCBzdXJmYWNlJ3MgZHJhd2FibGUgY29udGVudCByZWN0LgorICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KGNoaWxk
UmVjdC54KCksIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgp
LCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIEVYUEVDVF9FUShy
b290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisKKyAgICAvLyBUaGUgZGFt
YWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3QsIGJ1dCBjaGlsZCBsYXllciBzdGFydHMgYXQgYW4g
b2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdoIGl0IGhhcyBib3VuZHMsIGl0IGlzIG5vdCBjbGlw
cGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxkcmVuCisgICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlv
bmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBzY2lzc29yIHJlY3QKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworCisgICAg
Ly8gR3JhbmQgY2hpbGQgd2lsbCBoYXZlIHRoZSBzYW1lIHNjaXNzb3IgcmVjdCBhcyBpdCBkb2Vz
bid0IGhhdmUgYSBzdXJmYWNlCisgICAgLy8gb2YgaXRzIG93bgorICAgIEVYUEVDVF9FUShncmFu
ZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkg
LSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKyAg
ICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgwLCAwLCAw
LCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAg
Ly8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNjaXNzb3IKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGdy
YW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAor
ICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhpbiBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRS
ZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFn
ZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAg
IEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGly
ZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNj
aXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlz
IHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1Rf
RVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lk
dGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBu
b3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2Fs
IHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0g
Y2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7
CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKKyAgICByb290RGFtYWdlID0g
SW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RE
YW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QK
KyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3
aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBF
bnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290
LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVj
dCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0g
Y2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdl
LndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRv
ZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50
aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnko
KSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQo
KSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKKyAgICByb290RGFtYWdl
ID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Ig
cm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JS
ZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gUm9vdCBzdXJmYWNlIGRvZXMg
bm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRlbnRSZWN0IHdpbGwgYmUgdXNlZCB0byBp
bnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2Ug
cmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdl
LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIAorICAgIC8v
IFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5nLCBzbyBpdHMgY29udGVudCByZWN0IHdp
bGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UKKyAgICAvLyBSZXN1bHQgaXMgdGhh
dCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAg
IEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCBy
b290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVj
dC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisKKyAgICAvLyBDaGlsZHJlbidzIGNvbnRl
bnQgcmVjdHMgYXJlIGJpZ2dlciB0aGFuIHRoZSByb290J3Mgc28gdGhleSBkb24ndCBjbGlwIHRo
ZSBkYW1hZ2UgcmVjdCwgYnV0IGNoYW5nZSBpdHMgb2Zmc2V0LgorICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCBy
b290RGFtYWdlLmhlaWdodCgpKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5o
ZWlnaHQoKSkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JS
ZWN0V2l0aENsaXApCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlz
T25JbXBsVGhyZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBhcyBmb2xs
b3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAg
ICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgIHwg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAgICB8Cisg
ICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGhhdmUgcmVuZGVyIHN1cmZh
Y2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAsIDEwMCk7
CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJlY3QgZ3Jh
bmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAg
IHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55KCkp
KTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVj
dC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50
U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNoaWxk
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hpbGQt
PnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxkUmVj
dC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgw
LCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJl
Y3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMo
SW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkp
OworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJ
bXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxk
UHRyID0gZ3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxk
LnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAg
IHJvb3QtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwq
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGxheWVy
TGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIEND
TGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAgICAgICAgLyogZW1wdHkgbGlzdCAqLworICAgICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0Owor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9Cisg
ICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNT
RVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRD
aGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5zaXplKCksIDJVKTsKKyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBjbGlw
cGluZyB0byBpdHMgYm91bmRzCisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RS
ZWN0KTsKKworICAgIC8vIExheWVyJ3MgY2xpcFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNo
aWxkcmVuJ3MgYm91bmRzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdy
YW5kQ2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgQVNTRVJU
X0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisg
ICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisKKyAgICAvLyBDaGlsZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBpcyBu
b3cgc2V0IHRvIHJvb3QncworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgp
LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisgICAgCisgICAgQVNTRVJUX1RSVUUocm9vdC0+dXNl
c0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJD
bGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50
UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dFJlY3QpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dChyb290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0
LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3Vn
aCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGls
ZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUg
c2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWln
aHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwgaGF2ZSB0
aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFjZQorICAgIC8v
IG9mIGl0cyBvd24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisg
ICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBz
Y2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRo
aW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBy
b290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRo
ZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsK
KworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0
aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkg
LSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkp
KTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBz
byBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VR
KGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBj
aGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uu
d2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ug
YmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lz
c29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisK
KyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAg
ICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFn
ZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0
IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdo
dCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFj
ZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVD
VF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgp
IC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFt
YWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFt
YWdlIGJleW9uZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDEx
MCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8v
IFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0
cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAg
IC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxh
eWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgp
LCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0g
cm9vdERhbWFnZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBj
bGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdp
dGggZGFtYWdlCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlw
cGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0Lndp
ZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnko
KSkpOworCisgICAgLy8gTm93IHRoZSBzY2lzc29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZh
Y2VzIGNvbnRlbnRSZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0
LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3RE
YW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7Cit9CisKK1RF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcEFuZFNwYWNl
VHJhbnNmb3JtKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09u
SW1wbFRocmVhZDsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93
czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAg
fCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgICAgICAgIHwgIHwgfCAgIDMsNCAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICst
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAg
ICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBhbmQgMyBoYXZlIHJlbmRlciBz
dXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQy
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwg
MTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJ
bnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9v
dFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisK
KyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOwor
ICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6
ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdy
YW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFu
ZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5k
Q2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24o
SW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBn
cmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBncmFuZENoaWxkMi0+c2V0Qm91bmRz
KEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkp
KTsKKyAgICBncmFuZENoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXll
ckltcGwqIGNoaWxkUHRyID0gY2hpbGQuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hp
bGRQdHIgPSBncmFuZENoaWxkLmdldCgpOworCisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3Jh
bmRDaGlsZDIucmVsZWFzZSgpKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxl
YXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7
CisgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVy
U29ydGVyIGxheWVyU29ydGVyOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3QuZ2V0KCkpOworCisgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAor
ICAgIEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9U
UlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZFB0
ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCksIDNVKTsKKyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0
byBpdHMgYm91bmRzCisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsK
KworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBjaGls
ZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSAsIGNoaWxkUmVjdC55KCkgKyBncmFu
ZENoaWxkUmVjdC5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmRjaGlsZCBub3cgY2xpcHMKKyAg
ICBBU1NFUlRfRVEoZ3JhbmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFu
ZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55
KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworCisgICAgQVNTRVJUX0VRKHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAv
LyBDaGlsZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJvb3QncworICAg
IEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVj
dCk7CisgICAgCisgICAgQVNTRVJUX1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NF
UlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAg
Ly8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RS
ZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAg
RVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAgICAKKyAgICBF
WFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworCisgICAg
Ly8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3Rh
cnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBp
cyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGljaCBl
eHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0Lndp
ZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkp
KTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGlzIG5vdyBzY2lzc29yZWQgYnkgdGhlIHJlbmRlciBz
dXJmYWNlCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCkgLSBncmFuZENoaWxkUmVj
dC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSAtIGdyYW5kQ2hpbGRSZWN0
LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2UgPSBJbnRS
ZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBFWFBFQ1Rf
RVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAgcm9vdERh
bWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZv
ciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJl
Y3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisg
ICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1Rf
RVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBj
aGlsZCBub3cgZ2V0cyBzY2lzc29yZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFzIHdlbGwgYXMg
cm9vdAorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJl
Y3QueSgpLCByb290RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1h
Z2UuaGVpZ2h0KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFt
YWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgw
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8g
U2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNl
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JS
ZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3
aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3RE
YW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIs
IGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5o
ZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3NvcmVkIGJ5IGl0
cyB0YXJnZXQgc3VyZmFjZSBhcyB3ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0g
Z3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3Qu
eSgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3REYW1h
Z2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZv
ciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2UgZG9l
cyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2VkIHRv
IGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFn
ZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1h
Z2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisgICAg
Ly8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJlY3Qg
d2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBpcyB0
aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5Cisg
ICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCks
IHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RS
ZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIE5vdyB0aGUgc2Npc3Nv
ciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVjdAorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxk
UmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgo
KSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7
CisKKyAgICAvLyBHcmFuZGNoaWxkJ3Mgc2Npc3NvciByZWN0IGlzIGNsaXBwZWQgYnkgaXRzIHRh
cmdldCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworfQorCiBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZXBsaWNhKQogewog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKQEAgLTU0Niw2ICsxMTA3LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikKICAgICBpbnQgZHVtbXlNYXhUZXh0
dXJlU2l6ZSA9IDUxMjsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBGbG9hdFJlY3QgZHVtbXlEYW1h
Z2VSZWN0OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKSk7CisKICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIncyBjb250ZW50IGlz
IGVudGlyZWx5IG91dHNpZGUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdCwgc28gdGhlIGludGVybWVk
aWF0ZQogICAgIC8vIHJlbmRlciBzdXJmYWNlIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZC4gUmVu
ZGVyIHN1cmZhY2VzIHdpdGhvdXQgY2hpbGRyZW4gb3IgdmlzaWJsZQogICAgIC8vIGNvbnRlbnQg
YXJlIHVuZXhwZWN0ZWQgYXQgZHJhdyB0aW1lIChlLmcuIHdlIG1pZ2h0IHRyeSB0byBjcmVhdGUg
YSBjb250ZW50IHRleHR1cmUgb2Ygc2l6ZSAwKS4KQEAgLTU3NCw2ICsxMTM4LDggQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvclRyYW5z
cGFyZW50Q2hpbGQpCiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOwogCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgIC8vIFNpbmNlIHRoZSBsYXllciBpcyB0cmFuc3Bh
cmVudCwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSBzaG91bGQgbm90IGhhdmUgZ290
dGVuIGFkZGVkIGFueXdoZXJlLgogICAgIC8vIEFsc28sIHRoZSBkcmF3YWJsZSBjb250ZW50IHJl
Y3Qgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXh0ZW5kZWQgYnkgdGhlIGNoaWxkcmVuLgogICAgIEVY
UEVDVF9FUShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpLCAwVSk7
CkBAIC02MzYsNiArMTIwMiwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKIAogICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAg
IEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKworCiAgICAgQVNTRVJUX0VR
KDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKHBhcmVu
dC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CiAgICAgRVhQRUNUX0VR
KGNoaWxkLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKQEAgLTY5NSw2
ICsxMjY1LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVj
dEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVj
dCgpKTsKKwogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkp
OwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0t
PmlkKCkpOwogICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dFsxXS0+aWQoKSk7CkBAIC04MjUsNiArMTM5Nyw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKIAog
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKIAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKKwogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQxLT5j
bGlwUmVjdCgpKTsKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+Y2xpcFJlY3QoKSk7CiAgICAgRVhQ
RUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSg1LCA1KSks
IGdyYW5kQ2hpbGQzLT5jbGlwUmVjdCgpKTsKQEAgLTg5Nyw2ICsxNDcyLDggQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3Rs
eVRvU3VyZmFjZXMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgQVNTRVJU
X1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUX1RSVUUoZ3Jh
bmRDaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDMt
PnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTY4LDYgKzIxNDUsOCBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdUcmFuc2Zv
cm1zKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgIEVYUEVDVF9GQUxTRShj
aGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdTdXJmYWNl
LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9GQUxTRShjaGlsZE9mQW5pbWF0aW5nU3Vy
ZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggOTFjMmQxZGZmMTIx
Mjc5YTdjNzQ2MDcwYzVjYmRjMjIyNGYyYjY1YS4uOGY4MWRkZGUyYzEwYmNkYTY0OTFmNzJiYmFj
YmY3MzE0YjIzMmRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM2LDEwICszNiwxMiBAQAogI2lu
Y2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNj
L0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgorI2luY2x1ZGUg
PGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViVmlkZW9GcmFtZS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lUHJvdmlk
ZXIuaD4KQEAgLTQ5LDYgKzUxLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAordXNpbmcg
Ojp0ZXN0aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyA6OnRlc3Rp
bmc6OkFueU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6XzsKKwogbmFtZXNwYWNlIHsKIAogY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCwgcHVibGlj
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewpAQCAtNzAsNiArNzcsMjggQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhy
ZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2Nr
VGltZSkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RTZXRDb250ZW50c01lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKHNpemVfdCkgT1ZF
UlJJREUgeyB9CiAKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxh
eWVyVHJlZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gZ3JhcGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByb290UHRyKQorICAg
IHsKKyAgICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKworICAgICAgICBzZXR0aW5ncy5wYXJ0
aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgICAgICBPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0
aW5ncywgdGhpcyk7CisKKyAgICAgICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIoZ3JhcGhpY3NDb250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICAgICAgbXlIb3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisKKyAgICAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gcm9vdFB0cjsKKworICAgICAgICByb290LT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwor
ICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7
CisgICAgICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgbXlIb3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIG15SG9zdElt
cGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIGV4cGVjdENsZWFyZWRTY3Jv
bGxEZWx0YXNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHsKICAgICAgICAgQVNT
RVJUX0VRKGxheWVyLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKCkpOwpAQCAtMTA5OSw2ICsxMTI4
LDE5MiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwUmVjZWl2
ZXNEYW1hZ2VSZWN0KQogICAgIEVYUEVDVF9FUShleHBlY3RlZFN3YXBSZWN0LmhlaWdodCgpLCBh
Y3R1YWxTd2FwUmVjdC5oZWlnaHQoKSk7CiB9CiAKK2NsYXNzIEZha2VMYXllcldpdGhRdWFkcyA6
IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RmFr
ZUxheWVyV2l0aFF1YWRzPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRmFr
ZUxheWVyV2l0aFF1YWRzKGlkKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhD
Q1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVh
ZFN0YXRlLCBib29sJikgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGNvbnN0IENvbG9yIGdyYXko
MTAwLCAxMDAsIDEwMCk7CisgICAgICAgIEludFJlY3QgcXVhZFJlY3QoMCwgMCwgNSwgNSk7Cisg
ICAgICAgIE93blB0cjxDQ0RyYXdRdWFkPiBteVF1YWQgPSBDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6
Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGdyYXkpOworICAgICAgICBxdWFkTGlz
dC5hcHBlbmQobXlRdWFkLnJlbGVhc2UoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZha2VM
YXllcldpdGhRdWFkcyhpbnQgaWQpCisgICAgICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgewor
ICAgIH0KK307CisKK2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QxKHVzZVByb2dyYW0sIHZvaWQoV2Vi
R0xJZCBwcm9ncmFtKSk7CisgICAgTU9DS19NRVRIT0Q1KHVuaWZvcm00Ziwgdm9pZChXR0MzRGlu
dCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dD
M0RmbG9hdCB3KSk7CisgICAgTU9DS19NRVRIT0Q0KHVuaWZvcm1NYXRyaXg0ZnYsIHZvaWQoV0dD
M0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlKSk7CisgICAgTU9DS19NRVRIT0Q0KGRyYXdFbGVtZW50
cywgdm9pZChXR0MzRGVudW0gbW9kZSwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0RlbnVtIHR5cGUs
IFdHQzNEaW50cHRyIG9mZnNldCkpOworICAgIE1PQ0tfTUVUSE9EMShnZXRTdHJpbmcsIFdlYlN0
cmluZyhXR0MzRGVudW0gbmFtZSkpOworICAgIE1PQ0tfTUVUSE9EMChnZXRSZXF1ZXN0YWJsZUV4
dGVuc2lvbnNDSFJPTUlVTSwgV2ViU3RyaW5nKCkpOworICAgIE1PQ0tfTUVUSE9EMShlbmFibGUs
IHZvaWQoV0dDM0RlbnVtIGNhcCkpOworICAgIE1PQ0tfTUVUSE9ENChzY2lzc29yLCB2b2lkKFdH
QzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0
KSk7Cit9OworCitjbGFzcyBNb2NrQ29udGV4dEhhcm5lc3MgeworcHJpdmF0ZToKKyAgICBNb2Nr
Q29udGV4dCogbV9jb250ZXh0OworcHVibGljOgorICAgIE1vY2tDb250ZXh0SGFybmVzcyhNb2Nr
Q29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7Cisg
ICAgICAgIC8vIENhdGNoICJ1bmludGVyZXN0aW5nIiBjYWxscworICAgICAgICBFWFBFQ1RfQ0FM
TCgqbV9jb250ZXh0LCB1c2VQcm9ncmFtKF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhfLCBfLCBfLCBfKSkK
KyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCB1bmlmb3JtTWF0cml4NGZ2KF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOwor
CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm00ZihfLCBfLCBfLCBfLCBf
KSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICAvLyBBbnkgb3RoZXIgc3RyaW5n
cyBhcmUgZW1wdHkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0U3RyaW5nKF8p
KQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoKSkpOworCisg
ICAgICAgIC8vIFN1cHBvcnQgZm9yIHBhcnRpYWwgc3dhcCwgaWYgbmVlZGVkCisgICAgICAgIEVY
UEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6RVhURU5T
SU9OUykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0cmluZygiR0xf
Q0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9j
b250ZXh0LCBnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpKQorICAgICAgICAgICAg
LldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1
ZmZlciIpKSk7CisKKyAgICAgICAgLy8gQW55IHVuLXNhbmN0aW9uZWQgY2FsbHMgdG8gZW5hYmxl
KCkgYXJlIE9LCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGVuYWJsZShfKSkKKyAg
ICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisgICAgfQorCisgICAgdm9pZCBt
dXN0RHJhd1NvbGlkUXVhZCgpCisgICAgeworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCBkcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1
cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICAgICAgLy8g
MCBpcyB0aGUgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRVbmlmb3JtTG9jYXRpb24KKyAg
ICAgICAgLy8gMSBpcyBjb3VudCA/Pz8KKyAgICAgICAgLy8gQm9vbGVhbiBjYXN0IHRvIHN0cj8/
CisgICAgICAgIC8vIGZsb2F0KiB2YWx1ZXMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4
dCwgdW5pZm9ybU1hdHJpeDRmdigwLCAxLCBfLCBfKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShS
ZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICAgICAg
Ly8gMCBpcyB0aGUgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRVbmlmb3JtTG9jYXRpb24K
KyAgICAgICAgLy8gMyBmbG9hdHMgYXJlIGNvbG9yIC8gMjU1CisgICAgICAgIC8vIDEgaXMgQWxw
aGEKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybTRmKDAsIF8sIF8sIF8s
IDEpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGly
ZXNPblNhdHVyYXRpb24oKTsKKyAgICAgICAgCisgICAgICAgIC8vIDEgaXMgaGFyZGNvZGVkIHJl
dHVybiB2YWx1ZSBvZiBmYWtlIGNyZWF0ZVByb2dyYW0oKQorICAgICAgICBFWFBFQ1RfQ0FMTCgq
bV9jb250ZXh0LCB1c2VQcm9ncmFtKDEpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigp
KQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgIH0KKworICAgIHZv
aWQgbXVzdFNldFNjaXNzb3IoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisg
ICAgeworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBlbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisg
ICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIEVYUEVDVF9DQUxM
KCptX2NvbnRleHQsIHNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAu
V2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwor
ICAgIH0KKworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub1BhcnRpYWxT
d2FwKQoreworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4
dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAg
ICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQqPihH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250
ZXh0LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250ZXh0
KTsKKworICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBoYXJuZXNzLm11c3REcmF3U29s
aWRRdWFkKCk7CisKKyAgICAvLyBSdW4gdGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KGZhbHNlLCBjb250ZXh0
LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFy
ZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAg
IG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXApCit7CisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhp
Y3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQo
YWRvcHRQdHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0
aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdl
YkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5l
c3MgaGFybmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3QgY2FzZQor
ICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lz
c29yKDAsIDAsIDEwLCAxMCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwg
MTApOworCisgICAgLy8gUnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdCh0cnVlLCBjb250ZXh0LCBGYWtl
TGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpG
cmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJh
dyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9z
dEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgcGFydGlhbFN3YXBOb1VwZGF0ZSkKK3sKKyAgICAvLyBTZXQgdXAgbW9jayBncmFw
aGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dChhZG9wdFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRleHQmIG1vY2tDb250ZXh0ID0gKnN0
YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0
V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAgIE1vY2tDb250ZXh0SGFy
bmVzcyBoYXJuZXNzKCZtb2NrQ29udGV4dCk7CisKKyAgICAvLyBDb25maWd1cmUgdGVzdCBjYXNl
CisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVzdFNldFNj
aXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCA4LCAyLCAy
KTsKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0
U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwg
MTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwg
RmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworICAgIAorICAgIC8vIERyYXcgb25jZSB0
byBtYWtlIHN1cmUgbGF5ZXIgaXMgbm90IG5ldworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZy
YW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3
KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAvLyBHZW5lcmF0ZSB1cGRhdGUg
aW4gbGF5ZXIKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG15SG9zdEltcGwtPnJvb3RMYXllcigp
OworICAgIHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDIsIDIpKTsKKworICAg
IC8vIFRoaXMgZHJhdyBzaG91bGQgZ2VuZXJhdGUgbm93IG5ldyB1ZHBhdGVzCisgICAgRVhQRUNU
X1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwt
PmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJh
bWUpOworCisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0
KTsKK30KKwogLy8gTWFrZSBzdXJlIHRoYXQgY29udGV4dCBsb3N0IG5vdGlmaWNhdGlvbnMgYXJl
IHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgdHJlZS4KIGNsYXNzIENvbnRleHRMb3N0Tm90aWZpY2F0
aW9uQ2hlY2tMYXllciA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNw
cAppbmRleCA5NzZkYzNmMjk4NjQ2ODdjOTA3ZWQyNjc5NzFkODVlMjExMDZiNjNlLi42MGQ2YWVk
NzExMzkzMGJjNTRhNmRlMDEwMjQ2NzcwMjk5MGE3OWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTI2
Niw2ICsyNjYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dEltcGwuYXBwZW5kKG1fcm9vdC5nZXQoKSk7CiAKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBs
LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9yQmVnaW4g
PSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdElt
cGwpOwogICAgIH0KIApAQCAtMjgyLDYgKzI4NSw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9y
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0uYXBwZW5kKG1fcm9vdCk7CiAKICAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1
cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgICAgICBtX2xheWVySXRlcmF0b3Ig
PSBtX2xheWVySXRlcmF0b3JCZWdpbiA9IFR5cGVzOjpMYXllckl0ZXJhdG9yOjpiZWdpbigmbV9y
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKaW5kZXggN2Rh
YzAwNWQyNGNhZmFjYzI3MWI4NmFkNWZkZTM4NTY2ZDBiZDg3NC4uOWQ4ZDE5ZjcyMzgzNGQ0NDE0
NTljNTc4M2I5NDk2YWZiMTVjZTllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCkBAIC0xMTIsMTUgKzExMiwxNiBAQCBU
RVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0
U2hhcmVkUXVhZFN0YXRlKQogICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShv
cmlnaW4pOwogICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsK
ICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0U2Npc3NvclJlY3QoY2xpcFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNldERy
YXdPcGFjaXR5KDEpOwotCisgICAgCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFy
ZWRRdWFkU3RhdGUgPSByZW5kZXJTdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKIAog
ICAgIEVYUEVDVF9UUlVFKHNoYXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpLmlzSWRlbnRp
dHkoKSk7CiAgICAgRVhQRUNUX0VRKDMwLCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3Jt
KCkubTQxKCkpOwogICAgIEVYUEVDVF9FUSg0MCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5z
Zm9ybSgpLm00MigpKTsKICAgICBFWFBFQ1RfRVEoY29udGVudFJlY3QsIHNoYXJlZFF1YWRTdGF0
ZS0+bGF5ZXJSZWN0KCkpOwotICAgIEVYUEVDVF9FUShjbGlwUmVjdCwgc2hhcmVkUXVhZFN0YXRl
LT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+
c2Npc3NvclJlY3QoKSk7CiAgICAgRVhQRUNUX0VRKDEsIHNoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0
eSgpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2hhcmVkUXVhZFN0YXRlLT5pc09wYXF1ZSgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144871</attachid>
            <date>2012-05-30 11:06:08 -0700</date>
            <delta_ts>2012-05-30 12:18:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120530140607.patch</filename>
            <type>text/plain</type>
            <size>119072</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4OTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMxZDQzOTIzM2FhOTc3
NGIwZjY5NDgyMjI1NDc2NDk5Y2U0YzU2Ny4uZmEyMjliYTM2YjYxMWZmZGExYjBiZWM0YzYzM2U2
NDA3ZGQ3YzAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEyLTA1LTMwICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNz
b3JSZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyc0FuZFNjaXNzb3JSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RDb21tb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRy
ZWVIb3N0SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBwZW5kUXVh
ZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVk
UXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRTY2lzc29yUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNjaXNzb3JSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaDoKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZURy
YXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJl
ZFF1YWRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRT
dGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuaDoKKyAgICAgICAgKENDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpzY2lzc29yUmVjdCk6CisKIDIwMTItMDUtMzAgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
IAogICAgICAgICBIYXNoVGFibGUuaCBoYXMgdXNpbmcgZGlyZWN0aXZlcyBmb3Igc3RkOjpwYWly
IGFuZCBzdGQ6Om1ha2VfcGFpcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzZGI5OGY3
ZjA5ODg1ZTc3ZTNlZjZkZDNhOGYyZTEzMTE3YmQzOGE5Li40NDA3OTE5MjJkYmI4Nzg0ZDljM2Ri
Yjg3M2YzMjUwMGUyNDU2YjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI5IEBACisyMDEyLTA1LTMwICBaZWV2IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gQ2xlYW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNl
IHdpdGggZGFtYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NzE2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIHVuaXQgdGVzdHMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbCB1c2luZyBtb2NrIGdy
YXBoaWMgY29udGV4dAorICAgICAgICB0byB2ZXJpZnkgZW5kLXRvLWVuZCBxdWFkIGRyYXdpbmcu
CisKKyAgICAgICAgQWRkZWQgbW9yZSB0ZXN0IGNhc2VzIHRvIENDTGF5ZXJUcmVlSG9zdENvbW1v
biB0byB2ZXJpZnkgY2xpcCBhbmQKKyAgICAgICAgc2Npc3NvciByZWN0IGNvbXB1dGF0aW9ucy4K
KworICAgICAgICAqIHRlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOgorICAgICAgICAqIHRlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAqIHRlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lv
blRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0OjpjYWxjRHJhd0V0Yyk6CisgICAgICAgICogdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wNS0zMCAgSm9jaGVuIEVp
c2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYXRjaCBGaXJlZm94IHJl
c3RyaWN0aW9ucyB0byB3aW5kb3cuYmx1ciBhbmQgd2luZG93LmZvY3VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKaW5kZXggOWJlMDI3OWUyYWViY2Q3Y2RjN2M2OGJkMDI1ZWJlMDg0MWMxNzVkMy4uOTEyZjg2
NTY4NjZmMmU5YjFmN2QyNjVhZmFlYmRiNTY2NmNiMDc2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApA
QCAtMTM5LDYgKzEzOSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5
ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBz
ZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92
aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQogCisgICAgY29uc3QgSW50UmVj
dCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9p
ZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JS
ZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKQEAgLTMwNiw3ICszMDksMTUgQEAgcHJpdmF0
ZToKIAogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKKwor
ICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIEludFJlY3QgbV92aXNpYmxl
TGF5ZXJSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lv
biBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRyYXduLgorICAgIC8vIEN1cnJl
bnRseSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBSZWN0IGlmIHVzZXNMYXllckNsaXBwaW5n
IGlzIHRydWUsIG90aGVyd2lzZQorICAgIC8vIGl0J3MgdGFyZ2V0UmVuZGVyU3VyZmFjZSdzIGNv
bnRlbnRSZWN0LgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KKyAgICBJbnRS
ZWN0IG1fc2Npc3NvclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAgICBi
b29sIG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwpA
QCAtMzQ0LDEyICszNTUsMTYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNo
cm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAgICBi
b29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZh
Y2Ugc3BhY2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
ZHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3NjcmVlblNwYWNlVHJh
bnNmb3JtOwogICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmltYXRpbmc7CiAgICAgYm9vbCBt
X3NjcmVlblNwYWNlVHJhbnNmb3JtSXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBz
dXJmYWNlIHNwYWNlLgogICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwogICAgIGZs
b2F0IG1fY29udGVudHNTY2FsZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKaW5kZXggYTlmM2Q0NjY1ZDM2ZTUyOGQzZmUzZmM5MWM4NjAyNWY0ZTlhODdlZC4uNmVkMjIx
MzQzNTVhYWVkOTc2MTUxY2MyZjE0OWUwZDc5N2M3ZmM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9
IDA7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2Uo
Q0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5k
ZXJTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJl
bmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgc3VyZmFjZVN3YXBSZWN0KQogewogICAgIC8vIE5vbi1yb290IGxheWVycyBzaG91
bGQgY2xlYXIgdGhlaXIgZW50aXJlIGNvbnRlbnRzIHRvIHRyYW5zcGFyZW50LiBPbiBERUJVRyBi
dWlsZHMsIHRoZSByb290IGxheWVyCiAgICAgLy8gaXMgY2xlYXJlZCB0byBibHVlIHRvIGVhc2ls
eSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4uIElmIHdlCkBA
IC0zOTQsNyArMzk0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVy
U3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIEMKICAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpKTsKIAogICAgIGlmICht
X2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0
KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKKyAgICAgICAgc2V0U2Npc3Nv
clRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VTd2FwUmVjdCkpOwogICAgIGVsc2UKICAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpKTsKIApAQCAtNDQ4LDM2ICs0NDgsMjYgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRvTm9PcCgpCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVz
aCgpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0IEZs
b2F0UmVjdCYgc3VyZmFjZVN3YXBSZWN0KQogewogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKTsKICAgICBpZiAoIXVzZVJlbmRl
clN1cmZhY2UocmVuZGVyU3VyZmFjZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNsZWFyUmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCByZW5kZXJQ
YXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBjbGVhclJlbmRlclN1cmZhY2UocmVuZGVy
U3VyZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgc3VyZmFjZVN3YXBSZWN0KTsKIAogICAg
IGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKICAg
ICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0
LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytp
dCkKLSAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpLCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdl
UmVjdCgpKTsKKyAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpKTsKIH0KIAotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNvbnN0IEZs
b2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICBJbnRSZWN0IHNjaXNzb3JS
ZWN0OwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgICAg
ICBpZiAoIXF1YWQtPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpcEFuZERh
bWFnZVJlY3QuaW50ZXJzZWN0KHF1YWQtPmNsaXBSZWN0KCkpOwotICAgICAgICBzY2lzc29yUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpOwotICAgICAgICBpZiAoc2Np
c3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZQotICAg
ICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7Ci0KKyAgICBJbnRSZWN0IHNjaXNz
b3JSZWN0ID0gcXVhZC0+c2Npc3NvclJlY3QoKTsKICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0
eSgpKQotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U2Npc3NvclRv
UmVjdChzY2lzc29yUmVjdCk7CisgICAgICAgIHJldHVybjsKKworICAgIHNldFNjaXNzb3JUb1Jl
Y3Qoc2Npc3NvclJlY3QpOwogCiAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkKICAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKSk7CkBAIC02MjksNyArNjE5LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdSZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCoKIAogICAg
IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkKTsKIAotICAgIGxheWVyLT5yZW5kZXJTdXJmYWNl
KCktPnNldFNjaXNzb3JSZWN0KHRoaXMsIHF1YWQtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAg
IHNldFNjaXNzb3JUb1JlY3QocXVhZC0+c2Npc3NvclJlY3QoKSk7CisKICAgICBpZiAocXVhZC0+
aXNSZXBsaWNhKCkpCiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXdSZXBsaWNh
KHRoaXMpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXgg
MWEyZWJlZDBlODZiOTlmNTgxOTY4MzFiY2VjZTQ2MzAxNDcyYzk1OS4uYjNlODQ5ZmVlMTlmNTEy
YTA4NTNiNmU2MGExNjUyMjEwYmI3NTg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgdmlld3BvcnRDaGFuZ2Vk
KCk7CiAKICAgICB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKENDUmVuZGVyU3VyZmFjZSogZGVmYXVs
dFJlbmRlclN1cmZhY2UpOwotICAgIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQ
YXNzKik7CisgICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25z
dCBGbG9hdFJlY3QmIHN1cmZhY2VTd2FwUmVjdCk7CiAgICAgdm9pZCBmaW5pc2hEcmF3aW5nRnJh
bWUoKTsKIAogICAgIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiwgY29u
c3QgSW50U2l6ZSYgaHVkU2l6ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgcHJpdmF0ZToKICAgICBp
bnQgdmlld3BvcnRXaWR0aCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCk7IH0KICAg
ICBpbnQgdmlld3BvcnRIZWlnaHQoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS5oZWlnaHQoKTsg
fQogCi0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFk
Kik7CiAgICAgdm9pZCBkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERy
YXdRdWFkKik7CiAgICAgdm9pZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3Jk
ZXJEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmlu
ZGV4IDBlYTQ4YWQxMzk5ZWRhODVhNzVhYzcxNDM1ZTBlNDExYWNlZDc1NTAuLmE3N2ViMWU3OGQ1
OTBjM2U3OGYwNTcwNDFkOTZjYzJmMjE1MGUyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5oCkBAIC05MSw2ICs5MSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2b2lkIHNldENsaXBS
ZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsgfQog
CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNz
b3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29y
UmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQgc2V0Rmls
dGVycyhjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIHsgbV9maWx0
ZXJzID0gZmlsdGVyczsgfQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQogCkBAIC0xMTksNiArMTIyLDcg
QEAgcHJpdmF0ZToKICAgICBMYXllckNocm9taXVtKiBtX293bmluZ0xheWVyOwogICAgIExheWVy
Q2hyb21pdW0qIG1fbWFza0xheWVyOwogCisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2UncyBzcGFj
ZS4KICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKIApA
QCAtMTM0LDcgKzEzOCwxNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybXNBcmVBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmls
dGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVy
czsKKworICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZh
Y2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlk
ZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRy
YXduLgorICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBSZWN0IGlm
IHVzZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQorICAgIC8vIGl0J3MgdGFyZ2V0
UmVuZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgorICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRo
ZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0Owor
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fbGF5ZXJMaXN0OwogCiAgICAg
Ly8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4g
dGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29pbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJh
d1F1YWQuaAppbmRleCBmNGVmMmQzZjIxYzFmYWU1NzY2NjNjZDMyMmZjYjEyN2I4N2NiZmViLi43
MTgxMTJiYzZmMTkxNzI2MzA5MzJlNGU1YmEyYzQwYzNjM2M5MmFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVh
ZC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5x
dWFkVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zv
cm0oKTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhcmVkUXVhZFN0YXRlLT5sYXllclJlY3QoKTsgfQotICAgIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmNsaXBSZWN0KCk7IH0KKyAg
ICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVh
ZFN0YXRlLT5zY2lzc29yUmVjdCgpOyB9CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5vcGFjaXR5KCk7IH0KICAgICAvLyBGb3IgdGhlIHB1cnBv
c2VzIG9mIGJsZW5kaW5nLCB3aGF0IHBhcnQgb2YgdGhlIGNvbnRlbnRzIG9mIHRoaXMgcXVhZCBh
cmUgb3BhcXVlPwogICAgIEludFJlY3Qgb3BhcXVlUmVjdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCmluZGV4IDZkODA2ODRmNjY0ZjAyNWRmNTM2YTcwZWVkZmQ0NDViZmI4MzQ0ZjQu
LmE5NDg1YzUzODQ4N2Y1MjNhYTVlMjgyOTE4ZmZmZTgwZWM3NWY5OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKQEAgLTEzNywxMCArMTM3LDcgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2Vu
ZGFudERyYXdzQ29udGVudCgpCiAKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5
ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewotICAgIEludFJlY3QgbGF5
ZXJDbGlwUmVjdDsKLSAgICBpZiAodXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgbGF5ZXJD
bGlwUmVjdCA9IGNsaXBSZWN0KCk7Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVh
dGUocXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIHZpc2libGVMYXllclJlY3QoKSwg
bGF5ZXJDbGlwUmVjdCwgZHJhd09wYWNpdHkoKSwgb3BhcXVlKCkpOworICAgIHJldHVybiBDQ1No
YXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCB2
aXNpYmxlTGF5ZXJSZWN0KCksIG1fc2Npc3NvclJlY3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1ZSgp
KTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVt
KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGJiNzVhODllYmFkM2Y1YWFhMzk4NTJkNDRkOTg0
YTgyMTE5Yjk2ZjAuLjkyOTM2MTZlM2YzNGI3NDk0NzI4OGZlNzk2M2UxOTczZjhhNjM2MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTYzLDYgKzE2MywxMCBAQCBwdWJsaWM6CiAgICAgLy8g
VXNhZ2U6IGlmIHRoaXMtPnVzZXNMYXllckNsaXBwaW5nKCkgaXMgZmFsc2UsIHRoZW4gdGhpcyBj
bGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3QgPSByZWN0OyB9CisKKyAgICBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2
b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9
IHJlY3Q7IH0KKwogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0
UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJT
dXJmYWNlID0gc3VyZmFjZTsgfQogCkBAIC0yOTcsNiArMzAxLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkIHNpbmNl
IGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXllclByb3BlcnR5Q2hhbmdlZDsKIAorICAgIC8v
IFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJS
ZWN0OwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJvb2wgbV9vcGFxdWU7CkBAIC0z
NTEsMTcgKzM1NiwyNCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSByZWN0IHRoYXQgY29udHJpYnV0
ZXMgdG8gdGhlIHNjaXNzb3Igd2hlbiB0aGlzIGxheWVyIGlzIGRyYXduLgogICAgIC8vIEluaGVy
aXRlZCBieSB0aGUgcGFyZW50IGxheWVyIGFuZCBmdXJ0aGVyIHJlc3RyaWN0ZWQgaWYgdGhpcyBs
YXllciBtYXNrcwogICAgIC8vIHRvIGJvdW5kcy4KKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNl
J3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogCisgICAgLy8gRHVyaW5nIGRyYXdp
bmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxk
IGJlIGRyYXduLgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KKyAgICBJbnRS
ZWN0IG1fc2Npc3NvclJlY3Q7CisKICAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdp
dGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKICAgICAvLyB3aWxs
IHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZT4gbV9y
ZW5kZXJTdXJmYWNlOwogCiAgICAgLy8gSGllcmFyY2hpY2FsIGJvdW5kaW5nIHJlY3QgY29udGFp
bmluZyB0aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KKyAgICAvLyBVc2VzIHRhcmdldCBz
dXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAKICAg
ICAvLyBSZWN0IGluZGljYXRpbmcgd2hhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQgZHVyaW5nIHVw
ZGF0ZS4KICAgICAvLyBOb3RlIHRoYXQgcGx1Z2luIGxheWVycyBieXBhc3MgdGhpcyBhbmQgbGVh
dmUgaXQgZW1wdHkuCisgICAgLy8gVXNlcyBsYXllcidzIGNvbnRlbnQgc3BhY2UuCiAgICAgRmxv
YXRSZWN0IG1fdXBkYXRlUmVjdDsKIAogICAgIC8vIE1hbmFnZXMgYW5pbWF0aW9ucyBmb3IgdGhp
cyBsYXllci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDk2Mzk3Y2E0NWM0
MjE2NDk1YWNmYjhhMDdlNGI2YTBhMTU5OTAxYWMuLmMyZTU2NDY2N2NlMmVkODJmNTFlMWEyM2Ew
Yzk5YzJkOTdkNDAyMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTE0
LDcgKzUxNCwxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hy
b21pdW0qIHJvb3RMYXllciwgQ0NUZXh0dXJlVXBkYXRlciYgdQogICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZGV2aWNlU2NhbGVUcmFuc2Zvcm07CiAgICAgICAgIGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxl
KG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJv
b3RMYXllciwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCB1cGRhdGVMaXN0
LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGRldmljZVNjYWxlVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxh
eWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwor
CisgICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3
cG9ydFNpemUoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyh1cGRhdGVMaXN0LCByb290RGFtYWdlUmVjdCk7CiAgICAgfQog
CiAgICAgLy8gUmVzZXQgcGFydGlhbCB0ZXh0dXJlIHVwZGF0ZSByZXF1ZXN0cy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IDJhMGY3MTgwMzkyMjI2ZjVl
NGEyODA3OTI4YWY1N2Y0NTZlYWY2ODguLjAzMDFlOWM4NjZmNmY0OGEzMDA2Y2FiNzhlNzk4NWNj
NzgyNjk3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApA
QCAtNjUsNiArNjUsNDQgQEAgSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2UKICAgICByZXR1cm4gbGF5
ZXJSZWN0OwogfQogCitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KEND
TGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAg
ICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpOworCisgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2UgPSByZW5kZXJTdXJmYWNlLT5k
YW1hZ2VJblN1cmZhY2VTcGFjZShyb290RGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXItPnVz
ZXNMYXllckNsaXBwaW5nKCkpCisgICAgICAgIGNsaXBBbmREYW1hZ2UuaW50ZXJzZWN0KGxheWVy
LT5jbGlwUmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNsaXBBbmREYW1hZ2UuaW50ZXJzZWN0
KHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpOworCisgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoY2xpcEFuZERhbWFnZSk7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVy
U2Npc3NvclJlY3QoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERh
bWFnZVJlY3QpCit7CisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQorICAgICAg
ICByZXR1cm4gbGF5ZXItPmNsaXBSZWN0KCk7CisgICAgcmV0dXJuIGxheWVyLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMgSW50UmVjdCBjYWxjdWxh
dGVTdXJmYWNlU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBy
b290RGFtYWdlUmVjdCkKK3sKKyAgICBMYXllclR5cGUqIHBhcmVudExheWVyID0gbGF5ZXItPnBh
cmVudCgpOworICAgIFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRTdXJmYWNlID0gcGFyZW50TGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKKyAgICBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFj
ZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gc3Vy
ZmFjZS0+Y2xpcFJlY3QoKTsKKyAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBj
bGlwUmVjdCA9IGludGVyc2VjdGlvbih0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgpLCBzdXJm
YWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gdGFyZ2V0U3VyZmFjZS0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKS5pbnZlcnNlKCk7CisgICAgRmxvYXRSZWN0IHJlc3VsdCA9IENDTWF0aFV0aWw6
OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJvb3REYW1h
Z2VSZWN0KTsKKworICAgIHJlc3VsdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KHJlc3VsdCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KIHN0YXRpYyBpbmxpbmUgYm9vbCBsYXllcklzSW5FeGlzdGluZzNEUmVuZGVyaW5nQ29udGV4
dChMYXllclR5cGUqIGxheWVyKQogewpAQCAtMjgyLDcgKzMyMCw3IEBAIHN0YXRpYyBib29sIHN1
YnRyZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxheWVyLCBib29s
IGF4aXNBbGlnCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBh
dCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5z
Zm9ybWF0aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5
cGUqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1
cmZhY2VUeXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBs
YXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQorc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXll
ciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1cmZhY2VUeXBlKiBu
ZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwg
aW50IG1heFRleHR1cmVTaXplKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhl
IG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb25zIHJlY3Vyc2l2ZWx5IGZvciB0aGlzCiAgICAgLy8g
bGF5ZXIgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuIEl0IGFsc28gY29tcHV0ZXMgdGhlIGFwcHJv
cHJpYXRlIHJlbmRlciBzdXJmYWNlcy4KQEAgLTU3Myw3ICs2MTEsNyBAQCBzdGF0aWMgYm9vbCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllcgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4o
KS5zaXplKCk7ICsraSkgewogICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxk
cmVuKClbaV0uZ2V0KCk7Ci0gICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJl
bmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJN
YXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVs
cywgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhU
ZXh0dXJlU2l6ZSk7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNJbnRlcm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUs
IExheWVyU29ydGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJh
cmNoeU1hdHJpeCwgbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKIAog
ICAgICAgICBpZiAoZHJhd3NDb250ZW50KSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSkgewpAQCAtNjk0LDkgKzczMiw5IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVy
CiAKIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8g
c2V0IHZpc2liaWxpdHkgcmVjdHMgb24gYSBzZWNvbmQKIC8vIHRyZWUgcGFzcywgcmV2aXNlIGNh
bGN1bGF0ZVZpc2libGVMYXllclJlY3QoKSBzbyB0aGF0IHRoaXMgY2FuIGJlIGRvbmUgaW4gYSBz
aW5nbGUKLS8vIHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsPD4oKS4KKy8vIHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50
ZXJuYWw8PigpLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxp
c3QsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotc3RhdGljIHZvaWQgd2Fsa0xheWVyc0Fu
ZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVMYXllcnNBbmRTY2lzc29y
UmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9h
dFJlY3QmIHJvb3REYW1hZ2VSZWN0KQogewogICAgIC8vIFVzZSBCYWNrVG9Gcm9udCBzaW5jZSBp
dCdzIGNoZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRlcGVuZGVudC4KICAgICB0eXBlZGVmIEND
TGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250PiBDQ0xheWVySXRlcmF0b3JUeXBlOwpA
QCAtNzA3LDE5ICs3NDUsMzQgQEAgc3RhdGljIHZvaWQgd2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZp
c2libGVMYXllclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmEKICAgICAgICAgICAg
IEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoKml0
KTsKICAgICAgICAgICAgIGl0LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3Qp
OwogICAgICAgICB9CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKKyAgICAg
ICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KCpp
dCwgcm9vdERhbWFnZVJlY3QpOworICAgICAgICAgICAgaXQtPnNldFNjaXNzb3JSZWN0KHNjaXNz
b3JSZWN0KTsKKyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVu
ZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3Vs
YXRlU3VyZmFjZVNjaXNzb3JSZWN0PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+KCppdCwg
cm9vdERhbWFnZVJlY3QpOworICAgICAgICAgICAgaXQtPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Np
c3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExh
eWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5
ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21p
dW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3sK
KyAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyQ2hyb21p
dW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVt
LCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNp
emUpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMoQ0NMYXllckltcGwqIGxheWVyLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJT
b3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCit7CisgICAgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4s
IENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50
TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBs
YXllckxpc3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3QgRmxv
YXRSZWN0JiByb290RGFtYWdlUmVjdCkKIHsKLSAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4obGF5ZXIsIHJv
b3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHM8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworICAgIGNhbGN1bGF0ZVZpc2libGVMYXllcnNBbmRTY2lzc29yUmVjdHM8
TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NM
YXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxD
Q0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJv
b3REYW1hZ2VSZWN0KQogewotICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJm
YWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxI
aWVyYXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5
ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlz
aWJsZUxheWVyUmVjdHM8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRl
clN1cmZhY2U+KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGNhbGN1bGF0ZVZpc2libGVM
YXllcnNBbmRTY2lzc29yUmVjdHM8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBD
Q1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaAppbmRleCAzNzYyZjY0YjE5YjMxMzQ5OThlNDBiNDQ3NjM4YTI0NmYxMjQ4YmJi
Li4xYzVlOWUxNzAxZDNkMmVlMzhiNTlmYWU5ZTRiYzVmNjcyYWMzZDZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApAQCAtNDEsOCArNDEsMTEgQEAgY2xhc3MgQ0NM
YXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxh
dGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50
UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJD
aHJvbWl1bSosIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVy
YXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGlu
dCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xh
eWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxh
dGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290
TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVy
TGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBzdGF0aWMg
dm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xheWVySW1wbCo+
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0
KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3Qg
RmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0KExheWVy
VHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKaW5kZXggOTEzMzZhNzc2OGQzZGQ2MjExYjA5ODQ4NDljNjJjMjNh
NGVkNTM2MC4uYTFhNmU2ZjE4NmViMTNiMWJlZjY0ZTlmODE0OTI1MzYyYzYzMWZhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTIyOSwyNyArMjI5LDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyLAogICAgIH0KIH0KIAotc3RhdGljIEZsb2F0UmVjdCBkYW1h
Z2VJblN1cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQotewotICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdl
UmVjdDsKLSAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFt
YWdlIGFzIHRoZSBkYW1hZ2UgZm9yCi0gICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQgcGVyc3Bl
Y3RpdmUgdHJhbnNmb3Jtcy4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVu
U3BhY2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVy
c3BlY3RpdmUoKSkgewotICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3Qg
cGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZgotICAgICAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMu
IEluIHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KLSAgICAgICAgLy8ganVzdCBy
ZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgotICAgICAgICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0
ZVZpc2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KLSAgICAgICAgQ0NSZW5kZXJTdXJm
YWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7
Ci0gICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3Qo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAg
ICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJl
Y3Qocm9vdERhbWFnZVJlY3QpOwotICAgIH0KLSAgICByZXR1cm4gc3VyZmFjZURhbWFnZVJlY3Q7
Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxh
eWVyTGlzdChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK0Zsb2F0UmVjdCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIEFTU0VSVChyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CiAKQEAgLTI2Nyw3ICsyNDcsMjEgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJM
aXN0JiByZW5kZXJTdXIKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJhbnNmb3JtOwog
ICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdzLmRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkobV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX3Jvb3RMYXllcklt
cGwuZ2V0KCksIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlz
dCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1
cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSwgZGV2
aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVy
U29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworCisg
ICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8
fCBzZXR0aW5ncygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCisgICAgICAgICAgICB0cmFja0Rh
bWFnZUZvckFsbFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgICAgIG1fcm9vdERhbWFnZVJlY3QgPSBtX3Jvb3RMYXllckltcGwtPnJl
bmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisg
ICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKyAgICAgICAgaWYgKGxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICAgICAgcm9vdERhbWFn
ZVJlY3QgPSBtX3Jvb3REYW1hZ2VSZWN0OworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290
RGFtYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3cG9ydFNpemUoKSk7
CisgICAgCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlUmVjdCk7CisK
KyAgICAgICAgcmV0dXJuIHJvb3REYW1hZ2VSZWN0OwogICAgIH0KIH0KIApAQCAtMjc1LDEzICsy
NjksMTEgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
Q0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKIHsKICAgICBBU1NFUlQocGFzc2VzLmlz
RW1wdHkoKSk7CiAKLSAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IGNhbGN1bGF0
ZVJlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBU
UkFDRV9FVkVOVDEoIndlYmtpdCIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMiLCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkiLCBzdGF0aWNfY2FzdDxs
b25nIGxvbmcgdW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKSk7CiAKLSAg
ICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgfHwgc2V0
dGluZ3MoKS5zaG93U3VyZmFjZURhbWFnZVJlY3RzKQotICAgICAgICB0cmFja0RhbWFnZUZvckFs
bFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
Ci0gICAgbV9yb290RGFtYWdlUmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgbV9yb290TGF5ZXJJ
bXBsLT5zZXRTY2lzc29yUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJvb3REYW1hZ2VSZWN0KSk7CiAK
ICAgICAvLyBDcmVhdGUgdGhlIHJlbmRlciBwYXNzZXMgaW4gZGVwZW5kZW5jeSBvcmRlci4KICAg
ICBIYXNoTWFwPENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyUGFzcyo+IHN1cmZhY2VQYXNzTWFw
OwpAQCAtMjkwLDEyICsyODIsNiBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0
ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogICAgICAgICBD
Q1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKIAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5k
ZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHN1cmZh
Y2VEYW1hZ2VSZWN0OwotICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVz
aW5nUGFydGlhbFN3YXApCi0gICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGRhbWFnZUlu
U3VyZmFjZVNwYWNlKHJlbmRlclN1cmZhY2VMYXllciwgbV9yb290RGFtYWdlUmVjdCk7Ci0gICAg
ICAgIHBhc3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKLQogICAg
ICAgICBzdXJmYWNlUGFzc01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CiAgICAg
ICAgIHBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTMyNiwxMSArMzEy
LDE1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKEND
UmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICAgICAgb2NjbHVzaW9uVHJhY2tl
ci5lbnRlckxheWVyKGl0KTsKIAotICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGlu
Z1JlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVy
U3VyZmFjZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIpOworICAgICAgICBpZiAoaXQucmVw
cmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgaWYgKCFp
dC0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcigqaXQsICZvY2NsdXNp
b25UcmFja2VyLCBtX3Jvb3REYW1hZ2VSZWN0KTsKKyAgICAgICAgfQogICAgICAgICBlbHNlIGlm
IChpdC5yZXByZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpdC0+d2lsbERyYXcobV9sYXllclJlbmRlcmVyLmdldCgpKTsK
LSAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yTGF5ZXIoKml0LCAmb2NjbHVzaW9uVHJh
Y2tlciwgaGFkTWlzc2luZ1RpbGVzKTsKKworICAgICAgICAgICAgaWYgKCFpdC0+c2Npc3NvclJl
Y3QoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXll
cigqaXQsICZvY2NsdXNpb25UcmFja2VyLCBoYWRNaXNzaW5nVGlsZXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGhhZE1pc3NpbmdUaWxlcykgewpAQCAtNDMwLDggKzQyMCwxMCBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFtZSkK
ICAgICBtX2Zwc0NvdW50ZXItPm1hcmtCZWdpbm5pbmdPZkZyYW1lKGN1cnJlbnRUaW1lKCkpOwog
ICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUobV9yb290TGF5ZXJJbXBsLT5y
ZW5kZXJTdXJmYWNlKCkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5k
ZXJQYXNzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRl
clBhc3MoZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCk7ICsraSkgeworICAgICAgICBDQ1JlbmRl
clBhc3MqIHJlbmRlclBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbaV0uZ2V0KCk7CisgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocmVuZGVyUGFzcywgcmVuZGVyUGFzcy0+
dGFyZ2V0U3VyZmFjZSgpLT5kYW1hZ2VJblN1cmZhY2VTcGFjZShtX3Jvb3REYW1hZ2VSZWN0KSk7
CisgICAgfQogCiAgICAgaWYgKG1fZGVidWdSZWN0SGlzdG9yeS0+ZW5hYmxlZChzZXR0aW5ncygp
KSkKICAgICAgICAgbV9kZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRG
cmFtZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHNldHRpbmdzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGY4
Yjc2MzE0MDRkN2MyMzgzMTE3YzU4NmFmZGJmYTRjYTBjMzIwYjAuLjI1ZjFhNWFlZGQ1ZTczMzQy
MjYzOGVjZTNiOWNkYmViNmNiNTM0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTE3NCw4ICsxNzQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhbmltYXRlUGFn
ZVNjYWxlKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKICAgICB2b2lkIGFuaW1hdGVHZXN0dXJlcyhk
b3VibGUgbW9ub3RvbmljVGltZSk7CiAKLSAgICAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLgotICAg
IHZvaWQgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChDQ0xheWVyTGlzdCYpOworICAg
IC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuIFJldHVybnMgcm9vdCBkYW1hZ2UgcmVjdCBvciBmdWxs
IHZpZXdwb3J0IGlmIG5vdCB1c2luZyBwYXJ0aWFsIHN3YXAuCisgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3QmKTsKIAogICAgIC8vIFZpcnR1
YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIG1v
bm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwCmluZGV4IDg0ODczMGEyYzdiNjBiNzYyMzg5OWZkN2Y5YjQxMzMwYTJlOTdjYjcuLjg3NGZm
NjE5ZTJhZGU5NTU0ZTQyZGQwNGJiZWUzNzg1M2QyZGQ4MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzLmNwcApAQCAtNjgsMjAgKzY4LDIxIEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFk
c0ZvckxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXNpb25UcmFja2VySW1wCiAgICAg
bV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsK
IH0KIAotdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXNpb25UcmFja2VySW1wbCogb2NjbHVzaW9uVHJh
Y2tlcikKK3ZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXll
cihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVzaW9uVHJhY2tlckltcGwqIG9jY2x1c2lvblRy
YWNrZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CiAgICAgLy8gRklYTUU6
IHJlbmRlciBzdXJmYWNlIGxheWVycyBzaG91bGQgYmUgYSBDQ0xheWVySW1wbC1kZXJpdmVkIGNs
YXNzIGFuZAogICAgIC8vIG5vdCBiZSBoYW5kbGVkIHNwZWNpYWxseSBoZXJlLgogICAgIENDUXVh
ZEN1bGxlciBxdWFkQ3VsbGVyKG1fcXVhZExpc3QsIGxheWVyLCBvY2NsdXNpb25UcmFja2VyLCBs
YXllci0+aGFzRGVidWdCb3JkZXJzKCkpOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNl
ID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKwogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gc2hhcmVkUXVhZFN0YXRlID0gc3VyZmFjZS0+Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7CiAg
ICAgaWYgKGxheWVyLT5oYXNEZWJ1Z0JvcmRlcnMoKSkgewogICAgICAgICBDb2xvciBjb2xvcihk
ZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvclJlZCwgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JHcmVlbiwg
ZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JCbHVlLCBkZWJ1Z1N1cmZhY2VCb3JkZXJBbHBoYSk7CiAg
ICAgICAgIHF1YWRDdWxsZXIuYXBwZW5kU3VyZmFjZShDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNy
ZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGNvbG9y
LCBkZWJ1Z1N1cmZhY2VCb3JkZXJXaWR0aCkpOwogICAgIH0KICAgICBib29sIGlzUmVwbGljYSA9
IGZhbHNlOwotICAgIHF1YWRDdWxsZXIuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3Qo
KSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCksIGlzUmVwbGljYSkpOworICAgIHF1YWRDdWxs
ZXIuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIGlzUmVwbGljYSkp
OwogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVh
c2UoKSk7CiAKICAgICAvLyBBZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0IGl0
IGFwcGVhcnMgYmVsb3cgdGhlIHN1cmZhY2UuCkBAIC05Miw3ICs5Myw3IEBAIHZvaWQgQ0NSZW5k
ZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5
ZXIsIENDT2NjbHVzCiAgICAgICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5j
b250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKICAgICAgICAg
fQogICAgICAgICBib29sIGlzUmVwbGljYSA9IHRydWU7Ci0gICAgICAgIHF1YWRDdWxsZXIuYXBw
ZW5kUmVwbGljYShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0
ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0
KCksIGlzUmVwbGljYSkpOworICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCksIGxheWVyLCBpc1JlcGxpY2EpKTsKICAgICAgICAgbV9zaGFyZWRRdWFk
U3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4IDQ1MmE4NjEwZjVhOWRiYzAyMTRhOGNkZGJmZjZmMDI1
NGZlY2RhMjYuLjM0Nzg0NDkyZWJhMjYyMjdjMzM2ZjljOWIyMmI2ODdjNmQ5NmM0ZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oCkBAIC01NiwyMiArNTYsMTggQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gY3JlYXRlKENDUmVuZGVyU3VyZmFjZSopOwogCiAg
ICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKiwgQ0NPY2NsdXNpb25UcmFj
a2VySW1wbCosIGJvb2wmIGhhZE1pc3NpbmdUaWxlcyk7Ci0gICAgdm9pZCBhcHBlbmRRdWFkc0Zv
clJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCosIENDT2NjbHVzaW9uVHJhY2tlckltcGwq
KTsKKyAgICB2b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBs
KiwgQ0NPY2NsdXNpb25UcmFja2VySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJl
Y3QpOwogICAgIHZvaWQgYXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJvb3RM
YXllciwgY29uc3QgQ29sb3ImIHNjcmVlbkJhY2tncm91bmRDb2xvciwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VySW1wbCYpOwogCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QoKSBjb25z
dCB7IHJldHVybiBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJm
YWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9CiAKLSAgICB2b2lkIHNldFN1
cmZhY2VEYW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpIHsgbV9z
dXJmYWNlRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0gICAgY29uc3QgRmxvYXRS
ZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJl
Y3Q7IH0KLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJm
YWNlKik7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFjZTsKICAgICBDQ1F1
YWRMaXN0IG1fcXVhZExpc3Q7CiAgICAgVmVjdG9yPE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
PiBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Q7Ci0gICAgRmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJl
Y3Q7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IENDUmVuZGVy
UGFzc0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCAyNmM0NjdhYjQw
MzNkZDJjYjFkMjM4YjJiYzFiZjc5MzVhZDA5YmEwLi5lZGE1NDExZWI0NDVlODMyZDNmNTZiODE5
ODU2MWE4MjkwMTliZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9D
Q01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDUmVu
ZGVyU3VyZmFjZUZpbHRlcnMuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgpA
QCAtMjA4LDIwICsyMDksNiBAQCBpbmxpbmUgc3RhdGljIGludCBnZXRTa0JpdG1hcFRleHR1cmVJ
ZChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgZmFsbGJhY2spCiAgICAgcmV0dXJuIHRleHR1
cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnNldFNj
aXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgRmxv
YXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3QKLXsKLSAgICBpZiAobV9vd25pbmdMYXll
ci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5n
KCkgJiYgbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkgewot
ICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QgPSBtX2NsaXBSZWN0OwotICAgICAg
ICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotICAgICAg
ICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFu
ZERhbWFnZVJlY3QpKTsKLSAgICB9IGVsc2UgaWYgKGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGll
cygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JU
b1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOwotICAgIGVsc2UgaWYg
KG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2Vz
TGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0
KG1fY2xpcFJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpKTsKLX0KLQogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdDb250ZW50
cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7CiAgICAgaWYgKG1fc2tp
cHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKQEAgLTQ1NCwxMyArNDQxLDMzIEBAIGJvb2wg
Q0NSZW5kZXJTdXJmYWNlOjpzdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50
KCkgY29uc3QKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6
Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKICAgICBib29sIGlzT3BhcXVlID0gZmFs
c2U7Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUob3JpZ2luVHJhbnNmb3Jt
KCksIGRyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09wYWNp
dHkoKSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9y
aWdpblRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIG1fc2Npc3Nv
clJlY3QsIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKIH0KIAogUGFzc093blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gQ0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRl
KCkgY29uc3QKIHsKICAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7Ci0gICAgcmV0dXJuIENDU2hh
cmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5zZm9ybSgpLCByZXBsaWNhRHJh
d1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgpLCBkcmF3T3BhY2l0eSgpLCBp
c09wYXF1ZSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9y
aWdpblRyYW5zZm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBt
X3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7Cit9CisKK0Zsb2F0UmVjdCBD
Q1JlbmRlclN1cmZhY2U6OmRhbWFnZUluU3VyZmFjZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGFt
YWdlUmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CisKKyAg
ICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRo
ZSBkYW1hZ2UgZm9yCisgICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUgdHJh
bnNmb3Jtcy4KKyAgICBpZiAobV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgp
KSB7CisgICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ug
d2l0aCBtYXBSZWN0IG9mCisgICAgICAgIC8vIGludmVyc2UgdHJhbnNmb3Jtcy4gSW4gdGhpcyB1
bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bworICAgICAgICAvLyBqdXN0IHJlZHJhdyB0aGUg
ZW50aXJlIHN1cmZhY2UuCisgICAgICAgIC8vIEZJWE1FOiB1c2UgY2FsY3VsYXRlVmlzaWJsZVJl
Y3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgorICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IG1f
Y29udGVudFJlY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZl
cnNlKCk7CisgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJh
bnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2VE
YW1hZ2VSZWN0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDZhNjcx
YTcwMGVkNjc3MDg2N2ViZTkyNjljMTI5Njc2MGQyMDQ0YTEuLmVkMWU5M2ZlMzY2NWRkYzBlYTAw
YTc2ZTM4NWE0MWJmOTI3MWQyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC01
OCw4ICs1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIHByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVy
ZSgpOwogCi0gICAgdm9pZCBzZXRTY2lzc29yUmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBj
b25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSBjb25zdDsKLQogICAgIHZvaWQgZHJh
d0NvbnRlbnRzKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgZHJhd1JlcGxpY2Eo
TGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKQEAgLTEyMyw2ICsxMjEsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAKKyAgICB2b2lkIHNldFNj
aXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBz
Y2lzc29yUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRDb250ZW50UmVjdChjb25zdCBJ
bnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRSZWN0OyB9CiAKQEAgLTE1NCw2ICsxNTUsMTAgQEAgcHVibGljOgogICAgIFBh
c3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0
OwogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVJlcGxpY2FTaGFyZWRR
dWFkU3RhdGUoKSBjb25zdDsKIAorICAgIC8vIFRyYW5zZm9ybXMgYSBkYW1hZ2UgcmVjdCBpbnRv
IHN1cmZhY2Ugc3BhY2UuIEluIHNvbWUgY2FzZXMgaXQgbWF5IGRlY2lkZQorICAgIC8vIHRvIHJl
dHVybiB0aGUgZW50aXJlIHN1cmZhY2UgY29udGVudFJlY3QuCisgICAgLy8gRklYTUU6IE9uY2Ug
d2Ugc3dpdGNoIHRvIENDTWF0aFV0aWw6OnByb2plY3RSZWN0LCB3ZSBjYW4gcmVtb3ZlIHRoaXMg
ZnVuY3Rpb24KKyAgICBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiBkYW1hZ2VSZWN0KSBjb25zdDsKIHByaXZhdGU6CiAgICAgSW50UmVjdCBjb21wdXRlRGV2
aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0OwogICAgIEludFJlY3QgY29tcHV0ZVJlYWRi
YWNrRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0OwpAQCAtMTY3LDYgKzE3Miw3IEBA
IHByaXZhdGU6CiAgICAgQ0NMYXllckltcGwqIG1fb3duaW5nTGF5ZXI7CiAgICAgQ0NMYXllcklt
cGwqIG1fbWFza0xheWVyOwogCisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2UncyBzcGFjZS4KICAg
ICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKICAgICBib29s
IG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZDsKQEAgLTE4Niw3ICsxOTIsMTQgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisKKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBv
ZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsK
KworICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBv
ZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBv
ZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVj
dDsKKwogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IG1fbGF5ZXJMaXN0OwogCiAgICAgLy8gVGhl
IG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGNv
bnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29pbmcKQEAgLTE5NSw5ICsyMDgs
NiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gbV9kYW1hZ2VUcmFj
a2VyOwogCi0gICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFjZSIgd2hlcmUgdGhpcyBk
YW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGFtYWdl
UmVjdDsKLQogICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCiAgICAgaW50IG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OwogICAgIGludCBtX2N1cnJlbnRMYXll
ckluZGV4SGlzdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFk
LmNwcAppbmRleCBjNmUwMjFlY2UyMDY1Yzc5YzVlY2Y2Y2QwYjZkMzdjZTk1NDdiMzEwLi5iZmFi
YWQ4NWZlNDNjNjlhMzAyMTIxMDBmMjk4ZjRmZjc3NjM4Y2FlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCkBAIC0yOSwxNSArMjksMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBz
aGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKQor
UGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25z
dCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBib29sIGlzUmVwbGljYSkK
IHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJl
ZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNh
KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFy
ZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXllciwgaXNSZXBsaWNhKSk7CiB9CiAKLUNDUmVuZGVy
U3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXll
ckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlz
UmVwbGljYSkKK0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0
JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBib29sIGlzUmVwbGljYSkKICAgICA6IEND
RHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFk
UmVjdCkKICAgICAsIG1fbGF5ZXIobGF5ZXIpCi0gICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1
cmZhY2VEYW1hZ2VSZWN0KQogICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNhKQogewogICAgIEFT
U0VSVChtX2xheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5o
CmluZGV4IDhmNmRhNWVlZTFkODI3ZmMxMGVhNWE1OGQ1ZjgxOWViMjA1OTMxNmQuLjM0OGU4YTk4
ZDNkMjM3MjdhODAyY2ExNTM5Mzk3Y2MxMzZiYmEzM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQuaApAQCAtMzYsMjAgKzM2LDE1IEBAIGNsYXNzIENDTGF5ZXJJ
bXBsOwogY2xhc3MgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwq
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSk7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGJvb2wg
aXNSZXBsaWNhKTsKIAogICAgIENDTGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXI7IH0KICAgICBib29sIGlzUmVwbGljYSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNh
OyB9CiAKLSAgICAvLyBUaGUgc3VyZmFjZSBkYW1hZ2UgcmVjdCBmb3IgdGhlIHRhcmdldCBzdXJm
YWNlIHRoaXMgcXVhZCBkcmF3cyBpbnRvLgotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSByZW1v
dmVkIG9uY2UgcmVuZGVyIHN1cmZhY2VzIGdldCB0aGVpciBvd24gbGF5ZXIgdHlwZS4KLSAgICBj
b25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdXJm
YWNlRGFtYWdlUmVjdDsgfQotCiBwcml2YXRlOgotICAgIENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpOworICAg
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3Qg
SW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgYm9vbCBpc1JlcGxpY2EpOwogCiAgICAgQ0NMYXllcklt
cGwqIG1fbGF5ZXI7Ci0gICAgRmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJlY3Q7CiAgICAgYm9v
bCBtX2lzUmVwbGljYTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcApp
bmRleCA5YmY3NjkyNWJiOGNmMmJiYWM1MzljMDE0MzFjNTU3ODQzMzlmZDA1Li45MDc3N2FiNDFi
Yjg0YjA4ODkxY2IyMjQyODg1ZTBmMzgxYjI4MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuY3BwCkBAIC0yOSwxNiArMjksMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorUGFz
c093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0
IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxh
eWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIGNsaXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxh
eWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIHNjaXNzb3JSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsK
IH0KIAotQ0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorQ0NTaGFyZWRRdWFkU3RhdGU6
OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNm
b3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNp
dHksIGJvb2wgb3BhcXVlKQogICAgIDogbV9xdWFkVHJhbnNmb3JtKHF1YWRUcmFuc2Zvcm0pCiAg
ICAgLCBtX2xheWVyVHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtKQogICAgICwgbV9sYXllclJlY3Qo
bGF5ZXJSZWN0KQotICAgICwgbV9jbGlwUmVjdChjbGlwUmVjdCkKKyAgICAsIG1fc2Npc3NvclJl
Y3Qoc2Npc3NvclJlY3QpCiAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKICAgICAsIG1fb3BhcXVl
KG9wYXF1ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCmluZGV4IDQyMDZhYTVj
MmRlMmE3NTRjOWNhOTFmNGU4ZTg4OTM4MjIxMWZmMjIuLjZiMTUwMDBiYjU3ZTZkYjA0ZGZhNWY5
NDc1ZDM0MDdiMzlhODJiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApAQCAt
MzYsMjcgKzM2LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDU2hhcmVkUXVhZFN0
YXRlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxh
eWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNj
aXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CiAKICAgICAvLyBUaGUgdHJh
bnNmb3JtIHRoYXQgcXVhZHMgaW4gYSBDQ0RyYXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3
aXRoLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9xdWFkVHJhbnNmb3JtOyB9CiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0
IGxheWVyUmVjdCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJU
cmFuc2Zvcm07IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyUmVjdDsgfQotICAgIC8vIFVzYWdlOiBpZiBjbGlwUmVjdCBpcyBlbXB0eSwgdGhp
cyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Np
c3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CiAKICAgICBmbG9hdCBv
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAgICAgYm9vbCBpc09wYXF1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgYm9vbCBpc0xheWVyQXhpc0FsaWduZWRJ
bnRSZWN0KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOworICAgIENDU2hh
cmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJv
b2wgb3BhcXVlKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcXVhZFRyYW5zZm9ybTsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVyVHJhbnNmb3JtOwogICAgIEludFJlY3Qg
bV9sYXllclJlY3Q7Ci0gICAgSW50UmVjdCBtX2NsaXBSZWN0OworICAgIEludFJlY3QgbV9zY2lz
c29yUmVjdDsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgYm9vbCBtX29wYXF1ZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0
LmNwcAppbmRleCBiYmVhOTcxZGQ1YTRlZmU2N2QzMzYxNjFjOWEwZGZiNzE1YWQ3YWI3Li5lYjcw
ZGRlNTNjZmM4ZTJiOTU0ZjI0NmZiMDcxOWY0MWUwNDNiNzJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTU4LDcg
KzU4LDggQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8Q0NMYXkKIAogICAgIHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVu
ZChyb290KTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29ydGVy
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdC0+
cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIH0KIAogdm9pZCBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKaW5kZXggZjVlYWU3Zjg0ZGQ1MTI1
YzgwOTk1YjljZDQyOWI5OWJjYmY2OTMzNC4uZDRmOWZkYzJhYTFiNjFiZTNiNzc5YzI5MWRkMjcy
Y2E5YTQ5YzZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVySXRlcmF0b3JUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJJdGVyYXRvclRlc3QuY3BwCkBAIC0xMzgsMTAgKzEzOCwxMSBAQCBURVNUKENDTGF5ZXJJ
dGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290
TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExh
eWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBsYXllckxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJh
Y2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9v
dExheWVyLCAwLCAtMSwgMSk7CkBAIC0xODUsMTAgKzE4NiwxMSBAQCBURVNUKENDTGF5ZXJJdGVy
YXRvclRlc3QsIGNvbXBsZXhUcmVlKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExh
eWVyLmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXll
ci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
bGF5ZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RM
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNr
VG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RM
YXllciwgMCwgLTEsIDEpOwpAQCAtMjQ0LDEwICsyNDYsMTEgQEAgVEVTVChDQ0xheWVySXRlcmF0
b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFjZSkKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIu
Z2V0KCksCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGxheWVyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBp
dGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9D
T1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDE3ZTU3
MDE5OTlmODYxYWE4N2I1YTc3NTlhN2RmZDAyMDE0ZjkyZGMuLmUzZjgyOGJlYWVmZDI5MjQ5YzM5
MTJiNjdlYjcyMDUxZjYxY2Y4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzIsNyArMzIs
MTIgQEAKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgorI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVk
ZSAiY2MvQ0NUaHJlYWQuaCIKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KQEAgLTU4LDcgKzYzLDggQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RM
YXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwgcm9v
dExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1t
eVJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250
ZW50UmVjdCgpKTsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRP
Zk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0KQpAQCAtMTc0LDcgKzE4MCw3
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bmdsZUxheWVyKQogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRS
ZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNzog
VmVyaWZ5IHRoYXQgcG9zaXRpb24gcHJlLW11bHRpcGxpZXMgdGhlIGxheWVyIHRyYW5zZm9ybS4K
LSAgICAvLyAgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBkb2VzIHRoaXMgaW1wbGljaXRseSwgYnV0IGl0IGlz
CisgICAgLy8gICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVE
cmF3VHJhbnNmb3JtcyBkb2VzIHRoaXMgaW1wbGljaXRseSwgYnV0IGl0IGlzCiAgICAgLy8gICAg
ICAgICBzdGlsbCB3b3J0aCB0ZXN0aW5nIHRvIGRldGVjdCBhY2NpZGVudGFsIHJlZ3Jlc3Npb25z
LgogICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRv
QW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsK
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5z
Zm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQo
NS4wZiwgMS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwpAQCAtMzE3LDYgKzMyMyw1NjEg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2lu
Z2xlUmVuZGVyU3VyZmFjZSkKICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgc2Npc3NvclJlY3ROb0NsaXApCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRo
aXNTY29wZUlzT25JbXBsVGhyZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRl
ZCBhcyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8
CisgICAgICAgICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0t
LS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8
ICAgICB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGhhdmUgcmVu
ZGVyIHN1cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAx
MDAsIDEwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIElu
dFJlY3QgZ3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290
UmVjdC55KCkpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgp
LCByb290UmVjdC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKwor
ICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7Cisg
ICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXpl
KGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3Jh
bmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5o
ZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAg
IENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBn
cmFuZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChn
cmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgp
KTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Cisg
ICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKwor
ICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKworICAg
ICAgICAvKiBlbXB0eSBsaXN0ICovCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZs
YXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1
bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdl
UmVjdCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNT
RVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQ
RUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAyVSk7CisgICAgCisgICAgQVNT
RVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8g
TGF5ZXIncyBjbGlwUmVjdCBpcyBhIHVuaW9uIG9mIGFsbCBpdHMgY2hpbGRyZW4ncyBib3VuZHMK
KyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgZ3JhbmRD
aGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QueSgp
ICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBBU1NFUlRfRVEoZ3JhbmRDaGlsZFB0
ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICBBU1NFUlRfRVEocm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAg
ICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVj
dCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgQVNTRVJUX0ZBTFNFKHJvb3QtPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkp
OworICAgIAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9v
dERhbWFnZShyb290UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2Up
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gY2hpbGQgc3VyZmFjZSBk
b2Vzbid0IGhhdmUgYSBjbGlwIHJlY3QsIHRoZXJlZm9yZSBpdCB3aWxsIGJlIGNvbXB1dGVkIGFz
IGludGVyc2VjdGlvbgorICAgIC8vIGJldHdlZW4gcm9vdCBzdXJmYWNlJ3MgY29udGVudHJlY3Qg
YW5kIGNoaWxkIHN1cmZhY2UncyBkcmF3YWJsZSBjb250ZW50IHJlY3QuCisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
Y2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworCisgICAgRVhQRUNU
X0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKworICAgIC8vIFRo
ZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0YXJ0cyBh
dCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQgaXMgbm90
IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAod2hpY2ggZXh0ZW5k
IGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgp
IC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisK
KyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Npc3NvciByZWN0IGFzIGl0
IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAgICAvLyBvZiBpdHMgb3duCisgICAgRVhQRUNUX0VR
KGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lk
dGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkp
OworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDAs
IDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAK
KyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVYUEVDVF9FUShyb290
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9v
dC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1Rf
RVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Cisg
ICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAgcm9vdERhbWFnZSA9
IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290
CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMg
d2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8g
RW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9v
dC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJl
Y3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAt
IGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFn
ZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBk
b2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVu
dGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55
KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0
KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1h
Z2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Ig
cm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JS
ZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0
IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAg
IC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VR
KHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFn
ZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAg
ICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RE
YW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hp
bGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMg
aWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1h
Z2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhl
aWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3RE
YW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVk
IGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2Ug
ZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2Vk
IHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRh
bWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3RE
YW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisg
ICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJl
Y3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBp
cyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJv
b3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIENoaWxkcmVuJ3Mg
Y29udGVudCByZWN0cyBhcmUgYmlnZ2VyIHRoYW4gdGhlIHJvb3QncyBzbyB0aGV5IGRvbid0IGNs
aXAgdGhlIGRhbWFnZSByZWN0LCBidXQgY2hhbmdlIGl0cyBvZmZzZXQuCisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRS
ZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRo
KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJv
b3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFt
YWdlLmhlaWdodCgpKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Np
c3NvclJlY3RXaXRoQ2xpcCkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Nj
b3BlSXNPbkltcGxUaHJlYWQ7CisKKyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFz
IGZvbGxvd3M6CisKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAg
ICAgICAgIHwgIHwgICAgICAgICAyIHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0t
LS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwgICAzICAgICAgICAgICAgICAgfAorICAgICAgICAg
fCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAg
IHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIg
c3VyZmFjZXMKKyAgICAgKi8KKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwg
MTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVj
dCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7
CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0
LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJv
b3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAg
Y2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBj
aGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hp
bGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENo
aWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJv
dW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdo
dCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NM
YXllckltcGwqIGNoaWxkUHRyID0gY2hpbGQuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5k
Q2hpbGRQdHIgPSBncmFuZENoaWxkLmdldCgpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5k
Q2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOwor
CisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVy
SW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4g
bGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAg
ICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKworICAgICAgICAvKiBlbXB0eSBsaXN0ICovCisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAg
IEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVF
KHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHIt
PnJlbmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpLCAyVSk7CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8g
aXRzIGJvdW5kcworICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisK
KyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidz
IGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAw
LCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxk
UmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEFTU0VSVF9FUShncmFu
ZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIEFTU0VS
VF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworCisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0
byByb290J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJl
Y3QoKSwgcm9vdFJlY3QpOworICAgIAorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkp
OworICAgIAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9v
dERhbWFnZShyb290UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2Up
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7
CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJl
Y3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNo
aWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFz
IGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAg
ICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3Ig
cmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBj
aGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUg
c2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAgICAvLyBvZiBpdHMg
b3duCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gY2hpbGRSZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3RE
YW1hZ2UgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBy
b290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3Nvcgor
ICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCks
IEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAK
KyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxk
CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90
IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRp
cmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEo
Y2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFn
ZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIK
KyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAv
LyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVy
ZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRS
ZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAg
ICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNj
aXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0
LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCks
IHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBj
aGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJl
IG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8g
RW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3RE
YW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxh
eWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisg
ICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRp
ZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNo
aWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwor
CisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0
cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3Jh
bmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxk
UmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0
aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlv
bmQgcm9vdAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29y
cyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAg
ICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVu
dFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1
bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3Vu
ZGFyeQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJl
Y3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1h
Z2UueSgpKSk7CisgICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcs
IHNvIGl0cyBjb250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFn
ZQorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCBy
b290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0g
cm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKwor
ICAgIC8vIE5vdyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250
ZW50UmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0
LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9y
bSkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJl
YWQ7CisKKyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAg
ICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAg
ICAgICAyIHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICB8ICB8IHwgICAzLDQgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0t
LS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwg
ICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKworICAgICAgICAgTGF5ZXJzIDEsIDIgYW5kIDMgaGF2ZSByZW5kZXIgc3VyZmFjZXMK
KyAgICAgKi8KKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMyk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoNCk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAw
KTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBn
cmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0Lnko
KSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RS
ZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJ
bnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hp
bGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGls
ZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRS
ZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxk
UmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNp
dHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJl
Y3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEludFBvaW50
KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGls
ZDItPnNldE9wYWNpdHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5kcyhJbnRTaXpl
KGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAg
Z3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBj
aGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0g
Z3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQy
LnJlbGVhc2UoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsK
KyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFz
a3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBs
YXllclNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290
LmdldCgpKTsKKworICAgICAgICAvKiBlbXB0eSBsaXN0ICovCisgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAg
ICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9UUlVFKGNoaWxk
UHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDNVKTsK
KyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0byBpdHMgYm91bmRzCisgICAgQVNT
RVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKworICAgIEFTU0VSVF9FUShjaGls
ZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBjaGlsZFJlY3QueCgpICsgZ3JhbmRDaGls
ZFJlY3Qud2lkdGgoKSAsIGNoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkp
OworCisgICAgLy8gR3JhbmRjaGlsZCBub3cgY2xpcHMKKyAgICBBU1NFUlRfRVEoZ3JhbmRDaGls
ZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFu
ZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5o
ZWlnaHQoKSkpOworCisgICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBDaGlsZCBzdXJmYWNlJ3MgY2xp
cHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJvb3QncworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+
cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisgICAgCisgICAgQVNTRVJU
X1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxk
UHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0
ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUg
c2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Cisg
ICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUg
ZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAg
ICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91
bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3Vu
ZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgp
LCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNo
aWxkIGlzIG5vdyBzY2lzc29yZWQgYnkgdGhlIHJlbmRlciBzdXJmYWNlCisgICAgRVhQRUNUX0VR
KGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lk
dGgoKSAtIGNoaWxkUmVjdC54KCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdo
dCgpIC0gY2hpbGRSZWN0LnkoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIAorICAgIC8v
IEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBk
YW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVD
VF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFy
dGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEw
LCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAK
KyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VR
KHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290
IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSBy
ZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3Qo
KSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRo
ZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290
RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBub3cgZ2V0cyBzY2lzc29y
ZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFzIHdlbGwgYXMgcm9vdAorICAgIEVYUEVDVF9FUShn
cmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndp
ZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkgLSBncmFuZENo
aWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAorICAg
IHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21w
dXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRh
bWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwor
ICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBv
ZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55
KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8g
R3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3NvcmVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZSBhcyB3
ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0g
Y2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCBy
b290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBQYXJ0
aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwg
MTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAK
KyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VR
KHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0
LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFn
ZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQg
cm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFt
YWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWln
aHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2Ug
bGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVy
c2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3Qg
aXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNj
aXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290
UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERh
bWFnZS55KCkpKTsKKworICAgIC8vIE5vdyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBi
eSBzdXJmYWNlcyBjb250ZW50UmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCBy
b290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisKKyAgICAvLyBHcmFuZGNoaWxk
J3Mgc2Npc3NvciByZWN0IGlzIGNsaXBwZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlCisgICAgRVhQ
RUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RE
YW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAt
IGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworfQorCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZXBsaWNhKQogewogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTU0NCw3ICsxMTA1LDEw
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxp
c3RGb3JDbGlwTGF5ZXIpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1
cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsK
IAogICAgIC8vIFRoZSBjaGlsZCBsYXllcidzIGNvbnRlbnQgaXMgZW50aXJlbHkgb3V0c2lkZSB0
aGUgcGFyZW50J3MgY2xpcCByZWN0LCBzbyB0aGUgaW50ZXJtZWRpYXRlCiAgICAgLy8gcmVuZGVy
IHN1cmZhY2Ugc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkLiBSZW5kZXIgc3VyZmFjZXMgd2l0aG91
dCBjaGlsZHJlbiBvciB2aXNpYmxlCkBAIC01NzIsNyArMTEzNiw5IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxpc3RGb3JUcmFuc3BhcmVudENo
aWxkKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlz
dDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQu
Z2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCkpOwogCiAgICAgLy8gU2luY2UgdGhlIGxheWVyIGlzIHRyYW5zcGFyZW50LCBy
ZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpIHNob3VsZCBub3QgaGF2ZSBnb3R0ZW4gYWRk
ZWQgYW55d2hlcmUuCiAgICAgLy8gQWxzbywgdGhlIGRyYXdhYmxlIGNvbnRlbnQgcmVjdCBzaG91
bGQgbm90IGhhdmUgYmVlbiBleHRlbmRlZCBieSB0aGUgY2hpbGRyZW4uCkBAIC02MDAsMTQgKzEx
NjYsMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlGb3JjZVJlbmRl
clN1cmZhY2UpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKIAogICAgIEVYUEVDVF9UUlVFKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkp
OwogICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgMVUpOwogCiAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOwogICAgIHJlbmRlclN1cmZhY2UxLT5z
ZXRGb3JjZVJlbmRlclN1cmZhY2UoZmFsc2UpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKICAgICBFWFBF
Q1RfRkFMU0UocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAwVSk7CiB9CkBAIC02NjUsNyArMTIzMSwx
MSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNS
ZW5kZXJTdXJmYWNlcykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBGbG9hdFJl
Y3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKIAogICAgIEFTU0VSVF9FUSgyVSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOwpAQCAtNzI0LDcgKzEyOTQsOSBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJT
dXJmYWNlc0NyYXNoUmVwcm8pCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgp
KTsKIAogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwog
ICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlk
KCkpOwpAQCAtNzc1LDcgKzEzNDcsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50KQogICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBXaXRo
b3V0IGFuIGFuaW1hdGlvbiwgd2Ugc2hvdWxkIGN1bGwgY2hpbGQgYW5kIGdyYW5kQ2hpbGQgZnJv
bSB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4KICAgICBBU1NFUlRfRVEoMVUsIHJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKQEAgLTc5NCw3ICsxMzY2LDcgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNp
YmxlQ29udGVudCkKICAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOwogCiAgICAgLy8gV2l0aCBhbiBhbmltYXRpbmcgdHJhbnNmb3JtLCB3ZSBzaG91bGQga2Vl
cCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBpbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4KICAg
ICBBU1NFUlRfRVEoM1UsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKQEAgLTg1NCw3
ICsxNDI2LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJl
Y3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJl
bnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCkt
PmNvbnRlbnRSZWN0KCkpOworCiAKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+Y2xpcFJlY3QoKSk7
CiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCkpOwpAQCAtOTI2LDcgKzE1MDEsOSBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdh
dGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRS
ZWN0KCkpOwogCiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7
CiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNDA3
LDcgKzE5ODQsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tG
YWNlQ3VsbGluZ1dpdGhvdXRQcmVzZXJ2ZXMzZCkKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQu
Z2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CiAKICAgICAvLyBWZXJpZnkgd2hpY2ggcmVuZGVyU3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAg
IEVYUEVDVF9GQUxTRShmcm9udEZhY2luZ0NoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTUx
Miw3ICsyMDg5LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNr
RmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2QpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwog
CiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBF
WFBFQ1RfRkFMU0UoZnJvbnRGYWNpbmdDaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE1OTcs
NyArMjE3NCw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0Zh
Y2VDdWxsaW5nV2l0aEFuaW1hdGluZ1RyYW5zZm9ybXMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
LT5jb250ZW50UmVjdCgpKTsKIAogICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpKTsKICAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdTdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCkp
OwpAQCAtMTY2OSw3ICsyMjQ4LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2RGb3JGbGF0dGVuaW4KICAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAK
LSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJpZnkgd2hpY2ggcmVuZGVyU3VyZmFjZXMg
d2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9UUlVFKGZyb250RmFjaW5nU3VyZmFjZS0+cmVuZGVy
U3VyZmFjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggOTFjMmQxZGZmMTIxMjc5YTdjNzQ2MDcw
YzVjYmRjMjIyNGYyYjY1YS4uNmUyNjFkOGU2M2RlODk3MWM2NjA5YTMyM2M5Nzc5YzQzM2UzZWNh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM2LDEwICszNiwxMiBAQAogI2luY2x1ZGUgImNjL0ND
UXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xv
ckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgorI2luY2x1ZGUgPGdtb2NrL2dtb2Nr
Lmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9G
cmFtZS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4KQEAgLTQ5
LDYgKzUxLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAordXNpbmcgOjp0ZXN0aW5nOjpN
b2NrOwordXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJl
cjsKK3VzaW5nIDo6dGVzdGluZzo6XzsKKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCwgcHVibGljIENDTGF5ZXJUcmVl
SG9zdEltcGxDbGllbnQgewpAQCAtNzAsNiArNzcsMjggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJ
REUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RTZXRDb250ZW50c01lbW9yeUFsbG9jYXRpb25M
aW1pdEJ5dGVzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKHNpemVfdCkgT1ZFUlJJREUgeyB9CiAK
KyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3Qo
Ym9vbCBwYXJ0aWFsU3dhcCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3ND
b250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByb290UHRyKQorICAgIHsKKyAgICAgICAg
Q0NTZXR0aW5ncyBzZXR0aW5nczsKKworICAgICAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJs
ZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgICAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4g
bXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0aW5ncywgdGhpcyk7
CisKKyAgICAgICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoZ3JhcGhpY3ND
b250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gcm9vdFB0cjsKKworICAgICAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7
CisgICAgICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgICAgICByb290
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7CisgICAgICAgIHJv
b3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIG15SG9zdEltcGwucmVsZWFzZSgp
OworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIGV4cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1
cnNpdmUoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHsKICAgICAgICAgQVNTRVJUX0VRKGxheWVy
LT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKCkpOwpAQCAtMTA5OSw2ICsxMTI4LDM0MCBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwUmVjZWl2ZXNEYW1hZ2VSZWN0
KQogICAgIEVYUEVDVF9FUShleHBlY3RlZFN3YXBSZWN0LmhlaWdodCgpLCBhY3R1YWxTd2FwUmVj
dC5oZWlnaHQoKSk7CiB9CiAKK2NsYXNzIEZha2VMYXllcldpdGhRdWFkcyA6IHB1YmxpYyBDQ0xh
eWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RmFrZUxheWVyV2l0aFF1
YWRzPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUxheWVyV2l0aFF1
YWRzKGlkKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXIm
IHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29s
JikgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGNvbnN0IENvbG9yIGdyYXkoMTAwLCAxMDAsIDEw
MCk7CisgICAgICAgIEludFJlY3QgcXVhZFJlY3QoMCwgMCwgNSwgNSk7CisgICAgICAgIE93blB0
cjxDQ0RyYXdRdWFkPiBteVF1YWQgPSBDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGdyYXkpOworICAgICAgICBxdWFkTGlzdC5hcHBlbmQobXlR
dWFkLnJlbGVhc2UoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZha2VMYXllcldpdGhRdWFk
cyhpbnQgaWQpCisgICAgICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgeworICAgIH0KK307CisK
K2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7Citw
dWJsaWM6CisgICAgTU9DS19NRVRIT0QxKHVzZVByb2dyYW0sIHZvaWQoV2ViR0xJZCBwcm9ncmFt
KSk7CisgICAgTU9DS19NRVRIT0Q1KHVuaWZvcm00Ziwgdm9pZChXR0MzRGludCBsb2NhdGlvbiwg
V0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSk7
CisgICAgTU9DS19NRVRIT0Q0KHVuaWZvcm1NYXRyaXg0ZnYsIHZvaWQoV0dDM0RpbnQgbG9jYXRp
b24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNE
ZmxvYXQqIHZhbHVlKSk7CisgICAgTU9DS19NRVRIT0Q0KGRyYXdFbGVtZW50cywgdm9pZChXR0Mz
RGVudW0gbW9kZSwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0RlbnVtIHR5cGUsIFdHQzNEaW50cHRy
IG9mZnNldCkpOworICAgIE1PQ0tfTUVUSE9EMShnZXRTdHJpbmcsIFdlYlN0cmluZyhXR0MzRGVu
dW0gbmFtZSkpOworICAgIE1PQ0tfTUVUSE9EMChnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJP
TUlVTSwgV2ViU3RyaW5nKCkpOworICAgIE1PQ0tfTUVUSE9EMShlbmFibGUsIHZvaWQoV0dDM0Rl
bnVtIGNhcCkpOworICAgIE1PQ0tfTUVUSE9ENChzY2lzc29yLCB2b2lkKFdHQzNEaW50IHgsIFdH
QzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0KSk7Cit9OworCitj
bGFzcyBNb2NrQ29udGV4dEhhcm5lc3MgeworcHJpdmF0ZToKKyAgICBNb2NrQ29udGV4dCogbV9j
b250ZXh0OworcHVibGljOgorICAgIE1vY2tDb250ZXh0SGFybmVzcyhNb2NrQ29udGV4dCogY29u
dGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgICAgIC8vIENh
dGNoICJ1bmludGVyZXN0aW5nIiBjYWxscworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCB1c2VQcm9ncmFtKF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAgIEVYUEVD
VF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhfLCBfLCBfLCBfKSkKKyAgICAgICAgICAg
IC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3JtTWF0
cml4NGZ2KF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAgIEVY
UEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm00ZihfLCBfLCBfLCBfLCBfKSkKKyAgICAgICAg
ICAgIC5UaW1lcygwKTsKKworICAgICAgICAvLyBBbnkgb3RoZXIgc3RyaW5ncyBhcmUgZW1wdHkK
KyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0U3RyaW5nKF8pKQorICAgICAgICAg
ICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoKSkpOworCisgICAgICAgIC8vIFN1
cHBvcnQgZm9yIHBhcnRpYWwgc3dhcCwgaWYgbmVlZGVkCisgICAgICAgIEVYUEVDVF9DQUxMKCpt
X2NvbnRleHQsIGdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6RVhURU5TSU9OUykpCisgICAg
ICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9z
dF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBnZXRS
ZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpKQorICAgICAgICAgICAgLldpbGxSZXBlYXRl
ZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpKSk7CisK
KyAgICAgICAgLy8gQW55IHVuLXNhbmN0aW9uZWQgY2FsbHMgdG8gZW5hYmxlKCkgYXJlIE9LCisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGVuYWJsZShfKSkKKyAgICAgICAgICAgIC5X
aWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisgICAgfQorCisgICAgdm9pZCBtdXN0RHJhd1NvbGlk
UXVhZCgpCisgICAgeworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBkcmF3RWxlbWVu
dHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JULCAwKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAg
ICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICAgICAgLy8gMCBpcyB0aGUgaGFy
ZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRVbmlmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gMSBp
cyBjb3VudCA/Pz8KKyAgICAgICAgLy8gQm9vbGVhbiBjYXN0IHRvIHN0cj8/CisgICAgICAgIC8v
IGZsb2F0KiB2YWx1ZXMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybU1h
dHJpeDRmdigwLCAxLCBfLCBfKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAg
ICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICAgICAgLy8gMCBpcyB0aGUg
aGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRVbmlmb3JtTG9jYXRpb24KKyAgICAgICAgLy8g
MyBmbG9hdHMgYXJlIGNvbG9yIC8gMjU1CisgICAgICAgIC8vIDEgaXMgQWxwaGEKKyAgICAgICAg
RVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybTRmKDAsIF8sIF8sIF8sIDEpKQorICAgICAg
ICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRp
b24oKTsKKyAgICAgICAgCisgICAgICAgIC8vIDEgaXMgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBv
ZiBmYWtlIGNyZWF0ZVByb2dyYW0oKQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1
c2VQcm9ncmFtKDEpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAg
ICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgIH0KKworICAgIHZvaWQgbXVzdFNldFNj
aXNzb3IoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgeworICAgICAg
ICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBlbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAu
UmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQs
IHNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0
dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworICAgIH0KKworfTsK
KworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub1BhcnRpYWxTd2FwKQoreworICAg
IC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4dCgpKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBNb2NrQ29udGV4
dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQqPihHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7
CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250ZXh0KTsKKworICAgIC8v
IENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7Cisg
ICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworCisgICAgLy8gUnVuIHRl
c3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gY3Jl
YXRlTGF5ZXJUcmVlSG9zdChmYWxzZSwgY29udGV4dCwgRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVh
dGUoMSkpOworCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAg
IEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0Nv
bnRleHQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2Fw
KQoreworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4dCgp
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBN
b2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQqPihHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0
LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250ZXh0KTsK
KworICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRR
dWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAgIGhh
cm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNh
c2UKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxh
eWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwgRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkp
OworCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIEVYUEVD
VF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBs
LT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQp
OworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwTm9VcGRh
dGUpCit7CisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhpY3MgY29udGV4dAorICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDb250ZXh0
KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAg
IE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRl
eHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFybmVzcygmbW9ja0NvbnRleHQp
OworCisgICAgLy8gQ29uZmlndXJlIHRlc3QgY2FzZQorICAgIGhhcm5lc3MubXVzdERyYXdTb2xp
ZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDgsIDIsIDIpOworICAgIGhh
cm5lc3MubXVzdFNldFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0RHJhd1Nv
bGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKyAg
ICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4gdGVz
dCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVh
dGVMYXllclRyZWVIb3N0KHRydWUsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRl
KDEpKTsKKyAgICAKKyAgICAvLyBEcmF3IG9uY2UgdG8gbWFrZSBzdXJlIGxheWVyIGlzIG5vdCBu
ZXcKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNU
X1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwt
PmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJh
bWUpOworCisgICAgLy8gR2VuZXJhdGUgdXBkYXRlIGluIGxheWVyCisgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBteUhvc3RJbXBsLT5yb290TGF5ZXIoKTsKKyAgICByb290LT5zZXRVcGRhdGVSZWN0
KEZsb2F0UmVjdCgwLCAwLCAyLCAyKSk7CisKKyAgICAvLyBUaGlzIGRyYXcgc2hvdWxkIGdlbmVy
YXRlIG5vdyBuZXcgdWRwYXRlcworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVU
b0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBt
eUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK2NsYXNzIFBhcnRpYWxTd2Fw
Q29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAg
V2ViU3RyaW5nIGdldFN0cmluZyhXR0MzRGVudW0gbmFtZSkKKyAgICB7CisgICAgICAgIGlmIChu
YW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKQorICAgICAgICAgICAgcmV0dXJu
IFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIik7CisgICAgICAgIHJldHVy
biBXZWJTdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgV2ViU3RyaW5nIGdldFJlcXVlc3RhYmxl
RXh0ZW5zaW9uc0NIUk9NSVVNKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoIkdM
X0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpOworICAgIH0KK307CisKK3N0YXRpYyBQYXNzT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IHNldHVwTGF5ZXJzRm9yT3BhY2l0eShib29sIHBhcnRp
YWxTd2FwLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCit7CisgICAgQ0NTZXR0
aW5ncyBzZXR0aW5nczsKKyAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSB0cnVlOwor
CisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhpY3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IFBhcnRpYWxTd2FwQ29udGV4
dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAg
ICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNyZWF0ZShzZXR0aW5ncywgY2xpZW50KTsKKyAgICBteUhvc3RJbXBsLT5pbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7
CisgICAgbXlIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAwLCAxMDApKTsKKwor
ICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAor
ICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIg
fCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwg
IHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0t
LS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
CisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVh
dGUoMyk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRS
ZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVj
dCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJv
b3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgp
KSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChyb290UmVjdCk7CisgICAgcm9vdC0+
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCBy
b290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3Qu
eCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAg
Y2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVp
Z2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChjaGlsZFJlY3QpOworICAg
IGNoaWxkLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24o
SW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBn
cmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFu
ZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldFZpc2libGVMYXllclJl
Y3QoZ3JhbmRDaGlsZFJlY3QpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIG15SG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIG15SG9zdEltcGwucmVsZWFzZSgpOwor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1w
dHlTY2lzc29yUGFydGlhbFN3YXApCit7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG15SG9zdEltcGwgPSBzZXR1cExheWVyc0Zvck9wYWNpdHkodHJ1ZSwgdGhpcyk7CisKKyAgICB7
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAg
RVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAgICAg
IC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBhbHJl
YWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAg
ICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAvLyBW
ZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAorICAgICAgICBBU1NFUlRfRVEoMlUs
IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1l
LnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEo
MVUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBF
WFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5x
dWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6
OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0
ZXJpYWwoKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNv
bnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29yTm9QYXJ0aWFsU3dhcCkKK3sKKyAgICBPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IHNldHVwTGF5ZXJzRm9yT3BhY2l0eShm
YWxzZSwgdGhpcyk7CisKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1l
RGF0YSBmcmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJh
dyhmcmFtZSkpOworCisgICAgICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBp
bnRlcmVzdGluZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRy
YXdMYXllcnMoZnJhbWUpOworICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKKworICAgICAgICAvLyBWZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAor
ICAgICAgICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAg
ICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkp
OworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3Qo
KS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJh
bWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sx
XS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHF1YWRzVG9GaWxsU2NyZWVuKQoreworICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KHRydWUs
IHRoaXMpOworCisgICAgLy8gVGhpcyB3aWxsIGNhdXNlIENDTGF5ZXJUcmVlSG9zdEltcGwgdG8g
YWRkIHF1YWRzIHRvIGZpbGwgc2NyZWVuCisgICAgbXlIb3N0SW1wbC0+c2V0QmFja2dyb3VuZENv
bG9yKENvbG9yKDI1NSwgMCwgMCkpOworCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnBy
ZXBhcmVUb0RyYXcoZnJhbWUpKTsKKworICAgICAgICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwg
dGhlIG1vc3QgaW50ZXJlc3Rpbmcgc3R1ZmYgYWxyZWFkeSBoYXBwZW5lZAorICAgICAgICBteUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0Fs
bExheWVycyhmcmFtZSk7CisKKyAgICAgICAgLy8gVmVyaWZ5IGFsbCBxdWFkcyBoYXZlIGJlZW4g
Y29tcHV0ZWQKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgp
KTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0
KCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0t
PnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlk
Q29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7
CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBmcmFtZS5yZW5k
ZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlz
dCgpWzFdLT5tYXRlcmlhbCgpKTsKKyAgICB9Cit9CisKIC8vIE1ha2Ugc3VyZSB0aGF0IGNvbnRl
eHQgbG9zdCBub3RpZmljYXRpb25zIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIHRyZWUuCiBj
bGFzcyBDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXIgOiBwdWJsaWMgQ0NMYXllcklt
cGwgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKaW5kZXggNDRjNjJlM2UzYzVjODgyOTE0MGQ0MTEx
NTNlMGFlNDlhNWY3NzA0NS4uZDJmNzIxOGYzNjA1NzVkZTFhM2Q0ZjY0YjY5ZTY0Zjc1MmQ5MGMy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRy
YWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwCkBAIC0yNjUsNyArMjY1LDEwIEBAIHByb3RlY3RlZDoKICAgICAg
ICAgcm9vdC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3Vu
ZHMoKSkpOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZChtX3Jv
b3QuZ2V0KCkpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3Qs
IDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3Qs
IDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxp
c3RJbXBsLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAg
IG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRl
cmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsKTsKICAgICB9CiAKQEAg
LTI4MSw3ICsyODQsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICByb290LT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLmFwcGVuZChtX3Jvb3QpOwogCi0gICAgICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0Q2hyb21pdW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdENocm9taXVtLCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLCByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9
IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3Jl
bmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA3ZGFj
MDA1ZDI0Y2FmYWNjMjcxYjg2YWQ1ZmRlMzg1NjZkMGJkODc0Li45ZDhkMTlmNzIzODM0ZDQ0MTQ1
OWM1NzgzYjk0OTZhZmIxNWNlOWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAgLTExMiwxNSArMTEyLDE2IEBAIFRF
U1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgc2FuaXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0NvcnJlY3RT
aGFyZWRRdWFkU3RhdGUpCiAgICAgcmVuZGVyU3VyZmFjZS0+c2V0T3JpZ2luVHJhbnNmb3JtKG9y
aWdpbik7CiAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3QoY29udGVudFJlY3QpOwog
ICAgIHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KGNsaXBSZWN0KTsKKyAgICByZW5kZXJTdXJm
YWNlLT5zZXRTY2lzc29yUmVjdChjbGlwUmVjdCk7CiAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJh
d09wYWNpdHkoMSk7Ci0KKyAgICAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJl
ZFF1YWRTdGF0ZSA9IHJlbmRlclN1cmZhY2UtPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogCiAg
ICAgRVhQRUNUX1RSVUUoc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCkuaXNJZGVudGl0
eSgpKTsKICAgICBFWFBFQ1RfRVEoMzAsIHNoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0o
KS5tNDEoKSk7CiAgICAgRVhQRUNUX0VRKDQwLCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNm
b3JtKCkubTQyKCkpOwogICAgIEVYUEVDVF9FUShjb250ZW50UmVjdCwgc2hhcmVkUXVhZFN0YXRl
LT5sYXllclJlY3QoKSk7Ci0gICAgRVhQRUNUX0VRKGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUt
PmNsaXBSZWN0KCkpOworICAgIEVYUEVDVF9FUShjbGlwUmVjdCwgc2hhcmVkUXVhZFN0YXRlLT5z
Y2lzc29yUmVjdCgpKTsKICAgICBFWFBFQ1RfRVEoMSwgc2hhcmVkUXVhZFN0YXRlLT5vcGFjaXR5
KCkpOwogICAgIEVYUEVDVF9GQUxTRShzaGFyZWRRdWFkU3RhdGUtPmlzT3BhcXVlKCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144892</attachid>
            <date>2012-05-30 12:18:40 -0700</date>
            <delta_ts>2012-05-30 13:25:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120530151839.patch</filename>
            <type>text/plain</type>
            <size>118018</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4OTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2UwMmE2Nzc3MTJhZTY2
NjkxZjBjOGYxNWZmMDU4OTA2NTk3MGRhZC4uNTFkODkwZTY0YmIyNGQ2MWY5ZWQ5ZmI0ZmM0OTk4
YWRkYzk4NjEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTA1LTMwICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNz
b3JSZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyc0FuZFNjaXNzb3JSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RDb21tb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRy
ZWVIb3N0SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBwZW5kUXVh
ZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVk
UXVhZFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaDoKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyU3VyZmFjZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5oOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOgorICAgICAgICAo
Q0NTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6
OnNjaXNzb3JSZWN0KToKKwogMjAxMi0wNS0zMCAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxs
YW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFN1cHBvcnQgSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HIGZsYWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDNkYjk4
ZjdmMDk4ODVlNzdlM2VmNmRkM2E4ZjJlMTMxMTdiZDM4YTkuLjQ0MDc5MTkyMmRiYjg3ODRkOWMz
ZGJiODczZjMyNTAwZTI0NTZiN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjkgQEAKKzIwMTItMDUtMzAgIFplZXYgTGllYmVyICA8emxpZWJlckBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBDbGVhbnVwIHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbi91
c2Ugd2l0aCBkYW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg3MTY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgdW5pdCB0ZXN0cyB0byBDQ0xheWVyVHJlZUhvc3RJbXBsIHVzaW5nIG1vY2sg
Z3JhcGhpYyBjb250ZXh0CisgICAgICAgIHRvIHZlcmlmeSBlbmQtdG8tZW5kIHF1YWQgZHJhd2lu
Zy4KKworICAgICAgICBBZGRlZCBtb3JlIHRlc3QgY2FzZXMgdG8gQ0NMYXllclRyZWVIb3N0Q29t
bW9uIHRvIHZlcmlmeSBjbGlwIGFuZAorICAgICAgICBzY2lzc29yIHJlY3QgY29tcHV0YXRpb25z
LgorCisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6
CisgICAgICAgICogdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6CisgICAgICAgICogdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgICogdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJh
Y2tlclRlc3Q6OmNhbGNEcmF3RXRjKToKKyAgICAgICAgKiB0ZXN0cy9DQ1JlbmRlclN1cmZhY2VU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTA1LTMwICBKb2NoZW4g
RWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1hdGNoIEZpcmVmb3gg
cmVzdHJpY3Rpb25zIHRvIHdpbmRvdy5ibHVyIGFuZCB3aW5kb3cuZm9jdXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAppbmRleCA5YmUwMjc5ZTJhZWJjZDdjZGM3YzY4YmQwMjVlYmUwODQxYzE3NWQzLi45MTJm
ODY1Njg2NmYyZTliMWY3ZDI2NWFmYWViZGI1NjY2Y2IwNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC0xMzksNiArMTM5LDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3QmIHZpc2libGVM
YXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVMYXllclJlY3Q7IH0KICAgICB2b2lk
IHNldFZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkgeyBt
X3Zpc2libGVMYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0OyB9CiAKKyAgICBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2
b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1fc2Npc3Nv
clJlY3QgPSBzY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYpOwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KIApAQCAtMzA2LDcgKzMwOSwxNSBAQCBwcml2
YXRlOgogCiAgICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwor
CisgICAgLy8gVXNlcyBsYXllcidzIGNvbnRlbnQgc3BhY2UuCiAgICAgSW50UmVjdCBtX3Zpc2li
bGVMYXllclJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVn
aW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gQ3Vy
cmVudGx5IHRoaXMgaXMgc2V0IHRvIGxheWVyJ3MgY2xpcFJlY3QgaWYgdXNlc0xheWVyQ2xpcHBp
bmcgaXMgdHJ1ZSwgb3RoZXJ3aXNlCisgICAgLy8gaXQncyB0YXJnZXRSZW5kZXJTdXJmYWNlJ3Mg
Y29udGVudFJlY3QuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgorICAgIElu
dFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogICAg
IGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIGJvb2wgbV9zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQ7
CkBAIC0zNDQsMTIgKzM1NSwxNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxSZW5kZXJTdXJmYWNl
Q2hyb21pdW0+IG1fcmVuZGVyU3VyZmFjZTsKICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwogICAg
IGJvb2wgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nOworCisgICAgLy8gVXNlcyB0YXJnZXQgc3Vy
ZmFjZSBzcGFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2NyZWVuU3BhY2VU
cmFuc2Zvcm07CiAgICAgYm9vbCBtX2RyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsKICAgICBib29s
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0FuaW1hdGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0
IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAg
ZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAppbmRleCBhOWYzZDQ2NjVkMzZlNTI4ZDNmZTNmYzkxYzg2MDI1ZjRlOWE4N2VkLi42ZWQy
MjEzNDM1NWFhZWQ5NzYxNTFjYzJmMTQ5ZTBkNzk3YzdmYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
ID0gMDsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFj
ZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9vdFJl
bmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlU3dhcFJlY3QpCiB7CiAgICAgLy8gTm9uLXJvb3QgbGF5ZXJzIHNo
b3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29udGVudHMgdG8gdHJhbnNwYXJlbnQuIE9uIERFQlVH
IGJ1aWxkcywgdGhlIHJvb3QgbGF5ZXIKICAgICAvLyBpcyBjbGVhcmVkIHRvIGJsdWUgdG8gZWFz
aWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhlIHNjcmVlbi4gSWYgd2UK
QEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQwogICAgICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwgMSkpOwogCiAgICAgaWYg
KG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldFNjaXNzb3JUb1Jl
Y3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOworICAgICAgICBzZXRTY2lz
c29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZVN3YXBSZWN0KSk7CiAgICAgZWxzZQog
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCkpOwogCkBAIC00NDgsMzYgKzQ0OCwyNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZG9Ob09wKCkKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZs
dXNoKCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3Mo
Y29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlU3dhcFJlY3QpCiB7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5k
ZXJTdXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlmICghdXNlUmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJS
ZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJlbmRl
clBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIGNsZWFyUmVuZGVyU3VyZmFjZShyZW5k
ZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCBzdXJmYWNlU3dhcFJlY3QpOwogCiAg
ICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwog
ICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVhZExp
c3QuYmFja1RvRnJvbnRCZWdpbigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyAr
K2l0KQotICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCksIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1h
Z2VSZWN0KCkpOworICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCkpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogewotICAgIEludFJlY3Qgc2Npc3Nv
clJlY3Q7Ci0gICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKLSAgICAg
ICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0ID0gc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAg
ICAgIGlmICghcXVhZC0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGlwQW5k
RGFtYWdlUmVjdC5pbnRlcnNlY3QocXVhZC0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgIHNjaXNzb3JS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCk7Ci0gICAgICAgIGlmIChz
Y2lzc29yUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNjaXNzb3JSZWN0ID0gcXVhZC0+Y2xpcFJlY3QoKTsKLQorICAgIEludFJlY3Qgc2Np
c3NvclJlY3QgPSBxdWFkLT5zY2lzc29yUmVjdCgpOwogICAgIGlmIChzY2lzc29yUmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRTY2lzc29y
VG9SZWN0KHNjaXNzb3JSZWN0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2Npc3NvclRv
UmVjdChzY2lzc29yUmVjdCk7CiAKICAgICBpZiAocXVhZC0+bmVlZHNCbGVuZGluZygpKQogICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpKTsKQEAgLTYyOSw3ICs2MTksOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKgogCiAg
ICAgZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQpOwogCi0gICAgbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+c3VyZmFjZURhbWFnZVJlY3QoKSk7Cisg
ICAgc2V0U2Npc3NvclRvUmVjdChxdWFkLT5zY2lzc29yUmVjdCgpKTsKKwogICAgIGlmIChxdWFk
LT5pc1JlcGxpY2EoKSkKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhd1JlcGxp
Y2EodGhpcyk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRl
eCAxYTJlYmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYzMDE0NzJjOTU5Li5iM2U4NDlmZWUxOWY1
MTJhMDg1M2I2ZTYwYTE2NTIyMTBiYjc1ODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3cG9ydENoYW5n
ZWQoKTsKIAogICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoQ0NSZW5kZXJTdXJmYWNlKiBkZWZh
dWx0UmVuZGVyU3VyZmFjZSk7Ci0gICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRl
clBhc3MqKTsKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyosIGNv
bnN0IEZsb2F0UmVjdCYgc3VyZmFjZVN3YXBSZWN0KTsKICAgICB2b2lkIGZpbmlzaERyYXdpbmdG
cmFtZSgpOwogCiAgICAgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqLCBj
b25zdCBJbnRTaXplJiBodWRTaXplKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwcml2YXRlOgogICAg
IGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkud2lkdGgoKTsgfQog
ICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgp
OyB9CiAKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1
YWQqKTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJk
RHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgK
aW5kZXggMGVhNDhhZDEzOTllZGE4NWE3NWFjNzE0MzVlMGU0MTFhY2VkNzU1MC4uYTc3ZWIxZTc4
ZDU5MGMzZTc4ZjA1NzA0MWQ5NmNjMmYyMTUwZTIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xp
cFJlY3QoY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9
CiAKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Np
c3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRG
aWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2Zp
bHRlcnMgPSBmaWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAKQEAgLTExOSw2ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7CiAgICAgTGF5
ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRoaXMgc3VyZmFjZSdzIHNw
YWNlLgogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc2tpcHNEcmF3Owog
CkBAIC0xMzQsNyArMTM4LDE2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NjcmVlblNwYWNlVHJh
bnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9m
aWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0
ZXJzOworCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3Vy
ZmFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywg
aWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUg
ZHJhd24uCisgICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgc2V0IHRvIGxheWVyJ3MgY2xpcFJlY3Qg
aWYgdXNlc0xheWVyQ2xpcHBpbmcgaXMgdHJ1ZSwgb3RoZXJ3aXNlCisgICAgLy8gaXQncyB0YXJn
ZXRSZW5kZXJTdXJmYWNlJ3MgY29udGVudFJlY3QuCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2Yg
dGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7
CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9sYXllckxpc3Q7CiAKICAg
ICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZSB0aGF0IHdpbGwgY29udGFp
biB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNlLCBhbmQgdGhhdCBpcyBnb2luZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3
UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
cmF3UXVhZC5oCmluZGV4IGY0ZWYyZDNmMjFjMWZhZTU3NjY2M2NkMzIyZmNiMTI3Yjg3Y2JmZWIu
LjcxODExMmJjNmYxOTE3MjYzMDkzMmU0ZTViYTJjNDBjM2MzYzkyYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUt
PnF1YWRUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXll
clRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5z
Zm9ybSgpOyB9CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKTsgfQor
ICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPnNjaXNzb3JSZWN0KCk7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKTsgfQogICAgIC8vIEZvciB0aGUgcHVy
cG9zZXMgb2YgYmxlbmRpbmcsIHdoYXQgcGFydCBvZiB0aGUgY29udGVudHMgb2YgdGhpcyBxdWFk
IGFyZSBvcGFxdWU/CiAgICAgSW50UmVjdCBvcGFxdWVSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKaW5kZXggNmQ4MDY4NGY2NjRmMDI1ZGY1MzZhNzBlZWRmZDQ0NWJmYjgzNDRm
NC4uYTk0ODVjNTM4NDg3ZjUyM2FhNWUyODI5MThmZmZlODBlYzc1Zjk5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcApAQCAtMTM3LDEwICsxMzcsNyBAQCBib29sIENDTGF5ZXJJbXBsOjpkZXNj
ZW5kYW50RHJhd3NDb250ZW50KCkKIAogUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NM
YXllckltcGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBs
YXllckNsaXBSZWN0OwotICAgIGlmICh1c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXll
ckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsKLSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNy
ZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVjdCgp
LCBsYXllckNsaXBSZWN0LCBkcmF3T3BhY2l0eSgpLCBvcGFxdWUoKSk7CisgICAgcmV0dXJuIEND
U2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCks
IHZpc2libGVMYXllclJlY3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgb3BhcXVl
KCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmI3NWE4OWViYWQzZjVhYWEzOTg1MmQ0NGQ5
ODRhODIxMTliOTZmMC4uOTI5MzYxNmUzZjM0Yjc0OTQ3Mjg4ZmU3OTYzZTE5NzNmOGE2MzYzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjMsNiArMTYzLDEwIEBAIHB1YmxpYzoKICAgICAv
LyBVc2FnZTogaWYgdGhpcy0+dXNlc0xheWVyQ2xpcHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlz
IGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4KICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2b2lkIHNldENsaXBSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9jbGlwUmVjdCA9IHJlY3Q7IH0KKworICAgIGNvbnN0IElu
dFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAg
IHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0
ID0gcmVjdDsgfQorCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CiAgICAgdm9pZCBzZXRUYXJn
ZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSkgeyBtX3RhcmdldFJlbmRl
clN1cmZhY2UgPSBzdXJmYWNlOyB9CiAKQEAgLTI5Nyw2ICszMDEsNyBAQCBwcml2YXRlOgogICAg
IC8vIFRyYWNrcyBpZiBkcmF3aW5nLXJlbGF0ZWQgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQgc2lu
Y2UgbGFzdCByZWRyYXcuCiAgICAgYm9vbCBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOwogCisgICAg
Ly8gVXNlcyBsYXllcidzIGNvbnRlbnQgc3BhY2UuCiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXll
clJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKQEAg
LTM1MSwxNyArMzU2LDI0IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHJlY3QgdGhhdCBjb250cmli
dXRlcyB0byB0aGUgc2Npc3NvciB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJhd24uCiAgICAgLy8gSW5o
ZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlz
IGxheWVyIG1hc2tzCiAgICAgLy8gdG8gYm91bmRzLgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZh
Y2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAKKyAgICAvLyBEdXJpbmcgZHJh
d2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91
bGQgYmUgZHJhd24uCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgorICAgIElu
dFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAgIC8vIFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cwogICAgIC8vIHdp
bGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KICAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlPiBt
X3JlbmRlclN1cmZhY2U7CiAKICAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250
YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLgorICAgIC8vIFVzZXMgdGFyZ2V0
IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKIAog
ICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZCBkdXJpbmcg
dXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBwbHVnaW4gbGF5ZXJzIGJ5cGFzcyB0aGlzIGFuZCBs
ZWF2ZSBpdCBlbXB0eS4KKyAgICAvLyBVc2VzIGxheWVyJ3MgY29udGVudCBzcGFjZS4KICAgICBG
bG9hdFJlY3QgbV91cGRhdGVSZWN0OwogCiAgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZvciB0
aGlzIGxheWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggOTYzOTdjYTQ1
YzQyMTY0OTVhY2ZiOGEwN2U0YjZhMGExNTk5MDFhYy4uYzJlNTY0NjY3Y2UyZWQ4MmY1MWUxYTIz
YTBjOTljMmQ5N2Q0MDIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01
MTQsNyArNTE0LDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyLCBDQ1RleHR1cmVVcGRhdGVyJiB1CiAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkZXZpY2VTY2FsZVRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2Nh
bGUobV9zZXR0aW5ncy5kZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwg
cm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxp
c3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllciwgZGV2aWNlU2NhbGVU
cmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCB1cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7
CisKKyAgICAgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZp
ZXdwb3J0U2l6ZSgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHVwZGF0ZUxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKICAgICB9
CiAKICAgICAvLyBSZXNldCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJlcXVlc3RzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggMmEwZjcxODAzOTIyMjZm
NWU0YTI4MDc5MjhhZjU3ZjQ1NmVhZjY4OC4uM2Y4ODBlMTAwYzY1ZDgyZTU0Yjc3ZWNkZTg4Zjc3
MjJiZDU2NGJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CkBAIC02NSw2ICs2NSw0NSBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIHJldHVybiBs
YXllclJlY3Q7CiB9CiAKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3Qo
Q0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQorewor
ICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2Uo
KTsKKyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IENDTWF0aFV0aWw6OnByb2plY3RDbGlw
cGVkUmVjdChpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJvb3REYW1hZ2VSZWN0KTsKKwor
ICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcEFuZERhbWFn
ZS5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2xpcEFu
ZERhbWFnZS5pbnRlcnNlY3QocmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKworc3RhdGljIEludFJl
Y3QgY2FsY3VsYXRlTGF5ZXJTY2lzc29yUmVjdChMYXllckNocm9taXVtKiBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNs
aXBwaW5nKCkpCisgICAgICAgIHJldHVybiBsYXllci0+Y2xpcFJlY3QoKTsKKyAgICByZXR1cm4g
bGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3N0YXRp
YyBJbnRSZWN0IGNhbGN1bGF0ZVN1cmZhY2VTY2lzc29yUmVjdChMYXllclR5cGUqIGxheWVyLCBj
b25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQoreworICAgIExheWVyVHlwZSogcGFyZW50
TGF5ZXIgPSBsYXllci0+cGFyZW50KCk7CisgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFN1
cmZhY2UgPSBwYXJlbnRMYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworICAgIFJlbmRlclN1
cmZhY2VUeXBlKiBzdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBGbG9hdFJl
Y3QgY2xpcFJlY3QgPSBzdXJmYWNlLT5jbGlwUmVjdCgpOworICAgIGlmIChjbGlwUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIGNsaXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1cmZhY2UtPmNv
bnRlbnRSZWN0KCksIHN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB0YXJnZXRTdXJm
YWNlLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICBGbG9hdFJlY3QgcmVz
dWx0ID0gQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VTY3JlZW5TcGFjZVRy
YW5zZm9ybSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgcmVzdWx0LmludGVyc2VjdChjbGlwUmVj
dCk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIGxheWVySXNJbkV4aXN0aW5n
M0RSZW5kZXJpbmdDb250ZXh0KExheWVyVHlwZSogbGF5ZXIpCiB7CkBAIC0yODIsNyArMzIxLDcg
QEAgc3RhdGljIGJvb2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVy
VHlwZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWcKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXll
ciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAv
LyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNlcywg
ZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KLXN0YXRpYyBi
b29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlw
ZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNo
eU1hdHJpeCwgUmVuZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVs
cywgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlz
dCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCitzdGF0aWMg
Ym9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExh
eWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0
cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgUmVu
ZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJTb3J0
ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBjb21wdXRlcyB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnMgcmVjdXJzaXZlbHkg
Zm9yIHRoaXMKICAgICAvLyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gSXQgYWxzbyBj
b21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzLgpAQCAtNTczLDcgKzYxMiw3
IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVy
bmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hp
bGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRl
bnQgPSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllclR5
cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVyPihjaGlsZCwgcm9v
dExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJpeCwgbmVhcmVzdEFuY2Vz
dG9yVGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywg
bGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKKyAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQg
PSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBS
ZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVy
TWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhl
bHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4
VGV4dHVyZVNpemUpOwogCiAgICAgICAgIGlmIChkcmF3c0NvbnRlbnQpIHsKICAgICAgICAgICAg
IGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7CkBAIC02OTQsOSArNzMzLDkgQEAgc3RhdGlj
IGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJU
eXBlKiBsYXllciwgTGF5ZXIKIAogLy8gRklYTUU6IEluc3RlYWQgb2YgdXNpbmcgdGhlIGZvbGxv
d2luZyBmdW5jdGlvbiB0byBzZXQgdmlzaWJpbGl0eSByZWN0cyBvbiBhIHNlY29uZAogLy8gdHJl
ZSBwYXNzLCByZXZpc2UgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCgpIHNvIHRoYXQgdGhpcyBj
YW4gYmUgZG9uZSBpbiBhIHNpbmdsZQotLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8PigpLgorLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNJbnRlcm5hbDw+KCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdGF0aWMg
dm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJs
ZUxheWVyc0FuZFNjaXNzb3JSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7CiAgICAgLy8gVXNlIEJh
Y2tUb0Zyb250IHNpbmNlIGl0J3MgY2hlYXAgYW5kIHRoaXMgaXNuJ3Qgb3JkZXItZGVwZW5kZW50
LgogICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5k
ZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IENDTGF5
ZXJJdGVyYXRvclR5cGU7CkBAIC03MDcsMTkgKzc0NiwzNCBAQCBzdGF0aWMgdm9pZCB3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYQogICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlz
aWJsZUxheWVyUmVjdCgqaXQpOwogICAgICAgICAgICAgaXQtPnNldFZpc2libGVMYXllclJlY3Qo
dmlzaWJsZUxheWVyUmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJ
dHNlbGYoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1bGF0ZUxh
eWVyU2Npc3NvclJlY3QoKml0LCByb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICBpdC0+c2V0
U2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2Vu
dHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEludFJlY3Qgc2Np
c3NvclJlY3QgPSBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3Q8TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT4oKml0LCByb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICBpdC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRTY2lzc29yUmVjdChzY2lzc29yUmVjdCk7CisgICAgICAgIH0KICAgICB9
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiBs
YXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNo
eU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1h
eFRleHR1cmVTaXplKQoreworICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50
ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwg
ZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0
LCAwLCBtYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiBy
b290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxh
eWVyTGlzdCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkK
K3sKKyAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0
b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwg
cm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQogewotICAgIFdlYkNvcmU6
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVyQ2hyb21p
dW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVt
LCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNp
emUpOwotICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxMYXllckNo
cm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgY2FsY3VsYXRlVmlzaWJsZUxheWVy
c0FuZFNjaXNzb3JSZWN0czxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dERhbWFnZVJlY3QpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllcklt
cGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxD
Q0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwq
PiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVT
aXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNv
bnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCiB7Ci0gICAgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1w
bCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIsIHBh
cmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotICAgIHdhbGtMYXll
cnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAg
Y2FsY3VsYXRlVmlzaWJsZUxheWVyc0FuZFNjaXNzb3JSZWN0czxDQ0xheWVySW1wbCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cm9vdERhbWFnZVJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDM3NjJmNjRiMTliMzEzNDk5OGU0MGI0
NDc2MzhhMjQ2ZjEyNDhiYmIuLjFjNWU5ZTE3MDFkM2QyZWUzOGI1OWZhZTllNGJjNWY2NzJhYzNk
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC00MSw4ICs0
MSwxMSBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21tb24gewogcHVibGljOgogICAgIHN0YXRp
YyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZh
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKIAotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShMYXllckNocm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKTsKLSAgICBzdGF0aWMgdm9pZCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1w
bCogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+
JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0
YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qLCBMYXllckNo
cm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRy
aXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUp
OworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiwg
Q0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVu
dE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgs
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NM
YXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXpl
KTsKKworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVj
dCYgcm9vdERhbWFnZVJlY3QpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1
dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA5MTMzNmE3NzY4ZDNkZDYy
MTFiMDk4NDg0OWM2MmMyM2E0ZWQ1MzYwLi43Yjk2OTc5ZDUwMzUxYTQyMmU0YmNhZmE0MzY1MGUy
Mjk3ZDVlNzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oIgorI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VTY2Fs
ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtMjI5LDI3ICsyMzAsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGRhbWFn
ZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZs
b2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VS
ZWN0OwotICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBkYW1h
Z2UgYXMgdGhlIGRhbWFnZSBmb3IKLSAgICAvLyBhbGwgc3VyZmFjZXMsIGV4Y2VwdCBwZXJzcGVj
dGl2ZSB0cmFuc2Zvcm1zLgotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5T
cGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpOwotICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJz
cGVjdGl2ZSgpKSB7Ci0gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBw
bGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mCi0gICAgICAgIC8vIGludmVyc2UgdHJhbnNmb3Jtcy4g
SW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bwotICAgICAgICAvLyBqdXN0IHJl
ZHJhdyB0aGUgZW50aXJlIHN1cmZhY2UuCi0gICAgICAgIC8vIEZJWE1FOiB1c2UgY2FsY3VsYXRl
VmlzaWJsZVJlY3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgotICAgICAgICBDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsK
LSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3Jl
ZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICAg
ICAgc3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVj
dChyb290RGFtYWdlUmVjdCk7Ci0gICAgfQotICAgIHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsK
LX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorRmxvYXRSZWN0IEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuaXNFbXB0eSgpKTsKIApAQCAtMjY3LDcgKzI0OCwyMSBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxp
c3QmIHJlbmRlclN1cgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlU2NhbGVUcmFuc2Zvcm07CiAg
ICAgICAgIGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVG
YWN0b3IpOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fcm9vdExheWVySW1w
bC5nZXQoKSwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0
KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKG1fcm9vdExheWVySW1wbC5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZp
Y2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJT
b3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisKKyAg
ICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8
IHNldHRpbmdzKCkuc2hvd1N1cmZhY2VEYW1hZ2VSZWN0cykKKyAgICAgICAgICAgIHRyYWNrRGFt
YWdlRm9yQWxsU3VyZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICAgICAgbV9yb290RGFtYWdlUmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAg
ICAgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworICAgICAgICBpZiAobGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCisgICAgICAgICAgICByb290RGFtYWdl
UmVjdCA9IG1fcm9vdERhbWFnZVJlY3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3RE
YW1hZ2VSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKTsK
KyAgICAKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKKwor
ICAgICAgICByZXR1cm4gcm9vdERhbWFnZVJlY3Q7CiAgICAgfQogfQogCkBAIC0yNzUsMTMgKzI3
MCwxMSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogewogICAgIEFTU0VSVChwYXNzZXMuaXNF
bXB0eSgpKTsKIAotICAgIGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gY2FsY3VsYXRl
UmVuZGVyU3VyZmFjZUxheWVyTGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIFRS
QUNFX0VWRU5UMSgid2Via2l0IiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIsIHN0YXRpY19jYXN0PGxv
bmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpKTsKIAotICAg
IGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8fCBzZXR0
aW5ncygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCi0gICAgICAgIHRyYWNrRGFtYWdlRm9yQWxs
U3VyZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
LSAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkt
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBtX3Jvb3RMYXllcklt
cGwtPnNldFNjaXNzb3JSZWN0KGVuY2xvc2luZ0ludFJlY3Qocm9vdERhbWFnZVJlY3QpKTsKIAog
ICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyIHBhc3NlcyBpbiBkZXBlbmRlbmN5IG9yZGVyLgogICAg
IEhhc2hNYXA8Q0NSZW5kZXJTdXJmYWNlKiwgQ0NSZW5kZXJQYXNzKj4gc3VyZmFjZVBhc3NNYXA7
CkBAIC0yOTAsMTIgKzI4Myw2IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIEND
UmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVy
U3VyZmFjZSgpOwogCiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRl
clBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKLQotICAgICAgICBGbG9hdFJlY3Qgc3VyZmFj
ZURhbWFnZVJlY3Q7Ci0gICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNp
bmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gZGFtYWdlSW5T
dXJmYWNlU3BhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBtX3Jvb3REYW1hZ2VSZWN0KTsKLSAgICAg
ICAgcGFzcy0+c2V0U3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotCiAgICAg
ICAgIHN1cmZhY2VQYXNzTWFwLmFkZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAg
ICAgcGFzc2VzLmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMzI2LDExICszMTMs
MTUgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NS
ZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKIAogICAgICAgICBvY2NsdXNpb25UcmFja2Vy
LmVudGVyTGF5ZXIoaXQpOwogCi0gICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5n
UmVuZGVyU3VyZmFjZSgpKQotICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJT
dXJmYWNlTGF5ZXIoKml0LCAmb2NjbHVzaW9uVHJhY2tlcik7CisgICAgICAgIGlmIChpdC5yZXBy
ZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBpZiAoIWl0
LT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKCppdCwgJm9jY2x1c2lv
blRyYWNrZXIsIG1fcm9vdERhbWFnZVJlY3QpOworICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIGl0LT53aWxsRHJhdyhtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwot
ICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcigqaXQsICZvY2NsdXNpb25UcmFj
a2VyLCBoYWRNaXNzaW5nVGlsZXMpOworCisgICAgICAgICAgICBpZiAoIWl0LT5zY2lzc29yUmVj
dCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvckxheWVy
KCppdCwgJm9jY2x1c2lvblRyYWNrZXIsIGhhZE1pc3NpbmdUaWxlcyk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoaGFkTWlzc2luZ1RpbGVzKSB7CkBAIC00MzAsOCArNDIxLDEzIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQog
ICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVudFRpbWUoKSk7CiAg
ICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZShtX3Jvb3RMYXllckltcGwtPnJl
bmRlclN1cmZhY2UoKSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lLnJlbmRl
clBhc3Nlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVy
UGFzcyhmcmFtZS5yZW5kZXJQYXNzZXNbaV0uZ2V0KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDUmVuZGVy
UGFzcyogcmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQoKTsKKworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSByZW5k
ZXJQYXNzLT50YXJnZXRTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgp
OworICAgICAgICBGbG9hdFJlY3Qgc3VyZmFjZVN3YXBSZWN0ID0gQ0NNYXRoVXRpbDo6cHJvamVj
dENsaXBwZWRSZWN0KGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSwgbV9yb290RGFtYWdlUmVj
dCk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocmVuZGVyUGFzcywg
c3VyZmFjZVN3YXBSZWN0KTsKKyAgICB9CiAKICAgICBpZiAobV9kZWJ1Z1JlY3RIaXN0b3J5LT5l
bmFibGVkKHNldHRpbmdzKCkpKQogICAgICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1
Z1JlY3RzRm9yQ3VycmVudEZyYW1lKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWUucmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKaW5kZXggZjhiNzYzMTQwNGQ3YzIzODMxMTdjNTg2YWZkYmZhNGNhMGMzMjBiMC4u
MjVmMWE1YWVkZDVlNzMzNDIyNjM4ZWNlM2I5Y2RiZWI2Y2I1MzQ3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTc0LDggKzE3NCw4IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUoZG91YmxlIG1vbm90b25pY1RpbWUpOwogICAgIHZvaWQg
YW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIAotICAgIC8vIEV4cG9zZWQg
Zm9yIHRlc3RpbmcuCi0gICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KEND
TGF5ZXJMaXN0Jik7CisgICAgLy8gRXhwb3NlZCBmb3IgdGVzdGluZy4gUmV0dXJucyByb290IGRh
bWFnZSByZWN0IG9yIGZ1bGwgdmlld3BvcnQgaWYgbm90IHVzaW5nIHBhcnRpYWwgc3dhcC4KKyAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChDQ0xheWVyTGlzdCYp
OwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUxheWVycyhkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggODQ4NzMwYTJjN2I2MGI3NjIzODk5ZmQ3ZjliNDEz
MzBhMmU5N2NiNy4uODc0ZmY2MTllMmFkZTk1NTRlNDJkZDA0YmJlZTM3ODUzZDJkZDgzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC02OCwyMCArNjgsMjEgQEAgdm9pZCBDQ1JlbmRl
clBhc3M6OmFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ09jY2x1c2lv
blRyYWNrZXJJbXAKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRT
dGF0ZS5yZWxlYXNlKCkpOwogfQogCi12b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JS
ZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ09jY2x1c2lvblRyYWNrZXJJ
bXBsKiBvY2NsdXNpb25UcmFja2VyKQordm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9y
UmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXNpb25UcmFja2Vy
SW1wbCogb2NjbHVzaW9uVHJhY2tlciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkK
IHsKICAgICAvLyBGSVhNRTogcmVuZGVyIHN1cmZhY2UgbGF5ZXJzIHNob3VsZCBiZSBhIENDTGF5
ZXJJbXBsLWRlcml2ZWQgY2xhc3MgYW5kCiAgICAgLy8gbm90IGJlIGhhbmRsZWQgc3BlY2lhbGx5
IGhlcmUuCiAgICAgQ0NRdWFkQ3VsbGVyIHF1YWRDdWxsZXIobV9xdWFkTGlzdCwgbGF5ZXIsIG9j
Y2x1c2lvblRyYWNrZXIsIGxheWVyLT5oYXNEZWJ1Z0JvcmRlcnMoKSk7CiAKICAgICBDQ1JlbmRl
clN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOworCiAgICAgT3duUHRy
PENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFy
ZWRRdWFkU3RhdGUoKTsKICAgICBpZiAobGF5ZXItPmhhc0RlYnVnQm9yZGVycygpKSB7CiAgICAg
ICAgIENvbG9yIGNvbG9yKGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yUmVkLCBkZWJ1Z1N1cmZhY2VC
b3JkZXJDb2xvckdyZWVuLCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckJsdWUsIGRlYnVnU3VyZmFj
ZUJvcmRlckFscGhhKTsKICAgICAgICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDRGVidWdC
b3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29u
dGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3VyZmFjZUJvcmRlcldpZHRoKSk7CiAgICAgfQogICAg
IGJvb2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0gICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNlKEND
UmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJm
YWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNh
KSk7CisgICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
OjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBs
YXllciwgaXNSZXBsaWNhKSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFy
ZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAogICAgIC8vIEFkZCByZXBsaWNhIGFmdGVyIHRoZSBz
dXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0aGUgc3VyZmFjZS4KQEAgLTkyLDcgKzkz
LDcgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXMKICAgICAgICAgICAgIHF1YWRDdWxsZXIuYXBw
ZW5kUmVwbGljYShDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUu
Z2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGNvbG9yLCBkZWJ1Z1N1cmZhY2VCb3JkZXJX
aWR0aCkpOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaXNSZXBsaWNhID0gdHJ1ZTsKLSAgICAg
ICAgcXVhZEN1bGxlci5hcHBlbmRSZXBsaWNhKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwg
c3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNhKSk7CisgICAgICAgIHF1YWRDdWxsZXIuYXBw
ZW5kUmVwbGljYShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0
ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIGlzUmVwbGljYSkpOwogICAg
ICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNl
KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggNDUyYTg2MTBmNWE5ZGJj
MDIxNGE4Y2RkYmZmNmYwMjU0ZmVjZGEyNi4uMzQ3ODQ0OTJlYmEyNjIyN2MzMzZmOWM5YjIyYjY4
N2M2ZDk2YzRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTU2LDIyICs1NiwxOCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5k
ZXJTdXJmYWNlKik7CiAKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwq
LCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKiwgYm9vbCYgaGFkTWlzc2luZ1RpbGVzKTsKLSAgICB2
b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiwgQ0NPY2Ns
dXNpb25UcmFja2VySW1wbCopOworICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNl
TGF5ZXIoQ0NMYXllckltcGwqLCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKiwgY29uc3QgRmxvYXRS
ZWN0JiByb290RGFtYWdlUmVjdCk7CiAgICAgdm9pZCBhcHBlbmRRdWFkc1RvRmlsbFNjcmVlbihD
Q0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBDb2xvciYgc2NyZWVuQmFja2dyb3VuZENvbG9y
LCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsJik7CiAKICAgICBjb25zdCBDQ1F1YWRMaXN0
JiBxdWFkTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KICAgICBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0K
IAotICAgIHZvaWQgc2V0U3VyZmFjZURhbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNl
RGFtYWdlUmVjdCkgeyBtX3N1cmZhY2VEYW1hZ2VSZWN0ID0gc3VyZmFjZURhbWFnZVJlY3Q7IH0K
LSAgICBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9zdXJmYWNlRGFtYWdlUmVjdDsgfQotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDUmVuZGVy
UGFzcyhDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAgIENDUmVuZGVyU3VyZmFjZSogbV90YXJnZXRT
dXJmYWNlOwogICAgIENDUXVhZExpc3QgbV9xdWFkTGlzdDsKICAgICBWZWN0b3I8T3duUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiA+IG1fc2hhcmVkUXVhZFN0YXRlTGlzdDsKLSAgICBGbG9hdFJlY3Qg
bV9zdXJmYWNlRGFtYWdlUmVjdDsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPE93blB0cjxDQ1JlbmRl
clBhc3M+ID4gQ0NSZW5kZXJQYXNzTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3Bw
CmluZGV4IDI2YzQ2N2FiNDAzM2RkMmNiMWQyMzhiMmJjMWJmNzkzNWFkMDliYTAuLjFlZjY3N2U5
YmEwYjFkNzljNTNiYTY2NTQ3ZjkxZGJkODQxNzI0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5o
IgorI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAj
aW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRmlsdGVycy5oIgogI2luY2x1ZGUgImNjL0NDU2hh
cmVkUXVhZFN0YXRlLmgiCkBAIC0yMDgsMjAgKzIwOSw2IEBAIGlubGluZSBzdGF0aWMgaW50IGdl
dFNrQml0bWFwVGV4dHVyZUlkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBmYWxsYmFjaykK
ICAgICByZXR1cm4gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwogfQogCi12b2lkIENDUmVu
ZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSBjb25zdAotewotICAg
IGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+
dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2lu
Z1BhcnRpYWxTd2FwKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IG1f
Y2xpcFJlY3Q7Ci0gICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChzdXJmYWNlRGFt
YWdlUmVjdCk7Ci0gICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9z
aW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCkpOwotICAgIH0gZWxzZSBpZiAobGF5ZXJSZW5k
ZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgbGF5ZXJSZW5k
ZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0
KSk7Ci0gICAgZWxzZSBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXll
ci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVyUmVuZGVyZXIt
PnNldFNjaXNzb3JUb1JlY3QobV9jbGlwUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBHTEMobGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotfQotCiB2b2lkIENDUmVuZGVyU3Vy
ZmFjZTo6ZHJhd0NvbnRlbnRzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikK
IHsKICAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQpAQCAtNDU0LDEz
ICs0NDEsMTMgQEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWRP
bmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdAogUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAgIGJv
b2wgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZShvcmlnaW5UcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlw
UmVjdCgpLCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVh
ZFN0YXRlOjpjcmVhdGUob3JpZ2luVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgY29udGVu
dFJlY3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOwogfQogCiBQ
YXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxp
Y2FTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsK
LSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShyZXBsaWNhT3JpZ2luVHJhbnNm
b3JtKCksIHJlcGxpY2FEcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCks
IGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6
OmNyZWF0ZShyZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIHJlcGxpY2FEcmF3VHJhbnNmb3JtKCks
IGNvbnRlbnRSZWN0KCksIG1fc2Npc3NvclJlY3QsIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCA2YTY3MWE3MDBlZDY3NzA4
NjdlYmU5MjY5YzEyOTY3NjBkMjA0NGExLi44N2QyMmJhZWM2MGNkOTRjNTdkYTUxYTc5ZmMxZDk0
MzUxYzA5NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtNTgsOCArNTgsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CiAgICAgdm9pZCByZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKIAotICAg
IHZvaWQgc2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgRmxvYXRS
ZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3Q7Ci0KICAgICB2b2lkIGRyYXdDb250ZW50cyhM
YXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGRyYXdSZXBsaWNhKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOwogCkBAIC0xMjMsNiArMTIxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogCisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChj
b25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7
IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Np
c3NvclJlY3Q7IH0KKwogICAgIHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYpOwog
ICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
UmVjdDsgfQogCkBAIC0xNjcsNiArMTY4LDcgQEAgcHJpdmF0ZToKICAgICBDQ0xheWVySW1wbCog
bV9vd25pbmdMYXllcjsKICAgICBDQ0xheWVySW1wbCogbV9tYXNrTGF5ZXI7CiAKKyAgICAvLyBV
c2VzIHRoaXMgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAg
ICBib29sIG1fc2tpcHNEcmF3OwogICAgIGJvb2wgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkOwpA
QCAtMTg2LDcgKzE4OCwxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybXNBcmVBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmls
dGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVy
czsKKworICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZh
Y2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlk
ZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRy
YXduLgorICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZh
Y2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gbV9sYXllckxpc3Q7CiAKICAgICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJnZXQgc3Vy
ZmFjZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNlLCBhbmQg
dGhhdCBpcyBnb2luZwpAQCAtMTk1LDkgKzIwNCw2IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8
Q0NEYW1hZ2VUcmFja2VyPiBtX2RhbWFnZVRyYWNrZXI7CiAKLSAgICAvLyBTdG9yZWQgaW4gdGhl
ICJzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Npc3Nv
cmluZy4KLSAgICBGbG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwotCiAgICAgLy8gRm9yIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnMKICAgICBpbnQgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhp
c3Rvcnk7CiAgICAgaW50IG1fY3VycmVudExheWVySW5kZXhIaXN0b3J5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCmluZGV4IGM2ZTAyMWVjZTIwNjVjNzlj
NWVjZjZjZDBiNmQzN2NlOTU0N2IzMTAuLmJmYWJhZDg1ZmU0M2M2OWEzMDIxMjEwMGYyOThmNGZm
Nzc2MzhjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5j
cHAKQEAgLTI5LDE1ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25Q
dHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNl
RGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpCitQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURy
YXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVy
SW1wbCogbGF5ZXIsIGJvb2wgaXNSZXBsaWNhKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIs
IHN1cmZhY2VEYW1hZ2VSZWN0LCBpc1JlcGxpY2EpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVy
LCBpc1JlcGxpY2EpKTsKIH0KIAotQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKQorQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBz
aGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5
ZXIsIGJvb2wgaXNSZXBsaWNhKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIEND
RHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIHF1YWRSZWN0KQogICAgICwgbV9sYXllcihsYXllcikK
LSAgICAsIG1fc3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpCiAgICAgLCBtX2lz
UmVwbGljYShpc1JlcGxpY2EpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKaW5kZXggOGY2ZGE1ZWVlMWQ4MjdmYzEwZWE1
YTU4ZDVmODE5ZWIyMDU5MzE2ZC4uMzQ4ZThhOThkM2QyMzcyN2E4MDJjYTE1MzkzOTdjYzEzNmJi
YTMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCkBAIC0z
NiwyMCArMzYsMTUgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSos
IGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3Qg
SW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgYm9vbCBpc1JlcGxpY2EpOwogCiAgICAgQ0NMYXllcklt
cGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQogICAgIGJvb2wgaXNSZXBsaWNh
KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGxpY2E7IH0KIAotICAgIC8vIFRoZSBzdXJmYWNlIGRh
bWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhpcyBxdWFkIGRyYXdzIGludG8uCi0g
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSByZW5kZXIgc3VyZmFjZXMgZ2V0
IHRoZWlyIG93biBsYXllciB0eXBlLgotICAgIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFn
ZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0KIHByaXZhdGU6
Ci0gICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0LCBib29sIGlzUmVwbGljYSk7CisgICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBib29s
IGlzUmVwbGljYSk7CiAKICAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKLSAgICBGbG9hdFJlY3Qg
bV9zdXJmYWNlRGFtYWdlUmVjdDsKICAgICBib29sIG1faXNSZXBsaWNhOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFy
ZWRRdWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCmluZGV4IDliZjc2OTI1YmI4Y2YyYmJhYzUzOWMw
MTQzMWM1NTc4NDMzOWZkMDUuLjkwNzc3YWI0MWJiODRiMDg4OTFjYjIyNDI4ODVlMGYzODFiMjgy
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKQEAgLTI5LDE2ICsyOSwx
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9y
bSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxv
YXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCitQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFk
VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0
IG9wYWNpdHksIGJvb2wgb3BhcXVlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaGFy
ZWRRdWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVyUmVjdCwgY2xp
cFJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaGFy
ZWRRdWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVyUmVjdCwgc2Np
c3NvclJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOwogfQogCi1DQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NT
aGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0s
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9v
bCBvcGFxdWUpCitDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCiAgICAgOiBtX3F1
YWRUcmFuc2Zvcm0ocXVhZFRyYW5zZm9ybSkKICAgICAsIG1fbGF5ZXJUcmFuc2Zvcm0obGF5ZXJU
cmFuc2Zvcm0pCiAgICAgLCBtX2xheWVyUmVjdChsYXllclJlY3QpCi0gICAgLCBtX2NsaXBSZWN0
KGNsaXBSZWN0KQorICAgICwgbV9zY2lzc29yUmVjdChzY2lzc29yUmVjdCkKICAgICAsIG1fb3Bh
Y2l0eShvcGFjaXR5KQogICAgICwgbV9vcGFxdWUob3BhcXVlKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3Rh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hh
cmVkUXVhZFN0YXRlLmgKaW5kZXggNDIwNmFhNWMyZGUyYTc1NGM5Y2E5MWY0ZThlODg5MzgyMjEx
ZmYyMi4uNmIxNTAwMGJiNTdlNmRiMDRkZmE1Zjk0NzVkMzQwN2IzOWE4MmI0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC0zNiwyNyArMzYsMjYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGUgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENDU2hhcmVkUXVhZFN0YXRlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFk
VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9w
YWNpdHksIGJvb2wgb3BhcXVlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRT
dGF0ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJv
b2wgb3BhcXVlKTsKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBxdWFkcyBpbiBhIENDRHJh
d1F1YWQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCiAgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3F1YWRUcmFuc2Zvcm07
IH0KICAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkgc2hvdWxkIGJlIHRyYW5z
Zm9ybWVkIHdpdGguCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyYW5zZm9ybTsgfQogICAgIGNvbnN0IEludFJl
Y3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9Ci0gICAgLy8gVXNh
Z2U6IGlmIGNsaXBSZWN0IGlzIGVtcHR5LCB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNl
ZC4KLSAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJl
Y3Q7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Npc3NvclJlY3Q7IH0KIAogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29w
YWNpdHk7IH0KICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0K
ICAgICBib29sIGlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRy
YW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFj
aXR5LCBib29sIG9wYXF1ZSk7CisgICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBs
YXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBz
Y2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9xdWFkVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
bGF5ZXJUcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2xheWVyUmVjdDsKLSAgICBJbnRSZWN0IG1f
Y2xpcFJlY3Q7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwogICAgIGZsb2F0IG1fb3BhY2l0
eTsKICAgICBib29sIG1fb3BhcXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCmluZGV4IGJiZWE5NzFkZDVhNGVmZTY3
ZDMzNjE2MWM5YTBkZmI3MTVhZDdhYjcuLmViNzBkZGU1M2NmYzhlMmI5NTRmMjQ2ZmIwNzE5ZjQx
ZTA0M2I3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1h
Z2VUcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Rh
bWFnZVRyYWNrZXJUZXN0LmNwcApAQCAtNTgsNyArNTgsOCBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxD
Q0xheQogCiAgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOwogICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QpOwotICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3Qs
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0
KCkpOwogfQogCiB2b2lkIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJvb3Qp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRv
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JU
ZXN0LmNwcAppbmRleCBmNWVhZTdmODRkZDUxMjVjODA5OTViOWNkNDI5Yjk5YmNiZjY5MzM0Li5k
NGY5ZmRjMmFhMWI2MWJlM2I3NzljMjkxZGQyNzJjYTlhNDljNmQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTEz
OCwxMCArMTM4LDExIEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgc2ltcGxlVHJlZSkKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
ICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExh
eWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTE4NSwx
MCArMTg2LDExIEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxleFRyZWUpCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXll
ci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CkBAIC0yNDQsMTAg
KzI0NiwxMSBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVsdGlTdXJm
YWNlKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CiAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyLmdldCgpKTsKLSAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVy
LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggMTdlNTcwMTk5OWY4NjFhYTg3YjVhNzc1OWE3ZGZkMDIw
MTRmOTJkYy4uZTNmODI4YmVhZWZkMjkyNDljMzkxMmI2N2ViNzIwNTFmNjFjZjgwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QuY3BwCkBAIC0zMiw3ICszMiwxMiBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ01hdGhVdGlsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgImNjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogCiAjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAtNTgsNyArNjMs
OCBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXQpCkBAIC0xNzQsNyArMTgwLDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBwb3NpdGlvbiBwcmUtbXVs
dGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgotICAgIC8vICAgICAgICAgVGhlIGN1cnJlbnQg
aW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5IGRv
ZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKKyAgICAvLyAgICAgICAgIFRoZSBjdXJyZW50
IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zIGRvZXMgdGhpcyBpbXBs
aWNpdGx5LCBidXQgaXQgaXMKICAgICAvLyAgICAgICAgIHN0aWxsIHdvcnRoIHRlc3RpbmcgdG8g
ZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMuCiAgICAgZXhwZWN0ZWRSZXN1bHQgPSBwb3Np
dGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRy
YW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIp
LCBmYWxzZSk7CkBAIC0zMTcsNiArMzIzLDU2MSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGls
ZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0KIAor
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdE5vQ2xpcCkKK3sKKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisKKyAg
ICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwKKyAg
ICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAyIHwg
ICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8
IHwgICAzICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0t
LS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwor
ICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisK
KyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxk
UmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAx
NTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJv
dW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAg
cm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0LndpZHRo
KCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNoaWxk
UmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsK
KyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVj
dC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBn
cmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENo
aWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hpbGRS
ZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRS
ZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0gY2hp
bGQuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxkLmdl
dCgpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXll
ckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBD
Q0xheWVyU29ydGVyIGxheWVyU29ydGVyOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290Lmdl
dCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVT
aXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNT
RVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9v
dC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5zaXplKCksIDJVKTsKKyAgICAKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24g
b2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xp
cFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVj
dC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkp
OworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVy
U3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBB
U1NFUlRfRkFMU0Uocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNF
KGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRD
aGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBl
bnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3Qt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisKKyAgICAvLyBjaGlsZCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBhIGNsaXAgcmVjdCwgdGhl
cmVmb3JlIGl0IHdpbGwgYmUgY29tcHV0ZWQgYXMgaW50ZXJzZWN0aW9uCisgICAgLy8gYmV0d2Vl
biByb290IHN1cmZhY2UncyBjb250ZW50cmVjdCBhbmQgY2hpbGQgc3VyZmFjZSdzIGRyYXdhYmxl
IGNvbnRlbnQgcmVjdC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgp
LCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBj
aGlsZFJlY3QueSgpKSk7CisKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RS
ZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRo
b3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBj
aGlsZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0
aGUgc2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5o
ZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwgaGF2
ZSB0aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFjZQorICAg
IC8vIG9mIGl0cyBvd24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJl
Y3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdl
CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0
eSBzY2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3
aXRoaW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNz
b3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKwor
ICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGlu
IHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdl
KTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQg
d2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55
KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0
KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNl
LCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNU
X0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkg
LSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1h
Z2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1h
Z2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODAp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBT
Y2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdp
dGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERh
bWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwg
YnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1h
Z2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhl
aWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3Vy
ZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVY
UEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290
RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwg
ZGFtYWdlIGJleW9uZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAs
IDExMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAg
IC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9v
dC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNv
IGl0cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgor
ICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290
IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2Uu
eSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXll
ciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0
IHdpdGggZGFtYWdlCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBj
bGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0
LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdl
LnkoKSkpOworCisgICAgLy8gQ2hpbGRyZW4ncyBjb250ZW50IHJlY3RzIGFyZSBiaWdnZXIgdGhh
biB0aGUgcm9vdCdzIHNvIHRoZXkgZG9uJ3QgY2xpcCB0aGUgZGFtYWdlIHJlY3QsIGJ1dCBjaGFu
Z2UgaXRzIG9mZnNldC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNo
aWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwor
ICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RE
YW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgp
LCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQoreworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8q
CisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAg
ICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAg
fAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAg
IDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKwor
ICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0t
KyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAg
ICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAg
IEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0
KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwg
MTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRz
KEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwg
cm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0
LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAg
IGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0Lmhl
aWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5k
Q2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQt
PnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3Qu
eSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qu
d2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBjaGlsZC5n
ZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7
CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3Qt
PmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVy
OworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwor
CisgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlz
dCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJl
Y3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlE
YW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAg
ICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDJVKTsKKyAgICAKKyAg
ICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0byBpdHMgYm91bmRzCisgICAgQVNTRVJUX0VRKHJv
b3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKworICAgIC8vIExheWVyJ3MgY2xpcFJlY3QgaXMg
YSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRzCisgICAgQVNTRVJUX0VRKGNoaWxk
UHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5k
Q2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0Lmhl
aWdodCgpKSk7CisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJl
Y3QoMCwgMCwgMCwgMCkpOworCisgICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBDaGlsZCBzdXJmYWNl
J3MgY2xpcHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJvb3QncworICAgIEFTU0VSVF9FUShjaGls
ZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisgICAgCisgICAg
QVNTRVJUX1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNF
KGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRD
aGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBl
bnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3Qt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBp
cyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNl
dC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcg
dG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRo
ZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJl
Y3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdy
YW5kIGNoaWxkIHdpbGwgaGF2ZSB0aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBo
YXZlIGEgc3VyZmFjZQorICAgIC8vIG9mIGl0cyBvd24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hp
bGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisg
ICAgLy8gRW1wdHkgZGFtYWdlCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVt
cHR5IGRhbWFnZSA9PSBlbXB0eSBzY2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCks
IEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAv
LyBQYXJ0aWFsIGRhbWFnZSB3aXRoaW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgx
MCwgMTAsIDIwLCAyMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOwor
ICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBF
Q1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhl
IHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29y
UmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRo
aW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0
LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCks
IHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhh
dmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBj
aGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxk
UmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisg
ICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJl
Y3QoMTAsIDEwLCA4MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdl
KTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAg
RVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGlu
IHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJl
IGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Np
c3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMg
d2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxk
UmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0
aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5v
dCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwg
dG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsK
KworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCByb290CisgICAgcm9vdERhbWFnZSA9IElu
dFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RE
YW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QK
KyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBo
YXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJz
ZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3Qg
aXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFn
ZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCks
IHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290
IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJl
IHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9v
dCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBF
Q1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERh
bWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVp
Z2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisgICAgLy8gTm93IHRoZSBzY2lzc29yIHJlY3Rz
IGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRlbnRSZWN0CisgICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0Lngo
KSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9v
dERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3RE
YW1hZ2UueSgpKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3Nv
clJlY3RXaXRoQ2xpcEFuZFNwYWNlVHJhbnNmb3JtKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8qCisgICAgICBMYXllcnMg
YXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0t
LS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAg
fCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMsNCAgICAgICAgICAg
ICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAg
ICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
fAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwg
MiBhbmQgMyBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKworICAgIElu
dFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEw
LCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUw
KTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9v
dFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0Lngo
KSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNo
aWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdo
dCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hp
bGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNl
dFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgp
KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5o
ZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAg
IGdyYW5kQ2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFu
ZENoaWxkMi0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENo
aWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBn
cmFuZENoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3Jh
bmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0RHJhd3NDb250ZW50
KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0gY2hpbGQuZ2V0KCk7CisgICAg
Q0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxkLmdldCgpOworCisgICAgZ3Jh
bmRDaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIucmVsZWFzZSgpKTsKKyAgICBjaGlsZC0+YWRk
Q2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJl
bGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgVmVj
dG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7CisgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAgICBWZWN0b3I8Q0NM
YXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOworCisgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisgICAgICAgIC8qIGVtcHR5
IGxpc3QgKi8KKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBk
dW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0
OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9
CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
QVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJVRShncmFu
ZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVYUEVDVF9FUShyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgM1UpOworICAgIAorICAgIC8vIE5vdyByb290IGlzIGNs
aXBwaW5nIHRvIGl0cyBib3VuZHMKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgcm9v
dFJlY3QpOworCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIGNoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpICwgY2hpbGRSZWN0Lnko
KSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZGNoaWxkIG5vdyBj
bGlwcworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hp
bGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisKKyAgICBBU1NFUlRfRVEo
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KworICAgIC8vIENoaWxkIHN1cmZhY2UncyBjbGlwcGluZyByZWN0IGlzIG5vdyBzZXQgdG8gcm9v
dCdzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCks
IHJvb3RSZWN0KTsKKyAgICAKKyAgICBBU1NFUlRfVFJVRShyb290LT51c2VzTGF5ZXJDbGlwcGlu
ZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOwor
ICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAg
ICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRSZWN0IHJvb3REYW1h
Z2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAg
ICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworICAg
IAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7
CisKKyAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3QsIGJ1dCBjaGlsZCBs
YXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdoIGl0IGhhcyBib3Vu
ZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxkcmVuCisgICAgLy8g
KHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBzY2lzc29yIHJlY3QK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9v
dFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRS
ZWN0LnkoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgaXMgbm93IHNjaXNzb3JlZCBieSB0aGUg
cmVuZGVyIHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSAtIGdyYW5k
Q2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpIC0gZ3JhbmRD
aGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisgICAgcm9vdERhbWFn
ZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RE
YW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBzY2lzc29yCisgICAg
RVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAg
IEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAg
ICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRoaW4gY2hpbGQKKyAg
ICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29t
cHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBk
YW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAg
IEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVu
dGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQg
b2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8v
IEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMg
d2VsbCBhcyByb290CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gUGFy
dGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEw
LCA4MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAK
KyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VR
KHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290
IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSBy
ZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3Qo
KSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRo
ZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290
RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBub3cgZ2V0cyBzY2lzc29y
ZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFzIHdlbGwgYXMgcm9vdAorICAgIEVYUEVDVF9FUShn
cmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndp
ZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkgLSBncmFuZENo
aWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCByb290CisgICAg
cm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29t
cHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIFJvb3Qgc3Vy
ZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50UmVjdCB3aWxsIGJl
IHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJv
b3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0g
cm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAg
ICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywgc28gaXRzIGNvbnRl
bnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlCisgICAgLy8gUmVz
dWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91
bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFt
YWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisgICAgLy8gTm93IHRo
ZSBzY2lzc29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRlbnRSZWN0CisgICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgp
IC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290UmVj
dC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFn
ZS55KCkpKTsKKworICAgIC8vIEdyYW5kY2hpbGQncyBzY2lzc29yIHJlY3QgaXMgY2xpcHBlZCBi
eSBpdHMgdGFyZ2V0IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1h
Z2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0gZ3JhbmRDaGlsZFJl
Y3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7Cit9CisK
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlcGxp
Y2EpCiB7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOwpAQCAtNTQ0LDcgKzExMDUsMTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikKICAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15
TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgRmxvYXRSZWN0
IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3Mg
Y29udGVudCBpcyBlbnRpcmVseSBvdXRzaWRlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3QsIHNvIHRo
ZSBpbnRlcm1lZGlhdGUKICAgICAvLyByZW5kZXIgc3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIHJl
bW92ZWQuIFJlbmRlciBzdXJmYWNlcyB3aXRob3V0IGNoaWxkcmVuIG9yIHZpc2libGUKQEAgLTU3
Miw3ICsxMTM2LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5k
ZXJTdXJmYWNlTGlzdEZvclRyYW5zcGFyZW50Q2hpbGQpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICAvLyBTaW5j
ZSB0aGUgbGF5ZXIgaXMgdHJhbnNwYXJlbnQsIHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNl
KCkgc2hvdWxkIG5vdCBoYXZlIGdvdHRlbiBhZGRlZCBhbnl3aGVyZS4KICAgICAvLyBBbHNvLCB0
aGUgZHJhd2FibGUgY29udGVudCByZWN0IHNob3VsZCBub3QgaGF2ZSBiZWVuIGV4dGVuZGVkIGJ5
IHRoZSBjaGlsZHJlbi4KQEAgLTYwMCwxNCArMTE2NiwxNCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKICAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgRVhQRUNUX1RSVUUocmVu
ZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZh
Y2VMYXllckxpc3Quc2l6ZSgpLCAxVSk7CiAKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNs
ZWFyKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZvcmNlUmVuZGVyU3VyZmFjZShmYWxzZSk7
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwogICAgIEVYUEVDVF9GQUxTRShyZW5kZXJTdXJmYWNlMS0+cmVu
ZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCksIDBVKTsKIH0KQEAgLTY2NSw3ICsxMjMxLDExIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIHBhcmVudC0+
c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKKworICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgp
KTsKKwogCiAgICAgQVNTRVJUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7
CiAgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+
aWQoKSk7CkBAIC03MjQsNyArMTI5NCw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzQ3Jhc2hSZXBybykKICAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAK
LSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgQVNTRVJUX0VRKDJVLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CkBAIC03NzUsNyArMTM0Nyw3IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VX
aXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKIAogICAgIC8vIFdpdGhvdXQgYW4gYW5pbWF0aW9uLCB3ZSBzaG91bGQg
Y3VsbCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBmcm9tIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LgogICAgIEFTU0VSVF9FUSgxVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwpAQCAt
Nzk0LDcgKzEzNjYsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNs
aXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50KQogICAgIHBhcmVudC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBXaXRoIGFuIGFuaW1h
dGluZyB0cmFuc2Zvcm0sIHdlIHNob3VsZCBrZWVwIGNoaWxkIGFuZCBncmFuZENoaWxkIGluIHRo
ZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgzVSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpOwpAQCAtODU0LDcgKzE0MjYsMTAgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvTGF5
ZXJzKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKIAogICAgIEVY
UEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIw
KSksIGdyYW5kQ2hpbGQxLT5jbGlwUmVjdCgpKTsKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+Y2xp
cFJlY3QoKSk7CkBAIC05MjYsNyArMTUwMSw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb1N1cmZhY2VzKQogICAg
IHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJv
dW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgp
KTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBBU1NFUlRfVFJVRShn
cmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBBU1NFUlRfVFJVRShncmFuZENoaWxk
Mi0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE0MDcsNyArMTk4NCw3IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aG91dFByZXNlcnZlczNk
KQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50
LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5k
ZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZyb250RmFjaW5nQ2hp
bGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTEyLDcgKzIwODksNyBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQcmVzZXJ2ZXMzZCkK
ICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5n
ZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJpZnkgd2hpY2ggcmVuZGVy
U3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9GQUxTRShmcm9udEZhY2luZ0NoaWxk
LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTU5Nyw3ICsyMTc0LDkgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoQW5pbWF0aW5nVHJhbnNm
b3JtcykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgRVhQ
RUNUX0ZBTFNFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9UUlVFKGFuaW1h
dGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNjY5LDcgKzIyNDgsNyBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQcmVz
ZXJ2ZXMzZEZvckZsYXR0ZW5pbgogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8v
IFZlcmlmeSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX1RS
VUUoZnJvbnRGYWNpbmdTdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApp
bmRleCA5MWMyZDFkZmYxMjEyNzlhN2M3NDYwNzBjNWNiZGMyMjI0ZjJiNjVhLi42ZTI2MWQ4ZTYz
ZGU4OTcxYzY2MDlhMzIzYzk3NzljNDMzZTNlY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMzYs
MTAgKzM2LDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTY3JvbGxiYXJMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9D
Q1RleHR1cmVMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVEcmF3UXVhZC5oIgogI2lu
Y2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+CiAjaW5jbHVkZSA8cHVibGljL1dl
YlZpZGVvRnJhbWVQcm92aWRlci5oPgpAQCAtNDksNiArNTEsMTEgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dFRlc3RzOwogCit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6OlJldHVy
bjsKK3VzaW5nIDo6dGVzdGluZzo6QW55TnVtYmVyOwordXNpbmcgOjp0ZXN0aW5nOjpfOworCiBu
YW1lc3BhY2UgewogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCA6IHB1YmxpYyB0ZXN0
aW5nOjpUZXN0LCBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CkBAIC03MCw2ICs3
NywyOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01h
aW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4s
IGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9z
dFNldENvbnRlbnRzTWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXNUb01haW5UaHJlYWRPbkltcGxU
aHJlYWQoc2l6ZV90KSBPVkVSUklERSB7IH0KIAorICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdChib29sIHBhcnRpYWxTd2FwLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQsIFBhc3NPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3RQdHIpCisgICAgeworICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworCisgICAg
ICAgIHNldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhcnRpYWxTd2FwOworCisgICAgICAg
IE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y3JlYXRlKHNldHRpbmdzLCB0aGlzKTsKKworICAgICAgICBteUhvc3RJbXBsLT5pbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihncmFwaGljc0NvbnRleHQsIFVudGhyb3R0bGVkVXBsb2FkZXIp
OworICAgICAgICBteUhvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsK
KworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSByb290UHRyOworCisgICAgICAg
IHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICByb290LT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CisgICAgICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVj
dCgwLCAwLCAxMCwgMTApKTsKKyAgICAgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
ICAgICAgICBteUhvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAg
ICByZXR1cm4gbXlIb3N0SW1wbC5yZWxlYXNlKCk7CisgICAgfQorCiAgICAgc3RhdGljIHZvaWQg
ZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAg
ICAgewogICAgICAgICBBU1NFUlRfRVEobGF5ZXItPnNjcm9sbERlbHRhKCksIEludFNpemUoKSk7
CkBAIC0xMDk5LDYgKzExMjgsMzQwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cGFydGlhbFN3YXBSZWNlaXZlc0RhbWFnZVJlY3QpCiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkU3dh
cFJlY3QuaGVpZ2h0KCksIGFjdHVhbFN3YXBSZWN0LmhlaWdodCgpKTsKIH0KIAorY2xhc3MgRmFr
ZUxheWVyV2l0aFF1YWRzIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxGYWtlTGF5ZXJXaXRoUXVhZHM+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBGYWtlTGF5ZXJXaXRoUXVhZHMoaWQpKTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKSBPVkVSUklERQorICAgIHsKKyAgICAgICAg
Y29uc3QgQ29sb3IgZ3JheSgxMDAsIDEwMCwgMTAwKTsKKyAgICAgICAgSW50UmVjdCBxdWFkUmVj
dCgwLCAwLCA1LCA1KTsKKyAgICAgICAgT3duUHRyPENDRHJhd1F1YWQ+IG15UXVhZCA9IENDU29s
aWRDb2xvckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgZ3JheSk7
CisgICAgICAgIHF1YWRMaXN0LmFwcGVuZChteVF1YWQucmVsZWFzZSgpKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgRmFrZUxheWVyV2l0aFF1YWRzKGludCBpZCkKKyAgICAgICAgOiBDQ0xheWVy
SW1wbChpZCkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgTW9ja0NvbnRleHQgOiBwdWJsaWMg
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDEodXNl
UHJvZ3JhbSwgdm9pZChXZWJHTElkIHByb2dyYW0pKTsKKyAgICBNT0NLX01FVEhPRDUodW5pZm9y
bTRmLCB2b2lkKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQgeSwg
V0dDM0RmbG9hdCB6LCBXR0MzRGZsb2F0IHcpKTsKKyAgICBNT0NLX01FVEhPRDQodW5pZm9ybU1h
dHJpeDRmdiwgdm9pZChXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWUpKTsKKyAgICBNT0NLX01F
VEhPRDQoZHJhd0VsZW1lbnRzLCB2b2lkKFdHQzNEZW51bSBtb2RlLCBXR0MzRHNpemVpIGNvdW50
LCBXR0MzRGVudW0gdHlwZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSk7CisgICAgTU9DS19NRVRIT0Qx
KGdldFN0cmluZywgV2ViU3RyaW5nKFdHQzNEZW51bSBuYW1lKSk7CisgICAgTU9DS19NRVRIT0Qw
KGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNLCBXZWJTdHJpbmcoKSk7CisgICAgTU9D
S19NRVRIT0QxKGVuYWJsZSwgdm9pZChXR0MzRGVudW0gY2FwKSk7CisgICAgTU9DS19NRVRIT0Q0
KHNjaXNzb3IsIHZvaWQoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwg
V0dDM0RzaXplaSBoZWlnaHQpKTsKK307CisKK2NsYXNzIE1vY2tDb250ZXh0SGFybmVzcyB7Citw
cml2YXRlOgorICAgIE1vY2tDb250ZXh0KiBtX2NvbnRleHQ7CitwdWJsaWM6CisgICAgTW9ja0Nv
bnRleHRIYXJuZXNzKE1vY2tDb250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgIHsKKyAgICAgICAgLy8gQ2F0Y2ggInVuaW50ZXJlc3RpbmciIGNhbGxzCisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVzZVByb2dyYW0oXykpCisgICAgICAgICAg
ICAuVGltZXMoMCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZHJhd0VsZW1l
bnRzKF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAgIEVYUEVD
VF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm1NYXRyaXg0ZnYoXywgXywgXywgXykpCisgICAgICAg
ICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9y
bTRmKF8sIF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAgIC8v
IEFueSBvdGhlciBzdHJpbmdzIGFyZSBlbXB0eQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250
ZXh0LCBnZXRTdHJpbmcoXykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdl
YlN0cmluZygpKSk7CisKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgcGFydGlhbCBzd2FwLCBpZiBu
ZWVkZWQKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0U3RyaW5nKEdyYXBoaWNz
Q29udGV4dDNEOjpFWFRFTlNJT05TKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1
cm4oV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKSkpOworCisgICAgICAg
IEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVN
KCkpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0cmluZygiR0xfQ0hS
T01JVU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICAvLyBBbnkgdW4tc2FuY3Rpb25l
ZCBjYWxscyB0byBlbmFibGUoKSBhcmUgT0sKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4
dCwgZW5hYmxlKF8pKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybigpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG11c3REcmF3U29saWRRdWFkKCkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5H
TEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKQorICAgICAgICAg
ICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24o
KTsKKworICAgICAgICAvLyAwIGlzIHRoZSBoYXJkY29kZWQgcmV0dXJuIHZhbHVlIG9mIGdldFVu
aWZvcm1Mb2NhdGlvbgorICAgICAgICAvLyAxIGlzIGNvdW50ID8/PworICAgICAgICAvLyBCb29s
ZWFuIGNhc3QgdG8gc3RyPz8KKyAgICAgICAgLy8gZmxvYXQqIHZhbHVlcworICAgICAgICBFWFBF
Q1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3JtTWF0cml4NGZ2KDAsIDEsIF8sIF8pKQorICAgICAg
ICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRp
b24oKTsKKworICAgICAgICAvLyAwIGlzIHRoZSBoYXJkY29kZWQgcmV0dXJuIHZhbHVlIG9mIGdl
dFVuaWZvcm1Mb2NhdGlvbgorICAgICAgICAvLyAzIGZsb2F0cyBhcmUgY29sb3IgLyAyNTUKKyAg
ICAgICAgLy8gMSBpcyBBbHBoYQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlm
b3JtNGYoMCwgXywgXywgXywgMSkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisg
ICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworICAgICAgICAKKyAgICAgICAgLy8g
MSBpcyBoYXJkY29kZWQgcmV0dXJuIHZhbHVlIG9mIGZha2UgY3JlYXRlUHJvZ3JhbSgpCisgICAg
ICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVzZVByb2dyYW0oMSkpCisgICAgICAgICAgICAu
V2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwor
CisgICAgfQorCisgICAgdm9pZCBtdXN0U2V0U2Npc3NvcihpbnQgeCwgaW50IHksIGludCB3aWR0
aCwgaW50IGhlaWdodCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSkKKyAgICAgICAgICAgIC5XaWxs
T25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAg
ICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgc2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVz
T25TYXR1cmF0aW9uKCk7CisgICAgfQorCit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIG5vUGFydGlhbFN3YXApCit7CisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhpY3MgY29u
dGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQ
dHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2Fz
dDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBo
aWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFy
bmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3QgY2FzZQorICAgIGhh
cm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAs
IDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4gdGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KGZhbHNlLCBjb250
ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJl
cGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwor
ICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlm
eUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXApCit7CisgICAgLy8gU2V0IHVwIG1vY2sgZ3Jh
cGhpY3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRl
eHQoYWRvcHRQdHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpz
dGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFj
dFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhh
cm5lc3MgaGFybmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3QgY2Fz
ZQorICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRT
Y2lzc29yKDAsIDAsIDEwLCAxMCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAx
MCwgMTApOworCisgICAgLy8gUnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdCh0cnVlLCBjb250ZXh0LCBG
YWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRv
RHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15
SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENs
ZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgcGFydGlhbFN3YXBOb1VwZGF0ZSkKK3sKKyAgICAvLyBTZXQgdXAgbW9jayBn
cmFwaGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29u
dGV4dChhZG9wdFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRleHQmIG1vY2tDb250ZXh0ID0g
KnN0YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRy
YWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAgIE1vY2tDb250ZXh0
SGFybmVzcyBoYXJuZXNzKCZtb2NrQ29udGV4dCk7CisKKyAgICAvLyBDb25maWd1cmUgdGVzdCBj
YXNlCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVzdFNl
dFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCA4LCAy
LCAyKTsKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0
U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwg
MCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAgICBPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4
dCwgRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworICAgIAorICAgIC8vIERyYXcgb25j
ZSB0byBtYWtlIHN1cmUgbGF5ZXIgaXMgbm90IG5ldworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6
OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9E
cmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlI
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAvLyBHZW5lcmF0ZSB1cGRh
dGUgaW4gbGF5ZXIKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG15SG9zdEltcGwtPnJvb3RMYXll
cigpOworICAgIHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDIsIDIpKTsKKwor
ICAgIC8vIFRoaXMgZHJhdyBzaG91bGQgZ2VuZXJhdGUgbm93IG5ldyB1ZHBhdGVzCisgICAgRVhQ
RUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOworCisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250
ZXh0KTsKK30KKworY2xhc3MgUGFydGlhbFN3YXBDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBXZWJTdHJpbmcgZ2V0U3RyaW5nKFdHQzNEZW51
bSBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVY
VEVOU0lPTlMpCisgICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0
X3N1Yl9idWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIH0KKyAgICAK
KyAgICBXZWJTdHJpbmcgZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01JVU0oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIik7
CisgICAgfQorfTsKKworc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gc2V0
dXBMYXllcnNGb3JPcGFjaXR5KGJvb2wgcGFydGlhbFN3YXAsIENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIHNldHRpbmdz
LnBhcnRpYWxTd2FwRW5hYmxlZCA9IHRydWU7CisKKyAgICAvLyBTZXQgdXAgbW9jayBncmFwaGlj
cyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChh
ZG9wdFB0cihuZXcgUGFydGlhbFN3YXBDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBteUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHNldHRpbmdzLCBjbGll
bnQpOworICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQucmVs
ZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICBteUhvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3Jl
YXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAg
ICB8CisgICAgICAgICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0t
LS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAg
ICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAg
ICB8ICAgICB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAg
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGhhdmUg
cmVuZGVyIHN1cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hp
bGQgPSBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgzKTsKKworICAgIEludFJlY3Qgcm9vdFJl
Y3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUw
KTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJv
b3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0
LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJl
Y3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KHJvb3RSZWN0KTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAg
Y2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBj
aGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hp
bGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudChmYWxz
ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsK
KyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCks
IGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXpl
KGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChncmFuZENoaWxkUmVjdCk7CisgICAgZ3Jh
bmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdy
YW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkp
OworCisgICAgbXlIb3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBy
ZXR1cm4gbXlIb3N0SW1wbC5yZWxlYXNlKCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgY29udHJpYnV0aW5nTGF5ZXJFbXB0eVNjaXNzb3JQYXJ0aWFsU3dhcCkKK3sKKyAg
ICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IHNldHVwTGF5ZXJzRm9y
T3BhY2l0eSh0cnVlLCB0aGlzKTsKKworICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1w
bDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVw
YXJlVG9EcmF3KGZyYW1lKSk7CisKKyAgICAgICAgLy8gSnVzdCBmb3IgY29uc2lzdGVuY3ksIHRo
ZSBtb3N0IGludGVyZXN0aW5nIHN0dWZmIGFscmVhZHkgaGFwcGVuZWQKKyAgICAgICAgbXlIb3N0
SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxM
YXllcnMoZnJhbWUpOworCisgICAgICAgIC8vIFZlcmlmeSBhbGwgcXVhZHMgaGF2ZSBiZWVuIGNv
bXB1dGVkCisgICAgICAgIEFTU0VSVF9FUSgyVSwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSk7
CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgp
LnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5x
dWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpTb2xpZENv
bG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwgZnJhbWUucmVuZGVy
UGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICB9Cit9CisKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udHJpYnV0aW5nTGF5ZXJFbXB0eVNjaXNzb3JO
b1BhcnRpYWxTd2FwKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJ
bXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KGZhbHNlLCB0aGlzKTsKKworICAgIHsKKyAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBFWFBFQ1Rf
VFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisKKyAgICAgICAgLy8gSnVz
dCBmb3IgY29uc2lzdGVuY3ksIHRoZSBtb3N0IGludGVyZXN0aW5nIHN0dWZmIGFscmVhZHkgaGFw
cGVuZWQKKyAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgICAgIG15
SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgICAgIC8vIFZlcmlmeSBh
bGwgcXVhZHMgaGF2ZSBiZWVuIGNvbXB1dGVkCisgICAgICAgIEFTU0VSVF9FUSgyVSwgZnJhbWUu
cmVuZGVyUGFzc2VzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVy
UGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJh
bWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UShDQ0RyYXdRdWFkOjpTb2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0
KClbMF0tPm1hdGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVy
U3VyZmFjZSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgp
KTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcXVhZHNUb0Zp
bGxTY3JlZW4pCit7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwg
PSBzZXR1cExheWVyc0Zvck9wYWNpdHkodHJ1ZSwgdGhpcyk7CisKKyAgICAvLyBUaGlzIHdpbGwg
Y2F1c2UgQ0NMYXllclRyZWVIb3N0SW1wbCB0byBhZGQgcXVhZHMgdG8gZmlsbCBzY3JlZW4KKyAg
ICBteUhvc3RJbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMjU1LCAwLCAwKSk7CisKKyAg
ICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAg
ICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBh
bHJlYWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwor
ICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAv
LyBWZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAorICAgICAgICBBU1NFUlRfRVEo
MlUsIGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZy
YW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRf
RVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBd
LT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1
YWQ6OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+
bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpTb2xpZENvbG9yLCBm
cmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMV0tPm1hdGVyaWFsKCkpOworICAgIH0K
K30KKwogLy8gTWFrZSBzdXJlIHRoYXQgY29udGV4dCBsb3N0IG5vdGlmaWNhdGlvbnMgYXJlIHBy
b3BhZ2F0ZWQgdGhyb3VnaCB0aGUgdHJlZS4KIGNsYXNzIENvbnRleHRMb3N0Tm90aWZpY2F0aW9u
Q2hlY2tMYXllciA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApp
bmRleCA0NGM2MmUzZTNjNWM4ODI5MTQwZDQxMTE1M2UwYWU0OWE1Zjc3MDQ1Li5kMmY3MjE4ZjM2
MDU3NWRlMWEzZDRmNjRiNjllNjRmNzUyZDkwYzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTI2NSw3
ICsyNjUsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdEltcGwuYXBwZW5kKG1fcm9vdC5nZXQoKSk7CiAKLSAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VM
YXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VM
YXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisK
KyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0
ZXJhdG9yQmVnaW4gPSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdEltcGwpOwogICAgIH0KIApAQCAtMjgxLDcgKzI4NCwxMCBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIHJvb3QtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcm9v
dC0+Ym91bmRzKCkpKTsKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0u
YXBwZW5kKG1fcm9vdCk7CiAKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMobV9yZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0Q2hyb21pdW0sIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9yQmVnaW4gPSBUeXBl
czo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVt
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NS
ZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVu
ZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDdkYWMwMDVkMjRjYWZhY2MyNzFiODZhZDVmZGUzODU2
NmQwYmQ4NzQuLjlkOGQxOWY3MjM4MzRkNDQxNDU5YzU3ODNiOTQ5NmFmYjE1Y2U5ZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0
LmNwcApAQCAtMTEyLDE1ICsxMTIsMTYgQEAgVEVTVChDQ1JlbmRlclN1cmZhY2VUZXN0LCBzYW5p
dHlDaGVja1N1cmZhY2VDcmVhdGVzQ29ycmVjdFNoYXJlZFF1YWRTdGF0ZSkKICAgICByZW5kZXJT
dXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0ob3JpZ2luKTsKICAgICByZW5kZXJTdXJmYWNlLT5z
ZXRDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJl
Y3QoY2xpcFJlY3QpOworICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNzb3JSZWN0KGNsaXBSZWN0
KTsKICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3T3BhY2l0eSgxKTsKLQorICAgIAogICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gcmVuZGVyU3VyZmFjZS0+
Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7CiAKICAgICBFWFBFQ1RfVFJVRShzaGFyZWRRdWFkU3Rh
dGUtPnF1YWRUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpOwogICAgIEVYUEVDVF9FUSgzMCwgc2hh
cmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpLm00MSgpKTsKICAgICBFWFBFQ1RfRVEoNDAs
IHNoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKS5tNDIoKSk7CiAgICAgRVhQRUNUX0VR
KGNvbnRlbnRSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpKTsKLSAgICBFWFBFQ1Rf
RVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNUX0VR
KGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCkpOwogICAgIEVYUEVDVF9F
USgxLCBzaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNoYXJl
ZFF1YWRTdGF0ZS0+aXNPcGFxdWUoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144905</attachid>
            <date>2012-05-30 13:25:48 -0700</date>
            <delta_ts>2012-05-30 13:31:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120530162547.patch</filename>
            <type>text/plain</type>
            <size>116708</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ2YWRkYzI3NzcxNDg1
OTFkYmM3N2NjYTZkMWJjMWJlZDMyNWYzMS4uMDhiMDE1ZDkzOTI2MDAxNjA1MDI3YjhmMDkwOTM5
OWZiNDA5M2JjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTA1LTMwICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRoZSBhY3RpdmF0aW9u
IGhpZ2hsaWdodCBkb2VzIG5vdCBhbHdheXMgaGlkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQZXJmb3JtaW5nIHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9u
IGR1cmluZworICAgICAgICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMuIFN0b3Jpbmcgc2Npc3NvclJl
Y3QgaW4gc2hhcmVkIHF1YWQgc3RhdGUKKyAgICAgICAgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQg
ZHVyaW5nIGRyYXdRdWFkLiBBZGRlZCBzY2lzc29yUmVjdCBmaWVsZHMKKyAgICAgICAgaW50byBs
YXllcnMgYW5kIHJlbmRlciBzdXJmYWNlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IGxheW91dCB0ZXN0cy4gSW50cm9kdWNlZCBtb3JlIHVuaXQgdGVzdHMgdG8KKyAgICAgICAgdGVz
dCBlbmQtdG8tZW5kIGRyYXdpbmcgdXNpbmcgbW9jayBncmFwaGljIGNvbnRleHQsIGFuZCBhZGRl
ZCBtb3JlCisgICAgICAgIHRlc3QgY2FzZXMgdG8gQ0NMYXllclRyZWVIb3N0Q29tbW9uIHRvIHZl
cmlmeSBzY2lzc29yUmVjdCBjb21wdXRhdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNl
dFNjaXNzb3JSZWN0KToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyU3VyZmFjZVF1
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzZXRTY2lzc29yUmVjdCk6CisgICAg
ICAgIChSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6
OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlU2hh
cmVkUXVhZFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpzZXRTY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGN1bGF0ZVN1cmZhY2VTY2lzc29yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RDb21tb24pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
YWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJT
dXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
aDoKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oOgorICAg
ICAgICAoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRR
dWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOgorICAgICAgICAoQ0NTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OnNjaXNzb3JSZWN0
KToKKwogMjAxMi0wNS0yOSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFRyYW5zZm9ybWVkIGZpeGVkIHBvc2l0aW9uIGxheWVycyBoYXZlIGFuIGluY29ycmVj
dCBvdmVybGFwIG1hcCBlbnRyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlNmQwYjVi
MDkwYTQ3YmI2YWNlY2I2MDAxNmZiZmVhN2Q2NzkxYTBmLi5lNTBlYjI3YWY5MDI1M2E1NGM1ZTEw
Mzc0MzNkYTViNzQyZmJhNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI5IEBACisyMDEyLTA1LTMwICBaZWV2IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFRoZSBhY3RpdmF0aW9uIGhpZ2hsaWdodCBkb2VzIG5vdCBhbHdheXMgaGlkZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0
IHRlc3RzIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwgdXNpbmcgbW9jayBncmFwaGljIGNvbnRleHQK
KyAgICAgICAgdG8gdmVyaWZ5IGVuZC10by1lbmQgcXVhZCBkcmF3aW5nLgorCisgICAgICAgIEFk
ZGVkIG1vcmUgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhvc3RDb21tb24gdG8gdmVyaWZ5IGNs
aXAgYW5kCisgICAgICAgIHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbnMuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNU
KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2FsY0Ry
YXdFdGMpOgorICAgICAgICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDUtMzAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIHBvcnQgd2ViZnJhbWVfdW5pdHRlc3QuY2Mg
dG8gd2Via2l0X3VuaXRfdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5YmUwMjc5ZTJhZWJj
ZDdjZGM3YzY4YmQwMjVlYmUwODQxYzE3NWQzLi45MTJmODY1Njg2NmYyZTliMWY3ZDI2NWFmYWVi
ZGI1NjY2Y2IwNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMzksNiArMTM5LDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3Zpc2libGVMYXllclJlY3Q7IH0KICAgICB2b2lkIHNldFZpc2libGVMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkgeyBtX3Zpc2libGVMYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0OyB9CiAKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0
IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQor
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRp
b247IH0KIApAQCAtMzA2LDcgKzMwOSwxNSBAQCBwcml2YXRlOgogCiAgICAgLy8gTGF5ZXIgcHJv
cGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOworCisgICAgLy8gVXNlcyBsYXllcidzIGNv
bnRlbnQgc3BhY2UuCiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CisKKyAgICAvLyBE
dXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90
aGluZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgc2V0IHRvIGxh
eWVyJ3MgY2xpcFJlY3QgaWYgdXNlc0xheWVyQ2xpcHBpbmcgaXMgdHJ1ZSwgb3RoZXJ3aXNlCisg
ICAgLy8gaXQncyB0YXJnZXRSZW5kZXJTdXJmYWNlJ3MgY29udGVudFJlY3QuCisgICAgLy8gVXNl
cyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAg
ICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAg
IGJvb2wgbV9zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQ7CkBAIC0zNDQsMTIgKzM1NSwxNiBAQCBw
cml2YXRlOgogICAgIE93blB0cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IG1fcmVuZGVyU3VyZmFj
ZTsKICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwogICAgIGJvb2wgbV9kcmF3T3BhY2l0eUlzQW5p
bWF0aW5nOworCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSBzcGFjZS4KICAgICBJbnRSZWN0
IG1fY2xpcFJlY3Q7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1
cmZhY2U7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2Ry
YXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1J
c0FuaW1hdGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50
UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBhOWYzZDQ2NjVkMzZl
NTI4ZDNmZTNmYzkxYzg2MDI1ZjRlOWE4N2VkLi5iYzNjOWI0MjgzM2ZmM2NkYzhiYzE1Mjc4NzRl
NzFlOWU1M2Q4YTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAg
LTM4MCw3ICszODAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFu
Z2VkKCkKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKIH0KIAotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRl
clN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xl
YXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJT
dXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlU3dhcFJl
Y3QpCiB7CiAgICAgLy8gTm9uLXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUg
Y29udGVudHMgdG8gdHJhbnNwYXJlbnQuIE9uIERFQlVHIGJ1aWxkcywgdGhlIHJvb3QgbGF5ZXIK
ICAgICAvLyBpcyBjbGVhcmVkIHRvIGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2Vy
ZSBub3QgZHJhd24gb24gdGhlIHNjcmVlbi4gSWYgd2UKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFj
ZSogcmVuZGVyU3VyZmFjZSwgQwogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNs
ZWFyQ29sb3IoMCwgMCwgMSwgMSkpOwogCiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFy
dGlhbFN3YXApCi0gICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJm
YWNlRGFtYWdlUmVjdCkpOworICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJl
Y3Qoc3VyZmFjZVN3YXBSZWN0KSk7CiAgICAgZWxzZQogICAgICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCkBA
IC00NDgsMzYgKzQ0OCwyNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09wKCkK
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5k
ZXJQYXNzKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlU3dhcFJl
Y3QpCiB7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyUGFzcy0+
dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlmICghdXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNl
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0
KCkpOworICAgIGNsZWFyUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlLCBzdXJmYWNlU3dhcFJlY3QpOwogCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVh
ZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwogICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29u
c3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOyBp
dCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK2l0KQotICAgICAgICBkcmF3UXVhZChp
dC0+Z2V0KCksIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgICAgICBkcmF3
UXVhZChpdC0+Z2V0KCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1
YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdl
UmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdR
dWFkKiBxdWFkKQogewotICAgIEludFJlY3Qgc2Npc3NvclJlY3Q7Ci0gICAgaWYgKG1fY2FwYWJp
bGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1h
Z2VSZWN0ID0gc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAgICAgIGlmICghcXVhZC0+Y2xpcFJlY3Qo
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3QocXVh
ZC0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgIHNjaXNzb3JSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChj
bGlwQW5kRGFtYWdlUmVjdCk7Ci0gICAgICAgIGlmIChzY2lzc29yUmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gcXVh
ZC0+Y2xpcFJlY3QoKTsKLQorICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBxdWFkLT5zY2lzc29y
UmVjdCgpOwogICAgIGlmIChzY2lzc29yUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CiAKICAg
ICBpZiAocXVhZC0+bmVlZHNCbGVuZGluZygpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKQEAgLTYyOSw3ICs2MTks
NiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNv
bnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKgogCiAgICAgZHJhd0JhY2tncm91bmRGaWx0ZXJz
KHF1YWQpOwogCi0gICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhp
cywgcXVhZC0+c3VyZmFjZURhbWFnZVJlY3QoKSk7CiAgICAgaWYgKHF1YWQtPmlzUmVwbGljYSgp
KQogICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3UmVwbGljYSh0aGlzKTsKICAg
ICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDFhMmViZWQwZTg2
Yjk5ZjU4MTk2ODMxYmNlY2U0NjMwMTQ3MmM5NTkuLmIzZTg0OWZlZTE5ZjUxMmEwODUzYjZlNjBh
MTY1MjIxMGJiNzU4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC05
Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdwb3J0Q2hhbmdlZCgpOwogCiAgICAg
dm9pZCBiZWdpbkRyYXdpbmdGcmFtZShDQ1JlbmRlclN1cmZhY2UqIGRlZmF1bHRSZW5kZXJTdXJm
YWNlKTsKLSAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAg
IHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlU3dhcFJlY3QpOwogICAgIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAg
ICB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUm
IGh1ZFNpemUpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgaW50IHZpZXdwb3J0
V2lkdGgoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdw
b3J0SGVpZ2h0KCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIAotICAgIHZv
aWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOwog
ICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAppbmRleCAwZWE0OGFk
MTM5OWVkYTg1YTc1YWM3MTQzNWUwZTQxMWFjZWQ3NTUwLi5hNzdlYjFlNzhkNTkwYzNlNzhmMDU3
MDQxZDk2Y2MyZjIxNTBlMjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApA
QCAtOTEsNiArOTEsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCkgeyBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7IH0KIAorICAgIGNvbnN0
IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQor
ICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9z
Y2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CisKICAgICB2b2lkIHNldEZpbHRlcnMoY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRl
cnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KIApAQCAtMTE5LDYgKzEyMiw3IEBAIHByaXZhdGU6
CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25pbmdMYXllcjsKICAgICBMYXllckNocm9taXVtKiBt
X21hc2tMYXllcjsKIAorICAgIC8vIFVzZXMgdGhpcyBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50
UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAKQEAgLTEzNCw3ICsx
MzgsMTYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5p
bWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisKKyAgICAv
LyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgogICAgIElu
dFJlY3QgbV9jbGlwUmVjdDsKKworICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRo
ZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAv
LyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBjbGlwUmVjdCBpZiB1c2VzTGF5ZXJD
bGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKKyAgICAvLyBpdCdzIHRhcmdldFJlbmRlclN1cmZh
Y2UncyBjb250ZW50UmVjdC4KKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdz
IHRhcmdldCBzdXJmYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsKIAogICAgIC8vIFRoZSBuZWFy
ZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRoYXQgd2lsbCBjb250YWluIHRoZSBjb250ZW50
cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlzIGdvaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKaW5k
ZXggZjRlZjJkM2YyMWMxZmFlNTc2NjYzY2QzMjJmY2IxMjdiODdjYmZlYi4uNzE4MTEyYmM2ZjE5
MTcyNjMwOTMyZTRlNWJhMmM0MGMzYzNjOTJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaApAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9y
bSgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3JtKCk7IH0KICAg
ICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRT
dGF0ZS0+bGF5ZXJSZWN0KCk7IH0KLSAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5jbGlwUmVjdCgpOyB9CisgICAgY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+c2Np
c3NvclJlY3QoKTsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJl
ZFF1YWRTdGF0ZS0+b3BhY2l0eSgpOyB9CiAgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiBibGVu
ZGluZywgd2hhdCBwYXJ0IG9mIHRoZSBjb250ZW50cyBvZiB0aGlzIHF1YWQgYXJlIG9wYXF1ZT8K
ICAgICBJbnRSZWN0IG9wYXF1ZVJlY3QoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApp
bmRleCA2ZDgwNjg0ZjY2NGYwMjVkZjUzNmE3MGVlZGZkNDQ1YmZiODM0NGY0Li5hOTQ4NWM1Mzg0
ODdmNTIzYWE1ZTI4MjkxOGZmZmU4MGVjNzVmOTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CkBAIC0xMzcsMTAgKzEzNyw3IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnREcmF3c0Nv
bnRlbnQoKQogCiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6Y3Jl
YXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGxheWVyQ2xpcFJlY3Q7
Ci0gICAgaWYgKHVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVyQ2xpcFJlY3QgPSBj
bGlwUmVjdCgpOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFu
c2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCB2aXNpYmxlTGF5ZXJSZWN0KCksIGxheWVyQ2xpcFJl
Y3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1ZSgpKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3Rh
dGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVy
UmVjdCgpLCBtX3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBvcGFxdWUoKSk7CiB9CiAKIHZv
aWQgQ0NMYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAppbmRleCBiYjc1YTg5ZWJhZDNmNWFhYTM5ODUyZDQ0ZDk4NGE4MjExOWI5NmYw
Li45MjkzNjE2ZTNmMzRiNzQ5NDcyODhmZTc5NjNlMTk3M2Y4YTYzNjMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTE2Myw2ICsxNjMsMTAgQEAgcHVibGljOgogICAgIC8vIFVzYWdlOiBpZiB0
aGlzLT51c2VzTGF5ZXJDbGlwcGluZygpIGlzIGZhbHNlLCB0aGVuIHRoaXMgY2xpcFJlY3Qgc2hv
dWxkIG5vdCBiZSB1c2VkLgogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkgeyBtX2NsaXBSZWN0ID0gcmVjdDsgfQorCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3Nv
clJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lz
c29yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3QgPSByZWN0OyB9CisK
ICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZh
Y2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1
cmZhY2U7IH0KIApAQCAtMjk3LDYgKzMwMSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVHJhY2tzIGlm
IGRyYXdpbmctcmVsYXRlZCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0IHJlZHJh
dy4KICAgICBib29sIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7CiAKKyAgICAvLyBVc2VzIGxheWVy
J3MgY29udGVudCBzcGFjZS4KICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBi
b29sIG1fbWFza3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwpAQCAtMzUxLDE3ICszNTYs
MjQgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcmVjdCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBz
Y2lzc29yIHdoZW4gdGhpcyBsYXllciBpcyBkcmF3bi4KICAgICAvLyBJbmhlcml0ZWQgYnkgdGhl
IHBhcmVudCBsYXllciBhbmQgZnVydGhlciByZXN0cmljdGVkIGlmIHRoaXMgbGF5ZXIgbWFza3MK
ICAgICAvLyB0byBib3VuZHMuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgog
ICAgIEludFJlY3QgbV9jbGlwUmVjdDsKIAorICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlm
aWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4K
KyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCisgICAgSW50UmVjdCBtX3NjaXNz
b3JSZWN0OworCiAgICAgLy8gUmVuZGVyIHN1cmZhY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5
ZXIuIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzCiAgICAgLy8gd2lsbCByZW5kZXIgdG8g
dGhpcyBzdXJmYWNlLgogICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+IG1fcmVuZGVyU3VyZmFj
ZTsKIAogICAgIC8vIEhpZXJhcmNoaWNhbCBib3VuZGluZyByZWN0IGNvbnRhaW5pbmcgdGhlIGxh
eWVyIGFuZCBpdHMgZGVzY2VuZGFudHMuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNw
YWNlLgogICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwogCiAgICAgLy8gUmVjdCBp
bmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCiAgICAg
Ly8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5
LgorICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIEZsb2F0UmVjdCBtX3Vw
ZGF0ZVJlY3Q7CiAKICAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA5NjM5N2NhNDVjNDIxNjQ5NWFjZmI4
YTA3ZTRiNmEwYTE1OTkwMWFjLi5jMmU1NjQ2NjdjZTJlZDgyZjUxZTFhMjNhMGM5OWMyZDk3ZDQw
MjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTUxNCw3ICs1MTQsMTAg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290
TGF5ZXIsIENDVGV4dHVyZVVwZGF0ZXImIHUKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxl
VHJhbnNmb3JtOwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdz
LmRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIGRl
dmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgdXBkYXRlTGlzdCwgcm9vdFJlbmRl
clN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4
dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRl
bnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwg
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKworICAgICAgICBG
bG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QoRmxvYXRQb2ludCgwLCAwKSwgdmlld3BvcnRTaXplKCkp
OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHModXBkYXRlTGlzdCwgcm9vdERhbWFnZVJlY3QpOwogICAgIH0KIAogICAgIC8vIFJl
c2V0IHBhcnRpYWwgdGV4dHVyZSB1cGRhdGUgcmVxdWVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCAyYTBmNzE4MDM5MjIyNmY1ZTRhMjgwNzkyOGFm
NTdmNDU2ZWFmNjg4Li45NGZlZjhjMTkzNGRlOTc2YmFmZGM0OGVkNjY5ZDE5NWVlOGIwMzdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTY1LDYgKzY1
LDM5IEBAIEludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVj
dChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlCiAgICAgcmV0dXJuIGxheWVyUmVjdDsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICBSZW5kZXJTdXJm
YWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBy
ZW5kZXJTdXJmYWNlLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICBGbG9h
dFJlY3QgY2xpcEFuZERhbWFnZSA9IENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZl
cnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXll
ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRlcnNlY3Qo
bGF5ZXItPmNsaXBSZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2xpcEFuZERhbWFnZS5pbnRl
cnNlY3QocmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0
ZVN1cmZhY2VTY2lzc29yUmVjdChMYXllclR5cGUqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJv
b3REYW1hZ2VSZWN0KQoreworICAgIExheWVyVHlwZSogcGFyZW50TGF5ZXIgPSBsYXllci0+cGFy
ZW50KCk7CisgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBwYXJlbnRMYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworICAgIFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNl
ID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBzdXJm
YWNlLT5jbGlwUmVjdCgpOworICAgIGlmIChjbGlwUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIGNs
aXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIHN1cmZh
Y2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
bnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB0YXJnZXRTdXJmYWNlLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IENDTWF0
aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJv
b3REYW1hZ2VSZWN0KTsKKworICAgIGNsaXBBbmREYW1hZ2UuaW50ZXJzZWN0KGNsaXBSZWN0KTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKwogdGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIGxheWVySXNJbkV4aXN0
aW5nM0RSZW5kZXJpbmdDb250ZXh0KExheWVyVHlwZSogbGF5ZXIpCiB7CkBAIC0yODIsNyArMzE1
LDcgQEAgc3RhdGljIGJvb2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExh
eWVyVHlwZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWcKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBs
YXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhl
CiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNl
cywgZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3Qs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KLXN0YXRp
YyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVy
VHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJh
cmNoeU1hdHJpeCwgUmVuZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1Bp
eGVscywgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVy
TGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCitzdGF0
aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50
TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
UmVuZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJT
b3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBjb21wdXRlcyB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnMgcmVjdXJzaXZl
bHkgZm9yIHRoaXMKICAgICAvLyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gSXQgYWxz
byBjb21wdXRlcyB0aGUgYXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzLgpAQCAtNTczLDcgKzYw
Niw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUlu
dGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSog
Y2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0Nv
bnRlbnQgPSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXll
clR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVyPihjaGlsZCwg
cm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJpeCwgbmVhcmVzdEFu
Y2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50
cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKKyAgICAgICAgYm9vbCBkcmF3c0NvbnRl
bnQgPSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0
LCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1Ymxh
eWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQ
aXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwg
bWF4VGV4dHVyZVNpemUpOwogCiAgICAgICAgIGlmIChkcmF3c0NvbnRlbnQpIHsKICAgICAgICAg
ICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7CkBAIC02OTQsOSArNzI3LDkgQEAgc3Rh
dGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5
ZXJUeXBlKiBsYXllciwgTGF5ZXIKIAogLy8gRklYTUU6IEluc3RlYWQgb2YgdXNpbmcgdGhlIGZv
bGxvd2luZyBmdW5jdGlvbiB0byBzZXQgdmlzaWJpbGl0eSByZWN0cyBvbiBhIHNlY29uZAogLy8g
dHJlZSBwYXNzLCByZXZpc2UgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCgpIHNvIHRoYXQgdGhp
cyBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZQotLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8PigpLgorLy8gcGFzcyBpbnNpZGUgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDw+KCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdGF0
aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKIHsKICAgICAvLyBV
c2UgQmFja1RvRnJvbnQgc2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBl
bmRlbnQuCiAgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBMYXllckxpc3Qs
IFJlbmRlclN1cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4g
Q0NMYXllckl0ZXJhdG9yVHlwZTsKQEAgLTcwNywxOSArNzQwLDM0IEBAIHN0YXRpYyB2b2lkIHdh
bGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3QmIHJl
bmRlclN1cmZhCiAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBjYWxjdWxh
dGVWaXNpYmxlTGF5ZXJSZWN0KCppdCk7CiAgICAgICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVy
UmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAgICAgfQorICAgICAgICBpZiAoaXQucmVwcmVz
ZW50c0l0c2VsZigpKSB7CisgICAgICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3Vs
YXRlTGF5ZXJTY2lzc29yUmVjdDxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPigqaXQsIHJv
b3REYW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGl0LT5zZXRTY2lzc29yUmVjdChzY2lzc29yUmVj
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1
cmZhY2UoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVN1
cmZhY2VTY2lzc29yUmVjdDxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPigqaXQsIHJvb3RE
YW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGl0LT5yZW5kZXJTdXJmYWNlKCktPnNldFNjaXNzb3JS
ZWN0KHNjaXNzb3JSZWN0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNo
cm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVs
bEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlz
dCwgaW50IG1heFRleHR1cmVTaXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiBy
b290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCit7CisgICAg
V2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNocm9taXVtLCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9p
ZD4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAw
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVy
KiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQoreworICAgIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1Jl
bmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJp
eCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJM
aXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVj
dCYgcm9vdERhbWFnZVJlY3QpCiB7Ci0gICAgV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5
ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgd2Fsa0xheWVyc0Fu
ZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtPihyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzSW50ZXJuYWw8TGF5
ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKIH0KIAot
dm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXll
clNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RE
YW1hZ2VSZWN0KQogewotICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUlu
dGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNl
LCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVy
YXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJT
b3J0ZXIsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdHM8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1
cmZhY2U+KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4sIEND
UmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZVJlY3QpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oCmluZGV4IDM3NjJmNjRiMTliMzEzNDk5OGU0MGI0NDc2MzhhMjQ2ZjEyNDhiYmIu
LjFjNWU5ZTE3MDFkM2QyZWUzOGI1OWZhZTllNGJjNWY2NzJhYzNkNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC00MSw4ICs0MSwxMSBAQCBjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RDb21tb24gewogcHVibGljOgogICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0
ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAg
IHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNo
cm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJh
cmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50
IG1heFRleHR1cmVTaXplKTsKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5
ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lk
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1w
bCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJM
aXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKKworICAgIHN0YXRpYyB2
b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3Qp
OworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBG
bG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJU
eXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAppbmRleCA5MTMzNmE3NzY4ZDNkZDYyMTFiMDk4NDg0OWM2MmMyM2E0
ZWQ1MzYwLi5kZDA0Y2I4MjQ2YTE0NmMwZDM5ZWUxZTA2MTE1ZTNhNGM0MGI3MmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgImNj
L0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VTY2FsZUFuaW1hdGlvbi5oIgogI2lu
Y2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oIgpAQCAtMjI5LDI3ICsyMzAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5
ZXIsCiAgICAgfQogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNlKEND
TGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERhbWFn
ZVJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgIC8vIEZvciBu
b3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBkYW1hZ2UgYXMgdGhlIGRhbWFnZSBm
b3IKLSAgICAvLyBhbGwgc3VyZmFjZXMsIGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgot
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJl
bmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
OwotICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAg
ICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBS
ZWN0IG9mCi0gICAgICAgIC8vIGludmVyc2UgdHJhbnNmb3Jtcy4gSW4gdGhpcyB1bmNvbW1vbiBj
YXNlLCBpdHMgc2ltcGxlciB0bwotICAgICAgICAvLyBqdXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1
cmZhY2UuCi0gICAgICAgIC8vIEZJWE1FOiB1c2UgY2FsY3VsYXRlVmlzaWJsZVJlY3QgdG8gaGFu
ZGxlIHByb2plY3Rpb25zLgotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Ug
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgc3VyZmFjZURh
bWFnZVJlY3QgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9
IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJl
Y3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChyb290RGFtYWdlUmVjdCk7
Ci0gICAgfQotICAgIHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsKLX0KLQotdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorRmxvYXRSZWN0IENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCiB7CiAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0
eSgpKTsKIApAQCAtMjY3LDcgKzI0OCwyMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cgogICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggZGV2aWNlU2NhbGVUcmFuc2Zvcm07CiAgICAgICAgIGRldmljZVNjYWxl
VHJhbnNmb3JtLnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSwgZGV2aWNlU2Nh
bGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX3Jv
b3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVy
LCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKG1fcm9vdExheWVy
SW1wbC5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fcm9vdExheWVySW1wbC0+
cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgaWYgKGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8IHNldHRpbmdzKCkuc2hvd1N1
cmZhY2VEYW1hZ2VSZWN0cykKKyAgICAgICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMo
bV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICAgICAg
bV9yb290RGFtYWdlUmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1h
Z2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OworICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVz
aW5nUGFydGlhbFN3YXApCisgICAgICAgICAgICByb290RGFtYWdlUmVjdCA9IG1fcm9vdERhbWFn
ZVJlY3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3REYW1hZ2VSZWN0ID0gRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKTsKKyAgICAKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKKworICAgICAgICByZXR1cm4gcm9v
dERhbWFnZVJlY3Q7CiAgICAgfQogfQogCkBAIC0yNzUsMTMgKzI3MCwxMSBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBw
YXNzZXMsIENDTGF5ZQogewogICAgIEFTU0VSVChwYXNzZXMuaXNFbXB0eSgpKTsKIAotICAgIGNh
bGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Cisg
ICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gY2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVy
TGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIFRSQUNFX0VWRU5UMSgid2Via2l0
IiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4o
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpKTsKIAotICAgIGlmIChsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8fCBzZXR0aW5ncygpLnNob3dTdXJmYWNl
RGFtYWdlUmVjdHMpCi0gICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMobV9yb290TGF5
ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICBtX3Jvb3REYW1hZ2VS
ZWN0ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+
Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBtX3Jvb3RMYXllckltcGwtPnNldFNjaXNzb3JSZWN0
KGVuY2xvc2luZ0ludFJlY3Qocm9vdERhbWFnZVJlY3QpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUg
cmVuZGVyIHBhc3NlcyBpbiBkZXBlbmRlbmN5IG9yZGVyLgogICAgIEhhc2hNYXA8Q0NSZW5kZXJT
dXJmYWNlKiwgQ0NSZW5kZXJQYXNzKj4gc3VyZmFjZVBhc3NNYXA7CkBAIC0yOTAsMTIgKzI4Myw2
IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVu
ZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogCiAgICAg
ICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5k
ZXJTdXJmYWNlKTsKLQotICAgICAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAg
ICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAg
ICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gZGFtYWdlSW5TdXJmYWNlU3BhY2UocmVuZGVy
U3VyZmFjZUxheWVyLCBtX3Jvb3REYW1hZ2VSZWN0KTsKLSAgICAgICAgcGFzcy0+c2V0U3VyZmFj
ZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotCiAgICAgICAgIHN1cmZhY2VQYXNzTWFw
LmFkZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAgICAgcGFzc2VzLmFwcGVuZChw
YXNzLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMzI2LDkgKzMxMyw5IEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nl
cywgQ0NMYXllCiAKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5lbnRlckxheWVyKGl0KTsKIAot
ICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkKKyAg
ICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgJiYgIWl0
LT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoKml0LCAmb2NjbHVzaW9uVHJh
Y2tlcik7Ci0gICAgICAgIGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZp
c2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWxzZSBpZiAoaXQucmVwcmVz
ZW50c0l0c2VsZigpICYmICFpdC0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSAmJiAhaXQt
PnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpdC0+d2lsbERyYXcobV9s
YXllclJlbmRlcmVyLmdldCgpKTsKICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yTGF5
ZXIoKml0LCAmb2NjbHVzaW9uVHJhY2tlciwgaGFkTWlzc2luZ1RpbGVzKTsKICAgICAgICAgfQpA
QCAtNDMwLDggKzQxNywxMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMo
Y29uc3QgRnJhbWVEYXRhJiBmcmFtZSkKICAgICBtX2Zwc0NvdW50ZXItPm1hcmtCZWdpbm5pbmdP
ZkZyYW1lKGN1cnJlbnRUaW1lKCkpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5n
RnJhbWUobV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkpOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
bGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MoZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSBmcmFtZS5yZW5kZXJQ
YXNzZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNj
cmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VTd2Fw
UmVjdCA9IENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0sIG1fcm9vdERhbWFnZVJlY3QpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRy
YXdSZW5kZXJQYXNzKHJlbmRlclBhc3MsIHN1cmZhY2VTd2FwUmVjdCk7CisgICAgfQogCiAgICAg
aWYgKG1fZGVidWdSZWN0SGlzdG9yeS0+ZW5hYmxlZChzZXR0aW5ncygpKSkKICAgICAgICAgbV9k
ZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZShtX3Jvb3RMYXll
ckltcGwuZ2V0KCksIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QsIHNldHRpbmdzKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGY4Yjc2MzE0MDRkN2MyMzgz
MTE3YzU4NmFmZGJmYTRjYTBjMzIwYjAuLjI1ZjFhNWFlZGQ1ZTczMzQyMjYzOGVjZTNiOWNkYmVi
NmNiNTM0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTE3NCw4
ICsxNzQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBt
b25vdG9uaWNUaW1lKTsKICAgICB2b2lkIGFuaW1hdGVHZXN0dXJlcyhkb3VibGUgbW9ub3Rvbmlj
VGltZSk7CiAKLSAgICAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLgotICAgIHZvaWQgY2FsY3VsYXRl
UmVuZGVyU3VyZmFjZUxheWVyTGlzdChDQ0xheWVyTGlzdCYpOworICAgIC8vIEV4cG9zZWQgZm9y
IHRlc3RpbmcuIFJldHVybnMgcm9vdCBkYW1hZ2UgcmVjdCBvciBmdWxsIHZpZXdwb3J0IGlmIG5v
dCB1c2luZyBwYXJ0aWFsIHN3YXAuCisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVJlbmRlclN1cmZh
Y2VMYXllckxpc3QoQ0NMYXllckxpc3QmKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRlc3Rpbmcu
CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRv
dWJsZSB3YWxsQ2xvY2tUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IDg0ODcz
MGEyYzdiNjBiNzYyMzg5OWZkN2Y5YjQxMzMwYTJlOTdjYjcuLjlmN2U1OTJlNWQ0NWEzZTA2ZTQ3
MzdhYzk5YzAyNmNhNjliNGVhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtNzUs
MTMgKzc1LDE0IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZh
Y2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVzCiAgICAgQ0NRdWFkQ3VsbGVyIHF1
YWRDdWxsZXIobV9xdWFkTGlzdCwgbGF5ZXIsIG9jY2x1c2lvblRyYWNrZXIsIGxheWVyLT5oYXNE
ZWJ1Z0JvcmRlcnMoKSk7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+
cmVuZGVyU3VyZmFjZSgpOworCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRR
dWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBpZiAobGF5
ZXItPmhhc0RlYnVnQm9yZGVycygpKSB7CiAgICAgICAgIENvbG9yIGNvbG9yKGRlYnVnU3VyZmFj
ZUJvcmRlckNvbG9yUmVkLCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuLCBkZWJ1Z1N1cmZh
Y2VCb3JkZXJDb2xvckJsdWUsIGRlYnVnU3VyZmFjZUJvcmRlckFscGhhKTsKICAgICAgICAgcXVh
ZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3Vy
ZmFjZUJvcmRlcldpZHRoKSk7CiAgICAgfQogICAgIGJvb2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0g
ICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwg
c3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNhKSk7CisgICAgcXVhZEN1bGxlci5hcHBlbmRT
dXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdl
dCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgaXNSZXBsaWNhKSk7CiAgICAgbV9z
aGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAog
ICAgIC8vIEFkZCByZXBsaWNhIGFmdGVyIHRoZSBzdXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBi
ZWxvdyB0aGUgc3VyZmFjZS4KQEAgLTkyLDcgKzkzLDcgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFw
cGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2Ns
dXMKICAgICAgICAgICAgIHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShDQ0RlYnVnQm9yZGVyRHJh
d1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0
KCksIGNvbG9yLCBkZWJ1Z1N1cmZhY2VCb3JkZXJXaWR0aCkpOwogICAgICAgICB9CiAgICAgICAg
IGJvb2wgaXNSZXBsaWNhID0gdHJ1ZTsKLSAgICAgICAgcXVhZEN1bGxlci5hcHBlbmRSZXBsaWNh
KENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBz
dXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBs
aWNhKSk7CisgICAgICAgIHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJl
Y3QoKSwgbGF5ZXIsIGlzUmVwbGljYSkpOwogICAgICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Qu
YXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmgKaW5kZXggNDUyYTg2MTBmNWE5ZGJjMDIxNGE4Y2RkYmZmNmYwMjU0ZmVjZGEyNi4u
MDM1OGVlYzkxOGI4ZjEwODJkMmViNDVmMGQ4N2JkOWE4OTQ2MzM0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmgKQEAgLTYyLDE2ICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NRdWFkTGlz
dCYgcXVhZExpc3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJT
dXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9
CiAKLSAgICB2b2lkIHNldFN1cmZhY2VEYW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QpIHsgbV9zdXJmYWNlRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OyB9
Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3VyZmFjZURhbWFnZVJlY3Q7IH0KLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1JlbmRl
clBhc3MoQ0NSZW5kZXJTdXJmYWNlKik7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0
U3VyZmFjZTsKICAgICBDQ1F1YWRMaXN0IG1fcXVhZExpc3Q7CiAgICAgVmVjdG9yPE93blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Q7Ci0gICAgRmxvYXRSZWN0
IG1fc3VyZmFjZURhbWFnZVJlY3Q7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5k
ZXJQYXNzPiA+IENDUmVuZGVyUGFzc0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNw
cAppbmRleCAyNmM0NjdhYjQwMzNkZDJjYjFkMjM4YjJiYzFiZjc5MzVhZDA5YmEwLi4xZWY2Nzdl
OWJhMGIxZDc5YzUzYmE2NjU0N2Y5MWRiZDg0MTcyNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAj
aW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgog
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZUZpbHRlcnMuaCIKICNpbmNsdWRlICJjYy9DQ1No
YXJlZFF1YWRTdGF0ZS5oIgpAQCAtMjA4LDIwICsyMDksNiBAQCBpbmxpbmUgc3RhdGljIGludCBn
ZXRTa0JpdG1hcFRleHR1cmVJZChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgZmFsbGJhY2sp
CiAgICAgcmV0dXJuIHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKIH0KIAotdm9pZCBDQ1Jl
bmRlclN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3QKLXsKLSAg
ICBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCkt
PnVzZXNMYXllckNsaXBwaW5nKCkgJiYgbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNp
bmdQYXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QgPSBt
X2NsaXBSZWN0OwotICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZURh
bWFnZVJlY3QpOwotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xv
c2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpKTsKLSAgICB9IGVsc2UgaWYgKGxheWVyUmVu
ZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIGxheWVyUmVu
ZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVj
dCkpOwotICAgIGVsc2UgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5
ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXllclJlbmRlcmVy
LT5zZXRTY2lzc29yVG9SZWN0KG1fY2xpcFJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgR0xDKGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLX0KLQogdm9pZCBDQ1JlbmRlclN1
cmZhY2U6OmRyYXdDb250ZW50cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIp
CiB7CiAgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKQEAgLTQ1NCwx
MyArNDQxLDEzIEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpzdXJmYWNlUHJvcGVydHlDaGFuZ2Vk
T25seUZyb21EZXNjZW5kYW50KCkgY29uc3QKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+
IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKICAgICBi
b29sIGlzT3BhcXVlID0gZmFsc2U7Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVh
dGUob3JpZ2luVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xp
cFJlY3QoKSwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1
YWRTdGF0ZTo6Y3JlYXRlKG9yaWdpblRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRl
bnRSZWN0KCksIG1fc2Npc3NvclJlY3QsIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKIH0KIAog
UGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBs
aWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKICAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7
Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5z
Zm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgp
LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRl
OjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5zZm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgp
LCBjb250ZW50UmVjdCgpLCBtX3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggNmE2NzFhNzAwZWQ2Nzcw
ODY3ZWJlOTI2OWMxMjk2NzYwZDIwNDRhMS4uODdkMjJiYWVjNjBjZDk0YzU3ZGE1MWE3OWZjMWQ5
NDM1MWMwOTcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTU4LDggKzU4LDYg
QEAgcHVibGljOgogICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7CiAKLSAg
ICB2b2lkIHNldFNjaXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpIGNvbnN0OwotCiAgICAgdm9pZCBkcmF3Q29udGVudHMo
TGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCBkcmF3UmVwbGljYShMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKIApAQCAtMTIzLDYgKzEyMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dENsaXBSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KIAorICAgIHZvaWQgc2V0U2Npc3NvclJlY3Qo
Y29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0
OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Nj
aXNzb3JSZWN0OyB9CisKICAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmKTsK
ICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dFJlY3Q7IH0KIApAQCAtMTY3LDYgKzE2OCw3IEBAIHByaXZhdGU6CiAgICAgQ0NMYXllckltcGwq
IG1fb3duaW5nTGF5ZXI7CiAgICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOwogCisgICAgLy8g
VXNlcyB0aGlzIHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAg
ICAgYm9vbCBtX3NraXBzRHJhdzsKICAgICBib29sIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZDsK
QEAgLTE4Niw3ICsxODgsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFu
c2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2Zp
bHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRl
cnM7CisKKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJm
YWNlLgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKworICAgIC8vIER1cmluZyBkcmF3aW5nLCBp
ZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBk
cmF3bi4KKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJm
YWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAgIFZlY3RvcjxDQ0xheWVySW1w
bCo+IG1fbGF5ZXJMaXN0OwogCiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1
cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5k
IHRoYXQgaXMgZ29pbmcKQEAgLTE5NSw5ICsyMDQsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRy
PENDRGFtYWdlVHJhY2tlcj4gbV9kYW1hZ2VUcmFja2VyOwogCi0gICAgLy8gU3RvcmVkIGluIHRo
ZSAic3VyZmFjZSBzcGFjZSIgd2hlcmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNz
b3JpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGFtYWdlUmVjdDsKLQogICAgIC8vIEZvciBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zCiAgICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhI
aXN0b3J5OwogICAgIGludCBtX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcAppbmRleCBjNmUwMjFlY2UyMDY1Yzc5
YzVlY2Y2Y2QwYjZkMzdjZTk1NDdiMzEwLi5iZmFiYWQ4NWZlNDNjNjlhMzAyMTIxMDBmMjk4ZjRm
Zjc3NjM4Y2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQu
Y3BwCkBAIC0yOSwxNSArMjksMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3du
UHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3Jl
YXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJl
Y3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKQorUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZD4gQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXll
ckltcGwqIGxheWVyLCBib29sIGlzUmVwbGljYSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVy
LCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNhKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXll
ciwgaXNSZXBsaWNhKSk7CiB9CiAKLUNDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBj
b25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSkKK0NDUmVuZGVyU3VyZmFjZURy
YXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxh
eWVyLCBib29sIGlzUmVwbGljYSkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBD
Q0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFkUmVjdCkKICAgICAsIG1fbGF5ZXIobGF5ZXIp
Ci0gICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KQogICAgICwgbV9p
c1JlcGxpY2EoaXNSZXBsaWNhKQogewogICAgIEFTU0VSVChtX2xheWVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCmluZGV4IDhmNmRhNWVlZTFkODI3ZmMxMGVh
NWE1OGQ1ZjgxOWViMjA1OTMxNmQuLjM0OGU4YTk4ZDNkMjM3MjdhODAyY2ExNTM5Mzk3Y2MxMzZi
YmEzM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaApAQCAt
MzYsMjAgKzM2LDE1IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NSZW5kZXJTdXJmYWNl
RHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VE
YW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0
IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGJvb2wgaXNSZXBsaWNhKTsKIAogICAgIENDTGF5ZXJJ
bXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICBib29sIGlzUmVwbGlj
YSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CiAKLSAgICAvLyBUaGUgc3VyZmFjZSBk
YW1hZ2UgcmVjdCBmb3IgdGhlIHRhcmdldCBzdXJmYWNlIHRoaXMgcXVhZCBkcmF3cyBpbnRvLgot
ICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UgcmVuZGVyIHN1cmZhY2VzIGdl
dCB0aGVpciBvd24gbGF5ZXIgdHlwZS4KLSAgICBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlRGFtYWdlUmVjdDsgfQotCiBwcml2YXRl
OgotICAgIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwg
Y29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFt
YWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpOworICAgIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgYm9v
bCBpc1JlcGxpY2EpOwogCiAgICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7Ci0gICAgRmxvYXRSZWN0
IG1fc3VyZmFjZURhbWFnZVJlY3Q7CiAgICAgYm9vbCBtX2lzUmVwbGljYTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hh
cmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcAppbmRleCA5YmY3NjkyNWJiOGNmMmJiYWM1Mzlj
MDE0MzFjNTU3ODQzMzlmZDA1Li45MDc3N2FiNDFiYjg0YjA4ODkxY2IyMjQyODg1ZTBmMzgxYjI4
MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCkBAIC0yOSwxNiArMjks
MTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0
YXRlPiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zv
cm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZs
b2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVh
ZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9h
dCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hh
cmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIGNs
aXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hh
cmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIHNj
aXNzb3JSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKIH0KIAotQ0NTaGFyZWRRdWFkU3RhdGU6OkND
U2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3Jt
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJl
Y3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJv
b2wgb3BhcXVlKQorQ0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQogICAgIDogbV9x
dWFkVHJhbnNmb3JtKHF1YWRUcmFuc2Zvcm0pCiAgICAgLCBtX2xheWVyVHJhbnNmb3JtKGxheWVy
VHJhbnNmb3JtKQogICAgICwgbV9sYXllclJlY3QobGF5ZXJSZWN0KQotICAgICwgbV9jbGlwUmVj
dChjbGlwUmVjdCkKKyAgICAsIG1fc2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpCiAgICAgLCBtX29w
YWNpdHkob3BhY2l0eSkKICAgICAsIG1fb3BhcXVlKG9wYXF1ZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1No
YXJlZFF1YWRTdGF0ZS5oCmluZGV4IDQyMDZhYTVjMmRlMmE3NTRjOWNhOTFmNGU4ZTg4OTM4MjIx
MWZmMjIuLjZiMTUwMDBiYjU3ZTZkYjA0ZGZhNWY5NDc1ZDM0MDdiMzlhODJiNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVk
UXVhZFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApAQCAtMzYsMjcgKzM2LDI2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIENDU2hhcmVkUXVhZFN0YXRlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVh
ZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBv
cGFjaXR5LCBib29sIG9wYXF1ZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IGNyZWF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBi
b29sIG9wYXF1ZSk7CiAKICAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgcXVhZHMgaW4gYSBDQ0Ry
YXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkVHJhbnNmb3Jt
OyB9CiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IGxheWVyUmVjdCgpIHNob3VsZCBiZSB0cmFu
c2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmFuc2Zvcm07IH0KICAgICBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVjdDsgfQotICAgIC8vIFVz
YWdlOiBpZiBjbGlwUmVjdCBpcyBlbXB0eSwgdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVz
ZWQuCi0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBS
ZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NjaXNzb3JSZWN0OyB9CiAKICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9v
cGFjaXR5OyB9CiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9
CiAgICAgYm9vbCBpc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3Q7CiAKIHByaXZhdGU6
Ci0gICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRU
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3Bh
Y2l0eSwgYm9vbCBvcGFxdWUpOworICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYg
c2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKIAogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fcXVhZFRyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2xheWVyVHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9sYXllclJlY3Q7Ci0gICAgSW50UmVjdCBt
X2NsaXBSZWN0OworICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBmbG9hdCBtX29wYWNp
dHk7CiAgICAgYm9vbCBtX29wYXF1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAppbmRleCBiYmVhOTcxZGQ1YTRlZmU2
N2QzMzYxNjFjOWEwZGZiNzE1YWQ3YWI3Li5lYjcwZGRlNTNjZmM4ZTJiOTU0ZjI0NmZiMDcxOWY0
MWUwNDNiNzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFt
YWdlVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NE
YW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTU4LDcgKzU4LDggQEAgdm9pZCBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8
Q0NMYXkKIAogICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290KTsKLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByb290
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9v
dCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVj
dCgpKTsKIH0KIAogdm9pZCBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0
b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9y
VGVzdC5jcHAKaW5kZXggZjVlYWU3Zjg0ZGQ1MTI1YzgwOTk1YjljZDQyOWI5OWJjYmY2OTMzNC4u
ZDRmOWZkYzJhYTFiNjFiZTNiNzc5YzI5MWRkMjcyY2E5YTQ5YzZkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCkBAIC0x
MzgsMTAgKzEzOCwxMSBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCiAg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RM
YXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CkBAIC0xODUs
MTAgKzE4NiwxMSBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlKQogICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owog
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyLmdldCgpKTsKLSAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5
ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250
ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOwpAQCAtMjQ0LDEw
ICsyNDYsMTEgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3Vy
ZmFjZSkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0Owog
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXll
ci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDE3ZTU3MDE5OTlmODYxYWE4N2I1YTc3NTlhN2RmZDAy
MDE0ZjkyZGMuLmUzZjgyOGJlYWVmZDI5MjQ5YzM5MTJiNjdlYjcyMDUxZjYxY2Y4MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMzIsNyArMzIsMTIgQEAKICNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NNYXRoVXRpbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJjYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKIAogI2luY2x1
ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KQEAgLTU4LDcgKzYz
LDggQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJv
b3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIH0KIAogVHJhbnNmb3Jt
YXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0KQpAQCAtMTc0LDcgKzE4MCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNzogVmVyaWZ5IHRoYXQgcG9zaXRpb24gcHJlLW11
bHRpcGxpZXMgdGhlIGxheWVyIHRyYW5zZm9ybS4KLSAgICAvLyAgICAgICAgIFRoZSBjdXJyZW50
IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBk
b2VzIHRoaXMgaW1wbGljaXRseSwgYnV0IGl0IGlzCisgICAgLy8gICAgICAgICBUaGUgY3VycmVu
dCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyBkb2VzIHRoaXMgaW1w
bGljaXRseSwgYnV0IGl0IGlzCiAgICAgLy8gICAgICAgICBzdGlsbCB3b3J0aCB0ZXN0aW5nIHRv
IGRldGVjdCBhY2NpZGVudGFsIHJlZ3Jlc3Npb25zLgogICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9z
aXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0
cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUoMTAsIDEy
KSwgZmFsc2UpOwpAQCAtMzE3LDYgKzMyMyw1NjEgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKICAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hp
bGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiB9CiAK
K1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3ROb0NsaXApCit7Cisg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFkOworCisg
ICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgMSB8Cisg
ICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICB8ICAgICAgICAgMiB8
ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAg
fCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0t
LS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICB8ICArLS0tLS0t
LS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8
ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisK
KyAgICAgICAgIExheWVycyAxLCAyIGhhdmUgcmVuZGVyIHN1cmZhY2VzCisgICAgICovCisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOwor
CisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAsIDEwMCk7CisgICAgSW50UmVjdCBjaGls
ZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJlY3QgZ3JhbmRDaGlsZFJlY3QoNSwgNSwg
MTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3Qt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55KCkpKTsKKyAgICByb290LT5zZXRC
b3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpOworICAg
IHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShyb290UmVjdC53aWR0
aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChjaGls
ZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7
CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJl
Y3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAg
Z3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRD
aGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxk
UmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxk
UmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNo
aWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5n
ZXQoKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAg
cm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1w
bCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5
ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAg
Q0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChyb290LmdldCgpKTsKKworICAgICAgICAvKiBlbXB0eSBsaXN0ICovCisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5n
ZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIEFT
U0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJv
b3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpLCAyVSk7CisgICAgCisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gTGF5ZXIncyBjbGlwUmVjdCBpcyBhIHVuaW9u
IG9mIGFsbCBpdHMgY2hpbGRyZW4ncyBib3VuZHMKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNs
aXBSZWN0KCksIEludFJlY3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJl
Y3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkp
KTsKKyAgICBBU1NFUlRfRVEoZ3JhbmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisKKyAgICBBU1NFUlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRl
clN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAg
QVNTRVJUX0ZBTFNFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxT
RShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5k
Q2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIAorICAgIC8vIERhbWFnZSB0aGUg
ZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIEVYUEVDVF9FUShyb290
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworCisgICAgLy8gY2hpbGQgc3VyZmFjZSBkb2Vzbid0IGhhdmUgYSBjbGlwIHJlY3QsIHRo
ZXJlZm9yZSBpdCB3aWxsIGJlIGNvbXB1dGVkIGFzIGludGVyc2VjdGlvbgorICAgIC8vIGJldHdl
ZW4gcm9vdCBzdXJmYWNlJ3MgY29udGVudHJlY3QgYW5kIGNoaWxkIHN1cmZhY2UncyBkcmF3YWJs
ZSBjb250ZW50IHJlY3QuCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0Lnko
KSwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0g
Y2hpbGRSZWN0LnkoKSkpOworCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdFJlY3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290
UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0
aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMg
Y2hpbGRyZW4KKyAgICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQg
dGhlIHNjaXNzb3IgcmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhh
dmUgdGhlIHNhbWUgc2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAg
ICAvLyBvZiBpdHMgb3duCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RS
ZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFn
ZQorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1w
dHkgc2Npc3NvcgorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ug
d2l0aGluIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lz
c29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisK
KyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAg
ICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFn
ZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0
IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdo
dCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFj
ZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVD
VF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgp
IC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFt
YWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFt
YWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgw
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8g
U2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNl
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JS
ZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3
aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3RE
YW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIs
IGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5o
ZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1
cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFs
IGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEw
LCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAg
ICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJv
b3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBz
byBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4K
KyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9v
dCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdl
LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5
ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2Vj
dCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMg
Y2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVj
dC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFn
ZS55KCkpKTsKKworICAgIC8vIENoaWxkcmVuJ3MgY29udGVudCByZWN0cyBhcmUgYmlnZ2VyIHRo
YW4gdGhlIHJvb3QncyBzbyB0aGV5IGRvbid0IGNsaXAgdGhlIGRhbWFnZSByZWN0LCBidXQgY2hh
bmdlIGl0cyBvZmZzZXQuCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsK
KyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0Lnko
KSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7Cit9CisKK1RFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKK3sKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisKKyAgICAv
KgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwKKyAgICAg
ICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAyIHwgICAg
IHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwg
ICAzICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0t
LSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAg
ICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAg
ICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVj
dCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAs
IDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5k
cyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9v
dC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCks
IHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVj
dC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAg
ICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5o
ZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFu
ZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxk
LT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0
LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0
LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0gY2hpbGQu
Z2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxkLmdldCgp
OworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5k
cyh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
KyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRl
cjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsK
KworICAgICAgICAvKiBlbXB0eSBsaXN0ICovCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRS
ZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgCisg
ICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAyVSk7CisgICAgCisg
ICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcworICAgIEFTU0VSVF9FUShy
b290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisKKyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlz
IGEgdW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5kcworICAgIEFTU0VSVF9FUShjaGls
ZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFu
ZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5o
ZWlnaHQoKSkpOworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCkt
PmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gQ2hpbGQgc3VyZmFj
ZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290J3MKKyAgICBBU1NFUlRfRVEoY2hp
bGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOworICAgIAorICAg
IEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxT
RShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5k
Q2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIAorICAgIC8vIERhbWFnZSB0aGUg
ZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIEVYUEVDVF9FUShyb290
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3Qt
PnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2Ug
aXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZz
ZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5n
IHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0
aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRS
ZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBH
cmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3Qg
aGF2ZSBhIHN1cmZhY2UKKyAgICAvLyBvZiBpdHMgb3duCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworICAgIAor
ICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDAsIDAsIDAsIDAp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBF
bXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAg
Ly8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3Qo
MTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQ
RUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRo
ZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRh
bWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3Nv
clJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0
aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgp
LCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBo
YXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8g
Y2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGls
ZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKwor
ICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRS
ZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFn
ZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAg
IEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGly
ZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNj
aXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlz
IHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1Rf
RVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lk
dGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBu
b3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2Fs
IHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0g
Y2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7
CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3REYW1hZ2UgPSBJ
bnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290
CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3Qg
aGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVy
c2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0
IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1h
Z2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgp
LCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisgICAgLy8gUm9v
dCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJlY3Qgd2lsbCBi
ZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJv
b3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQ
RUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3RE
YW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0Lmhl
aWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIE5vdyB0aGUgc2Npc3NvciByZWN0
cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVjdAorICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJv
b3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAg
RVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFn
ZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJv
b3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290
RGFtYWdlLnkoKSkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNz
b3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9ybSkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisKKyAgICAvKgorICAgICAgTGF5ZXJz
IGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0t
LS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAyIHwgICAgIHwKKyAgICAgICAgIHwg
IHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwgICAzLDQgICAgICAgICAg
ICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwg
ICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgICAgICAgTGF5ZXJzIDEs
IDIgYW5kIDMgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisKKyAgICBJ
bnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgx
MCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1
MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJ
bnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJv
b3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54
KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBj
aGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWln
aHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0Lnko
KSkpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZC0+
c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAg
ICBncmFuZENoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3Jh
bmRDaGlsZDItPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRD
aGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldE9wYWNpdHkoMC41Zik7CisgICAg
Z3JhbmRDaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdy
YW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAg
IENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGdy
YW5kQ2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQyLnJlbGVhc2UoKSk7CisgICAgY2hpbGQtPmFk
ZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5y
ZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZl
Y3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPEND
TGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKworICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKworICAgICAgICAvKiBlbXB0
eSBsaXN0ICovCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVj
dDsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAg
fQorICAgIAorICAgIEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEFTU0VSVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3Jh
bmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDNVKTsKKyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBj
bGlwcGluZyB0byBpdHMgYm91bmRzCisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJv
b3RSZWN0KTsKKworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgw
LCAwLCBjaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSAsIGNoaWxkUmVjdC55
KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmRjaGlsZCBub3cg
Y2xpcHMKKyAgICBBU1NFUlRfRVEoZ3JhbmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgw
LCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENo
aWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworCisgICAgQVNTRVJUX0VR
KHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisKKyAgICAvLyBDaGlsZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJv
b3QncworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgp
LCByb290UmVjdCk7CisgICAgCisgICAgQVNTRVJUX1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBp
bmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsK
KyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Cisg
ICAgCisgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFt
YWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7Cisg
ICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAg
ICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkp
OworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQg
bGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91
bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8v
ICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJv
b3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxk
UmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGlzIG5vdyBzY2lzc29yZWQgYnkgdGhl
IHJlbmRlciBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCkgLSBncmFu
ZENoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSAtIGdyYW5k
Q2hpbGRSZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1h
Z2UgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAg
IEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAg
ICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Cisg
ICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisg
ICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNv
bXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUg
ZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7
CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAg
ICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBF
bnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50
IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0
LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAv
LyBHcmFuZCBjaGlsZCBub3cgZ2V0cyBzY2lzc29yZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFz
IHdlbGwgYXMgcm9vdAorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkg
LSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UuaGVpZ2h0KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBh
cnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAx
MCwgODAsIDgwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9v
dCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2Ug
cmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0
KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0
aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgp
LCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9v
dERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3Nv
cmVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZSBhcyB3ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRD
aGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAg
IHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNv
bXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1
cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBi
ZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCBy
b290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAt
IHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7Cisg
ICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250
ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJl
c3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJv
dW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERh
bWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54
KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIE5vdyB0
aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVjdAorICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngo
KSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJl
Y3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1h
Z2UueSgpKSk7CisKKyAgICAvLyBHcmFuZGNoaWxkJ3Mgc2Npc3NvciByZWN0IGlzIGNsaXBwZWQg
YnkgaXRzIHRhcmdldCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRS
ZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworfQor
CiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZXBs
aWNhKQogewogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKQEAgLTU0NCw3ICsxMTA1LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxpc3RGb3JDbGlwTGF5ZXIpCiAgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEZsb2F0UmVj
dCBkdW1teURhbWFnZVJlY3Q7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIC8vIFRoZSBjaGlsZCBsYXllcidz
IGNvbnRlbnQgaXMgZW50aXJlbHkgb3V0c2lkZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0LCBzbyB0
aGUgaW50ZXJtZWRpYXRlCiAgICAgLy8gcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIGhhdmUgYmVlbiBy
ZW1vdmVkLiBSZW5kZXIgc3VyZmFjZXMgd2l0aG91dCBjaGlsZHJlbiBvciB2aXNpYmxlCkBAIC01
NzIsNyArMTEzNiw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVu
ZGVyU3VyZmFjZUxpc3RGb3JUcmFuc3BhcmVudENoaWxkKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgLy8gU2lu
Y2UgdGhlIGxheWVyIGlzIHRyYW5zcGFyZW50LCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFj
ZSgpIHNob3VsZCBub3QgaGF2ZSBnb3R0ZW4gYWRkZWQgYW55d2hlcmUuCiAgICAgLy8gQWxzbywg
dGhlIGRyYXdhYmxlIGNvbnRlbnQgcmVjdCBzaG91bGQgbm90IGhhdmUgYmVlbiBleHRlbmRlZCBi
eSB0aGUgY2hpbGRyZW4uCkBAIC02MDAsMTQgKzExNjYsMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlGb3JjZVJlbmRlclN1cmZhY2UpCiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIEVYUEVDVF9UUlVFKHJl
bmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9FUShyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSwgMVUpOwogCiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5j
bGVhcigpOwogICAgIHJlbmRlclN1cmZhY2UxLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UoZmFsc2Up
OwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKICAgICBFWFBFQ1RfRkFMU0UocmVuZGVyU3VyZmFjZTEtPnJl
bmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpLCAwVSk7CiB9CkBAIC02NjUsNyArMTIzMSwxMSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICBwYXJlbnQt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3Qo
KSk7CisKIAogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkp
OwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0t
PmlkKCkpOwpAQCAtNzI0LDcgKzEyOTQsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlc0NyYXNoUmVwcm8pCiAgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwog
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIEFTU0VSVF9FUSgyVSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOwpAQCAtNzc1LDcgKzEzNDcsNyBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNl
V2l0aG91dFZpc2libGVDb250ZW50KQogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBXaXRob3V0IGFuIGFuaW1hdGlvbiwgd2Ugc2hvdWxk
IGN1bGwgY2hpbGQgYW5kIGdyYW5kQ2hpbGQgZnJvbSB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC4KICAgICBBU1NFUlRfRVEoMVUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKQEAg
LTc5NCw3ICsxMzY2LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlD
bGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBwYXJlbnQtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gV2l0aCBhbiBhbmlt
YXRpbmcgdHJhbnNmb3JtLCB3ZSBzaG91bGQga2VlcCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBpbiB0
aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4KICAgICBBU1NFUlRfRVEoM1UsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3Quc2l6ZSgpKTsKQEAgLTg1NCw3ICsxNDI2LDEwIEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xh
eWVycykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAKICAgICBF
WFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAy
MCkpLCBncmFuZENoaWxkMS0+Y2xpcFJlY3QoKSk7CiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPmNs
aXBSZWN0KCkpOwpAQCAtOTI2LDcgKzE1MDEsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQo
KSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgQVNTRVJUX1RSVUUo
Z3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGls
ZDItPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNDA3LDcgKzE5ODQsNyBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhvdXRQcmVzZXJ2ZXMz
ZCkKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJpZnkgd2hpY2ggcmVu
ZGVyU3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9GQUxTRShmcm9udEZhY2luZ0No
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTUxMiw3ICsyMDg5LDcgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2Qp
CiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRl
clN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfRkFMU0UoZnJvbnRGYWNpbmdDaGls
ZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE1OTcsNyArMjE3NCw5IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aEFuaW1hdGluZ1RyYW5z
Zm9ybXMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIEVY
UEVDVF9GQUxTRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfVFJVRShhbmlt
YXRpbmdTdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTY2OSw3ICsyMjQ4LDcgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJl
c2VydmVzM2RGb3JGbGF0dGVuaW4KICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAv
LyBWZXJpZnkgd2hpY2ggcmVuZGVyU3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9U
UlVFKGZyb250RmFjaW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAK
aW5kZXggOTFjMmQxZGZmMTIxMjc5YTdjNzQ2MDcwYzVjYmRjMjIyNGYyYjY1YS4uNmUyNjFkOGU2
M2RlODk3MWM2NjA5YTMyM2M5Nzc5YzQzM2UzZWNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM2
LDEwICszNiwxMiBAQAogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNj
L0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNp
bmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVy
SW1wbC5oIgorI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZS5oPgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4KQEAgLTQ5LDYgKzUxLDExIEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXRUZXN0czsKIAordXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpSZXR1
cm47Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6XzsKKwog
bmFtZXNwYWNlIHsKIAogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QgOiBwdWJsaWMgdGVz
dGluZzo6VGVzdCwgcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewpAQCAtNzAsNiAr
NzcsMjggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9N
YWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBv
c3RTZXRDb250ZW50c01lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzVG9NYWluVGhyZWFkT25JbXBs
VGhyZWFkKHNpemVfdCkgT1ZFUlJJREUgeyB9CiAKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290UHRyKQorICAgIHsKKyAgICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKworICAg
ICAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgICAg
ICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNyZWF0ZShzZXR0aW5ncywgdGhpcyk7CisKKyAgICAgICAgbXlIb3N0SW1wbC0+aW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIoZ3JhcGhpY3NDb250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVy
KTsKKyAgICAgICAgbXlIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7
CisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gcm9vdFB0cjsKKworICAgICAg
ICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldEJvdW5kcyhJ
bnRTaXplKDEwLCAxMCkpOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoMCwgMCwgMTAsIDEwKSk7CisgICAgICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICAgICAgbXlIb3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG15SG9zdEltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIHN0YXRpYyB2b2lk
IGV4cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGxheWVyKQog
ICAgIHsKICAgICAgICAgQVNTRVJUX0VRKGxheWVyLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKCkp
OwpAQCAtMTA5OSw2ICsxMTI4LDM0MCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHBhcnRpYWxTd2FwUmVjZWl2ZXNEYW1hZ2VSZWN0KQogICAgIEVYUEVDVF9FUShleHBlY3RlZFN3
YXBSZWN0LmhlaWdodCgpLCBhY3R1YWxTd2FwUmVjdC5oZWlnaHQoKSk7CiB9CiAKK2NsYXNzIEZh
a2VMYXllcldpdGhRdWFkcyA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RmFrZUxheWVyV2l0aFF1YWRzPiBjcmVhdGUoaW50IGlkKSB7IHJldHVy
biBhZG9wdFB0cihuZXcgRmFrZUxheWVyV2l0aFF1YWRzKGlkKSk7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sJikgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IGNvbnN0IENvbG9yIGdyYXkoMTAwLCAxMDAsIDEwMCk7CisgICAgICAgIEludFJlY3QgcXVhZFJl
Y3QoMCwgMCwgNSwgNSk7CisgICAgICAgIE93blB0cjxDQ0RyYXdRdWFkPiBteVF1YWQgPSBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGdyYXkp
OworICAgICAgICBxdWFkTGlzdC5hcHBlbmQobXlRdWFkLnJlbGVhc2UoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEZha2VMYXllcldpdGhRdWFkcyhpbnQgaWQpCisgICAgICAgIDogQ0NMYXll
ckltcGwoaWQpCisgICAgeworICAgIH0KK307CisKK2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGlj
IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QxKHVz
ZVByb2dyYW0sIHZvaWQoV2ViR0xJZCBwcm9ncmFtKSk7CisgICAgTU9DS19NRVRIT0Q1KHVuaWZv
cm00Ziwgdm9pZChXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHks
IFdHQzNEZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSk7CisgICAgTU9DS19NRVRIT0Q0KHVuaWZvcm1N
YXRyaXg0ZnYsIHZvaWQoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlKSk7CisgICAgTU9DS19N
RVRIT0Q0KGRyYXdFbGVtZW50cywgdm9pZChXR0MzRGVudW0gbW9kZSwgV0dDM0RzaXplaSBjb3Vu
dCwgV0dDM0RlbnVtIHR5cGUsIFdHQzNEaW50cHRyIG9mZnNldCkpOworICAgIE1PQ0tfTUVUSE9E
MShnZXRTdHJpbmcsIFdlYlN0cmluZyhXR0MzRGVudW0gbmFtZSkpOworICAgIE1PQ0tfTUVUSE9E
MChnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSwgV2ViU3RyaW5nKCkpOworICAgIE1P
Q0tfTUVUSE9EMShlbmFibGUsIHZvaWQoV0dDM0RlbnVtIGNhcCkpOworICAgIE1PQ0tfTUVUSE9E
NChzY2lzc29yLCB2b2lkKFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgs
IFdHQzNEc2l6ZWkgaGVpZ2h0KSk7Cit9OworCitjbGFzcyBNb2NrQ29udGV4dEhhcm5lc3Mgewor
cHJpdmF0ZToKKyAgICBNb2NrQ29udGV4dCogbV9jb250ZXh0OworcHVibGljOgorICAgIE1vY2tD
b250ZXh0SGFybmVzcyhNb2NrQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICB7CisgICAgICAgIC8vIENhdGNoICJ1bmludGVyZXN0aW5nIiBjYWxscwor
ICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1c2VQcm9ncmFtKF8pKQorICAgICAgICAg
ICAgLlRpbWVzKDApOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVt
ZW50cyhfLCBfLCBfLCBfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBF
Q1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3JtTWF0cml4NGZ2KF8sIF8sIF8sIF8pKQorICAgICAg
ICAgICAgLlRpbWVzKDApOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZv
cm00ZihfLCBfLCBfLCBfLCBfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICAv
LyBBbnkgb3RoZXIgc3RyaW5ncyBhcmUgZW1wdHkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29u
dGV4dCwgZ2V0U3RyaW5nKF8pKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihX
ZWJTdHJpbmcoKSkpOworCisgICAgICAgIC8vIFN1cHBvcnQgZm9yIHBhcnRpYWwgc3dhcCwgaWYg
bmVlZGVkCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFN0cmluZyhHcmFwaGlj
c0NvbnRleHQzRDo6RVhURU5TSU9OUykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0
dXJuKFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAg
ICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlV
TSgpKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NI
Uk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpKSk7CisKKyAgICAgICAgLy8gQW55IHVuLXNhbmN0aW9u
ZWQgY2FsbHMgdG8gZW5hYmxlKCkgYXJlIE9LCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRl
eHQsIGVuYWJsZShfKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7Cisg
ICAgfQorCisgICAgdm9pZCBtdXN0RHJhd1NvbGlkUXVhZCgpCisgICAgeworICAgICAgICBFWFBF
Q1RfQ0FMTCgqbV9jb250ZXh0LCBkcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSkKKyAgICAgICAg
ICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9u
KCk7CisKKyAgICAgICAgLy8gMCBpcyB0aGUgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBnZXRV
bmlmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gMSBpcyBjb3VudCA/Pz8KKyAgICAgICAgLy8gQm9v
bGVhbiBjYXN0IHRvIHN0cj8/CisgICAgICAgIC8vIGZsb2F0KiB2YWx1ZXMKKyAgICAgICAgRVhQ
RUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybU1hdHJpeDRmdigwLCAxLCBfLCBfKSkKKyAgICAg
ICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0
aW9uKCk7CisKKyAgICAgICAgLy8gMCBpcyB0aGUgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBn
ZXRVbmlmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gMyBmbG9hdHMgYXJlIGNvbG9yIC8gMjU1Cisg
ICAgICAgIC8vIDEgaXMgQWxwaGEKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5p
Zm9ybTRmKDAsIF8sIF8sIF8sIDEpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQor
ICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKyAgICAgICAgCisgICAgICAgIC8v
IDEgaXMgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBmYWtlIGNyZWF0ZVByb2dyYW0oKQorICAg
ICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1c2VQcm9ncmFtKDEpKQorICAgICAgICAgICAg
LldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsK
KworICAgIH0KKworICAgIHZvaWQgbXVzdFNldFNjaXNzb3IoaW50IHgsIGludCB5LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCisgICAgeworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBl
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpCisgICAgICAgICAgICAuV2ls
bE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworCisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJl
c09uU2F0dXJhdGlvbigpOworICAgIH0KKworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBub1BhcnRpYWxTd2FwKQoreworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNv
bnRleHQKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0
UHRyKG5ldyBNb2NrQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KTsKKyAgICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nh
c3Q8TW9ja0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFw
aGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhh
cm5lc3MoJm1vY2tDb250ZXh0KTsKKworICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBo
YXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3Nvcigw
LCAwLCAxMCwgMTApOworCisgICAgLy8gUnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdChmYWxzZSwgY29u
dGV4dCwgRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworCisgICAgQ0NMYXllclRyZWVI
b3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnBy
ZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsK
KyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJp
ZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwKQoreworICAgIC8vIFNldCB1cCBtb2NrIGdy
YXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAq
c3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJh
Y3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRI
YXJuZXNzIGhhcm5lc3MoJm1vY2tDb250ZXh0KTsKKworICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNh
c2UKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0
U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwg
MTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwg
RmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworCisgICAgQ0NMYXllclRyZWVIb3N0SW1w
bDo6RnJhbWVEYXRhIGZyYW1lOworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVU
b0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBt
eUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwTm9VcGRhdGUpCit7CisgICAgLy8gU2V0IHVwIG1vY2sg
Z3JhcGhpY3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQoYWRvcHRQdHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9
ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4
dEhhcm5lc3MgaGFybmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3Qg
Y2FzZQorICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RT
ZXRTY2lzc29yKDAsIDgsIDIsIDIpOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgOCwg
MiwgMik7CisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVz
dFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAs
IDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4gdGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KHRydWUsIGNvbnRl
eHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKKyAgICAKKyAgICAvLyBEcmF3IG9u
Y2UgdG8gbWFrZSBzdXJlIGxheWVyIGlzIG5vdCBuZXcKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRv
RHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15
SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgLy8gR2VuZXJhdGUgdXBk
YXRlIGluIGxheWVyCisgICAgQ0NMYXllckltcGwqIHJvb3QgPSBteUhvc3RJbXBsLT5yb290TGF5
ZXIoKTsKKyAgICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAyLCAyKSk7CisK
KyAgICAvLyBUaGlzIGRyYXcgc2hvdWxkIGdlbmVyYXRlIG5vdyBuZXcgdWRwYXRlcworICAgIEVY
UEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJ
bXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJz
KGZyYW1lKTsKKworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29u
dGV4dCk7Cit9CisKK2NsYXNzIFBhcnRpYWxTd2FwQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgV2ViU3RyaW5nIGdldFN0cmluZyhXR0MzRGVu
dW0gbmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpF
WFRFTlNJT05TKQorICAgICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9z
dF9zdWJfYnVmZmVyIik7CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICB9CisgICAg
CisgICAgV2ViU3RyaW5nIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIp
OworICAgIH0KK307CisKK3N0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IHNl
dHVwTGF5ZXJzRm9yT3BhY2l0eShib29sIHBhcnRpYWxTd2FwLCBDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50KiBjbGllbnQpCit7CisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBzZXR0aW5n
cy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSB0cnVlOworCisgICAgLy8gU2V0IHVwIG1vY2sgZ3JhcGhp
Y3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQo
YWRvcHRQdHIobmV3IFBhcnRpYWxTd2FwQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0aW5ncywgY2xp
ZW50KTsKKyAgICBteUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0LnJl
bGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbXlIb3N0SW1wbC0+c2V0Vmlld3Bv
cnRTaXplKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNy
ZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAg
ICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0t
LS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAgICB8Cisg
ICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAg
ICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBoYXZl
IHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENo
aWxkID0gRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMyk7CisKKyAgICBJbnRSZWN0IHJvb3RS
ZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1
MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICBy
b290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVj
dC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RS
ZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxh
eWVyUmVjdChyb290UmVjdCk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAg
ICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAg
IGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAg
Y2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNo
aWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0Vmlz
aWJsZUxheWVyUmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQoZmFs
c2UpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7
CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgp
LCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6
ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAg
IGdyYW5kQ2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoZ3JhbmRDaGlsZFJlY3QpOworICAgIGdy
YW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChn
cmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgp
KTsKKworICAgIG15SG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAg
cmV0dXJuIG15SG9zdEltcGwucmVsZWFzZSgpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29yUGFydGlhbFN3YXApCit7Cisg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBzZXR1cExheWVyc0Zv
ck9wYWNpdHkodHJ1ZSwgdGhpcyk7CisKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdElt
cGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJl
cGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAgICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0
aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9z
dEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxs
TGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAvLyBWZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBj
b21wdXRlZAorICAgICAgICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkp
OworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3Qo
KS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+
cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRD
b2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRl
clBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgfQorfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29y
Tm9QYXJ0aWFsU3dhcCkKK3sKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0
SW1wbCA9IHNldHVwTGF5ZXJzRm9yT3BhY2l0eShmYWxzZSwgdGhpcyk7CisKKyAgICB7CisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgRVhQRUNU
X1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAgICAgIC8vIEp1
c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBhbHJlYWR5IGhh
cHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAgICBt
eUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAvLyBWZXJpZnkg
YWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAorICAgICAgICBBU1NFUlRfRVEoMlUsIGZyYW1l
LnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRl
clBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZy
YW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlz
dCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRl
clN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwo
KSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHF1YWRzVG9G
aWxsU2NyZWVuKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBs
ID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KHRydWUsIHRoaXMpOworCisgICAgLy8gVGhpcyB3aWxs
IGNhdXNlIENDTGF5ZXJUcmVlSG9zdEltcGwgdG8gYWRkIHF1YWRzIHRvIGZpbGwgc2NyZWVuCisg
ICAgbXlIb3N0SW1wbC0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDI1NSwgMCwgMCkpOworCisg
ICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAg
ICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKworICAg
ICAgICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgc3R1ZmYg
YWxyZWFkeSBoYXBwZW5lZAorICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsK
KyAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAgICAg
Ly8gVmVyaWZ5IGFsbCBxdWFkcyBoYXZlIGJlZW4gY29tcHV0ZWQKKyAgICAgICAgQVNTRVJUX0VR
KDJVLCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBm
cmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
X0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1sw
XS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdR
dWFkOjpSZW5kZXJTdXJmYWNlLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0t
Pm1hdGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwg
ZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzFdLT5tYXRlcmlhbCgpKTsKKyAgICB9
Cit9CisKIC8vIE1ha2Ugc3VyZSB0aGF0IGNvbnRleHQgbG9zdCBub3RpZmljYXRpb25zIGFyZSBw
cm9wYWdhdGVkIHRocm91Z2ggdGhlIHRyZWUuCiBjbGFzcyBDb250ZXh0TG9zdE5vdGlmaWNhdGlv
bkNoZWNrTGF5ZXIgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAK
aW5kZXggNDRjNjJlM2UzYzVjODgyOTE0MGQ0MTExNTNlMGFlNDlhNWY3NzA0NS4uZDJmNzIxOGYz
NjA1NzVkZTFhM2Q0ZjY0YjY5ZTY0Zjc1MmQ5MGMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCkBAIC0yNjUs
NyArMjY1LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgcm9vdC0+c2V0Q2xpcFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkpOwogICAgICAgICBtX3JlbmRlclN1
cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZChtX3Jvb3QuZ2V0KCkpOwogCi0gICAgICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJv
b3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJv
b3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCByb290LT5yZW5kZXJTdXJmYWNl
KCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJ
dGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZh
Y2VMYXllckxpc3RJbXBsKTsKICAgICB9CiAKQEAgLTI4MSw3ICsyODQsMTAgQEAgcHJvdGVjdGVk
OgogICAgICAgICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJv
b3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVt
LmFwcGVuZChtX3Jvb3QpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKG1fcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdENocm9taXVtLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlw
ZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1
bSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Jl
bmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA3ZGFjMDA1ZDI0Y2FmYWNjMjcxYjg2YWQ1ZmRlMzg1
NjZkMGJkODc0Li45ZDhkMTlmNzIzODM0ZDQ0MTQ1OWM1NzgzYjk0OTZhZmIxNWNlOWU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHAKQEAgLTExMiwxNSArMTEyLDE2IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgc2Fu
aXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0NvcnJlY3RTaGFyZWRRdWFkU3RhdGUpCiAgICAgcmVuZGVy
U3VyZmFjZS0+c2V0T3JpZ2luVHJhbnNmb3JtKG9yaWdpbik7CiAgICAgcmVuZGVyU3VyZmFjZS0+
c2V0Q29udGVudFJlY3QoY29udGVudFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNldENsaXBS
ZWN0KGNsaXBSZWN0KTsKKyAgICByZW5kZXJTdXJmYWNlLT5zZXRTY2lzc29yUmVjdChjbGlwUmVj
dCk7CiAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJhd09wYWNpdHkoMSk7Ci0KKyAgICAKICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHJlbmRlclN1cmZhY2Ut
PmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogCiAgICAgRVhQRUNUX1RSVUUoc2hhcmVkUXVhZFN0
YXRlLT5xdWFkVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKTsKICAgICBFWFBFQ1RfRVEoMzAsIHNo
YXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKS5tNDEoKSk7CiAgICAgRVhQRUNUX0VRKDQw
LCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3JtKCkubTQyKCkpOwogICAgIEVYUEVDVF9F
UShjb250ZW50UmVjdCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclJlY3QoKSk7Ci0gICAgRVhQRUNU
X0VRKGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPmNsaXBSZWN0KCkpOworICAgIEVYUEVDVF9F
UShjbGlwUmVjdCwgc2hhcmVkUXVhZFN0YXRlLT5zY2lzc29yUmVjdCgpKTsKICAgICBFWFBFQ1Rf
RVEoMSwgc2hhcmVkUXVhZFN0YXRlLT5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShzaGFy
ZWRRdWFkU3RhdGUtPmlzT3BhcXVlKCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144908</attachid>
            <date>2012-05-30 13:31:52 -0700</date>
            <delta_ts>2012-06-01 08:36:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120530163150.patch</filename>
            <type>text/plain</type>
            <size>116736</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ2YWRkYzI3NzcxNDg1
OTFkYmM3N2NjYTZkMWJjMWJlZDMyNWYzMS4uZDgzYmNiYjY1MDI5MWMyNGMyYjg1NDNkNjdlMGYy
Y2U3OWRmNmFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTA1LTMwICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNz
b3JSZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1v
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxj
dWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRR
dWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFy
ZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURy
YXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmg6CisgICAgICAg
IChDQ1NoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0
ZTo6c2Npc3NvclJlY3QpOgorCiAyMDEyLTA1LTI5ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdv
b2dsZS5jb20+CiAKICAgICAgICAgVHJhbnNmb3JtZWQgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGhh
dmUgYW4gaW5jb3JyZWN0IG92ZXJsYXAgbWFwIGVudHJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IGU2ZDBiNWIwOTBhNDdiYjZhY2VjYjYwMDE2ZmJmZWE3ZDY3OTFhMGYuLmFiNmVjNGY3
NGE0ZWZkYWQ0YmI2ZDZiOGQwMDgyMmI1ZTU5MDVhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDUtMzAgIFplZXYgTGllYmVyICA8emxpZWJlckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDbGVhbnVwIHNjaXNzb3IgcmVjdCBj
b21wdXRhdGlvbi91c2Ugd2l0aCBkYW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg3MTY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0cyB0byBDQ0xheWVyVHJlZUhvc3RJbXBs
IHVzaW5nIG1vY2sgZ3JhcGhpYyBjb250ZXh0CisgICAgICAgIHRvIHZlcmlmeSBlbmQtdG8tZW5k
IHF1YWQgZHJhd2luZy4KKworICAgICAgICBBZGRlZCBtb3JlIHRlc3QgY2FzZXMgdG8gQ0NMYXll
clRyZWVIb3N0Q29tbW9uIHRvIHZlcmlmeSBjbGlwIGFuZAorICAgICAgICBzY2lzc29yIHJlY3Qg
Y29tcHV0YXRpb25zLgorCisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6
CisgICAgICAgIChXZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6Cisg
ICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6Cisg
ICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkND
T2NjbHVzaW9uVHJhY2tlclRlc3Q6OmNhbGNEcmF3RXRjKToKKyAgICAgICAgKiB0ZXN0cy9DQ1Jl
bmRlclN1cmZhY2VUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTA1
LTMwICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBwb3J0IHdlYmZyYW1lX3VuaXR0ZXN0LmNjIHRvIHdlYmtpdF91bml0X3Rlc3RzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKaW5kZXggOWJlMDI3OWUyYWViY2Q3Y2RjN2M2OGJkMDI1ZWJlMDg0MWMxNzVkMy4u
OTEyZjg2NTY4NjZmMmU5YjFmN2QyNjVhZmFlYmRiNTY2NmNiMDc2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaApAQCAtMTM5LDYgKzEzOSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAg
dm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3Qp
IHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQogCisgICAgY29uc3Qg
SW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9Cisg
ICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3Nj
aXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKQEAgLTMwNiw3ICszMDksMTUgQEAg
cHJpdmF0ZToKIAogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5k
czsKKworICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIEludFJlY3QgbV92
aXNpYmxlTGF5ZXJSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhl
IHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRyYXduLgorICAgIC8v
IEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBSZWN0IGlmIHVzZXNMYXllckNs
aXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQorICAgIC8vIGl0J3MgdGFyZ2V0UmVuZGVyU3VyZmFj
ZSdzIGNvbnRlbnRSZWN0LgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KKyAg
ICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsK
ICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhy
ZWFkOwpAQCAtMzQ0LDEyICszNTUsMTYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsK
ICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0
IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fZHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3NjcmVlblNw
YWNlVHJhbnNmb3JtOwogICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmltYXRpbmc7CiAgICAg
Ym9vbCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtSXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRh
cmdldCBzdXJmYWNlIHNwYWNlLgogICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0Owog
ICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKaW5kZXggYTlmM2Q0NjY1ZDM2ZTUyOGQzZmUzZmM5MWM4NjAyNWY0ZTlhODdlZC4u
YmMzYzliNDI4MzNmZjNjZGM4YmMxNTI3ODc0ZTcxZTllNTNkOGEyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiAgICAgbV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZSA9IDA7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1
cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlLCBDQ1JlbmRlclN1cmZhY2UqIHJv
b3RSZW5kZXJTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQordm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNv
bnN0IEZsb2F0UmVjdCYgc3VyZmFjZVN3YXBSZWN0KQogewogICAgIC8vIE5vbi1yb290IGxheWVy
cyBzaG91bGQgY2xlYXIgdGhlaXIgZW50aXJlIGNvbnRlbnRzIHRvIHRyYW5zcGFyZW50LiBPbiBE
RUJVRyBidWlsZHMsIHRoZSByb290IGxheWVyCiAgICAgLy8gaXMgY2xlYXJlZCB0byBibHVlIHRv
IGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4uIElm
IHdlCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFy
UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIEMKICAgICAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpKTsKIAogICAg
IGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICBzZXRTY2lzc29y
VG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKKyAgICAgICAgc2V0
U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VTd2FwUmVjdCkpOwogICAgIGVs
c2UKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIApAQCAtNDQ4LDM2ICs0NDgsMjYgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRvTm9PcCgpCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5mbHVzaCgpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQ
YXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNv
bnN0IEZsb2F0UmVjdCYgc3VyZmFjZVN3YXBSZWN0KQogewogICAgIENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSA9IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKTsKICAgICBpZiAoIXVz
ZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNs
ZWFyUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCBy
ZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBjbGVhclJlbmRlclN1cmZhY2Uo
cmVuZGVyU3VyZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgc3VyZmFjZVN3YXBSZWN0KTsK
IAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3Qo
KTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1
YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQo
KTsgKytpdCkKLSAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpLCByZW5kZXJQYXNzLT5zdXJmYWNl
RGFtYWdlUmVjdCgpKTsKKyAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpKTsKIH0KIAotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNv
bnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICBJbnRSZWN0IHNj
aXNzb3JSZWN0OwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0Owot
ICAgICAgICBpZiAoIXF1YWQtPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xp
cEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHF1YWQtPmNsaXBSZWN0KCkpOwotICAgICAgICBzY2lz
c29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpOwotICAgICAgICBp
ZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxz
ZQotICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7Ci0KKyAgICBJbnRSZWN0
IHNjaXNzb3JSZWN0ID0gcXVhZC0+c2Npc3NvclJlY3QoKTsKICAgICBpZiAoc2Npc3NvclJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U2Np
c3NvclRvUmVjdChzY2lzc29yUmVjdCk7CisgICAgICAgIHJldHVybjsKKworICAgIHNldFNjaXNz
b3JUb1JlY3Qoc2Npc3NvclJlY3QpOwogCiAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkK
ICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EKSk7CkBAIC02MjksNyArNjE5LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCoK
IAogICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkKTsKIAotICAgIGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPnNldFNjaXNzb3JSZWN0KHRoaXMsIHF1YWQtPnN1cmZhY2VEYW1hZ2VSZWN0KCkp
OwogICAgIGlmIChxdWFkLT5pc1JlcGxpY2EoKSkKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+ZHJhd1JlcGxpY2EodGhpcyk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCAxYTJlYmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYzMDE0NzJjOTU5
Li5iM2U4NDlmZWUxOWY1MTJhMDg1M2I2ZTYwYTE2NTIyMTBiYjc1ODQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB2aWV3cG9ydENoYW5nZWQoKTsKIAogICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoQ0NSZW5k
ZXJTdXJmYWNlKiBkZWZhdWx0UmVuZGVyU3VyZmFjZSk7Ci0gICAgdm9pZCBkcmF3UmVuZGVyUGFz
cyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IEND
UmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZVN3YXBSZWN0KTsKICAgICB2b2lk
IGZpbmlzaERyYXdpbmdGcmFtZSgpOwogCiAgICAgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXkoTWFu
YWdlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKTsKQEAgLTE1MCw3ICsxNTAsNyBA
QCBwcml2YXRlOgogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXpl
KCkud2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0
U2l6ZSgpLmhlaWdodCgpOyB9CiAKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQq
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGRyYXdRdWFk
KGNvbnN0IENDRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQo
Y29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3QmFja2dyb3VuZEZp
bHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmgKaW5kZXggMGVhNDhhZDEzOTllZGE4NWE3NWFjNzE0MzVlMGU0MTFhY2Vk
NzU1MC4uYTc3ZWIxZTc4ZDU5MGMzZTc4ZjA1NzA0MWQ5NmNjMmYyMTUwZTIyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAg
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQog
ICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlwUmVj
dCA9IGNsaXBSZWN0OyB9CiAKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0
IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQor
CiAgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAK
QEAgLTExOSw2ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5n
TGF5ZXI7CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRo
aXMgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29s
IG1fc2tpcHNEcmF3OwogCkBAIC0xMzQsNyArMTM4LDE2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBt
X2JhY2tncm91bmRGaWx0ZXJzOworCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZh
Y2UncyB0YXJnZXQgc3VyZmFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBE
dXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90
aGluZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgc2V0IHRvIGxh
eWVyJ3MgY2xpcFJlY3QgaWYgdXNlc0xheWVyQ2xpcHBpbmcgaXMgdHJ1ZSwgb3RoZXJ3aXNlCisg
ICAgLy8gaXQncyB0YXJnZXRSZW5kZXJTdXJmYWNlJ3MgY29udGVudFJlY3QuCisgICAgLy8gVXNl
cyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBJbnRSZWN0
IG1fc2Npc3NvclJlY3Q7CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9s
YXllckxpc3Q7CiAKICAgICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZSB0
aGF0IHdpbGwgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNlLCBhbmQgdGhhdCBp
cyBnb2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCmluZGV4IGY0ZWYyZDNmMjFjMWZhZTU3NjY2M2NkMzIy
ZmNiMTI3Yjg3Y2JmZWIuLjcxODExMmJjNmYxOTE3MjYzMDkzMmU0ZTViYTJjNDBjM2MzYzkyYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RyYXdRdWFkLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFyZWRRdWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0
YXRlLT5sYXllclRyYW5zZm9ybSgpOyB9CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpOyB9Ci0gICAgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+
Y2xpcFJlY3QoKTsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCk7IH0KICAgICBmbG9hdCBvcGFj
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKTsgfQogICAg
IC8vIEZvciB0aGUgcHVycG9zZXMgb2YgYmxlbmRpbmcsIHdoYXQgcGFydCBvZiB0aGUgY29udGVu
dHMgb2YgdGhpcyBxdWFkIGFyZSBvcGFxdWU/CiAgICAgSW50UmVjdCBvcGFxdWVSZWN0KCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNmQ4MDY4NGY2NjRmMDI1ZGY1MzZhNzBl
ZWRmZDQ0NWJmYjgzNDRmNC4uYTk0ODVjNTM4NDg3ZjUyM2FhNWUyODI5MThmZmZlODBlYzc1Zjk5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTM3LDEwICsxMzcsNyBAQCBib29sIEND
TGF5ZXJJbXBsOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKIAogUGFzc093blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7
Ci0gICAgSW50UmVjdCBsYXllckNsaXBSZWN0OwotICAgIGlmICh1c2VzTGF5ZXJDbGlwcGluZygp
KQotICAgICAgICBsYXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsKLSAgICByZXR1cm4gQ0NTaGFy
ZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgdmlz
aWJsZUxheWVyUmVjdCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3BhY2l0eSgpLCBvcGFxdWUoKSk7
CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBk
cmF3VHJhbnNmb3JtKCksIHZpc2libGVMYXllclJlY3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09w
YWNpdHkoKSwgb3BhcXVlKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmI3NWE4OWViYWQz
ZjVhYWEzOTg1MmQ0NGQ5ODRhODIxMTliOTZmMC4uOTI5MzYxNmUzZjM0Yjc0OTQ3Mjg4ZmU3OTYz
ZTE5NzNmOGE2MzYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjMsNiArMTYzLDEwIEBA
IHB1YmxpYzoKICAgICAvLyBVc2FnZTogaWYgdGhpcy0+dXNlc0xheWVyQ2xpcHBpbmcoKSBpcyBm
YWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4KICAgICBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2b2lk
IHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jbGlwUmVjdCA9IHJlY3Q7IH0K
KworICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lz
c29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkg
eyBtX3NjaXNzb3JSZWN0ID0gcmVjdDsgfQorCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRS
ZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CiAg
ICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSkg
eyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CiAKQEAgLTI5Nyw2ICszMDEsNyBA
QCBwcml2YXRlOgogICAgIC8vIFRyYWNrcyBpZiBkcmF3aW5nLXJlbGF0ZWQgcHJvcGVydGllcyBo
YXZlIGNoYW5nZWQgc2luY2UgbGFzdCByZWRyYXcuCiAgICAgYm9vbCBtX2xheWVyUHJvcGVydHlD
aGFuZ2VkOwogCisgICAgLy8gVXNlcyBsYXllcidzIGNvbnRlbnQgc3BhY2UuCiAgICAgSW50UmVj
dCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9v
bCBtX29wYXF1ZTsKQEAgLTM1MSwxNyArMzU2LDI0IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHJl
Y3QgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc2Npc3NvciB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJh
d24uCiAgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVz
dHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCiAgICAgLy8gdG8gYm91bmRzLgorICAgIC8vIFVz
ZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAKKyAg
ICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hp
Y2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdz
IHNwYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAgIC8vIFJlbmRlciBzdXJm
YWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5k
YW50cwogICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KICAgICBPd25QdHI8Q0NS
ZW5kZXJTdXJmYWNlPiBtX3JlbmRlclN1cmZhY2U7CiAKICAgICAvLyBIaWVyYXJjaGljYWwgYm91
bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLgorICAg
IC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fZHJhd2FibGVD
b250ZW50UmVjdDsKIAogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0IHdhcyByZXBhaW50ZWQv
dXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBwbHVnaW4gbGF5ZXJzIGJ5
cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KKyAgICAvLyBVc2VzIGxheWVyJ3MgY29udGVu
dCBzcGFjZS4KICAgICBGbG9hdFJlY3QgbV91cGRhdGVSZWN0OwogCiAgICAgLy8gTWFuYWdlcyBh
bmltYXRpb25zIGZvciB0aGlzIGxheWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
aW5kZXggOTYzOTdjYTQ1YzQyMTY0OTVhY2ZiOGEwN2U0YjZhMGExNTk5MDFhYy4uYzJlNTY0NjY3
Y2UyZWQ4MmY1MWUxYTIzYTBjOTljMmQ5N2Q0MDIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCkBAIC01MTQsNyArNTE0LDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRh
dGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBDQ1RleHR1cmVVcGRhdGVyJiB1CiAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlU2Nh
bGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5ncy5kZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlN
YXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXll
ciwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCB1cGRhdGVMaXN0LCByb290
UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5t
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0KEZsb2F0
UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHVwZGF0ZUxpc3QsIHJvb3REYW1h
Z2VSZWN0KTsKICAgICB9CiAKICAgICAvLyBSZXNldCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJl
cXVlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXgg
MmEwZjcxODAzOTIyMjZmNWU0YTI4MDc5MjhhZjU3ZjQ1NmVhZjY4OC4uOTRmZWY4YzE5MzRkZTk3
NmJhZmRjNDhlZDY2OWQxOTVlZThiMDM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwCkBAIC02NSw2ICs2NSwzOSBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFj
ZQogICAgIHJldHVybiBsYXllclJlY3Q7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVM
YXllclNjaXNzb3JSZWN0KExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdERh
bWFnZVJlY3QpCit7CisgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52
ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKS5pbnZlcnNlKCk7CisgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2UgPSBDQ01hdGhV
dGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3QoaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLCByb290
RGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCisgICAg
ICAgIGNsaXBBbmREYW1hZ2UuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICBlbHNl
CisgICAgICAgIGNsaXBBbmREYW1hZ2UuaW50ZXJzZWN0KHJlbmRlclN1cmZhY2UtPmNvbnRlbnRS
ZWN0KCkpOworCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+CitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoTGF5ZXJUeXBl
KiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICBMYXllclR5
cGUqIHBhcmVudExheWVyID0gbGF5ZXItPnBhcmVudCgpOworICAgIFJlbmRlclN1cmZhY2VUeXBl
KiB0YXJnZXRTdXJmYWNlID0gcGFyZW50TGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKKyAg
ICBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Cisg
ICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gc3VyZmFjZS0+Y2xpcFJlY3QoKTsKKyAgICBpZiAoY2xp
cFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBjbGlwUmVjdCA9IGludGVyc2VjdGlvbih0YXJnZXRT
dXJmYWNlLT5jb250ZW50UmVjdCgpLCBzdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwor
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0g
dGFyZ2V0U3VyZmFjZS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCk7CisgICAgRmxv
YXRSZWN0IGNsaXBBbmREYW1hZ2UgPSBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3QoaW52
ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLCByb290RGFtYWdlUmVjdCk7CisKKyAgICBjbGlwQW5k
RGFtYWdlLmludGVyc2VjdChjbGlwUmVjdCk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
Y2xpcEFuZERhbWFnZSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KIHN0YXRp
YyBpbmxpbmUgYm9vbCBsYXllcklzSW5FeGlzdGluZzNEUmVuZGVyaW5nQ29udGV4dChMYXllclR5
cGUqIGxheWVyKQogewpAQCAtMjgyLDcgKzMxNSw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVTaG91
bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxheWVyLCBib29sIGF4aXNBbGln
CiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2
ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9u
cywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwg
dHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1cmZhY2VUeXBl
KiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRl
ciwgaW50IG1heFRleHR1cmVTaXplKQorc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1cmZhY2VUeXBlKiBuZWFyZXN0QW5j
ZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
TGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRl
eHR1cmVTaXplKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIG5ldyBtYXRy
aXggdHJhbnNmb3JtYXRpb25zIHJlY3Vyc2l2ZWx5IGZvciB0aGlzCiAgICAgLy8gbGF5ZXIgYW5k
IGFsbCBpdHMgZGVzY2VuZGFudHMuIEl0IGFsc28gY29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIHJl
bmRlciBzdXJmYWNlcy4KQEAgLTU3Myw3ICs2MDYsNyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXll
cgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7
ICsraSkgewogICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCk7Ci0gICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZh
Y2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgsIG5l
eHRIaWVyYXJjaHlNYXRyaXgsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6
ZSk7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJ
bnRlcm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29y
dGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJp
eCwgbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKIAogICAgICAgICBp
ZiAoZHJhd3NDb250ZW50KSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KSkgewpAQCAtNjk0LDkgKzcyNyw5IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKIC8vIEZJ
WE1FOiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gc2V0IHZpc2li
aWxpdHkgcmVjdHMgb24gYSBzZWNvbmQKIC8vIHRyZWUgcGFzcywgcmV2aXNlIGNhbGN1bGF0ZVZp
c2libGVMYXllclJlY3QoKSBzbyB0aGF0IHRoaXMgY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUKLS8v
IHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFs
PD4oKS4KKy8vIHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Pigp
LgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgotc3RhdGljIHZvaWQgd2Fsa0xheWVyc0FuZENhbGN1bGF0
ZVZpc2libGVMYXllclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbChj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYg
cm9vdERhbWFnZVJlY3QpCiB7CiAgICAgLy8gVXNlIEJhY2tUb0Zyb250IHNpbmNlIGl0J3MgY2hl
YXAgYW5kIHRoaXMgaXNuJ3Qgb3JkZXItZGVwZW5kZW50LgogICAgIHR5cGVkZWYgQ0NMYXllckl0
ZXJhdG9yPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CkBAIC03MDcs
MTkgKzc0MCwzNCBAQCBzdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxh
eWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYQogICAgICAgICAgICAgSW50UmVj
dCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCgqaXQpOwogICAg
ICAgICAgICAgaXQtPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAg
ICAgIH0KKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkgeworICAgICAgICAgICAg
SW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3Q8TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT4oKml0LCByb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICBp
dC0+c2V0U2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAgICB9IGVsc2UgaWYgKGl0LnJl
cHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEludFJl
Y3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3Q8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4oKml0LCByb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICBpdC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRTY2lzc29yUmVjdChzY2lzc29yUmVjdCk7CisgICAgICAgIH0K
ICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0q
IHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9t
aXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhp
ZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwg
aW50IG1heFRleHR1cmVTaXplKQoreworICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1h
dHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5
ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJ
bXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8
Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJl
U2l6ZSkKK3sKKyAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPENDTGF5ZXJJbXBs
LCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihs
YXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVT
aXplKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQogewotICAgIFdl
YkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVy
Q2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNo
cm9taXVtLCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJj
aHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4
dHVyZVNpemUpOwotICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxM
YXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgY2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtPihyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290RGFtYWdlUmVjdCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIGxheWVyLCBD
Q0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50
TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4
VGV4dHVyZVNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKIHsKLSAgICBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPEND
TGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RM
YXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBsYXllckxpc3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAg
d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzPENDTGF5ZXJJbXBsLCBWZWN0
b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKKyAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzSW50ZXJuYWw8Q0NMYXllcklt
cGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2VSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCAzNzYyZjY0YjE5YjMx
MzQ5OThlNDBiNDQ3NjM4YTI0NmYxMjQ4YmJiLi4xYzVlOWUxNzAxZDNkMmVlMzhiNTlmYWU5ZTRi
YzVmNjcyYWMzZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApA
QCAtNDEsOCArNDEsMTEgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0
YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVyQ2hyb21pdW0qIHJvb3RM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgc3RhdGlj
IHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwg
Q0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVu
dE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgs
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NM
YXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXpl
KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVt
KiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1h
dHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRl
eHR1cmVTaXplKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xh
eWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFy
Y2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25z
dCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCk7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZh
Y2VDb250cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJ
RCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggOTEzMzZh
Nzc2OGQzZGQ2MjExYjA5ODQ4NDljNjJjMjNhNGVkNTM2MC4uZGQwNGNiODI0NmExNDZjMGQzOWVl
MWUwNjExNWUzYTRjNDBiNzJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NQYWdlU2NhbGVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTIyOSwyNyAr
MjMwLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZh
Y2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLAogICAgIH0KIH0KIAotc3RhdGljIEZsb2F0
UmVjdCBkYW1hZ2VJblN1cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQotewotICAgIEZsb2F0UmVjdCBzdXJm
YWNlRGFtYWdlUmVjdDsKLSAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhl
IHJvb3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2UgZm9yCi0gICAgLy8gYWxsIHN1cmZhY2VzLCBleGNl
cHQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zv
cm0uaGFzUGVyc3BlY3RpdmUoKSkgewotICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9u
cyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZgotICAgICAgICAvLyBpbnZlcnNlIHRy
YW5zZm9ybXMuIEluIHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KLSAgICAgICAg
Ly8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgotICAgICAgICAvLyBGSVhNRTogdXNl
IGNhbGN1bGF0ZVZpc2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KLSAgICAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJT
dXJmYWNlKCk7Ci0gICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29u
dGVudFJlY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
bnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNl
KCk7Ci0gICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNm
b3JtLm1hcFJlY3Qocm9vdERhbWFnZVJlY3QpOwotICAgIH0KLSAgICByZXR1cm4gc3VyZmFjZURh
bWFnZVJlY3Q7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVy
U3VyZmFjZUxheWVyTGlzdChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK0Zs
b2F0UmVjdCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CiAKQEAgLTI2Nyw3ICsyNDgsMjEgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KENDTGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJh
bnNmb3JtOwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdzLmRl
dmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX3Jv
b3RMYXllckltcGwuZ2V0KCksIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
Lm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3JtcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fcm9vdExheWVySW1wbC5n
ZXQoKSwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCks
ICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNp
emUpOworCisgICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0
aWFsU3dhcCB8fCBzZXR0aW5ncygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCisgICAgICAgICAg
ICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CisgICAgICAgIG1fcm9vdERhbWFnZVJlY3QgPSBtX3Jvb3RMYXll
ckltcGwtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOworCisgICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKyAgICAgICAgaWYgKGxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICAgICAg
cm9vdERhbWFnZVJlY3QgPSBtX3Jvb3REYW1hZ2VSZWN0OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByb290RGFtYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3cG9y
dFNpemUoKSk7CisgICAgCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdl
UmVjdCk7CisKKyAgICAgICAgcmV0dXJuIHJvb3REYW1hZ2VSZWN0OwogICAgIH0KIH0KIApAQCAt
Mjc1LDEzICsyNzAsMTEgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKIHsKICAgICBBU1NFUlQo
cGFzc2VzLmlzRW1wdHkoKSk7CiAKLSAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9
IGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CiAKICAgICBUUkFDRV9FVkVOVDEoIndlYmtpdCIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxj
dWxhdGVSZW5kZXJQYXNzZXMiLCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgp
KSk7CiAKLSAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3
YXAgfHwgc2V0dGluZ3MoKS5zaG93U3VyZmFjZURhbWFnZVJlY3RzKQotICAgICAgICB0cmFja0Rh
bWFnZUZvckFsbFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7Ci0gICAgbV9yb290RGFtYWdlUmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgbV9y
b290TGF5ZXJJbXBsLT5zZXRTY2lzc29yUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJvb3REYW1hZ2VS
ZWN0KSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIHJlbmRlciBwYXNzZXMgaW4gZGVwZW5kZW5jeSBv
cmRlci4KICAgICBIYXNoTWFwPENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyUGFzcyo+IHN1cmZh
Y2VQYXNzTWFwOwpAQCAtMjkwLDEyICsyODMsNiBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQog
ICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKIAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNz
ID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgRmxvYXRS
ZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9
IGRhbWFnZUluU3VyZmFjZVNwYWNlKHJlbmRlclN1cmZhY2VMYXllciwgbV9yb290RGFtYWdlUmVj
dCk7Ci0gICAgICAgIHBhc3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0
KTsKLQogICAgICAgICBzdXJmYWNlUGFzc01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQo
KSk7CiAgICAgICAgIHBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTMy
Niw5ICszMTMsOSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBh
c3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogCiAgICAgICAgIG9jY2x1c2lv
blRyYWNrZXIuZW50ZXJMYXllcihpdCk7CiAKLSAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250
cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJp
YnV0aW5nUmVuZGVyU3VyZmFjZSgpICYmICFpdC0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVyU3Vy
ZmFjZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIpOwotICAgICAgICBlbHNlIGlmIChpdC5y
ZXByZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2libGVM
YXllclJlY3QoKS5pc0VtcHR5KCkgJiYgIWl0LT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgaXQtPndpbGxEcmF3KG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAgICAgICAg
ICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvckxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIsIGhh
ZE1pc3NpbmdUaWxlcyk7CiAgICAgICAgIH0KQEAgLTQzMCw4ICs0MTcsMTMgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAg
bV9mcHNDb3VudGVyLT5tYXJrQmVnaW5uaW5nT2ZGcmFtZShjdXJyZW50VGltZSgpKTsKICAgICBt
X2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKG1fcm9vdExheWVySW1wbC0+cmVuZGVy
U3VyZmFjZSgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWUucmVuZGVyUGFz
c2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQYXNz
KGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NSZW5kZXJQYXNz
KiByZW5kZXJQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpOworCisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclBh
c3MtPnRhcmdldFN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCk7Cisg
ICAgICAgIEZsb2F0UmVjdCBzdXJmYWNlU3dhcFJlY3QgPSBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xp
cHBlZFJlY3QoaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLCBtX3Jvb3REYW1hZ2VSZWN0KTsK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhyZW5kZXJQYXNzLCBzdXJm
YWNlU3dhcFJlY3QpOworICAgIH0KIAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJs
ZWQoc2V0dGluZ3MoKSkpCiAgICAgICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVj
dHNGb3JDdXJyZW50RnJhbWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBzZXR0aW5ncygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAppbmRleCBmOGI3NjMxNDA0ZDdjMjM4MzExN2M1ODZhZmRiZmE0Y2EwYzMyMGIwLi4yNWYx
YTVhZWRkNWU3MzM0MjI2MzhlY2UzYjljZGJlYjZjYjUzNDc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC0xNzQsOCArMTc0LDggQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgYW5pbWF0ZVBhZ2VTY2FsZShkb3VibGUgbW9ub3RvbmljVGltZSk7CiAgICAgdm9pZCBhbmlt
YXRlR2VzdHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWUpOwogCi0gICAgLy8gRXhwb3NlZCBmb3Ig
dGVzdGluZy4KLSAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXll
ckxpc3QmKTsKKyAgICAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLiBSZXR1cm5zIHJvb3QgZGFtYWdl
IHJlY3Qgb3IgZnVsbCB2aWV3cG9ydCBpZiBub3QgdXNpbmcgcGFydGlhbCBzd2FwLgorICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0Jik7CiAK
ICAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5
ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcAppbmRleCA4NDg3MzBhMmM3YjYwYjc2MjM4OTlmZDdmOWI0MTMzMGEy
ZTk3Y2I3Li45ZjdlNTkyZTVkNDVhM2UwNmU0NzM3YWM5OWMwMjZjYTY5YjRlYTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAKQEAgLTc1LDEzICs3NSwxNCBAQCB2b2lkIENDUmVuZGVyUGFz
czo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBD
Q09jY2x1cwogICAgIENDUXVhZEN1bGxlciBxdWFkQ3VsbGVyKG1fcXVhZExpc3QsIGxheWVyLCBv
Y2NsdXNpb25UcmFja2VyLCBsYXllci0+aGFzRGVidWdCb3JkZXJzKCkpOwogCiAgICAgQ0NSZW5k
ZXJTdXJmYWNlKiBzdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKwogICAgIE93blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gc3VyZmFjZS0+Y3JlYXRlU2hh
cmVkUXVhZFN0YXRlKCk7CiAgICAgaWYgKGxheWVyLT5oYXNEZWJ1Z0JvcmRlcnMoKSkgewogICAg
ICAgICBDb2xvciBjb2xvcihkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvclJlZCwgZGVidWdTdXJmYWNl
Qm9yZGVyQ29sb3JHcmVlbiwgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JCbHVlLCBkZWJ1Z1N1cmZh
Y2VCb3JkZXJBbHBoYSk7CiAgICAgICAgIHF1YWRDdWxsZXIuYXBwZW5kU3VyZmFjZShDQ0RlYnVn
Qm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNv
bnRlbnRSZWN0KCksIGNvbG9yLCBkZWJ1Z1N1cmZhY2VCb3JkZXJXaWR0aCkpOwogICAgIH0KICAg
ICBib29sIGlzUmVwbGljYSA9IGZhbHNlOwotICAgIHF1YWRDdWxsZXIuYXBwZW5kU3VyZmFjZShD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3Vy
ZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCksIGlzUmVwbGlj
YSkpOworICAgIHF1YWRDdWxsZXIuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwg
bGF5ZXIsIGlzUmVwbGljYSkpOwogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hh
cmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiAKICAgICAvLyBBZGQgcmVwbGljYSBhZnRlciB0aGUg
c3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVhcnMgYmVsb3cgdGhlIHN1cmZhY2UuCkBAIC05Miw3ICs5
Myw3IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXll
cihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVzCiAgICAgICAgICAgICBxdWFkQ3VsbGVyLmFw
cGVuZFJlcGxpY2EoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRl
LmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVy
V2lkdGgpKTsKICAgICAgICAgfQogICAgICAgICBib29sIGlzUmVwbGljYSA9IHRydWU7Ci0gICAg
ICAgIHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3Jl
YXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIs
IHN1cmZhY2VEYW1hZ2VSZWN0KCksIGlzUmVwbGljYSkpOworICAgICAgICBxdWFkQ3VsbGVyLmFw
cGVuZFJlcGxpY2EoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3Rh
dGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGxheWVyLCBpc1JlcGxpY2EpKTsKICAg
ICAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFz
ZSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4IDQ1MmE4NjEwZjVhOWRi
YzAyMTRhOGNkZGJmZjZmMDI1NGZlY2RhMjYuLjAzNThlZWM5MThiOGYxMDgyZDJlYjQ1ZjBkODdi
ZDlhODk0NjMzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC02MiwxNiArNjIsMTIgQEAg
cHVibGljOgogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9xdWFkTGlzdDsgfQogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQogCi0gICAgdm9pZCBzZXRTdXJmYWNlRGFtYWdl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSB7IG1fc3VyZmFjZURhbWFn
ZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQotICAgIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0KIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSopOwogCiAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZhY2U7CiAgICAgQ0NRdWFkTGlzdCBtX3F1
YWRMaXN0OwogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRR
dWFkU3RhdGVMaXN0OwotICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogfTsKIAog
dHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NMaXN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggMjZjNDY3YWI0MDMzZGQyY2IxZDIz
OGIyYmMxYmY3OTM1YWQwOWJhMC4uMWVmNjc3ZTliYTBiMWQ3OWM1M2JhNjY1NDdmOTFkYmQ4NDE3
MjRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5o
IgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VG
aWx0ZXJzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKQEAgLTIwOCwyMCAr
MjA5LDYgQEAgaW5saW5lIHN0YXRpYyBpbnQgZ2V0U2tCaXRtYXBUZXh0dXJlSWQoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgaW50IGZhbGxiYWNrKQogICAgIHJldHVybiB0ZXh0dXJlLT5nZXRUZXh0
dXJlSGFuZGxlKCk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpzZXRTY2lzc29yUmVjdChM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgp
ICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIGxheWVy
UmVuZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApIHsKLSAgICAgICAgRmxv
YXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0ID0gbV9jbGlwUmVjdDsKLSAgICAgICAgY2xpcEFuZERh
bWFnZVJlY3QuaW50ZXJzZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKLSAgICAgICAgbGF5ZXJSZW5k
ZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0
KSk7Ci0gICAgfSBlbHNlIGlmIChsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1Bh
cnRpYWxTd2FwKQotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xv
c2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKLSAgICBlbHNlIGlmIChtX293bmluZ0xh
eWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBp
bmcoKSkKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChtX2NsaXBSZWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVy
UmVuZGVyZXItPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7Ci19Ci0KIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3Q29udGVudHMoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIGlmIChtX3NraXBzRHJhdyB8fCAh
bV9jb250ZW50c1RleHR1cmUpCkBAIC00NTQsMTMgKzQ0MSwxMyBAQCBib29sIENDUmVuZGVyU3Vy
ZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCgpIGNvbnN0CiBQ
YXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJl
ZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAgIHJl
dHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9yaWdpblRyYW5zZm9ybSgpLCBkcmF3VHJh
bnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCksIGRyYXdPcGFjaXR5KCksIGlzT3Bh
cXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShvcmlnaW5UcmFuc2Zv
cm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBtX3NjaXNzb3JSZWN0LCBkcmF3
T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+
IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7
CiAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0
ZTo6Y3JlYXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0o
KSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOwor
ICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgbV9zY2lzc29yUmVj
dCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCmluZGV4IDZhNjcxYTcwMGVkNjc3MDg2N2ViZTkyNjljMTI5Njc2MGQyMDQ0YTEuLjg3
ZDIyYmFlYzYwY2Q5NGM1N2RhNTFhNzlmYzFkOTQzNTFjMDk3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCkBAIC01OCw4ICs1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIHByZXBhcmVC
YWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHJlbGVh
c2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwogCi0gICAgdm9pZCBzZXRTY2lzc29yUmVjdChMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSBjb25z
dDsKLQogICAgIHZvaWQgZHJhd0NvbnRlbnRzKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAg
IHZvaWQgZHJhd1JlcGxpY2EoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKQEAgLTEyMyw2ICsx
MjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0Jik7CiAg
ICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9
CiAKKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7
IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRD
b250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CiAKQEAgLTE2Nyw2ICsxNjgsNyBA
QCBwcml2YXRlOgogICAgIENDTGF5ZXJJbXBsKiBtX293bmluZ0xheWVyOwogICAgIENDTGF5ZXJJ
bXBsKiBtX21hc2tMYXllcjsKIAorICAgIC8vIFVzZXMgdGhpcyBzdXJmYWNlJ3Mgc3BhY2UuCiAg
ICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgYm9v
bCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQ7CkBAIC0xODYsNyArMTg4LDE0IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOworCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ug
b2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7
CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUg
b2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ug
b2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJl
Y3Q7CisKICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBtX2xheWVyTGlzdDsKIAogICAgIC8vIFRo
ZSBuZWFyZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRoYXQgd2lsbCBjb250YWluIHRoZSBj
b250ZW50cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlzIGdvaW5nCkBAIC0xOTUsOSArMjA0
LDYgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxDQ0RhbWFnZVRyYWNrZXI+IG1fZGFtYWdlVHJh
Y2tlcjsKIAotICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMg
ZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgotICAgIEZsb2F0UmVjdCBtX2RhbWFn
ZVJlY3Q7Ci0KICAgICAvLyBGb3IgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucwogICAgIGludCBtX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKICAgICBpbnQgbV9jdXJyZW50TGF5
ZXJJbmRleEhpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZC5jcHAKaW5kZXggYzZlMDIxZWNlMjA2NWM3OWM1ZWNmNmNkMGI2ZDM3Y2U5NTQ3YjMxMC4uYmZh
YmFkODVmZTQzYzY5YTMwMjEyMTAwZjI5OGY0ZmY3NzYzOGNhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcApAQCAtMjksMTUgKzI5LDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4g
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSkK
K1Bhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgYm9vbCBpc1JlcGxpY2Ep
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFy
ZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGlzUmVwbGlj
YSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hh
cmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIsIGlzUmVwbGljYSkpOwogfQogCi1DQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5
ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBp
c1JlcGxpY2EpCitDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgYm9vbCBpc1JlcGxpY2EpCiAgICAgOiBD
Q0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwgcXVh
ZFJlY3QpCiAgICAgLCBtX2xheWVyKGxheWVyKQotICAgICwgbV9zdXJmYWNlRGFtYWdlUmVjdChz
dXJmYWNlRGFtYWdlUmVjdCkKICAgICAsIG1faXNSZXBsaWNhKGlzUmVwbGljYSkKIHsKICAgICBB
U1NFUlQobV9sYXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQu
aAppbmRleCA4ZjZkYTVlZWUxZDgyN2ZjMTBlYTVhNThkNWY4MTllYjIwNTkzMTZkLi4zNDhlOGE5
OGQzZDIzNzI3YTgwMmNhMTUzOTM5N2NjMTM2YmJhMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKQEAgLTM2LDIwICszNiwxNSBAQCBjbGFzcyBDQ0xheWVy
SW1wbDsKIGNsYXNzIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3Jl
YXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBs
KiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBib29s
IGlzUmVwbGljYSk7CiAKICAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyOyB9CiAgICAgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGlj
YTsgfQogCi0gICAgLy8gVGhlIHN1cmZhY2UgZGFtYWdlIHJlY3QgZm9yIHRoZSB0YXJnZXQgc3Vy
ZmFjZSB0aGlzIHF1YWQgZHJhd3MgaW50by4KLSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVt
b3ZlZCBvbmNlIHJlbmRlciBzdXJmYWNlcyBnZXQgdGhlaXIgb3duIGxheWVyIHR5cGUuCi0gICAg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vy
ZmFjZURhbWFnZVJlY3Q7IH0KLQogcHJpdmF0ZToKLSAgICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCos
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKTsKKyAg
ICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0
IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGJvb2wgaXNSZXBsaWNhKTsKIAogICAgIENDTGF5ZXJJ
bXBsKiBtX2xheWVyOwotICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogICAgIGJv
b2wgbV9pc1JlcGxpY2E7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAK
aW5kZXggOWJmNzY5MjViYjhjZjJiYmFjNTM5YzAxNDMxYzU1Nzg0MzM5ZmQwNS4uOTA3NzdhYjQx
YmI4NGIwODg5MWNiMjI0Mjg4NWUwZjM4MWIyODI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVk
UXVhZFN0YXRlLmNwcApAQCAtMjksMTYgKzI5LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKK1Bh
c3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25z
dCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNmb3JtLCBs
YXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0LCBjbGlwUmVjdCwgb3BhY2l0eSwgb3BhcXVlKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNmb3JtLCBs
YXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0LCBzY2lzc29yUmVjdCwgb3BhY2l0eSwgb3BhcXVlKSk7
CiB9CiAKLUNDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKK0NDU2hhcmVkUXVhZFN0YXRl
OjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5z
Zm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFj
aXR5LCBib29sIG9wYXF1ZSkKICAgICA6IG1fcXVhZFRyYW5zZm9ybShxdWFkVHJhbnNmb3JtKQog
ICAgICwgbV9sYXllclRyYW5zZm9ybShsYXllclRyYW5zZm9ybSkKICAgICAsIG1fbGF5ZXJSZWN0
KGxheWVyUmVjdCkKLSAgICAsIG1fY2xpcFJlY3QoY2xpcFJlY3QpCisgICAgLCBtX3NjaXNzb3JS
ZWN0KHNjaXNzb3JSZWN0KQogICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgLCBtX29wYXF1
ZShvcGFxdWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaAppbmRleCA0MjA2YWE1
YzJkZTJhNzU0YzljYTkxZjRlOGU4ODkzODIyMTFmZjIyLi42YjE1MDAwYmI1N2U2ZGIwNGRmYTVm
OTQ3NWQzNDA3YjM5YTgyYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKQEAg
LTM2LDI3ICszNiwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ1NoYXJlZFF1YWRT
dGF0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NTaGFyZWRRdWFkU3RhdGUpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGUoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGUoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBs
YXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBz
Y2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAgLy8gVGhlIHRy
YW5zZm9ybSB0aGF0IHF1YWRzIGluIGEgQ0NEcmF3UXVhZCBzaG91bGQgYmUgdHJhbnNmb3JtZWQg
d2l0aC4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fcXVhZFRyYW5zZm9ybTsgfQogICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhh
dCBsYXllclJlY3QoKSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xheWVy
VHJhbnNmb3JtOyB9CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9sYXllclJlY3Q7IH0KLSAgICAvLyBVc2FnZTogaWYgY2xpcFJlY3QgaXMgZW1wdHksIHRo
aXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkLgotICAgIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNj
aXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQogCiAgICAgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIGJvb2wgaXNPcGFxdWUo
KSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGJvb2wgaXNMYXllckF4aXNBbGlnbmVk
SW50UmVjdCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKyAgICBDQ1No
YXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBi
b29sIG9wYXF1ZSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3F1YWRUcmFuc2Zvcm07
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sYXllclRyYW5zZm9ybTsKICAgICBJbnRSZWN0
IG1fbGF5ZXJSZWN0OwotICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKyAgICBJbnRSZWN0IG1fc2Np
c3NvclJlY3Q7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGJvb2wgbV9vcGFxdWU7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVz
dC5jcHAKaW5kZXggYmJlYTk3MWRkNWE0ZWZlNjdkMzM2MTYxYzlhMGRmYjcxNWFkN2FiNy4uZWI3
MGRkZTUzY2ZjOGUyYjk1NGYyNDZmYjA3MTlmNDFlMDQzYjcyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBAIC01OCw3
ICs1OCw4IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9yPENDTGF5CiAKICAgICByb290LT5yZW5kZXJTdXJm
YWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocm9vdCk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29ydGVy
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRl
ciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKIHZvaWQgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShDQ0xheWVySW1wbCogcm9vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCmluZGV4IGY1ZWFlN2Y4NGRkNTEy
NWM4MDk5NWI5Y2Q0MjliOTliY2JmNjkzMzQuLmQ0ZjlmZGMyYWExYjYxYmUzYjc3OWMyOTFkZDI3
MmNhOWE0OWM2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySXRlcmF0b3JUZXN0LmNwcApAQCAtMTM4LDEwICsxMzgsMTEgQEAgVEVTVChDQ0xheWVy
SXRlcmF0b3JUZXN0LCBzaW1wbGVUcmVlKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dExheWVyLmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RM
YXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJv
b3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVC
YWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJv
b3RMYXllciwgMCwgLTEsIDEpOwpAQCAtMTg1LDEwICsxODYsMTEgQEAgVEVTVChDQ0xheWVySXRl
cmF0b3JUZXN0LCBjb21wbGV4VHJlZSkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RM
YXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5
ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGxheWVyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFj
a1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290
TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTI0NCwxMCArMjQ2LDExIEBAIFRFU1QoQ0NMYXllckl0ZXJh
dG9yVGVzdCwgY29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVy
LmdldCgpLAorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBsYXllckxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAg
aXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1Rf
Q09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCAxN2U1
NzAxOTk5Zjg2MWFhODdiNWE3NzU5YTdkZmQwMjAxNGY5MmRjLi5lM2Y4MjhiZWFlZmQyOTI0OWMz
OTEyYjY3ZWI3MjA1MWY2MWNmODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTMyLDcgKzMy
LDEyIEBACiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKKyNpbmNsdWRlICJj
Yy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1
ZGUgImNjL0NDVGhyZWFkLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CkBAIC01OCw3ICs2Myw4IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290
TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJv
b3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVt
bXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKSk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50
T2ZNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKQEAgLTE3NCw3ICsxODAs
NyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JT
aW5nbGVMYXllcikKICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVk
UmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDc6
IFZlcmlmeSB0aGF0IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0u
Ci0gICAgLy8gICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBp
cworICAgIC8vICAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwogICAgIC8vICAg
ICAgICAgc3RpbGwgd29ydGggdGVzdGluZyB0byBkZXRlY3QgYWNjaWRlbnRhbCByZWdyZXNzaW9u
cy4KICAgICBleHBlY3RlZFJlc3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25U
b0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7
CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50
KDUuMGYsIDEuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKQEAgLTMxNyw2ICszMjMsNTYx
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bmdsZVJlbmRlclN1cmZhY2UpCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHNjaXNzb3JSZWN0Tm9DbGlwKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0
aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0
ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAg
fAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0t
LS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAg
ICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAg
fCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJl
bmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxk
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwg
MTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJ
bnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9v
dFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisK
KyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOwor
ICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6
ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdy
YW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAg
ICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCog
Z3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQo
Z3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2Uo
KSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
ICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisK
KyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAg
ICAgICAgLyogZW1wdHkgbGlzdCAqLworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAm
bGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0UmVjdCBk
dW1teURhbWFnZVJlY3Q7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFn
ZVJlY3QpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFT
U0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVY
UEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgMlUpOworICAgIAorICAgIEFT
U0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8v
IExheWVyJ3MgY2xpcFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRz
CisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5k
Q2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0Lnko
KSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQ
dHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgQVNTRVJUX0VRKHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7Cisg
ICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJl
Y3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIEFTU0VSVF9GQUxTRShyb290LT51c2VzTGF5ZXJD
bGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5n
KCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygp
KTsKKyAgICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRSZWN0IHJv
b3REYW1hZ2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdl
KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIGNoaWxkIHN1cmZhY2Ug
ZG9lc24ndCBoYXZlIGEgY2xpcCByZWN0LCB0aGVyZWZvcmUgaXQgd2lsbCBiZSBjb21wdXRlZCBh
cyBpbnRlcnNlY3Rpb24KKyAgICAvLyBiZXR3ZWVuIHJvb3Qgc3VyZmFjZSdzIGNvbnRlbnRyZWN0
IGFuZCBjaGlsZCBzdXJmYWNlJ3MgZHJhd2FibGUgY29udGVudCByZWN0LgorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJl
Y3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIEVYUEVD
VF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisKKyAgICAvLyBU
aGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3QsIGJ1dCBjaGlsZCBsYXllciBzdGFydHMg
YXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdoIGl0IGhhcyBib3VuZHMsIGl0IGlzIG5v
dCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxkcmVuCisgICAgLy8gKHdoaWNoIGV4dGVu
ZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBzY2lzc29yIHJlY3QKKyAgICBFWFBFQ1Rf
RVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgo
KSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOwor
CisgICAgLy8gR3JhbmQgY2hpbGQgd2lsbCBoYXZlIHRoZSBzYW1lIHNjaXNzb3IgcmVjdCBhcyBp
dCBkb2Vzbid0IGhhdmUgYSBzdXJmYWNlCisgICAgLy8gb2YgaXRzIG93bgorICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0Lndp
ZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkp
KTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgw
LCAwLCAwLCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNjaXNzb3IKKyAgICBFWFBFQ1RfRVEocm9v
dC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJv
b3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNU
X0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
ICAgIAorICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhpbiBjaGlsZAorICAgIHJvb3REYW1hZ2Ug
PSBJbnRSZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9v
dAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlz
IHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8v
IEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJv
b3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSBy
ZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBF
WFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkg
LSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1h
Z2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQg
ZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMgaWRl
bnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdo
dCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKKyAgICByb290RGFt
YWdlID0gSW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9y
IHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVj
dCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAg
ICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9F
UShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1h
Z2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0Cisg
ICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290
RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNo
aWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlz
IGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5o
ZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKKyAgICByb290
RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRl
ZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gUm9vdCBzdXJmYWNl
IGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRlbnRSZWN0IHdpbGwgYmUgdXNl
ZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBk
YW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1Rf
RVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290
RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIAor
ICAgIC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5nLCBzbyBpdHMgY29udGVudCBy
ZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UKKyAgICAvLyBSZXN1bHQg
aXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFy
eQorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCBy
b290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisKKyAgICAvLyBDaGlsZHJlbidz
IGNvbnRlbnQgcmVjdHMgYXJlIGJpZ2dlciB0aGFuIHRoZSByb290J3Mgc28gdGhleSBkb24ndCBj
bGlwIHRoZSBkYW1hZ2UgcmVjdCwgYnV0IGNoYW5nZSBpdHMgb2Zmc2V0LgorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxk
UmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0
aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHIt
PnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCBy
b290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERh
bWFnZS5oZWlnaHQoKSkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNj
aXNzb3JSZWN0V2l0aENsaXApCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNT
Y29wZUlzT25JbXBsVGhyZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBh
cyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8
ICAgICAgICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8Cisg
ICAgICAgICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAgICAgICAg
IHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAg
ICB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGhhdmUgcmVuZGVy
IHN1cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAs
IDEwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJl
Y3QgZ3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkp
OworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVj
dC55KCkpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCBy
b290UmVjdC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAg
IGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAg
Y2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNo
aWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRD
aGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRC
b3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWln
aHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIEND
TGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFu
ZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsK
KworICAgIHJvb3QtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXll
ckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+
IGxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAg
ICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAgICAgICAgLyogZW1wdHkgbGlzdCAqLwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJv
b3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3QpOworICAgIH0KKyAgICAKKyAg
ICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJV
RShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRy
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSwgMlUpOworICAgIAorICAgIC8vIE5vdyByb290IGlzIGNsaXBwaW5nIHRv
IGl0cyBib3VuZHMKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOwor
CisgICAgLy8gTGF5ZXIncyBjbGlwUmVjdCBpcyBhIHVuaW9uIG9mIGFsbCBpdHMgY2hpbGRyZW4n
cyBib3VuZHMKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwg
MCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGls
ZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBBU1NFUlRfRVEoZ3Jh
bmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICBBU1NF
UlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKworICAgIC8vIENoaWxkIHN1cmZhY2UncyBjbGlwcGluZyByZWN0IGlzIG5vdyBzZXQg
dG8gcm9vdCdzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBS
ZWN0KCksIHJvb3RSZWN0KTsKKyAgICAKKyAgICBBU1NFUlRfVFJVRShyb290LT51c2VzTGF5ZXJD
bGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5n
KCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygp
KTsKKyAgICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRSZWN0IHJv
b3REYW1hZ2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdl
KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkp
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RS
ZWN0KSk7CisKKyAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3QsIGJ1dCBj
aGlsZCBsYXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdoIGl0IGhh
cyBib3VuZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxkcmVuCisg
ICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBzY2lzc29y
IHJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0g
Y2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgd2lsbCBoYXZlIHRoZSBzYW1l
IHNjaXNzb3IgcmVjdCBhcyBpdCBkb2Vzbid0IGhhdmUgYSBzdXJmYWNlCisgICAgLy8gb2YgaXRz
IG93bgorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIGNoaWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICByb290
RGFtYWdlID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNjaXNzb3IK
KyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAg
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhpbiBjaGls
ZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5v
dCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1h
Z2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVy
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAg
Ly8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZl
cmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxk
UmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisg
ICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBz
Y2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgp
LCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQg
Y2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFy
ZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8v
IEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVD
VF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290
RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBs
YXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKwor
ICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBk
aWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsK
KworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBp
dHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdy
YW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lk
dGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5
b25kIHJvb3QKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEwKTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3Nv
cnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisg
ICAgLy8gUm9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRl
bnRSZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAgLy8gUmVz
dWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91
bmRhcnkKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RS
ZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFt
YWdlLnkoKSkpOworICAgIAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5n
LCBzbyBpdHMgY29udGVudCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1h
Z2UKKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQg
cm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAt
IHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisK
KyAgICAvLyBOb3cgdGhlIHNjaXNzb3IgcmVjdHMgYXJlIGNsaXBwZWQgYnkgc3VyZmFjZXMgY29u
dGVudFJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVj
dC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0
KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERh
bWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54
KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKK30KKworVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwQW5kU3BhY2VUcmFuc2Zv
cm0pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhy
ZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisg
ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICB8ICAg
ICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAg
ICAgICAgfCAgfCB8ICAgMyw0ICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0t
LS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICB8
ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGFuZCAzIGhhdmUgcmVuZGVyIHN1cmZhY2Vz
CisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDMpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDQpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAsIDEw
MCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJlY3Qg
Z3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwor
ICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55
KCkpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290
UmVjdC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBy
b290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
SW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hp
bGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxk
UmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGls
ZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRPcGFj
aXR5KDAuNWYpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRS
ZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZDItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRQb3NpdGlvbihJbnRQb2lu
dChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hp
bGQyLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMoSW50U2l6
ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAg
IGdyYW5kQ2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCog
Y2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9
IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBncmFuZENoaWxkLT5hZGRDaGlsZChncmFuZENoaWxk
Mi5yZWxlYXNlKCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7
CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIHJvb3QtPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIENDTGF5ZXJTb3J0ZXIg
bGF5ZXJTb3J0ZXI7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dC5nZXQoKSk7CisKKyAgICAgICAgLyogZW1wdHkgbGlzdCAqLworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
ICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teURhbWFnZVJlY3QpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGls
ZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAzVSk7
CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcworICAgIEFT
U0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisKKyAgICBBU1NFUlRfRVEoY2hp
bGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgY2hpbGRSZWN0LngoKSArIGdyYW5kQ2hp
bGRSZWN0LndpZHRoKCkgLCBjaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkp
KTsKKworICAgIC8vIEdyYW5kY2hpbGQgbm93IGNsaXBzCisgICAgQVNTRVJUX0VRKGdyYW5kQ2hp
bGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3Jh
bmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3Qu
aGVpZ2h0KCkpKTsKKworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBS
ZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNs
aXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHIt
PnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgcm9vdFJlY3QpOworICAgIAorICAgIEFTU0VS
VF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGls
ZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQ
dHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJl
IHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhl
IGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisg
ICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJv
dW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91
bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0Lngo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBj
aGlsZCBpcyBub3cgc2Npc3NvcmVkIGJ5IHRoZSByZW5kZXIgc3VyZmFjZQorICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0Lndp
ZHRoKCkgLSBjaGlsZFJlY3QueCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWln
aHQoKSAtIGNoaWxkUmVjdC55KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAv
LyBFbXB0eSBkYW1hZ2UKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkg
ZGFtYWdlID09IGVtcHR5IHNjaXNzb3IKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQ
dHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIC8vIFBh
cnRpYWwgZGFtYWdlIHdpdGhpbiBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAx
MCwgMjAsIDIwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9v
dCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2Ug
cmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0
KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0
aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgp
LCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9v
dERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3Nv
cmVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZSBhcyB3ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRD
aGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKKyAg
ICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29t
cHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBk
YW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGls
ZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsK
KyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAg
IEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVu
dGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQg
b2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8v
IEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMg
d2VsbCBhcyByb290CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gUGFy
dGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAs
IDExMCwgMTEwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9F
UShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworCisgICAgLy8gUm9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVj
dCwgc28gaXRzIGNvbnRlbnRSZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1h
Z2UuCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0
IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERh
bWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVp
Z2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNl
IGxheWVyIGNsaXBwaW5nLCBzbyBpdHMgY29udGVudCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRl
cnNlY3Qgd2l0aCBkYW1hZ2UKKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0
IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9v
dFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3RE
YW1hZ2UueSgpKSk7CisKKyAgICAvLyBOb3cgdGhlIHNjaXNzb3IgcmVjdHMgYXJlIGNsaXBwZWQg
Ynkgc3VyZmFjZXMgY29udGVudFJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JS
ZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdl
LnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwg
cm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisgICAgLy8gR3JhbmRjaGls
ZCdzIHNjaXNzb3IgcmVjdCBpcyBjbGlwcGVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZQorICAgIEVY
UEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290
RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkg
LSBncmFuZENoaWxkUmVjdC55KCkpKTsKK30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGljYSkKIHsKICAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01NDQsNyArMTEwNSwx
MCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VM
aXN0Rm9yQ2xpcExheWVyKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CiAKICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIncyBjb250ZW50IGlzIGVudGlyZWx5IG91dHNpZGUg
dGhlIHBhcmVudCdzIGNsaXAgcmVjdCwgc28gdGhlIGludGVybWVkaWF0ZQogICAgIC8vIHJlbmRl
ciBzdXJmYWNlIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZC4gUmVuZGVyIHN1cmZhY2VzIHdpdGhv
dXQgY2hpbGRyZW4gb3IgdmlzaWJsZQpAQCAtNTcyLDcgKzExMzYsOSBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9yVHJhbnNwYXJlbnRD
aGlsZCkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxp
c3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50UmVjdCgpKTsKIAogICAgIC8vIFNpbmNlIHRoZSBsYXllciBpcyB0cmFuc3BhcmVudCwg
cmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSBzaG91bGQgbm90IGhhdmUgZ290dGVuIGFk
ZGVkIGFueXdoZXJlLgogICAgIC8vIEFsc28sIHRoZSBkcmF3YWJsZSBjb250ZW50IHJlY3Qgc2hv
dWxkIG5vdCBoYXZlIGJlZW4gZXh0ZW5kZWQgYnkgdGhlIGNoaWxkcmVuLgpAQCAtNjAwLDE0ICsx
MTY2LDE0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Rm9yY2VSZW5k
ZXJTdXJmYWNlKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxh
eWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJl
bnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhw
YXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CiAKICAgICBFWFBFQ1RfVFJVRShyZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgp
KTsKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDFVKTsKIAog
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKICAgICByZW5kZXJTdXJmYWNlMS0+
c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKGZhbHNlKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9F
UShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgMFUpOwogfQpAQCAtNjY1LDcgKzEyMzEs
MTEgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxz
UmVuZGVyU3VyZmFjZXMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgRmxvYXRS
ZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAKICAgICBBU1NFUlRfRVEoMlUsIHJl
bmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsKQEAgLTcyNCw3ICsxMjk0LDkgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVy
U3VyZmFjZXNDcmFzaFJlcHJvKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3Qo
KSk7CiAKICAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsK
ICAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5p
ZCgpKTsKQEAgLTc3NSw3ICsxMzQ3LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gV2l0
aG91dCBhbiBhbmltYXRpb24sIHdlIHNob3VsZCBjdWxsIGNoaWxkIGFuZCBncmFuZENoaWxkIGZy
b20gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QuCiAgICAgQVNTRVJUX0VRKDFVLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CkBAIC03OTQsNyArMTM2Niw3IEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VXaXRob3V0Vmlz
aWJsZUNvbnRlbnQpCiAgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKIAogICAgIC8vIFdpdGggYW4gYW5pbWF0aW5nIHRyYW5zZm9ybSwgd2Ugc2hvdWxkIGtl
ZXAgY2hpbGQgYW5kIGdyYW5kQ2hpbGQgaW4gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QuCiAg
ICAgQVNTRVJUX0VRKDNVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CkBAIC04NTQs
NyArMTQyNiwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBS
ZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9MYXllcnMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
LT5jb250ZW50UmVjdCgpKTsKKwogCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCkp
OwogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNp
emUoMjAsIDIwKSksIGdyYW5kQ2hpbGQyLT5jbGlwUmVjdCgpKTsKQEAgLTkyNiw3ICsxNTAxLDkg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFn
YXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50
UmVjdCgpKTsKIAogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkp
OwogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTQw
Nyw3ICsxOTg0LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNr
RmFjZUN1bGxpbmdXaXRob3V0UHJlc2VydmVzM2QpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAg
ICBFWFBFQ1RfRkFMU0UoZnJvbnRGYWNpbmdDaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE1
MTIsNyArMjA4OSw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFj
a0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
IAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAg
RVhQRUNUX0ZBTFNFKGZyb250RmFjaW5nQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTk3
LDcgKzIxNzQsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tG
YWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdUcmFuc2Zvcm1zKQogICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgp
KTsKQEAgLTE2NjksNyArMjI0OCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwog
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZhY2Vz
IHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfVFJVRShmcm9udEZhY2luZ1N1cmZhY2UtPnJlbmRl
clN1cmZhY2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDkxYzJkMWRmZjEyMTI3OWE3Yzc0NjA3
MGM1Y2JkYzIyMjRmMmI2NWEuLjZlMjYxZDhlNjNkZTg5NzFjNjYwOWEzMjNjOTc3OWM0MzNlM2Vj
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0zNiwxMCArMzYsMTIgQEAKICNpbmNsdWRlICJjYy9D
Q1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgogI2lu
Y2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29s
b3JEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5o
IgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9j
ay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlZpZGVv
RnJhbWUuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZVByb3ZpZGVyLmg+CkBAIC00
OSw2ICs1MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKK3VzaW5nIDo6dGVzdGluZzo6
TW9jazsKK3VzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1i
ZXI7Cit1c2luZyA6OnRlc3Rpbmc6Ol87CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50IHsKQEAgLTcwLDYgKzc3LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3du
UHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJS
SURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwb3N0U2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9u
TGltaXRCeXRlc1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChzaXplX3QpIE9WRVJSSURFIHsgfQog
CisgICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0
KGJvb2wgcGFydGlhbFN3YXAsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNz
Q29udGV4dCwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKKyAgICB7CisgICAgICAg
IENDU2V0dGluZ3Mgc2V0dGluZ3M7CisKKyAgICAgICAgc2V0dGluZ3MucGFydGlhbFN3YXBFbmFi
bGVkID0gcGFydGlhbFN3YXA7CisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG15SG9zdEltcGwgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIHRoaXMp
OworCisgICAgICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGdyYXBoaWNz
Q29udGV4dCwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgICAgIG15SG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworCisgICAgICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IHJvb3RQdHI7CisKKyAgICAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkp
OworICAgICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgcm9v
dC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwLCAxMCkpOworICAgICAgICBy
b290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIG15SG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBteUhvc3RJbXBsLnJlbGVhc2Uo
KTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVj
dXJzaXZlKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB7CiAgICAgICAgIEFTU0VSVF9FUShsYXll
ci0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgpKTsKQEAgLTEwOTksNiArMTEyOCwzNDAgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcFJlY2VpdmVzRGFtYWdlUmVj
dCkKICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRTd2FwUmVjdC5oZWlnaHQoKSwgYWN0dWFsU3dhcFJl
Y3QuaGVpZ2h0KCkpOwogfQogCitjbGFzcyBGYWtlTGF5ZXJXaXRoUXVhZHMgOiBwdWJsaWMgQ0NM
YXllckltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEZha2VMYXllcldpdGhR
dWFkcz4gY3JlYXRlKGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VMYXllcldpdGhR
dWFkcyhpZCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVy
JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9v
bCYpIE9WRVJSSURFCisgICAgeworICAgICAgICBjb25zdCBDb2xvciBncmF5KDEwMCwgMTAwLCAx
MDApOworICAgICAgICBJbnRSZWN0IHF1YWRSZWN0KDAsIDAsIDUsIDUpOworICAgICAgICBPd25Q
dHI8Q0NEcmF3UXVhZD4gbXlRdWFkID0gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFy
ZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBncmF5KTsKKyAgICAgICAgcXVhZExpc3QuYXBwZW5kKG15
UXVhZC5yZWxlYXNlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGYWtlTGF5ZXJXaXRoUXVh
ZHMoaW50IGlkKQorICAgICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgIHsKKyAgICB9Cit9Owor
CitjbGFzcyBNb2NrQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qgewor
cHVibGljOgorICAgIE1PQ0tfTUVUSE9EMSh1c2VQcm9ncmFtLCB2b2lkKFdlYkdMSWQgcHJvZ3Jh
bSkpOworICAgIE1PQ0tfTUVUSE9ENSh1bmlmb3JtNGYsIHZvaWQoV0dDM0RpbnQgbG9jYXRpb24s
IFdHQzNEZmxvYXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykp
OworICAgIE1PQ0tfTUVUSE9ENCh1bmlmb3JtTWF0cml4NGZ2LCB2b2lkKFdHQzNEaW50IGxvY2F0
aW9uLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBXR0Mz
RGZsb2F0KiB2YWx1ZSkpOworICAgIE1PQ0tfTUVUSE9ENChkcmF3RWxlbWVudHMsIHZvaWQoV0dD
M0RlbnVtIG1vZGUsIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGludHB0
ciBvZmZzZXQpKTsKKyAgICBNT0NLX01FVEhPRDEoZ2V0U3RyaW5nLCBXZWJTdHJpbmcoV0dDM0Rl
bnVtIG5hbWUpKTsKKyAgICBNT0NLX01FVEhPRDAoZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hS
T01JVU0sIFdlYlN0cmluZygpKTsKKyAgICBNT0NLX01FVEhPRDEoZW5hYmxlLCB2b2lkKFdHQzNE
ZW51bSBjYXApKTsKKyAgICBNT0NLX01FVEhPRDQoc2Npc3Nvciwgdm9pZChXR0MzRGludCB4LCBX
R0MzRGludCB5LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkpOworfTsKKwor
Y2xhc3MgTW9ja0NvbnRleHRIYXJuZXNzIHsKK3ByaXZhdGU6CisgICAgTW9ja0NvbnRleHQqIG1f
Y29udGV4dDsKK3B1YmxpYzoKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MoTW9ja0NvbnRleHQqIGNv
bnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgICAgICAvLyBD
YXRjaCAidW5pbnRlcmVzdGluZyIgY2FsbHMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4
dCwgdXNlUHJvZ3JhbShfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBF
Q1RfQ0FMTCgqbV9jb250ZXh0LCBkcmF3RWxlbWVudHMoXywgXywgXywgXykpCisgICAgICAgICAg
ICAuVGltZXMoMCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybU1h
dHJpeDRmdihfLCBfLCBfLCBfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBF
WFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3JtNGYoXywgXywgXywgXywgXykpCisgICAgICAg
ICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgLy8gQW55IG90aGVyIHN0cmluZ3MgYXJlIGVtcHR5
CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFN0cmluZyhfKSkKKyAgICAgICAg
ICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oV2ViU3RyaW5nKCkpKTsKKworICAgICAgICAvLyBT
dXBwb3J0IGZvciBwYXJ0aWFsIHN3YXAsIGlmIG5lZWRlZAorICAgICAgICBFWFBFQ1RfQ0FMTCgq
bV9jb250ZXh0LCBnZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpKQorICAg
ICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bv
c3Rfc3ViX2J1ZmZlciIpKSk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0
UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01JVU0oKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0
ZWRseShSZXR1cm4oV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKSkpOwor
CisgICAgICAgIC8vIEFueSB1bi1zYW5jdGlvbmVkIGNhbGxzIHRvIGVuYWJsZSgpIGFyZSBPSwor
ICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBlbmFibGUoXykpCisgICAgICAgICAgICAu
V2lsbFJlcGVhdGVkbHkoUmV0dXJuKCkpOworICAgIH0KKworICAgIHZvaWQgbXVzdERyYXdTb2xp
ZFF1YWQoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZHJhd0VsZW1l
bnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVCwgMCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAg
ICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIC8vIDAgaXMgdGhlIGhh
cmRjb2RlZCByZXR1cm4gdmFsdWUgb2YgZ2V0VW5pZm9ybUxvY2F0aW9uCisgICAgICAgIC8vIDEg
aXMgY291bnQgPz8/CisgICAgICAgIC8vIEJvb2xlYW4gY2FzdCB0byBzdHI/PworICAgICAgICAv
LyBmbG9hdCogdmFsdWVzCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm1N
YXRyaXg0ZnYoMCwgMSwgXywgXykpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisg
ICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworCisgICAgICAgIC8vIDAgaXMgdGhl
IGhhcmRjb2RlZCByZXR1cm4gdmFsdWUgb2YgZ2V0VW5pZm9ybUxvY2F0aW9uCisgICAgICAgIC8v
IDMgZmxvYXRzIGFyZSBjb2xvciAvIDI1NQorICAgICAgICAvLyAxIGlzIEFscGhhCisgICAgICAg
IEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm00ZigwLCBfLCBfLCBfLCAxKSkKKyAgICAg
ICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0
aW9uKCk7CisgICAgICAgIAorICAgICAgICAvLyAxIGlzIGhhcmRjb2RlZCByZXR1cm4gdmFsdWUg
b2YgZmFrZSBjcmVhdGVQcm9ncmFtKCkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwg
dXNlUHJvZ3JhbSgxKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAg
ICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICB9CisKKyAgICB2b2lkIG11c3RTZXRT
Y2lzc29yKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAg
LlJldGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCBzY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJl
dHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKyAgICB9CisKK307
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9QYXJ0aWFsU3dhcCkKK3sKKyAg
ICAvLyBTZXQgdXAgbW9jayBncmFwaGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRl
eHQmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkp
OworICAgIE1vY2tDb250ZXh0SGFybmVzcyBoYXJuZXNzKCZtb2NrQ29udGV4dCk7CisKKyAgICAv
LyBDb25maWd1cmUgdGVzdCBjYXNlCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOwor
ICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0
ZXN0IGNhc2UKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNy
ZWF0ZUxheWVyVHJlZUhvc3QoZmFsc2UsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3Jl
YXRlKDEpKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAg
ICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlI
b3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycyhmcmFtZSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tD
b250ZXh0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dh
cCkKK3sKKyAgICAvLyBTZXQgdXAgbW9jayBncmFwaGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVh
dGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NvbnRleHQo
KSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAg
TW9ja0NvbnRleHQmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4oR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4
dC5nZXQoKSkpOworICAgIE1vY2tDb250ZXh0SGFybmVzcyBoYXJuZXNzKCZtb2NrQ29udGV4dCk7
CisKKyAgICAvLyBDb25maWd1cmUgdGVzdCBjYXNlCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlk
UXVhZCgpOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKyAgICBo
YXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4gdGVzdCBj
YXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVM
YXllclRyZWVIb3N0KHRydWUsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEp
KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBF
Q1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1w
bC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhm
cmFtZSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0
KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcE5vVXBk
YXRlKQoreworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4
dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAg
ICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQqPihH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250
ZXh0LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250ZXh0
KTsKKworICAgIC8vIENvbmZpZ3VyZSB0ZXN0IGNhc2UKKyAgICBoYXJuZXNzLm11c3REcmF3U29s
aWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCA4LCAyLCAyKTsKKyAgICBo
YXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDgsIDIsIDIpOworICAgIGhhcm5lc3MubXVzdERyYXdT
b2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7Cisg
ICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworCisgICAgLy8gUnVuIHRl
c3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gY3Jl
YXRlTGF5ZXJUcmVlSG9zdCh0cnVlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0
ZSgxKSk7CisgICAgCisgICAgLy8gRHJhdyBvbmNlIHRvIG1ha2Ugc3VyZSBsYXllciBpcyBub3Qg
bmV3CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIEVYUEVD
VF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBs
LT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKKworICAgIC8vIEdlbmVyYXRlIHVwZGF0ZSBpbiBsYXllcgorICAgIENDTGF5ZXJJbXBs
KiByb290ID0gbXlIb3N0SW1wbC0+cm9vdExheWVyKCk7CisgICAgcm9vdC0+c2V0VXBkYXRlUmVj
dChGbG9hdFJlY3QoMCwgMCwgMiwgMikpOworCisgICAgLy8gVGhpcyBkcmF3IHNob3VsZCBnZW5l
cmF0ZSBub3cgbmV3IHVkcGF0ZXMKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJl
VG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAg
bXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOworfQorCitjbGFzcyBQYXJ0aWFsU3dh
cENvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAg
IFdlYlN0cmluZyBnZXRTdHJpbmcoV0dDM0RlbnVtIG5hbWUpCisgICAgeworICAgICAgICBpZiAo
bmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RVhURU5TSU9OUykKKyAgICAgICAgICAgIHJldHVy
biBXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpOworICAgICAgICByZXR1
cm4gV2ViU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIFdlYlN0cmluZyBnZXRSZXF1ZXN0YWJs
ZUV4dGVuc2lvbnNDSFJPTUlVTSgpCisgICAgeworICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJH
TF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKTsKKyAgICB9Cit9OworCitzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBzZXR1cExheWVyc0Zvck9wYWNpdHkoYm9vbCBwYXJ0
aWFsU3dhcCwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQoreworICAgIENDU2V0
dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MucGFydGlhbFN3YXBFbmFibGVkID0gdHJ1ZTsK
KworICAgIC8vIFNldCB1cCBtb2NrIGdyYXBoaWNzIGNvbnRleHQKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBQYXJ0aWFsU3dhcENvbnRl
eHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Cisg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIGNsaWVudCk7CisgICAgbXlIb3N0SW1wbC0+aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIp
OworICAgIG15SG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisK
KyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwK
KyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAy
IHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8
ICB8IHwgICAzICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0t
LS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KworICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IEZha2VMYXllcldpdGhRdWFkczo6Y3Jl
YXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAsIDEwMCk7CisgICAgSW50
UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJlY3QgZ3JhbmRDaGlsZFJl
Y3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55KCkpKTsKKyAgICBy
b290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQo
KSkpOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3Qocm9vdFJlY3QpOworICAgIHJvb3Qt
PnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwg
cm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0
LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAg
IGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0Lmhl
aWdodCgpKSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoY2hpbGRSZWN0KTsKKyAg
ICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9u
KEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3Jh
bmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KGdyYW5kQ2hpbGRSZWN0KTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJv
b3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBteUhvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIHJldHVybiBteUhvc3RJbXBsLnJlbGVhc2UoKTsK
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjb250cmlidXRpbmdMYXllckVt
cHR5U2Npc3NvclBhcnRpYWxTd2FwKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBteUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KHRydWUsIHRoaXMpOworCisgICAg
eworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAg
IEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKworICAgICAg
ICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgc3R1ZmYgYWxy
ZWFkeSBoYXBwZW5lZAorICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAg
ICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAgICAgLy8g
VmVyaWZ5IGFsbCBxdWFkcyBoYXZlIGJlZW4gY29tcHV0ZWQKKyAgICAgICAgQVNTRVJUX0VRKDJV
LCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFt
ZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VR
KDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+
cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFk
OjpSZW5kZXJTdXJmYWNlLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1h
dGVyaWFsKCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBj
b250cmlidXRpbmdMYXllckVtcHR5U2Npc3Nvck5vUGFydGlhbFN3YXApCit7CisgICAgT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBzZXR1cExheWVyc0Zvck9wYWNpdHko
ZmFsc2UsIHRoaXMpOworCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFt
ZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0Ry
YXcoZnJhbWUpKTsKKworICAgICAgICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1vc3Qg
aW50ZXJlc3Rpbmcgc3R1ZmYgYWxyZWFkeSBoYXBwZW5lZAorICAgICAgICBteUhvc3RJbXBsLT5k
cmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhm
cmFtZSk7CisKKyAgICAgICAgLy8gVmVyaWZ5IGFsbCBxdWFkcyBoYXZlIGJlZW4gY29tcHV0ZWQK
KyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAg
ICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgp
KTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0
KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZy
YW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAg
IEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBxdWFkc1RvRmlsbFNjcmVlbikKK3sKKyAgICBPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IHNldHVwTGF5ZXJzRm9yT3BhY2l0eSh0cnVl
LCB0aGlzKTsKKworICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHRv
IGFkZCBxdWFkcyB0byBmaWxsIHNjcmVlbgorICAgIG15SG9zdEltcGwtPnNldEJhY2tncm91bmRD
b2xvcihDb2xvcigyNTUsIDAsIDApKTsKKworICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0
SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5w
cmVwYXJlVG9EcmF3KGZyYW1lKSk7CisKKyAgICAgICAgLy8gSnVzdCBmb3IgY29uc2lzdGVuY3ks
IHRoZSBtb3N0IGludGVyZXN0aW5nIHN0dWZmIGFscmVhZHkgaGFwcGVuZWQKKyAgICAgICAgbXlI
b3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdB
bGxMYXllcnMoZnJhbWUpOworCisgICAgICAgIC8vIFZlcmlmeSBhbGwgcXVhZHMgaGF2ZSBiZWVu
IGNvbXB1dGVkCisgICAgICAgIEFTU0VSVF9FUSgyVSwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUo
KSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlz
dCgpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgyVSwgZnJhbWUucmVuZGVyUGFzc2VzWzFd
LT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpTb2xp
ZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkp
OworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwgZnJhbWUucmVu
ZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExp
c3QoKVsxXS0+bWF0ZXJpYWwoKSk7CisgICAgfQorfQorCiAvLyBNYWtlIHN1cmUgdGhhdCBjb250
ZXh0IGxvc3Qgbm90aWZpY2F0aW9ucyBhcmUgcHJvcGFnYXRlZCB0aHJvdWdoIHRoZSB0cmVlLgog
Y2xhc3MgQ29udGV4dExvc3ROb3RpZmljYXRpb25DaGVja0xheWVyIDogcHVibGljIENDTGF5ZXJJ
bXBsIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IDQ0YzYyZTNlM2M1Yzg4MjkxNDBkNDEx
MTUzZTBhZTQ5YTVmNzcwNDUuLmQyZjcyMThmMzYwNTc1ZGUxYTNkNGY2NGI2OWU2NGY3NTJkOTBj
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25U
cmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1
c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMjY1LDcgKzI2NSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHJvb3QtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcm9vdC0+Ym91
bmRzKCkpKTsKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbC5hcHBlbmQobV9y
b290LmdldCgpKTsKIAotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIGR1bW15TGF5ZXJMaXN0
LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIGR1bW15TGF5ZXJMaXN0
LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMobV9yZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0SW1wbCwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgICAg
ICBtX2xheWVySXRlcmF0b3IgPSBtX2xheWVySXRlcmF0b3JCZWdpbiA9IFR5cGVzOjpMYXllckl0
ZXJhdG9yOjpiZWdpbigmbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCk7CiAgICAgfQogCkBA
IC0yODEsNyArMjg0LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgcm9vdC0+c2V0Q2xpcFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkpOwogICAgICAgICBtX3Jl
bmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bS5hcHBlbmQobV9yb290KTsKIAotICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdENocm9taXVtLCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1
cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogICAgICAgICBtX2xheWVySXRlcmF0b3Ig
PSBtX2xheWVySXRlcmF0b3JCZWdpbiA9IFR5cGVzOjpMYXllckl0ZXJhdG9yOjpiZWdpbigmbV9y
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKaW5kZXggN2Rh
YzAwNWQyNGNhZmFjYzI3MWI4NmFkNWZkZTM4NTY2ZDBiZDg3NC4uOWQ4ZDE5ZjcyMzgzNGQ0NDE0
NTljNTc4M2I5NDk2YWZiMTVjZTllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCkBAIC0xMTIsMTUgKzExMiwxNiBAQCBU
RVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0
U2hhcmVkUXVhZFN0YXRlKQogICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShv
cmlnaW4pOwogICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsK
ICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0U2Npc3NvclJlY3QoY2xpcFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNldERy
YXdPcGFjaXR5KDEpOwotCisgICAgCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFy
ZWRRdWFkU3RhdGUgPSByZW5kZXJTdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKIAog
ICAgIEVYUEVDVF9UUlVFKHNoYXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpLmlzSWRlbnRp
dHkoKSk7CiAgICAgRVhQRUNUX0VRKDMwLCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3Jt
KCkubTQxKCkpOwogICAgIEVYUEVDVF9FUSg0MCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5z
Zm9ybSgpLm00MigpKTsKICAgICBFWFBFQ1RfRVEoY29udGVudFJlY3QsIHNoYXJlZFF1YWRTdGF0
ZS0+bGF5ZXJSZWN0KCkpOwotICAgIEVYUEVDVF9FUShjbGlwUmVjdCwgc2hhcmVkUXVhZFN0YXRl
LT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+
c2Npc3NvclJlY3QoKSk7CiAgICAgRVhQRUNUX0VRKDEsIHNoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0
eSgpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2hhcmVkUXVhZFN0YXRlLT5pc09wYXF1ZSgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145316</attachid>
            <date>2012-06-01 08:36:36 -0700</date>
            <delta_ts>2012-06-01 19:52:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120601113634.patch</filename>
            <type>text/plain</type>
            <size>123046</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTY5MTE5M2FhNTQzZmM0
OWQ1MzY2ZGIzMTdkZTVlYWE1NWE1NmZmYS4uN2ZlYTExMzUwZGQ1Mzk5ODdjYWI4ZDY3Nzc1ZWEw
YjJmZWE4YjllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA2LTAxICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNvbXB1
dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0Zv
clJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoQ0NS
ZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2Np
c3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29yUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3Rh
dGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFy
ZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3NvclJlY3QpOgorCiAyMDEyLTA2LTAx
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0IG5vdCB1
cGRhdGVkIGFmdGVyIHNldHRpbmcgLXdlYmtpdC1saW5lLWNsYW1wIHRvIG5vbmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggOTM2MWE0ODViOGZiNTFkMGJlNzBiOGFkN2ZlODVkNmU1MzU0
ZTQ2MC4uMTMwNzUzZTkxNmUzOGM4YmNhN2Y1ODAxYzczZTJlMGRhOGZhY2U3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNi0wMSAgWmVldiBMaWVi
ZXIgIDx6bGllYmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENsZWFudXAg
c2Npc3NvciByZWN0IGNvbXB1dGF0aW9uL3VzZSB3aXRoIGRhbWFnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0IHRlc3RzIHRvIENDTGF5
ZXJUcmVlSG9zdEltcGwgdXNpbmcgbW9jayBncmFwaGljIGNvbnRleHQKKyAgICAgICAgdG8gdmVy
aWZ5IGVuZC10by1lbmQgcXVhZCBkcmF3aW5nLgorCisgICAgICAgIEFkZGVkIG1vcmUgdGVzdCBj
YXNlcyB0byBDQ0xheWVyVHJlZUhvc3RDb21tb24gdG8gdmVyaWZ5IGNsaXAgYW5kCisgICAgICAg
IHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbnMuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySXRlcmF0
b3JUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAg
ICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0
czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2FsY0RyYXdFdGMpOgorICAgICAgICAqIHRlc3Rz
L0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorCiAyMDEyLTA2LTAxICBQZXRlciBCZXZlcmxvbyAg
PHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVkIERFUFMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKaW5kZXggYTkzZDE3NjBmY2FkMDBlMjEyNzBkNTA2MWEwMjQ3ZTJm
NjIxYmRjZC4uZTVkYWM1MDY1YmFkZTAyZmY3YjQzYjEzMDE1YTFhYTU4MzlmYjA1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaApAQCAtMTM5LDYgKzEzOSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0
OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVM
YXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQogCisg
ICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JS
ZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVj
dCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKQEAgLTMwNiw3ICsz
MDksMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6
ZSBtX2JvdW5kczsKKworICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIElu
dFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlkZW50
aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRyYXdu
LgorICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBSZWN0IGlmIHVz
ZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQorICAgIC8vIGl0J3MgdGFyZ2V0UmVu
ZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBz
cGFjZS4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQ
b3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xs
T25NYWluVGhyZWFkOwpAQCAtMzQ0LDEyICszNTUsMTYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3
T3BhY2l0eTsKICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKKworICAgIC8vIFVz
ZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogICAgIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsKICAgICBib29sIG1f
ZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nOwogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5zZm9y
bUlzQW5pbWF0aW5nOworCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSBzcGFjZS4KICAgICBJ
bnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGFjYWNjMzUzYmEz
ZmU3MzMyOGExMjNmYmY4MmVjZWEwYzkxOWY5OTAuLjM2ZjU5NzkzOWNlZWY1MTRjMGI3NjQ1MTdl
MDc5Yzg4Y2ZjMWFhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENo
YW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxv
YXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
bGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlLCBDQ1JlbmRl
clN1cmZhY2UqIHJvb3RSZW5kZXJTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VTd2Fw
UmVjdCkKIHsKICAgICAvLyBOb24tcm9vdCBsYXllcnMgc2hvdWxkIGNsZWFyIHRoZWlyIGVudGly
ZSBjb250ZW50cyB0byB0cmFuc3BhcmVudC4gT24gREVCVUcgYnVpbGRzLCB0aGUgcm9vdCBsYXll
cgogICAgIC8vIGlzIGNsZWFyZWQgdG8gYmx1ZSB0byBlYXNpbHkgc2VlIHJlZ2lvbnMgdGhhdCB3
ZXJlIG5vdCBkcmF3biBvbiB0aGUgc2NyZWVuLiBJZiB3ZQpAQCAtMzk5LDcgKzM5OSw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJm
YWNlKiByZW5kZXJTdXJmYWNlLCBDCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Y2xlYXJDb2xvcigwLCAwLCAxLCAxKSk7CiAKICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQ
YXJ0aWFsU3dhcCkKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1
cmZhY2VEYW1hZ2VSZWN0KSk7CisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50
UmVjdChzdXJmYWNlU3dhcFJlY3QpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAK
QEAgLTQ1MywzNiArNDUzLDI4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkb05vT3Ao
KQogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Zmx1c2goKSk7CiB9CiAKLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJl
bmRlclBhc3MpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29u
c3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VTd2Fw
UmVjdCkKIHsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJQYXNz
LT50YXJnZXRTdXJmYWNlKCk7CiAgICAgaWYgKCF1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgcmVuZGVyUGFzcy0+c3VyZmFjZURhbWFnZVJl
Y3QoKSk7CisgICAgY2xlYXJSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UsIHN1cmZhY2VTd2FwUmVjdCk7CiAKICAgICBjb25zdCBDQ1F1YWRMaXN0JiBx
dWFkTGlzdCA9IHJlbmRlclBhc3MtPnF1YWRMaXN0KCk7CiAgICAgZm9yIChDQ1F1YWRMaXN0Ojpj
b25zdEJhY2tUb0Zyb250SXRlcmF0b3IgaXQgPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEJlZ2luKCk7
IGl0ICE9IHF1YWRMaXN0LmJhY2tUb0Zyb250RW5kKCk7ICsraXQpCi0gICAgICAgIGRyYXdRdWFk
KGl0LT5nZXQoKSwgcmVuZGVyUGFzcy0+c3VyZmFjZURhbWFnZVJlY3QoKSk7CisgICAgICAgIGRy
YXdRdWFkKGl0LT5nZXQoKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJh
d1F1YWQqIHF1YWQpCiB7Ci0gICAgSW50UmVjdCBzY2lzc29yUmVjdDsKLSAgICBpZiAobV9jYXBh
YmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERh
bWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsKLSAgICAgICAgaWYgKCFxdWFkLT5jbGlwUmVj
dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChx
dWFkLT5jbGlwUmVjdCgpKTsKLSAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGNsaXBBbmREYW1hZ2VSZWN0KTsKLSAgICAgICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UKLSAgICAgICAgc2Npc3NvclJlY3QgPSBx
dWFkLT5jbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBxdWFkLT5zY2lzc29y
UmVjdCgpOwogCisgICAgQVNTRVJUKCFzY2lzc29yUmVjdC5pc0VtcHR5KCkpOwogICAgIGlmIChz
Y2lzc29yUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgZWxzZQotICAg
ICAgICBzZXRTY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CiAKICAgICBpZiAocXVhZC0+bmVlZHNC
bGVuZGluZygpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpKTsKQEAgLTY3NSw5ICs2NjcsNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkKgogCiAgICAgZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2
aWNlVHJhbnNmb3JtKTsKIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjYWxsIHdoZW4gdGhl
IHF1YWQncyBzY2lzc29yUmVjdCgpIGlzIHNldCBjb3JyZWN0bHkuCi0gICAgZHJhd2luZ1N1cmZh
Y2UtPnNldFNjaXNzb3JSZWN0KHRoaXMsIHF1YWQtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOwotCiAg
ICAgLy8gRklYTUU6IENhY2hlIHRoaXMgdmFsdWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRv
IGl0IGZvciBib3RoIHRoZSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYS4KICAgICAvLyBBcHBseSBm
aWx0ZXJzIHRvIHRoZSBjb250ZW50cyB0ZXh0dXJlLgogICAgIFNrQml0bWFwIGZpbHRlckJpdG1h
cCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFkLT5maWx0ZXJzKCksIGRyYXdpbmdTdXJmYWNlLT5j
b250ZW50c1RleHR1cmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4
IDBmOTY1YThiNGZhZDUzY2VhMWVmZDA5ODNlZTk1YmY5Nzc2NzIzYTYuLjQyMjA4ODY0ZmY4MjEy
YWVlZjA4ZWYyY2RiYzc4YmQzMDIwMDRkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpZXdwb3J0Q2hhbmdl
ZCgpOwogCiAgICAgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShDQ1JlbmRlclN1cmZhY2UqIGRlZmF1
bHRSZW5kZXJTdXJmYWNlKTsKLSAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVy
UGFzcyopOworICAgIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlU3dhcFJlY3QpOwogICAgIHZvaWQgZmluaXNoRHJhd2luZ0Zy
YW1lKCk7CiAKICAgICB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNv
bnN0IEludFNpemUmIGh1ZFNpemUpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAg
aW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAg
ICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7
IH0KIAotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVh
ZCopOwogICAgIHZvaWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmRE
cmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRldmljZVRyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNw
cAppbmRleCA4MGE4YTAzZWJhNjA2YTQyNTNiY2FlNzQ4ODIyMTQ1NDAyYzg1NDEyLi43ZTEyMzE1
ZDNkOWVhOTAxYzg0ZDU2OTNmZDhhYzJjNjBiY2E5NTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5jcHAKQEAgLTMzLDggKzMzLDEyIEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgorI2luY2x1ZGUg
PHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAordXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VD
aHJvbWl1bShMYXllckNocm9taXVtKiBvd25pbmdMYXllcikKQEAgLTg3LDUgKzkxLDExIEBAIGJv
b2wgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpyZXBsaWNhSGFzTWFzaygpIGNvbnN0CiAgICAgcmV0
dXJuIGhhc1JlcGxpY2EoKSAmJiAobV9tYXNrTGF5ZXIgfHwgbV9vd25pbmdMYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpKTsKIH0KIAorRmxvYXRSZWN0IFJlbmRlclN1cmZhY2VDaHJv
bWl1bTo6Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRS
ZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5p
bnZlcnNlKCk7CisgICAgcmV0dXJuIENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZl
cnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJvb3RTY2lzc29yUmVjdCk7Cit9CisKIH0KICNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5oCmluZGV4IGU2NzExZWYyYTVjNTBmMTRiZmQwZjkwN2ZkZTc0NmI1ODQzODM2ZDQu
LmU2ZTY4MDBkOTNlNWZlMGUzMTZhZGZhMDJhYTQ2ZTc3YjZkOGZlMGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC05MSw2ICs5MSw5IEBAIHB1YmxpYzoKICAgICBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2
b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBj
bGlwUmVjdDsgfQogCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwogICAg
IHZvaWQgc2V0RmlsdGVycyhjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpIHsgbV9maWx0ZXJzID0gZmlsdGVyczsgfQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQogCkBAIC0x
MTUsMTAgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNNYXNrKCkgY29uc3Q7CiAgICAg
Ym9vbCByZXBsaWNhSGFzTWFzaygpIGNvbnN0OwogCisgICAgRmxvYXRSZWN0IGNvbXB1dGVSb290
U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JS
ZWN0KSBjb25zdDsKIHByaXZhdGU6CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25pbmdMYXllcjsK
ICAgICBMYXllckNocm9taXVtKiBtX21hc2tMYXllcjsKIAorICAgIC8vIFVzZXMgdGhpcyBzdXJm
YWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lw
c0RyYXc7CiAKQEAgLTEzNCw3ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVu
U3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dy
b3VuZEZpbHRlcnM7CisKKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRh
cmdldCBzdXJmYWNlLgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKworICAgIC8vIER1cmluZyBk
cmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNo
b3VsZCBiZSBkcmF3bi4KKyAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIncyBj
bGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKKyAgICAvLyBp
dCdzIHRhcmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KKyAgICAvLyBVc2VzIHRoZSBz
cGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgorICAgIEludFJlY3QgbV9zY2lz
c29yUmVjdDsKKwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlz
dDsKIAogICAgIC8vIFRoZSBuZWFyZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRoYXQgd2ls
bCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlzIGdvaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RyYXdRdWFkLmgKaW5kZXggMzgxY2JhZWFjZjNmMjUyMTc0ZDU3ZmRkMzNmMjA5YjE1
OGExZDU5Mi4uZjJkODlmMjc5ODcyMjY2MzE3YjdlNzY4ZTYwYjFlMGY1NDYyN2M3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3
UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRHJhd1F1YWQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpOyB9CiAgICAgY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVj
dCgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKTsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCk7IH0K
ICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPm9w
YWNpdHkoKTsgfQogICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgYmxlbmRpbmcsIHdoYXQgcGFy
dCBvZiB0aGUgY29udGVudHMgb2YgdGhpcyBxdWFkIGFyZSBvcGFxdWU/CiAgICAgSW50UmVjdCBv
cGFxdWVSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMWYwOGI5Yjk5
NzM4NDI1ZDQxYTRjNGRmYmM3YjBlMzBiN2QwZmUzNS4uOTFhMjBiOGZiYTZkMmIxMjFhYmU1YjU5
OTc5YWEwZjE4ZDM0ZDY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTM5LDEwICsx
MzksNyBAQCBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKIAogUGFz
c093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1YWRT
dGF0ZSgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBsYXllckNsaXBSZWN0OwotICAgIGlmICh1c2Vz
TGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsKLSAg
ICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdU
cmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVjdCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3BhY2l0
eSgpLCBvcGFxdWUoKSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVh
ZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIHZpc2libGVMYXllclJlY3QoKSwgbV9zY2lz
c29yUmVjdCwgZHJhd09wYWNpdHkoKSwgb3BhcXVlKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBs
Ojp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5k
ZXggMmM0MWQwNmVhOGIwMGJkZDJlY2Y0Mzc5ZmE4ZDVmYjlkZmMyOWNiYi4uZjFiYjYwZTQ2Nzli
MDJlNDI3MDNlNTZjNjdmMjlhZWFmMThmNWJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0x
NjMsNiArMTYzLDEwIEBAIHB1YmxpYzoKICAgICAvLyBVc2FnZTogaWYgdGhpcy0+dXNlc0xheWVy
Q2xpcHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNl
ZC4KICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJl
Y3Q7IH0KICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jbGlw
UmVjdCA9IHJlY3Q7IH0KKworICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gcmVjdDsgfQorCiAgICAgQ0NSZW5kZXJT
dXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOyB9CiAgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3Vy
ZmFjZSogc3VyZmFjZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CiAKQEAg
LTI5Nyw2ICszMDEsNyBAQCBwcml2YXRlOgogICAgIC8vIFRyYWNrcyBpZiBkcmF3aW5nLXJlbGF0
ZWQgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQgc2luY2UgbGFzdCByZWRyYXcuCiAgICAgYm9vbCBt
X2xheWVyUHJvcGVydHlDaGFuZ2VkOwogCisgICAgLy8gVXNlcyBsYXllcidzIGNvbnRlbnQgc3Bh
Y2UuCiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9C
b3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKQEAgLTM1MSwxNyArMzU2LDI0IEBAIHByaXZhdGU6
CiAgICAgLy8gVGhlIHJlY3QgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc2Npc3NvciB3aGVuIHRo
aXMgbGF5ZXIgaXMgZHJhd24uCiAgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIg
YW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCiAgICAgLy8gdG8gYm91
bmRzLgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1f
Y2xpcFJlY3Q7CiAKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9u
IG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gVXNlcyB0
YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAg
IC8vIFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIg
YW5kIGl0cyBkZXNjZW5kYW50cwogICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4K
ICAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlPiBtX3JlbmRlclN1cmZhY2U7CiAKICAgICAvLyBI
aWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRl
c2NlbmRhbnRzLgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRS
ZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKIAogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0
IHdhcyByZXBhaW50ZWQvdXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBw
bHVnaW4gbGF5ZXJzIGJ5cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KKyAgICAvLyBVc2Vz
IGxheWVyJ3MgY29udGVudCBzcGFjZS4KICAgICBGbG9hdFJlY3QgbV91cGRhdGVSZWN0OwogCiAg
ICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZvciB0aGlzIGxheWVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggY2I2MTBkZmQ5ZTkyYzIyN2NkODMxNjNiMTM0MDQwNWViNmNk
ZmIxNi4uYWI5NzUwZTFjODg0ZWU5NzM1MzE2NWFjMjgwYWQ5NWE4MmI4YjUxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01MTUsNyArNTE1LDEwIEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBDQ1RleHR1
cmVVcGRhdGVyJiB1CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5zZm9y
bTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5ncy5kZXZpY2VT
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2Fs
ZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXpl
KTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290TGF5ZXIsIHJvb3RMYXllciwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0
cml4LCB1cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0
IHJvb3RTY2lzc29yUmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3cG9ydFNpemUoKSk7CisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyh1cGRhdGVMaXN0LCByb290U2Npc3NvclJlY3QpOwogICAgIH0KIAogICAgIC8vIFJlc2V0IHBh
cnRpYWwgdGV4dHVyZSB1cGRhdGUgcmVxdWVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAppbmRleCBiNWJjYWJiZjA4YzZkYzMwMjMzYzdhYzNmNjI5NjM3MjYy
YmMwNzRlLi45Y2QwMzE2MGUyYjBiYzVhN2I2NTJlODBiOWYyYmFkYmQwMWJjM2NmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTY3LDYgKzY3LDQzIEBA
IEludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25z
dCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlCiAgICAgcmV0dXJuIGxheWVyUmVjdDsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3N0
YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBsYXllciwg
Y29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCit7CisgICAgUmVuZGVyU3VyZmFjZVR5
cGUqIHRhcmdldFN1cmZhY2UgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworCisgICAg
RmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSA9IHRhcmdldFN1cmZhY2Ut
PmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKHJvb3RTY2lzc29yUmVjdCk7
CisgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2U7CisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJD
bGlwcGluZygpKQorICAgICAgICBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9uKHJvb3RTY2lz
c29yUmVjdEluVGFyZ2V0U3VyZmFjZSwgbGF5ZXItPmNsaXBSZWN0KCkpOworICAgIGVsc2UKKyAg
ICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3NvclJlY3RJblRhcmdl
dFN1cmZhY2UsIHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpOworCisgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMgSW50UmVjdCBjYWxj
dWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiByb290U2Npc3NvclJlY3QpCit7CisgICAgTGF5ZXJUeXBlKiBwYXJlbnRMYXllciA9IGxheWVy
LT5wYXJlbnQoKTsKKyAgICBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0U3VyZmFjZSA9IHBhcmVu
dExheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisgICAgQVNTRVJUKHRhcmdldFN1cmZhY2Up
OworCisgICAgUmVuZGVyU3VyZmFjZVR5cGUqIGN1cnJlbnRTdXJmYWNlID0gbGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKyAgICBBU1NFUlQoY3VycmVudFN1cmZhY2UpOworCisgICAgRmxvYXRSZWN0
IGNsaXBSZWN0ID0gY3VycmVudFN1cmZhY2UtPmNsaXBSZWN0KCk7CisKKyAgICAvLyBGb3Igc3Vy
ZmFjZXMsIGVtcHR5IGNsaXBSZWN0IG1lYW5zIHRoZSBzYW1lIGFzIENDTGF5ZXJJbXBsOjp1c2Vz
TGF5ZXJDbGlwcGluZyBiZWluZyBmYWxzZQorICAgIGlmIChjbGlwUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIGNsaXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0
KCksIGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgRmxvYXRS
ZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSA9IHRhcmdldFN1cmZhY2UtPmNvbXB1
dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKHJvb3RTY2lzc29yUmVjdCk7CisKKyAg
ICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3NvclJlY3RJ
blRhcmdldFN1cmZhY2UsIGNsaXBSZWN0KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChj
bGlwQW5kRGFtYWdlKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGlj
IGlubGluZSBib29sIGxheWVySXNJbkV4aXN0aW5nM0RSZW5kZXJpbmdDb250ZXh0KExheWVyVHlw
ZSogbGF5ZXIpCiB7CkBAIC0yODQsNyArMzIxLDcgQEAgc3RhdGljIGJvb2wgc3VidHJlZVNob3Vs
ZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWcK
IC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZl
biBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25z
LCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0
eXBlbmFtZSBMYXllclNvcnRlcj4KLXN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExh
eWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgUmVuZGVyU3VyZmFj
ZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVy
U29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCitzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgUmVuZGVyU3VyZmFjZVR5cGUq
IG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVy
LCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0
aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnMgcmVjdXJzaXZlbHkgZm9yIHRoaXMKICAgICAv
LyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gSXQgYWxzbyBjb21wdXRlcyB0aGUgYXBw
cm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzLgpAQCAtNTcyLDcgKzYwOSw3IEBAIHN0YXRpYyBib29s
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJl
bigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hp
bGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgPSBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwg
UmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXll
ck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJpeCwgbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4
ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1h
eFRleHR1cmVTaXplKTsKKyAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgPSBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlw
ZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBuZXh0SGll
cmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwog
CiAgICAgICAgIGlmIChkcmF3c0NvbnRlbnQpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKSB7CkBAIC02OTMsOSArNzMwLDkgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5
ZXIKIAogLy8gRklYTUU6IEluc3RlYWQgb2YgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0
byBzZXQgdmlzaWJpbGl0eSByZWN0cyBvbiBhIHNlY29uZAogLy8gdHJlZSBwYXNzLCByZXZpc2Ug
Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCgpIHNvIHRoYXQgdGhpcyBjYW4gYmUgZG9uZSBpbiBh
IHNpbmdsZQotLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5SW50ZXJuYWw8PigpLgorLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJ
bnRlcm5hbDw+KCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIExheWVy
TGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdGF0aWMgdm9pZCB3YWxrTGF5ZXJz
QW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQorc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
c0ludGVybmFsKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3Qg
RmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7CiAgICAgLy8gVXNlIEJhY2tUb0Zyb250IHNp
bmNlIGl0J3MgY2hlYXAgYW5kIHRoaXMgaXNuJ3Qgb3JkZXItZGVwZW5kZW50LgogICAgIHR5cGVk
ZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlw
ZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IENDTGF5ZXJJdGVyYXRvclR5
cGU7CkBAIC03MDYsMTkgKzc0MywzNCBAQCBzdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3Vs
YXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYQogICAgICAg
ICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVj
dCgqaXQpOwogICAgICAgICAgICAgaXQtPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVy
UmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkgewor
ICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJl
Y3Q8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4oKml0LCByb290U2Npc3NvclJlY3QpOwor
ICAgICAgICAgICAgaXQtPnNldFNjaXNzb3JSZWN0KHNjaXNzb3JSZWN0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7CisgICAg
ICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+KCppdCwgcm9vdFNjaXNzb3JSZWN0KTsKKyAg
ICAgICAgICAgIGl0LT5yZW5kZXJTdXJmYWNlKCktPnNldFNjaXNzb3JSZWN0KHNjaXNzb3JSZWN0
KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiBsYXllciwg
TGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNo
eU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1h
eFRleHR1cmVTaXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIs
IGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCit7CisgICAgV2Vi
Q29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4o
bGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKEND
TGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29y
dGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQoreworICAgIFdlYkNvcmU6OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVy
SW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIs
IHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNv
bnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQogewotICAgIFdlYkNvcmU6OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkPihs
YXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNpemUpOwotICAg
IHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxMYXllckNocm9taXVtLCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4ocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
c0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290U2Npc3Nv
clJlY3QpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJv
b3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxD
Q0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwq
PiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVT
aXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNv
bnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQogewotICAgIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllcklt
cGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBw
YXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKLSAgICB3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHM8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVj
dG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcm9vdFNjaXNzb3JSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCAwNTg1YWZmNGZiN2M4ZWY2NDZi
YTY1YTRjZWYyYzY1ZDU4MmZlZWIxLi5mODA0NTE2MTdkZDI1ZmIxNGNmMTFmYTZlZGFlOTc0OWFl
MjVkNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApAQCAtNDEs
OCArNDEsMTEgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRT
dXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiwgTGF5ZXJDaHJvbWl1bSog
cm9vdExheWVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRN
YXRyaXgsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJj
aHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBt
YXhUZXh0dXJlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8
Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSosIExheWVy
Q2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBm
dWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJM
aXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NM
YXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBz
dGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xheWVy
SW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lz
c29yUmVjdCk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJn
ZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwYTQ5ZjhlN2RhNTkwNjJhY2JkYTQ2YThj
NTk0NTQ5Zjk0NjgyNTFlLi42NzIxZTJmMjQ3NDU1MzMxY2QzNzQyNWMwN2NlYjZhOGYwMWNlNDU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2lu
Y2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VTY2FsZUFuaW1hdGlv
bi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtMjMxLDI2ICsyMzIsNiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFj
ZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYg
cm9vdERhbWFnZVJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAg
IC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBkYW1hZ2UgYXMgdGhl
IGRhbWFnZSBmb3IKLSAgICAvLyBhbGwgc3VyZmFjZXMsIGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFu
c2Zvcm1zLgotICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRy
YW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpOwotICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2
ZSgpKSB7Ci0gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5p
Y2Ugd2l0aCBtYXBSZWN0IG9mCi0gICAgICAgIC8vIGludmVyc2UgdHJhbnNmb3Jtcy4gSW4gdGhp
cyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bwotICAgICAgICAvLyBqdXN0IHJlZHJhdyB0
aGUgZW50aXJlIHN1cmZhY2UuCi0gICAgICAgIC8vIEZJWE1FOiB1c2UgY2FsY3VsYXRlVmlzaWJs
ZVJlY3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJl
bmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAg
ICAgc3VyZmFjZURhbWFnZVJlY3QgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5T
cGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICAgICAg
c3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChy
b290RGFtYWdlUmVjdCk7Ci0gICAgfQotICAgIHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsKLX0K
LQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CkBAIC0yNjksNyArMjUwLDE2IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyCiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OwogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2Fs
ZVRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5n
cy5kZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KG1fcm9vdExheWVySW1wbC5nZXQoKSwg
bV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFj
ZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX3Jvb3RMYXllcklt
cGwuZ2V0KCksIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlz
dCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1
cmVTaXplKTsKKworICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5n
UGFydGlhbFN3YXAgfHwgc2V0dGluZ3MoKS5zaG93U3VyZmFjZURhbWFnZVJlY3RzKQorICAgICAg
ICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgICAgICBtX3Jvb3RTY2lzc29yUmVjdCA9IG1fcm9v
dExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1h
Z2VSZWN0KCk7CisKKyAgICAgICAgaWYgKCFsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNp
bmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgICAgIG1fcm9vdFNjaXNzb3JSZWN0ID0gRmxvYXRSZWN0
KEZsb2F0UG9pbnQoMCwgMCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKTsKKyAgICAKKyAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIG1fcm9vdFNjaXNzb3JSZWN0KTsKICAgICB9CiB9CiAKQEAg
LTI4MSw5ICsyNzEsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogCiAgICAgVFJBQ0VfRVZF
TlQxKCJ3ZWJraXQiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2Vz
IiwgInJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
IHVuc2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOwogCi0gICAgaWYgKGxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8IHNldHRpbmdzKCku
c2hvd1N1cmZhY2VEYW1hZ2VSZWN0cykKLSAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIG1f
cm9vdERhbWFnZVJlY3QgPSBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIG1fcm9vdExheWVySW1wbC0+c2V0
U2Npc3NvclJlY3QoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3RTY2lzc29yUmVjdCkpOwogCiAgICAg
Ly8gQ3JlYXRlIHRoZSByZW5kZXIgcGFzc2VzIGluIGRlcGVuZGVuY3kgb3JkZXIuCiAgICAgSGFz
aE1hcDxDQ1JlbmRlclN1cmZhY2UqLCBDQ1JlbmRlclBhc3MqPiBzdXJmYWNlUGFzc01hcDsKQEAg
LTI5MiwyNCArMjgwLDEyIEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIENDUmVu
ZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOwogCiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBh
c3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKLQotICAgICAgICBGbG9hdFJlY3Qgc3VyZmFjZURh
bWFnZVJlY3Q7Ci0gICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQ
YXJ0aWFsU3dhcCkKLSAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gZGFtYWdlSW5TdXJm
YWNlU3BhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBtX3Jvb3REYW1hZ2VSZWN0KTsKLSAgICAgICAg
cGFzcy0+c2V0U3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotCiAgICAgICAg
IHN1cmZhY2VQYXNzTWFwLmFkZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAgICAg
cGFzc2VzLmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgSW50UmVjdCBzY2lz
c29yUmVjdDsKLSAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlh
bFN3YXApCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3Jvb3REYW1h
Z2VSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSk7Ci0KICAgICBib29sIHJlY29yZE1ldHJpY3NGb3JG
cmFtZSA9IHRydWU7IC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCBkaXNhYmxlIHRoaXMgd2hlbiBh
Ym91dDp0cmFjaW5nIGlzIG9mZi4KLSAgICBDQ09jY2x1c2lvblRyYWNrZXJJbXBsIG9jY2x1c2lv
blRyYWNrZXIoc2Npc3NvclJlY3QsIHJlY29yZE1ldHJpY3NGb3JGcmFtZSk7CisgICAgQ0NPY2Ns
dXNpb25UcmFja2VySW1wbCBvY2NsdXNpb25UcmFja2VyKGVuY2xvc2luZ0ludFJlY3QobV9yb290
U2Npc3NvclJlY3QpLCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpOwogICAgIG9jY2x1c2lvblRyYWNr
ZXIuc2V0TWluaW11bVRyYWNraW5nU2l6ZShDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjpwcmVmZXJy
ZWRNaW5pbXVtVHJhY2tpbmdTaXplKCkpOwogCiAgICAgLy8gQWRkIHF1YWRzIHRvIHRoZSBSZW5k
ZXIgcGFzc2VzIGluIEZyb250VG9CYWNrIG9yZGVyIHRvIGFsbG93IGZvciB0ZXN0aW5nIG9jY2x1
c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgpAQCAtMzI4
LDkgKzMwNCw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICAgICAgb2NjbHVzaW9u
VHJhY2tlci5lbnRlckxheWVyKGl0KTsKIAotICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRy
aWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmli
dXRpbmdSZW5kZXJTdXJmYWNlKCkgJiYgIWl0LT5yZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0
KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJm
YWNlTGF5ZXIoKml0LCAmb2NjbHVzaW9uVHJhY2tlcik7Ci0gICAgICAgIGVsc2UgaWYgKGl0LnJl
cHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpICYmICFpdC0+dmlzaWJsZUxh
eWVyUmVjdCgpLmlzRW1wdHkoKSAmJiAhaXQtPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBpdC0+d2lsbERyYXcobV9sYXllclJlbmRlcmVyLmdldCgpKTsKICAgICAgICAg
ICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yTGF5ZXIoKml0LCAmb2NjbHVzaW9uVHJhY2tlciwgaGFk
TWlzc2luZ1RpbGVzKTsKICAgICAgICAgfQpAQCAtNDMyLDggKzQwOCwxMiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFtZSkKICAgICBt
X2Zwc0NvdW50ZXItPm1hcmtCZWdpbm5pbmdPZkZyYW1lKGN1cnJlbnRUaW1lKCkpOwogICAgIG1f
bGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUobV9yb290TGF5ZXJJbXBsLT5yZW5kZXJT
dXJmYWNlKCkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNz
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3Mo
ZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCk7ICsraSkgeworICAgICAgICBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgRmxv
YXRSZWN0IHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UgPSByZW5kZXJQYXNzLT50YXJn
ZXRTdXJmYWNlKCktPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKG1fcm9v
dFNjaXNzb3JSZWN0KTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhy
ZW5kZXJQYXNzLCByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKKyAgICB9CiAKICAg
ICBpZiAobV9kZWJ1Z1JlY3RIaXN0b3J5LT5lbmFibGVkKHNldHRpbmdzKCkpKQogICAgICAgICBt
X2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1Z1JlY3RzRm9yQ3VycmVudEZyYW1lKG1fcm9vdExh
eWVySW1wbC5nZXQoKSwgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7
CkBAIC00ODYsNyArNDY2LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzd2FwQnVmZmVy
cygpCiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CiAKICAgICBtX2Zwc0NvdW50ZXItPm1h
cmtFbmRPZkZyYW1lKCk7Ci0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+c3dhcEJ1ZmZlcnMo
ZW5jbG9zaW5nSW50UmVjdChtX3Jvb3REYW1hZ2VSZWN0KSk7CisgICAgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlci0+c3dhcEJ1ZmZlcnMoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3RTY2lzc29yUmVjdCkp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRpZExvc2VDb250ZXh0KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA3ZjBjN2ZmNjYzY2EzZGY4Y2NlOTMx
YzI2YTMxZDUxZTdhNjJjNzE1Li5mM2I1NzMzNzMxNDI0NzgwMjQ3Y2IwZWVjN2E4MTVjMGYyMjc1
MDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0yNDAsNyArMjQw
LDcgQEAgcHJpdmF0ZToKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIAotICAg
IEZsb2F0UmVjdCBtX3Jvb3REYW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBtX3Jvb3RTY2lzc29y
UmVjdDsKIAogICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvdW50ZXI+IG1fZnBzQ291bnRlcjsKICAg
ICBPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2RlYnVnUmVjdEhpc3Rvcnk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcAppbmRleCBmZDg5OTkwYzcxOTgxNjA2NzZhNzZmNWJlZDIxOTZmZjdi
OTZlY2NlLi41ZDM0NzM1OTAyY2E5YmU2MTBhYzNmMzVmNmExOTkwNTMzNzE5Y2FhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBDQ1JlbmRlclBhc3M6
OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NP
Y2NsdXMKIAogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0g
c3VyZmFjZS0+Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7CiAgICAgYm9vbCBpc1JlcGxpY2EgPSBm
YWxzZTsKLSAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRRdWFkU3Rh
dGUuZ2V0KCksIGlzUmVwbGljYSwgc3VyZmFjZURhbWFnZVJlY3QoKSk7CisgICAgc3VyZmFjZS0+
YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2Ep
OwogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVh
c2UoKSk7CiAKICAgICBpZiAoIXN1cmZhY2UtPmhhc1JlcGxpY2EoKSkKQEAgLTc3LDcgKzc3LDcg
QEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKEND
TGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXMKICAgICAvLyBBZGQgcmVwbGljYSBhZnRlciB0aGUg
c3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVhcnMgYmVsb3cgdGhlIHN1cmZhY2UuCiAgICAgT3duUHRy
PENDU2hhcmVkUXVhZFN0YXRlPiByZXBsaWNhU2hhcmVkUXVhZFN0YXRlID0gc3VyZmFjZS0+Y3Jl
YXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpOwogICAgIGlzUmVwbGljYSA9IHRydWU7Ci0gICAg
c3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5n
ZXQoKSwgaXNSZXBsaWNhLCBzdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBzdXJmYWNlLT5hcHBl
bmRRdWFkcyhxdWFkQ3VsbGVyLCByZXBsaWNhU2hhcmVkUXVhZFN0YXRlLmdldCgpLCBpc1JlcGxp
Y2EpOwogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQocmVwbGljYVNoYXJlZFF1YWRT
dGF0ZS5yZWxlYXNlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4IDQ1MmE4NjEw
ZjVhOWRiYzAyMTRhOGNkZGJmZjZmMDI1NGZlY2RhMjYuLjAzNThlZWM5MThiOGYxMDgyZDJlYjQ1
ZjBkODdiZDlhODk0NjMzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC02MiwxNiArNjIs
MTIgQEAgcHVibGljOgogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQogCi0gICAgdm9pZCBzZXRTdXJmYWNl
RGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSB7IG1fc3VyZmFj
ZURhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQotICAgIGNvbnN0IEZsb2F0UmVjdCYg
c3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9
Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSop
OwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZhY2U7CiAgICAgQ0NRdWFkTGlz
dCBtX3F1YWRMaXN0OwogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9z
aGFyZWRRdWFkU3RhdGVMaXN0OwotICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0Owog
fTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NM
aXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggOTQzYzUzZmJmMDgyN2Ux
MjZhN2I2MmVlMThkODZiZjNkMjhmNTc4Yy4uZDYyZjVmOWRiMzZiMTY2YTg3MmU4ODk3MDQ4NTk4
Yjc2ZDg0YjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0zNywxMSAr
MzcsMTUgQEAKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDU2hh
cmVkUXVhZFN0YXRlLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCit1c2luZyBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4OworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25z
dCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGggPSAyOwpAQCAtMTM4LDIwICsxNDIsNiBAQCBi
b29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fYmFja2dyb3VuZFRleHR1cmUgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNS
ZXNlcnZlZCgpICYmIG1fYmFja2dyb3VuZFRleHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5z
aXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZh
Y2U6OnNldFNjaXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3QKLXsKLSAgICBpZiAobV9v
d25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXll
ckNsaXBwaW5nKCkgJiYgbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFs
U3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QgPSBtX2NsaXBSZWN0
OwotICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZURhbWFnZVJlY3Qp
OwotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJl
Y3QoY2xpcEFuZERhbWFnZVJlY3QpKTsKLSAgICB9IGVsc2UgaWYgKGxheWVyUmVuZGVyZXItPmNh
cGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIGxheWVyUmVuZGVyZXItPnNl
dFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOwotICAg
IGVsc2UgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVu
dCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lz
c29yVG9SZWN0KG1fY2xpcFJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgR0xDKGxheWVyUmVuZGVy
ZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLX0KLQogU3RyaW5nIENDUmVuZGVyU3VyZmFjZTo6
bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNl
KGlkPSVpLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPmRl
YnVnTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjUxLDE2ICsyNDEsMjIgQEAgYm9vbCBDQ1Jl
bmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBj
b25zdAogUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NSZW5kZXJTdXJmYWNlOjpjcmVh
dGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsK
LSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShvcmlnaW5UcmFuc2Zvcm0oKSwg
ZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgpLCBkcmF3T3BhY2l0eSgp
LCBpc09wYXF1ZSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUob3JpZ2lu
VHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgbV9zY2lzc29yUmVj
dCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOwogfQogCiBQYXNzT3duUHRyPENDU2hhcmVkUXVh
ZFN0YXRlPiBDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKSBj
b25zdAogewogICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gQ0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZShyZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIHJlcGxpY2FEcmF3VHJh
bnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCksIGRyYXdPcGFjaXR5KCksIGlzT3Bh
cXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShyZXBsaWNhT3JpZ2lu
VHJhbnNmb3JtKCksIHJlcGxpY2FEcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIG1fc2Np
c3NvclJlY3QsIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKK30KKworRmxvYXRSZWN0IENDUmVu
ZGVyU3VyZmFjZTo6Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3Qg
RmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybS5pbnZlcnNlKCk7CisgICAgcmV0dXJuIENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVj
dChpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJvb3RTY2lzc29yUmVjdCk7CiB9CiAKLXZv
aWQgQ0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sIGZvclJlcGxpY2EsIGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBw
ZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhKQogewogICAgIEFTU0VSVCghZm9yUmVwbGljYSB8
fCBoYXNSZXBsaWNhKCkpOwogCkBAIC0yOTAsNyArMjg2LDcgQEAgdm9pZCBDQ1JlbmRlclN1cmZh
Y2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRl
KiBzaGEKIAogICAgIGludCBtYXNrVGV4dHVyZUlkID0gbWFza0xheWVyID8gbWFza0xheWVyLT5j
b250ZW50c1RleHR1cmVJZCgpIDogMDsKIAotICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0
KCksIG1fb3duaW5nTGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0LCBmb3JSZXBsaWNhLCBmaWx0ZXJz
KCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJlSWQpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0
YXRlLCBjb250ZW50UmVjdCgpLCBtX293bmluZ0xheWVyLCBmb3JSZXBsaWNhLCBmaWx0ZXJzKCks
IGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJlSWQpKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaAppbmRleCA4NTVmY2NlN2U0MzUzYjhkZGVkNTFkZWUwZWVkMGM0MDAz
ODJhMTZlLi5jNGJiOTk5NmY5ZGQ4N2JlOGQwNTkwODVjMzc5NDQxZjMwOTFhOThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtNjAsOCArNjAsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKICAgICBib29sIGhhc1ZhbGlkQmFja2dyb3Vu
ZFRleHR1cmUoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3Q7Ci0K
ICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVh
bSYsIGludCBpbmRlbnQpIGNvbnN0OwogCkBAIC0xMTIsNiArMTEwLDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogCisgICAgdm9pZCBzZXRTY2lz
c29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Np
c3NvclJlY3Q7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50UmVjdDsgfQogCkBAIC0xMzgsMTIgKzEzOSwxMyBAQCBwdWJsaWM6CiAgICAgUGFz
c093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7
CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlUmVwbGljYVNoYXJlZFF1
YWRTdGF0ZSgpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgc3VyZmFjZURhbWFn
ZVJlY3QgcGFyYW1ldGVyIHdoZW4gdGhlIHZhbHVlIGlzIHJlbW92ZWQgZnJvbSBDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZC4KLSAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIENDU2hh
cmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VE
YW1hZ2VSZWN0KTsKKyAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIENDU2hhcmVk
UXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZVJvb3RT
Y2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJl
Y3QpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENDTGF5ZXJJbXBsKiBtX293bmluZ0xheWVyOwog
CisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fY29udGVu
dFJlY3Q7CiAgICAgYm9vbCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQ7CiAKQEAgLTE2Miw3ICsx
NjQsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5p
bWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisKKyAgICAv
LyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgogICAgIElu
dFJlY3QgbV9jbGlwUmVjdDsKKworICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRo
ZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAv
LyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgorICAgIElu
dFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IG1fbGF5ZXJM
aXN0OwogCiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3
aWxsIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29p
bmcKQEAgLTE3MSw5ICsxODAsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPENDRGFtYWdlVHJh
Y2tlcj4gbV9kYW1hZ2VUcmFja2VyOwogCi0gICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBz
cGFjZSIgd2hlcmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCi0gICAg
RmxvYXRSZWN0IG1fZGFtYWdlUmVjdDsKLQogICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zCiAgICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OwogICAg
IGludCBtX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkLmNwcAppbmRleCBkZjAwYzBlMGZhMzY1NjIxYTM2NjNiYzI5NjZm
MjM3YzNiNzVhYjVmLi41NzQyMzgyZjY2MzdiZTE5ZGJhYzMxMDY4YTEwYjkxODllMTljZTgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCkBAIC0yOSwx
NSArMjksMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVy
U3VyZmFjZURyYXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3Qs
IGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMs
IHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCitQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0
YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1w
bCogbGF5ZXIsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3Vu
ZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBs
YXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGlzUmVwbGljYSwgZmlsdGVycywgYmFja2dyb3VuZEZp
bHRlcnMsIG1hc2tUZXh0dXJlSWQpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVy
U3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyLCBpc1JlcGxp
Y2EsIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJzLCBtYXNrVGV4dHVyZUlkKSk7CiB9CiAKLUND
UmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwg
Q0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBi
b29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
LCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1
bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQorQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVy
U3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGJvb2wgaXNSZXBs
aWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1h
c2tUZXh0dXJlSWQpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVh
ZDo6UmVuZGVyU3VyZmFjZSwgcXVhZFJlY3QpCiAgICAgLCBtX2xheWVyKGxheWVyKQotICAgICwg
bV9zdXJmYWNlRGFtYWdlUmVjdChzdXJmYWNlRGFtYWdlUmVjdCkKICAgICAsIG1faXNSZXBsaWNh
KGlzUmVwbGljYSkKICAgICAsIG1fZmlsdGVycyhmaWx0ZXJzKQogICAgICwgbV9iYWNrZ3JvdW5k
RmlsdGVycyhiYWNrZ3JvdW5kRmlsdGVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZC5oCmluZGV4IDBhMDEyODFmYTRmNjlkZTJjZDZkMjkxZmYxYTYxNmI2OTY3Yjk0
YjYuLmVkYWVlMjQxOTY4MDcyNDI3ZTk3NzYzOThiNDY0ZDI1ZGFmNzUxMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaApAQCAtMzcsMjQgKzM3LDE5IEBAIGNs
YXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQgOiBwdWJsaWMg
Q0NEcmF3UXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURy
YXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0Jiwg
Q0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlz
UmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25z
dCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25l
ZCBtYXNrVGV4dHVyZUlkKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYs
IENDTGF5ZXJJbXBsKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNr
Z3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCk7CiAKICAgICBDQ0xheWVySW1w
bCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CiAgICAgYm9vbCBpc1JlcGxpY2Eo
KSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQogICAgIHVuc2lnbmVkIG1hc2tUZXh0dXJl
SWQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlSWQ7IH0KIAotICAgIC8vIFRoZSBzdXJm
YWNlIGRhbWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhpcyBxdWFkIGRyYXdzIGlu
dG8uCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSByZW5kZXIgc3VyZmFj
ZXMgZ2V0IHRoZWlyIG93biBsYXllciB0eXBlLgotICAgIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0KICAg
ICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMm
IGJhY2tncm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsg
fQogCiBwcml2YXRlOgotICAgIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCk7CisgICAgQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0
JiwgQ0NMYXllckltcGwqLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJh
Y2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKIAogICAgIENDTGF5ZXJJ
bXBsKiBtX2xheWVyOwotICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogICAgIGJv
b2wgbV9pc1JlcGxpY2E7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVy
czsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2hhcmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcAppbmRleCAzZjI4MzdlMDUyMGJmODQ2
YjQ3M2VhMWU3Mzg3MTVmNmU4MDk2MDNmLi41MzZiMzk4NjdkNTAyMjA1YjEyMjc5N2QwYjEzNWJh
YTYzZWM4NDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCkBAIC0zMSwx
NiArMzEsMTYgQEAgdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9w
YWNpdHksIGJvb2wgb3BhcXVlKQorUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFy
ZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRy
YW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9h
dCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hh
cmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIGNs
aXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hh
cmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIHNj
aXNzb3JSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKIH0KIAotQ0NTaGFyZWRRdWFkU3RhdGU6OkND
U2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNm
b3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNp
dHksIGJvb2wgb3BhcXVlKQorQ0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVl
KQogICAgIDogbV9xdWFkVHJhbnNmb3JtKHF1YWRUcmFuc2Zvcm0pCiAgICAgLCBtX2xheWVyVHJh
bnNmb3JtKGxheWVyVHJhbnNmb3JtKQogICAgICwgbV9sYXllclJlY3QobGF5ZXJSZWN0KQotICAg
ICwgbV9jbGlwUmVjdChjbGlwUmVjdCkKKyAgICAsIG1fc2Npc3NvclJlY3Qoc2Npc3NvclJlY3Qp
CiAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKICAgICAsIG1fb3BhcXVlKG9wYXF1ZSkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCmluZGV4IGExNGIxN2RhYWNmMTBjN2I5YzU5M2E1
MzBhMmEyNmJiNTg1MTE1OTkuLjQ1NDBhMDZmODRlZTUyZGZhYzVkZTM1NjA0OGViYjE4YzU4ZGI3
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApAQCAtMzYsMjcgKzM2LDI2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDU2hhcmVkUXVhZFN0YXRlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGUoY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJv
b2wgb3BhcXVlKTsKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBxdWFkcyBpbiBhIENDRHJh
d1F1YWQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCiAgICAgY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVh
ZFRyYW5zZm9ybTsgfQogICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBsYXllclJlY3QoKSBzaG91
bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KICAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmFuc2Zv
cm07IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyUmVjdDsgfQotICAgIC8vIFVzYWdlOiBpZiBjbGlwUmVjdCBpcyBlbXB0eSwgdGhpcyBjbGlw
UmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CiAKICAgICBmbG9hdCBvcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgYm9vbCBpc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0
KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3Bh
cXVlKTsKKyAgICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJ
bnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3F1YWRUcmFuc2Zvcm07CiAgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVyVHJhbnNmb3JtOwogICAgIEludFJl
Y3QgbV9sYXllclJlY3Q7Ci0gICAgSW50UmVjdCBtX2NsaXBSZWN0OworICAgIEludFJlY3QgbV9z
Y2lzc29yUmVjdDsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgYm9vbCBtX29wYXF1ZTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJU
ZXN0LmNwcAppbmRleCA1NmQ4NWZhZmE5ZmQ3YjlhYzdmMmYyNzI4ZDZjYWY2N2I3OTZhYjEzLi4w
OGVhMDM1MjhjYjQ4ZWRiNTM1NTFkNzhmYzU3ZjExZjNhNmMyZWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTU4
LDcgKzU4LDggQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8Q0NMYXkKIAogICAgIHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChyb290KTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0
ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29y
dGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIH0KIAogdm9pZCBlbXVsYXRlRHJh
d2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKaW5kZXggMTA1YzcxODZlNGM5
NDM1ZTg5ZWIzMzBjYTI2YzkwMTliMmQyNTUyNS4uNWZjNjI1ZjIyMTkwMTdhNDhkYzAxNjYzZWU3
ZWViMzZkY2QyOGE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySXRlcmF0b3JUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCkBAIC0xNDAsMTAgKzE0MCwxMSBAQCBURVNUKENDTGF5
ZXJJdGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChy
b290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+
Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTE4
NywxMCArMTg4LDExIEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxleFRyZWUpCiAg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RM
YXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5n
ZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBy
b290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRl
QmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChy
b290TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTI0NiwxMCArMjQ4LDExIEBAIFRFU1QoQ0NMYXllckl0
ZXJhdG9yVGVzdCwgY29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCiAgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExh
eWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBs
YXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1
cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRl
clN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAx
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGZjZTkwNDZjN2ViMGM1MzY4ODc5YjcyNzllZmNk
YWM2ZDc4ZmVhY2YuLjVkZWJiNDg5NTA5YTBmODNlODFmMGYwNzRjN2VhMzgxOTI3NjAwMzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzEsNyArMzEsMTIgQEAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9D
Q01hdGhVdGlsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogCiAjaW5jbHVkZSA8
Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAtNTksNyArNjQsOCBA
QCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEy
OwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCiBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXQpCkBAIC0xNzUsNyArMTgxLDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBwb3NpdGlvbiBwcmUt
bXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgotICAgIC8vICAgICAgICAgVGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKKyAgICAvLyAgICAgICAgIFRoZSBjdXJy
ZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zIGRvZXMgdGhpcyBp
bXBsaWNpdGx5LCBidXQgaXQgaXMKICAgICAvLyAgICAgICAgIHN0aWxsIHdvcnRoIHRlc3Rpbmcg
dG8gZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMuCiAgICAgZXhwZWN0ZWRSZXN1bHQgPSBw
b3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAq
IHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAxLjJmKSwgSW50U2l6ZSgxMCwg
MTIpLCBmYWxzZSk7CkBAIC0zMTgsNiArMzI0LDU2MSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBj
aGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0K
IAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdE5vQ2xpcCkKK3sK
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisK
KyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwK
KyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAy
IHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8
ICB8IHwgICAzICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0t
LS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KworICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7
CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNo
aWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1
LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9v
dC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNl
dEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7Cisg
ICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0Lndp
ZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNo
aWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVm
KTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxk
UmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAg
ICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFu
ZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hp
bGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hp
bGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGls
ZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0g
Y2hpbGQuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxk
LmdldCgpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAg
ICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7CisgICAgICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwq
PiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAg
ICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOworCisgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8K
KyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhy
b290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RS
VUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0
ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCksIDJVKTsKKyAgICAKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3Qo
KSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEg
dW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0
ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENo
aWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWln
aHQoKSkpOworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIDAsIDApKTsKKworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNs
aXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+
cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAK
KyAgICBBU1NFUlRfRkFMU0Uocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJU
X0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdl
IHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VR
KHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisKKyAgICAvLyBjaGlsZCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBhIGNsaXAgcmVj
dCwgdGhlcmVmb3JlIGl0IHdpbGwgYmUgY29tcHV0ZWQgYXMgaW50ZXJzZWN0aW9uCisgICAgLy8g
YmV0d2VlbiByb290IHN1cmZhY2UncyBjb250ZW50cmVjdCBhbmQgY2hpbGQgc3VyZmFjZSdzIGRy
YXdhYmxlIGNvbnRlbnQgcmVjdC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChjaGlsZFJlY3QueCgpLCBjaGlsZFJl
Y3QueSgpLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0
KCkgLSBjaGlsZFJlY3QueSgpKSk7CisKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJl
IHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBF
dmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNv
IGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4
dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290
UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdp
bGwgaGF2ZSB0aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFj
ZQorICAgIC8vIG9mIGl0cyBvd24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwg
cm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkg
ZGFtYWdlCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9
PSBlbXB0eSBzY2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRh
bWFnZSB3aXRoaW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAy
MCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8v
IFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFj
ZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29y
UmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMg
d2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290
RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVy
LCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERh
bWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2Uu
aGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBz
dXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAg
RVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFn
ZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJv
b3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlh
bCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4
MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAg
ICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJv
b3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1
cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0
IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwg
cm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBs
YXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJv
b3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFt
YWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBv
d24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncwor
ICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RE
YW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgp
LCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBh
cnRpYWwgZGFtYWdlIGJleW9uZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEw
LCAxMTAsIDExMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAg
IAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1Rf
RVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJl
Y3QsIHNvIGl0cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFt
YWdlLgorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBh
dCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3RE
YW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0Lmhl
aWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVz
ZSBsYXllciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50
ZXJzZWN0IHdpdGggZGFtYWdlCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVj
dCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJv
b3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290
RGFtYWdlLnkoKSkpOworCisgICAgLy8gQ2hpbGRyZW4ncyBjb250ZW50IHJlY3RzIGFyZSBiaWdn
ZXIgdGhhbiB0aGUgcm9vdCdzIHNvIHRoZXkgZG9uJ3QgY2xpcCB0aGUgZGFtYWdlIHJlY3QsIGJ1
dCBjaGFuZ2UgaXRzIG9mZnNldC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnko
KSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQo
KSkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJl
Y3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKK30KKwor
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQorewor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKwor
ICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAor
ICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIg
fCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwg
IHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0t
LS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
CisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsK
KworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hp
bGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUs
IDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0
Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAg
ICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lk
dGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hp
bGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYp
OworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRS
ZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAg
IGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5k
Q2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGls
ZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGls
ZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxk
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBj
aGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQu
Z2V0KCk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAg
IHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1Rv
Qm91bmRzKHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKyAgICB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAg
IGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxh
eWVyU29ydGVyOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3Qu
Z2V0KCkpOworCisgICAgICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAg
ICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQ
dHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDJVKTsK
KyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0byBpdHMgYm91bmRzCisgICAgQVNT
RVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKworICAgIC8vIExheWVyJ3MgY2xp
cFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRzCisgICAgQVNTRVJU
X0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hpbGRSZWN0Lngo
KSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hp
bGRSZWN0LmhlaWdodCgpKSk7CisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgQVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBDaGls
ZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJvb3QncworICAgIEFTU0VS
VF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290UmVjdCk7Cisg
ICAgCisgICAgQVNTRVJUX1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNT
RVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFM
U0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFt
YWdlIHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNU
X0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAgICAKKyAgICBFWFBFQ1Rf
RVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworCisgICAgLy8gVGhl
IGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0
IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBpdCBpcyBub3Qg
Y2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGljaCBleHRlbmQg
YmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkg
LSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKwor
ICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwgaGF2ZSB0aGUgc2FtZSBzY2lzc29yIHJlY3QgYXMgaXQg
ZG9lc24ndCBoYXZlIGEgc3VyZmFjZQorICAgIC8vIG9mIGl0cyBvd24KKyAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0
aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7
CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwg
MCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAor
ICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBzY2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3Qt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAw
KSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAg
ICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRoaW4gY2hpbGQKKyAgICByb290RGFtYWdlID0g
SW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RE
YW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QK
KyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3
aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBF
bnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290
LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVj
dCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0g
Y2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdl
LndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRv
ZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50
aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnko
KSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQo
KSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFn
ZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBy
b290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciBy
b290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3Qg
aXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAg
Ly8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEo
cm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdl
IHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngo
KSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERh
bWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGls
ZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBp
ZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVp
Z2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCByb290CisgICAgcm9vdERh
bWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQg
Zm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIFJvb3Qgc3VyZmFjZSBk
b2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50UmVjdCB3aWxsIGJlIHVzZWQg
dG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFt
YWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERh
bWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKyAgICAKKyAg
ICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywgc28gaXRzIGNvbnRlbnQgcmVj
dCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlCisgICAgLy8gUmVzdWx0IGlz
IHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkK
KyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngo
KSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9v
dFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisgICAgLy8gTm93IHRoZSBzY2lz
c29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRlbnRSZWN0CisgICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0
aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkp
KTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0
LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIHJvb3REYW1hZ2UueSgpKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgc2Npc3NvclJlY3RXaXRoQ2xpcEFuZFNwYWNlVHJhbnNmb3JtKQoreworICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8qCisgICAg
ICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAg
Ky0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAg
ICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMsNCAg
ICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAg
ICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAg
fAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBM
YXllcnMgMSwgMiBhbmQgMyBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsK
KworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hp
bGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUs
IDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0
Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAg
ICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lk
dGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hp
bGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYp
OworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRS
ZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAg
IGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5k
Q2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGls
ZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBncmFu
ZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENo
aWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKworICAgIGdyYW5kQ2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsK
KyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgp
LCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjVm
KTsKKyAgICBncmFuZENoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lk
dGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0gY2hpbGQuZ2V0
KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxkLmdldCgpOwor
CisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIucmVsZWFzZSgpKTsKKyAgICBj
aGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxk
KGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwor
CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7
CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOworCisg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisgICAg
ICAgIC8qIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgJmxh
eWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZHVt
bXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VS
ZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfVFJVRShncmFuZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVYUEVD
VF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgM1UpOworICAgIAorICAgIC8vIE5v
dyByb290IGlzIGNsaXBwaW5nIHRvIGl0cyBib3VuZHMKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xp
cFJlY3QoKSwgcm9vdFJlY3QpOworCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIGNoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpICwg
Y2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFu
ZGNoaWxkIG5vdyBjbGlwcworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRo
KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisKKyAg
ICBBU1NFUlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKworICAgIC8vIENoaWxkIHN1cmZhY2UncyBjbGlwcGluZyByZWN0IGlzIG5v
dyBzZXQgdG8gcm9vdCdzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkt
PmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKyAgICAKKyAgICBBU1NFUlRfVFJVRShyb290LT51c2Vz
TGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlw
cGluZygpKTsKKyAgICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRS
ZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
UmVjdCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3RSZWN0KSk7CisKKyAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3Qs
IGJ1dCBjaGlsZCBsYXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdo
IGl0IGhhcyBib3VuZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxk
cmVuCisgICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBz
Y2lzc29yIHJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdo
dCgpIC0gY2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgaXMgbm93IHNjaXNz
b3JlZCBieSB0aGUgcmVuZGVyIHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0
LngoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3Qu
eSgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisg
ICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBz
Y2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRo
aW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBy
b290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRo
ZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsK
KworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0
aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkg
LSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkp
KTsKKworICAgIC8vIEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0
IHN1cmZhY2UgYXMgd2VsbCBhcyByb290CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290
RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOwor
CisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IElu
dFJlY3QoMTAsIDEwLCA4MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFt
YWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290Cisg
ICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0
aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+
c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3Qg
aXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVD
VF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBub3cg
Z2V0cyBzY2lzc29yZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFzIHdlbGwgYXMgcm9vdAorICAg
IEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1h
Z2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBy
b290RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0
KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9u
ZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50
UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3Vs
dCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5k
YXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVj
dC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFn
ZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywg
c28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdl
CisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJv
b3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBy
b290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisg
ICAgLy8gTm93IHRoZSBzY2lzc29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRl
bnRSZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIEdyYW5kY2hpbGQncyBzY2lzc29yIHJlY3Qg
aXMgY2xpcHBlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0g
Z3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3Qu
eSgpKSk7Cit9CisKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclJlcGxpY2EpCiB7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNTQ1LDcgKzExMDYsMTAgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikK
ICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgLy8gVGhlIGNo
aWxkIGxheWVyJ3MgY29udGVudCBpcyBlbnRpcmVseSBvdXRzaWRlIHRoZSBwYXJlbnQncyBjbGlw
IHJlY3QsIHNvIHRoZSBpbnRlcm1lZGlhdGUKICAgICAvLyByZW5kZXIgc3VyZmFjZSBzaG91bGQg
aGF2ZSBiZWVuIHJlbW92ZWQuIFJlbmRlciBzdXJmYWNlcyB3aXRob3V0IGNoaWxkcmVuIG9yIHZp
c2libGUKQEAgLTU3Myw3ICsxMTM3LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvclRyYW5zcGFyZW50Q2hpbGQpCiAgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAK
ICAgICAvLyBTaW5jZSB0aGUgbGF5ZXIgaXMgdHJhbnNwYXJlbnQsIHJlbmRlclN1cmZhY2UxLT5y
ZW5kZXJTdXJmYWNlKCkgc2hvdWxkIG5vdCBoYXZlIGdvdHRlbiBhZGRlZCBhbnl3aGVyZS4KICAg
ICAvLyBBbHNvLCB0aGUgZHJhd2FibGUgY29udGVudCByZWN0IHNob3VsZCBub3QgaGF2ZSBiZWVu
IGV4dGVuZGVkIGJ5IHRoZSBjaGlsZHJlbi4KQEAgLTYwMSwxNCArMTE2NywxNCBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgRVhQ
RUNUX1RSVUUocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAxVSk7CiAKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmNsZWFyKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZvcmNlUmVuZGVyU3Vy
ZmFjZShmYWxzZSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogICAgIEVYUEVDVF9GQUxTRShyZW5kZXJT
dXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCksIDBVKTsKIH0KQEAgLTY2Niw3ICsxMjMyLDExIEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQog
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJl
Y3Q7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50UmVjdCgpKTsKKwogCiAgICAgQVNTRVJUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFswXS0+aWQoKSk7CkBAIC03MjUsNyArMTI5NSw5IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzQ3Jhc2hSZXBy
bykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgQVNTRVJU
X0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKHBh
cmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CkBAIC03NzYsNyAr
MTM0OCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RD
dWxsc1N1cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgcGFyZW50LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFdpdGhvdXQgYW4gYW5pbWF0aW9u
LCB3ZSBzaG91bGQgY3VsbCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBmcm9tIHRoZSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgxVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkpOwpAQCAtNzk1LDcgKzEzNjcsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50KQogICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBX
aXRoIGFuIGFuaW1hdGluZyB0cmFuc2Zvcm0sIHdlIHNob3VsZCBrZWVwIGNoaWxkIGFuZCBncmFu
ZENoaWxkIGluIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgzVSwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwpAQCAtODU1LDcgKzE0MjcsMTAgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENv
cnJlY3RseVRvTGF5ZXJzKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CisKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIElu
dFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQxLT5jbGlwUmVjdCgpKTsKICAgICBFWFBFQ1RfSU5U
X1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFu
ZENoaWxkMi0+Y2xpcFJlY3QoKSk7CkBAIC05MjcsNyArMTUwMiw5IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb1N1
cmZhY2VzKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBB
U1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBBU1NFUlRfVFJV
RShncmFuZENoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE0MDgsNyArMTk4NSw3IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aG91
dFByZXNlcnZlczNkKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFZlcmlm
eSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZy
b250RmFjaW5nQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTEzLDcgKzIwOTAsNyBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQ
cmVzZXJ2ZXMzZCkKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJpZnkg
d2hpY2ggcmVuZGVyU3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9GQUxTRShmcm9u
dEZhY2luZ0NoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTU5OCw3ICsyMTc1LDkgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoQW5p
bWF0aW5nVHJhbnNmb3JtcykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OwogCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVD
VF9UUlVFKGFuaW1hdGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNjcwLDcgKzIy
NDksNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3Vs
bGluZ1dpdGhQcmVzZXJ2ZXMzZEZvckZsYXR0ZW5pbgogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAg
ICAgRVhQRUNUX1RSVUUoZnJvbnRGYWNpbmdTdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCA5MWMyZDFkZmYxMjEyNzlhN2M3NDYwNzBjNWNiZGMyMjI0ZjJiNjVh
Li42ZTI2MWQ4ZTYzZGU4OTcxYzY2MDlhMzIzYzk3NzljNDMzZTNlY2FmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtMzYsMTAgKzM2LDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNp
bmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVEcmF3
UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+CiAjaW5jbHVk
ZSA8cHVibGljL1dlYlZpZGVvRnJhbWVQcm92aWRlci5oPgpAQCAtNDksNiArNTEsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdFRlc3RzOwogCit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRl
c3Rpbmc6OlJldHVybjsKK3VzaW5nIDo6dGVzdGluZzo6QW55TnVtYmVyOwordXNpbmcgOjp0ZXN0
aW5nOjpfOworCiBuYW1lc3BhY2UgewogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCA6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0LCBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7
CkBAIC03MCw2ICs3NywyOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRp
b25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBPVkVSUklERSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcG9zdFNldENvbnRlbnRzTWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXNUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoc2l6ZV90KSBPVkVSUklERSB7IH0KIAorICAgIFBhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdChib29sIHBhcnRpYWxTd2Fw
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQsIFBhc3NPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3RQdHIpCisgICAgeworICAgICAgICBDQ1NldHRpbmdzIHNldHRp
bmdzOworCisgICAgICAgIHNldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhcnRpYWxTd2Fw
OworCisgICAgICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHNldHRpbmdzLCB0aGlzKTsKKworICAgICAgICBteUhv
c3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihncmFwaGljc0NvbnRleHQsIFVudGhyb3R0
bGVkVXBsb2FkZXIpOworICAgICAgICBteUhvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZSgxMCwgMTApKTsKKworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSByb290UHRy
OworCisgICAgICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAg
ICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+
c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIHJvb3QtPnNldFZpc2libGVMYXll
clJlY3QoSW50UmVjdCgwLCAwLCAxMCwgMTApKTsKKyAgICAgICAgcm9vdC0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgICAgICBteUhvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOworICAgICAgICByZXR1cm4gbXlIb3N0SW1wbC5yZWxlYXNlKCk7CisgICAgfQorCiAgICAg
c3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgewogICAgICAgICBBU1NFUlRfRVEobGF5ZXItPnNjcm9sbERlbHRhKCks
IEludFNpemUoKSk7CkBAIC0xMDk5LDYgKzExMjgsMzQwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgcGFydGlhbFN3YXBSZWNlaXZlc0RhbWFnZVJlY3QpCiAgICAgRVhQRUNUX0VR
KGV4cGVjdGVkU3dhcFJlY3QuaGVpZ2h0KCksIGFjdHVhbFN3YXBSZWN0LmhlaWdodCgpKTsKIH0K
IAorY2xhc3MgRmFrZUxheWVyV2l0aFF1YWRzIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxGYWtlTGF5ZXJXaXRoUXVhZHM+IGNyZWF0ZShpbnQg
aWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlTGF5ZXJXaXRoUXVhZHMoaWQpKTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgY29uc3QgQ29sb3IgZ3JheSgxMDAsIDEwMCwgMTAwKTsKKyAgICAgICAgSW50
UmVjdCBxdWFkUmVjdCgwLCAwLCA1LCA1KTsKKyAgICAgICAgT3duUHRyPENDRHJhd1F1YWQ+IG15
UXVhZCA9IENDU29saWRDb2xvckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFk
UmVjdCwgZ3JheSk7CisgICAgICAgIHF1YWRMaXN0LmFwcGVuZChteVF1YWQucmVsZWFzZSgpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRmFrZUxheWVyV2l0aFF1YWRzKGludCBpZCkKKyAgICAg
ICAgOiBDQ0xheWVySW1wbChpZCkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgTW9ja0NvbnRl
eHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NL
X01FVEhPRDEodXNlUHJvZ3JhbSwgdm9pZChXZWJHTElkIHByb2dyYW0pKTsKKyAgICBNT0NLX01F
VEhPRDUodW5pZm9ybTRmLCB2b2lkKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRGZsb2F0IHgsIFdH
QzNEZmxvYXQgeSwgV0dDM0RmbG9hdCB6LCBXR0MzRGZsb2F0IHcpKTsKKyAgICBNT0NLX01FVEhP
RDQodW5pZm9ybU1hdHJpeDRmdiwgdm9pZChXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBj
b3VudCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgV0dDM0RmbG9hdCogdmFsdWUpKTsK
KyAgICBNT0NLX01FVEhPRDQoZHJhd0VsZW1lbnRzLCB2b2lkKFdHQzNEZW51bSBtb2RlLCBXR0Mz
RHNpemVpIGNvdW50LCBXR0MzRGVudW0gdHlwZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSk7CisgICAg
TU9DS19NRVRIT0QxKGdldFN0cmluZywgV2ViU3RyaW5nKFdHQzNEZW51bSBuYW1lKSk7CisgICAg
TU9DS19NRVRIT0QwKGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNLCBXZWJTdHJpbmco
KSk7CisgICAgTU9DS19NRVRIT0QxKGVuYWJsZSwgdm9pZChXR0MzRGVudW0gY2FwKSk7CisgICAg
TU9DS19NRVRIT0Q0KHNjaXNzb3IsIHZvaWQoV0dDM0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0Rz
aXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQpKTsKK307CisKK2NsYXNzIE1vY2tDb250ZXh0
SGFybmVzcyB7Citwcml2YXRlOgorICAgIE1vY2tDb250ZXh0KiBtX2NvbnRleHQ7CitwdWJsaWM6
CisgICAgTW9ja0NvbnRleHRIYXJuZXNzKE1vY2tDb250ZXh0KiBjb250ZXh0KQorICAgICAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAgICAgICAgLy8gQ2F0Y2ggInVuaW50ZXJlc3Rp
bmciIGNhbGxzCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVzZVByb2dyYW0oXykp
CisgICAgICAgICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4
dCwgZHJhd0VsZW1lbnRzKF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOworCisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm1NYXRyaXg0ZnYoXywgXywgXywg
XykpCisgICAgICAgICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29u
dGV4dCwgdW5pZm9ybTRmKF8sIF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLlRpbWVzKDApOwor
CisgICAgICAgIC8vIEFueSBvdGhlciBzdHJpbmdzIGFyZSBlbXB0eQorICAgICAgICBFWFBFQ1Rf
Q0FMTCgqbV9jb250ZXh0LCBnZXRTdHJpbmcoXykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVk
bHkoUmV0dXJuKFdlYlN0cmluZygpKSk7CisKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgcGFydGlh
bCBzd2FwLCBpZiBuZWVkZWQKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKSkKKyAgICAgICAgICAgIC5XaWxsUmVw
ZWF0ZWRseShSZXR1cm4oV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKSkp
OworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFJlcXVlc3RhYmxlRXh0ZW5z
aW9uc0NIUk9NSVVNKCkpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0
cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICAvLyBBbnkg
dW4tc2FuY3Rpb25lZCBjYWxscyB0byBlbmFibGUoKSBhcmUgT0sKKyAgICAgICAgRVhQRUNUX0NB
TEwoKm1fY29udGV4dCwgZW5hYmxlKF8pKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJl
dHVybigpKTsKKyAgICB9CisKKyAgICB2b2lkIG11c3REcmF3U29saWRRdWFkKCkKKyAgICB7Cisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDAp
KQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNP
blNhdHVyYXRpb24oKTsKKworICAgICAgICAvLyAwIGlzIHRoZSBoYXJkY29kZWQgcmV0dXJuIHZh
bHVlIG9mIGdldFVuaWZvcm1Mb2NhdGlvbgorICAgICAgICAvLyAxIGlzIGNvdW50ID8/PworICAg
ICAgICAvLyBCb29sZWFuIGNhc3QgdG8gc3RyPz8KKyAgICAgICAgLy8gZmxvYXQqIHZhbHVlcwor
ICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3JtTWF0cml4NGZ2KDAsIDEsIF8s
IF8pKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGly
ZXNPblNhdHVyYXRpb24oKTsKKworICAgICAgICAvLyAwIGlzIHRoZSBoYXJkY29kZWQgcmV0dXJu
IHZhbHVlIG9mIGdldFVuaWZvcm1Mb2NhdGlvbgorICAgICAgICAvLyAzIGZsb2F0cyBhcmUgY29s
b3IgLyAyNTUKKyAgICAgICAgLy8gMSBpcyBBbHBoYQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9j
b250ZXh0LCB1bmlmb3JtNGYoMCwgXywgXywgXywgMSkpCisgICAgICAgICAgICAuV2lsbE9uY2Uo
UmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworICAgICAgICAK
KyAgICAgICAgLy8gMSBpcyBoYXJkY29kZWQgcmV0dXJuIHZhbHVlIG9mIGZha2UgY3JlYXRlUHJv
Z3JhbSgpCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVzZVByb2dyYW0oMSkpCisg
ICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0
dXJhdGlvbigpOworCisgICAgfQorCisgICAgdm9pZCBtdXN0U2V0U2Npc3NvcihpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9DQUxMKCpt
X2NvbnRleHQsIGVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSkKKyAgICAg
ICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0
aW9uKCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgc2Npc3Nvcih4LCB5LCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAgICAg
ICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisgICAgfQorCit9OworCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIG5vUGFydGlhbFN3YXApCit7CisgICAgLy8gU2V0IHVwIG1vY2sg
Z3JhcGhpY3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQoYWRvcHRQdHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9
ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4
dEhhcm5lc3MgaGFybmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmlndXJlIHRlc3Qg
Y2FzZQorICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNzLm11c3RT
ZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4gdGVzdCBjYXNlCisgICAgT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0
KGZhbHNlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlI
b3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXll
cnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAg
IE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXApCit7CisgICAgLy8gU2V0
IHVwIG1vY2sgZ3JhcGhpY3MgY29udGV4dAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2Nr
Q29udGV4dCA9ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBN
b2NrQ29udGV4dEhhcm5lc3MgaGFybmVzcygmbW9ja0NvbnRleHQpOworCisgICAgLy8gQ29uZmln
dXJlIHRlc3QgY2FzZQorICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJu
ZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Np
c3NvcigwLCAwLCAxMCwgMTApOworCisgICAgLy8gUnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdCh0cnVl
LCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1w
bC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJh
bWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXBOb1VwZGF0ZSkKK3sKKyAgICAvLyBT
ZXQgdXAgbW9jayBncmFwaGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRleHQmIG1v
Y2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAg
IE1vY2tDb250ZXh0SGFybmVzcyBoYXJuZXNzKCZtb2NrQ29udGV4dCk7CisKKyAgICAvLyBDb25m
aWd1cmUgdGVzdCBjYXNlCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhh
cm5lc3MubXVzdFNldFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0U2V0U2Np
c3NvcigwLCA4LCAyLCAyKTsKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAg
aGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAgIGhhcm5lc3MubXVzdFNl
dFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3Qo
dHJ1ZSwgY29udGV4dCwgRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworICAgIAorICAg
IC8vIERyYXcgb25jZSB0byBtYWtlIHN1cmUgbGF5ZXIgaXMgbm90IG5ldworICAgIENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBs
LT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFt
ZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAvLyBH
ZW5lcmF0ZSB1cGRhdGUgaW4gbGF5ZXIKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG15SG9zdElt
cGwtPnJvb3RMYXllcigpOworICAgIHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAs
IDIsIDIpKTsKKworICAgIC8vIFRoaXMgZHJhdyBzaG91bGQgZ2VuZXJhdGUgbm93IG5ldyB1ZHBh
dGVzCisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwor
ICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERy
YXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlv
bnMoJm1vY2tDb250ZXh0KTsKK30KKworY2xhc3MgUGFydGlhbFN3YXBDb250ZXh0OiBwdWJsaWMg
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBXZWJTdHJpbmcgZ2V0U3Ry
aW5nKFdHQzNEZW51bSBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkVYVEVOU0lPTlMpCisgICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9D
SFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
ICAgIH0KKyAgICAKKyAgICBXZWJTdHJpbmcgZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01J
VU0oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9z
dWJfYnVmZmVyIik7CisgICAgfQorfTsKKworc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gc2V0dXBMYXllcnNGb3JPcGFjaXR5KGJvb2wgcGFydGlhbFN3YXAsIENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKK3sKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOwor
ICAgIHNldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHRydWU7CisKKyAgICAvLyBTZXQgdXAg
bW9jayBncmFwaGljcyBjb250ZXh0CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9t
V2ViQ29udGV4dChhZG9wdFB0cihuZXcgUGFydGlhbFN3YXBDb250ZXh0KCkpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHNl
dHRpbmdzLCBjbGllbnQpOworICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVy
KGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICBteUhvc3RJbXBs
LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgLyoKKyAgICAgIExh
eWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0t
LS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAg
ICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8
ICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8Cisg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVy
cyAxLCAyIGhhdmUgcmVuZGVyIHN1cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGdyYW5kQ2hpbGQgPSBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgzKTsKKworICAgIElu
dFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEw
LCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUw
KTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KHJvb3RSZWN0KTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQo
ZmFsc2UpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgp
KSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAg
IGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55
KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRz
KEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNo
aWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQtPnNldERyYXdz
Q29udGVudChmYWxzZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENo
aWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJv
dW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdo
dCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChncmFuZENoaWxkUmVj
dCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgY2hpbGQt
PmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGls
ZC5yZWxlYXNlKCkpOworCisgICAgbXlIb3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFz
ZSgpKTsKKyAgICByZXR1cm4gbXlIb3N0SW1wbC5yZWxlYXNlKCk7Cit9CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udHJpYnV0aW5nTGF5ZXJFbXB0eVNjaXNzb3JQYXJ0aWFs
U3dhcCkKK3sKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IHNl
dHVwTGF5ZXJzRm9yT3BhY2l0eSh0cnVlLCB0aGlzKTsKKworICAgIHsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBFWFBFQ1RfVFJVRShteUhv
c3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisKKyAgICAgICAgLy8gSnVzdCBmb3IgY29u
c2lzdGVuY3ksIHRoZSBtb3N0IGludGVyZXN0aW5nIHN0dWZmIGFscmVhZHkgaGFwcGVuZWQKKyAg
ICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgICAgIG15SG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgICAgIC8vIFZlcmlmeSBhbGwgcXVhZHMg
aGF2ZSBiZWVuIGNvbXB1dGVkCisgICAgICAgIEFTU0VSVF9FUSgyVSwgZnJhbWUucmVuZGVyUGFz
c2VzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBd
LT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVy
UGFzc2VzWzFdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdR
dWFkOjpTb2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1h
dGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwg
ZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICB9
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udHJpYnV0aW5nTGF5ZXJF
bXB0eVNjaXNzb3JOb1BhcnRpYWxTd2FwKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBteUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KGZhbHNlLCB0aGlzKTsKKwor
ICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAg
ICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisKKyAg
ICAgICAgLy8gSnVzdCBmb3IgY29uc2lzdGVuY3ksIHRoZSBtb3N0IGludGVyZXN0aW5nIHN0dWZm
IGFscmVhZHkgaGFwcGVuZWQKKyAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
CisgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgICAg
IC8vIFZlcmlmeSBhbGwgcXVhZHMgaGF2ZSBiZWVuIGNvbXB1dGVkCisgICAgICAgIEFTU0VSVF9F
USgyVSwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwg
ZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEFTU0VS
VF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpTb2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3
UXVhZDo6UmVuZGVyU3VyZmFjZSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBd
LT5tYXRlcmlhbCgpKTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgcXVhZHNUb0ZpbGxTY3JlZW4pCit7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG15SG9zdEltcGwgPSBzZXR1cExheWVyc0Zvck9wYWNpdHkodHJ1ZSwgdGhpcyk7CisKKyAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgQ0NMYXllclRyZWVIb3N0SW1wbCB0byBhZGQgcXVhZHMgdG8gZmls
bCBzY3JlZW4KKyAgICBteUhvc3RJbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMjU1LCAw
LCAwKSk7CisKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBm
cmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFt
ZSkpOworCisgICAgICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVz
dGluZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXll
cnMoZnJhbWUpOworICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsK
KworICAgICAgICAvLyBWZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAorICAgICAg
ICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAgICBBU1NF
UlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAg
ICAgICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKS5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVu
ZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVh
ZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpT
b2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMV0tPm1hdGVyaWFs
KCkpOworICAgIH0KK30KKwogLy8gTWFrZSBzdXJlIHRoYXQgY29udGV4dCBsb3N0IG5vdGlmaWNh
dGlvbnMgYXJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgdHJlZS4KIGNsYXNzIENvbnRleHRMb3N0
Tm90aWZpY2F0aW9uQ2hlY2tMYXllciA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNr
ZXJUZXN0LmNwcAppbmRleCA4MDMxN2EwMDgxN2RkNTY0ODM1ZDkwMmE1NDQ5OTFlYTc3NGQ5Mjc4
Li5hNjQ5NjVmMTZlMmEwNThhODFkNTdiZmQ0MWFmZTFhNTZkMGJkYmI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5j
cHAKQEAgLTI2MSw3ICsyNjEsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICByb290LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAgICAgICAg
IG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwuYXBwZW5kKG1fcm9vdC5nZXQoKSk7CiAKLSAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3Jl
bmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3Jl
bmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9y
ID0gbV9sYXllckl0ZXJhdG9yQmVnaW4gPSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1f
cmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwpOwogICAgIH0KIApAQCAtMjc3LDcgKzI4MCwxMCBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJvb3QtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0Q2hyb21pdW0uYXBwZW5kKG1fcm9vdCk7CiAKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJv
bWl1bSwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hy
b21pdW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMobV9y
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9y
QmVnaW4gPSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFjZUxheWVy
TGlzdENocm9taXVtKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDVjYmU3ZmM1NGY1MmYwMzIyMDJm
Njk4MjQ4ZDZlMWRhZjc3MGE3YTYuLjkwMzQ0Nzg4NzBhODJhNGI0YmEyMGZjY2M0OTUwN2M4NmQx
YTM4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJT
dXJmYWNlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRl
clN1cmZhY2VUZXN0LmNwcApAQCAtMTExLDE1ICsxMTEsMTYgQEAgVEVTVChDQ1JlbmRlclN1cmZh
Y2VUZXN0LCBzYW5pdHlDaGVja1N1cmZhY2VDcmVhdGVzQ29ycmVjdFNoYXJlZFF1YWRTdGF0ZSkK
ICAgICByZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0ob3JpZ2luKTsKICAgICByZW5k
ZXJTdXJmYWNlLT5zZXRDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0Q2xpcFJlY3QoY2xpcFJlY3QpOworICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNzb3JS
ZWN0KGNsaXBSZWN0KTsKICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3T3BhY2l0eSgxKTsKLQor
ICAgIAogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gcmVu
ZGVyU3VyZmFjZS0+Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7CiAKICAgICBFWFBFQ1RfVFJVRShz
aGFyZWRRdWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpOwogICAgIEVYUEVD
VF9FUSgzMCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpLm00MSgpKTsKICAgICBF
WFBFQ1RfRVEoNDAsIHNoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKS5tNDIoKSk7CiAg
ICAgRVhQRUNUX0VRKGNvbnRlbnRSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpKTsK
LSAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKSk7Cisg
ICAgRVhQRUNUX0VRKGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCkpOwog
ICAgIEVYUEVDVF9FUSgxLCBzaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKHNoYXJlZFF1YWRTdGF0ZS0+aXNPcGFxdWUoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145424</attachid>
            <date>2012-06-01 19:52:10 -0700</date>
            <delta_ts>2012-06-02 06:36:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120601225209.patch</filename>
            <type>text/plain</type>
            <size>122950</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY4ZmQxOTYwMWQxMzBi
MmIyYjcxYzkxNzMxN2JlZjgyN2NiZDRhMC4uN2M1ZjA3ZjMxZDQ4MTI2ZGE2NTY3M2RiM2M3MTQ1
ZGFjYTRjMjRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA2LTAxICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNvbXB1
dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0Zv
clJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoQ0NS
ZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2Np
c3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29yUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3Rh
dGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFy
ZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3NvclJlY3QpOgorCiAyMDEyLTA2LTAx
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFu
dXAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UvR3JhZGllbnQgY2hhbmdlcyBmcm9tIHIxMTc4NTgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzhmYzNmYTk3ZWNlMGY5OWM2MzNmZTViMDhi
OTMyZjNmNmUzMWVjMC4uZDU0OTE1ZGU5NmNhNGY0YTg3NGQ3M2ZmMzg1YmVjZTVmMGE1MjYzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNi0wMSAg
WmVldiBMaWViZXIgIDx6bGllYmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENsZWFudXAgc2Npc3NvciByZWN0IGNvbXB1dGF0aW9uL3VzZSB3aXRoIGRhbWFnZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0IHRlc3Rz
IHRvIENDTGF5ZXJUcmVlSG9zdEltcGwgdXNpbmcgbW9jayBncmFwaGljIGNvbnRleHQKKyAgICAg
ICAgdG8gdmVyaWZ5IGVuZC10by1lbmQgcXVhZCBkcmF3aW5nLgorCisgICAgICAgIEFkZGVkIG1v
cmUgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhvc3RDb21tb24gdG8gdmVyaWZ5IGNsaXAgYW5k
CisgICAgICAgIHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbnMuCisKKyAgICAgICAgKiB0ZXN0cy9D
Q0RhbWFnZVRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpleGVjdXRlQ2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVySXRlcmF0b3JUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6
CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2FsY0RyYXdFdGMpOgorICAgICAg
ICAqIHRlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwOgorCiAyMDEyLTA2LTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVzZSBmdWxseSBxdWFsaWZpZWQg
bmFtZSBmb3IgRml4ZWQgdG8gYXZvaWQgdGhlIGNvbGxpc2lvbiB3aXRoICJ0eXBlZGVmIFNJbnQz
MiBGaXhlZCIgaW4gTWFjVHlwZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDE4NjU2N2E5NDYw
YzQ0YWJmOGNlYzAyZjc1MTdlNGZmOTk1MTBmNzQuLjU1N2RlMDViOGVmNzU1YzdhNTE3NWZhODkw
ODBlMTU5NmZhYjhlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE0MCw2ICsxNDAsOSBAQCBw
dWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlzaWJsZUxheWVyUmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVjdChj
b25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9IHZp
c2libGVMYXllclJlY3Q7IH0KIAorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29u
c3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9
CisKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgY29u
c3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3Np
dGlvbjsgfQogCkBAIC0zMDcsNyArMzEwLDE1IEBAIHByaXZhdGU6CiAKICAgICAvLyBMYXllciBw
cm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CisKKyAgICAvLyBVc2VzIGxheWVyJ3Mg
Y29udGVudCBzcGFjZS4KICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKKworICAgIC8v
IER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBu
b3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8g
bGF5ZXIncyBjbGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UK
KyAgICAvLyBpdCdzIHRhcmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KKyAgICAvLyBV
c2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0Owog
ICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAg
ICAgYm9vbCBtX3Nob3VsZFNjcm9sbE9uTWFpblRocmVhZDsKQEAgLTM0NSwxMiArMzU2LDE2IEBA
IHByaXZhdGU6CiAgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJm
YWNlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNB
bmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlIHNwYWNlLgogICAgIEludFJl
Y3QgbV9jbGlwUmVjdDsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fdGFyZ2V0UmVuZGVy
U3VyZmFjZTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5z
Zm9ybTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2NyZWVuU3BhY2VU
cmFuc2Zvcm07CiAgICAgYm9vbCBtX2RyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsKICAgICBib29s
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0FuaW1hdGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0
IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAgICAg
ZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAppbmRleCBhY2FjYzM1M2JhM2ZlNzMzMjhhMTIzZmJmODJlY2VhMGM5MTlmOTkwLi43ZTM1
YjQ5NDcyYTc3NjA5ZDFmNTg4Mzc1NmZiYjhhMThmMjc2ZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM4NSw3ICszODUsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
ID0gMDsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFj
ZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9vdFJl
bmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3Qg
RmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKQogewogICAgIC8vIE5v
bi1yb290IGxheWVycyBzaG91bGQgY2xlYXIgdGhlaXIgZW50aXJlIGNvbnRlbnRzIHRvIHRyYW5z
cGFyZW50LiBPbiBERUJVRyBidWlsZHMsIHRoZSByb290IGxheWVyCiAgICAgLy8gaXMgY2xlYXJl
ZCB0byBibHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRo
ZSBzY3JlZW4uIElmIHdlCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Us
IEMKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEs
IDEpKTsKIAogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQotICAgICAg
ICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsK
KyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFN1cmZhY2UpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKQEAg
LTQ1MywzNiArNDUzLDI4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkb05vT3AoKQog
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Zmx1c2goKSk7CiB9CiAKLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoY29uc3Qg
Q0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFN1cmZhY2UpCiB7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNl
ID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlmICghdXNlUmVuZGVyU3VyZmFj
ZShyZW5kZXJTdXJmYWNlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJSZW5kZXJTdXJm
YWNlKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3MtPnN1
cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIGNsZWFyUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNl
LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNl
KTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExp
c3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9
IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRF
bmQoKTsgKytpdCkKLSAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpLCByZW5kZXJQYXNzLT5zdXJm
YWNlRGFtYWdlUmVjdCgpKTsKKyAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpKTsKIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQs
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICBJbnRSZWN0
IHNjaXNzb3JSZWN0OwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0
OwotICAgICAgICBpZiAoIXF1YWQtPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAg
Y2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHF1YWQtPmNsaXBSZWN0KCkpOwotICAgICAgICBz
Y2lzc29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpOwotICAgICAg
ICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0g
ZWxzZQotICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7CisgICAgSW50UmVj
dCBzY2lzc29yUmVjdCA9IHF1YWQtPnNjaXNzb3JSZWN0KCk7CiAKKyAgICBBU1NFUlQoIXNjaXNz
b3JSZWN0LmlzRW1wdHkoKSk7CiAgICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3Nv
clJlY3QpOworICAgICAgICByZXR1cm47CisKKyAgICBzZXRTY2lzc29yVG9SZWN0KHNjaXNzb3JS
ZWN0KTsKIAogICAgIGlmIChxdWFkLT5uZWVkc0JsZW5kaW5nKCkpCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwpAQCAt
Njc1LDkgKzY2Nyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyU3Vy
ZmFjZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAKICAgICBkcmF3QmFja2dy
b3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOwogCi0gICAgLy8gRklY
TUU6IFJlbW92ZSB0aGlzIGNhbGwgd2hlbiB0aGUgcXVhZCdzIHNjaXNzb3JSZWN0KCkgaXMgc2V0
IGNvcnJlY3RseS4KLSAgICBkcmF3aW5nU3VyZmFjZS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVh
ZC0+c3VyZmFjZURhbWFnZVJlY3QoKSk7Ci0KICAgICAvLyBGSVhNRTogQ2FjaGUgdGhpcyB2YWx1
ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5k
IGl0cyByZXBsaWNhLgogICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRzIHRleHR1
cmUuCiAgICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQt
PmZpbHRlcnMoKSwgZHJhd2luZ1N1cmZhY2UtPmNvbnRlbnRzVGV4dHVyZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggMGY5NjVhOGI0ZmFkNTNjZWExZWZkMDk4M2Vl
OTViZjk3NzY3MjNhNi4uYjA0NDgzZDI5YmY4YjdmZWQyNTVlMGRmODQ1MTc4NjNmOTUzYWQ1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgdmlld3BvcnRDaGFuZ2VkKCk7CiAKICAgICB2b2lkIGJlZ2luRHJhd2lu
Z0ZyYW1lKENDUmVuZGVyU3VyZmFjZSogZGVmYXVsdFJlbmRlclN1cmZhY2UpOwotICAgIHZvaWQg
ZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAgdm9pZCBkcmF3UmVuZGVy
UGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFN1cmZhY2UpOwogICAgIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAg
ICB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUm
IGh1ZFNpemUpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgaW50IHZpZXdwb3J0
V2lkdGgoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdw
b3J0SGVpZ2h0KCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIAotICAgIHZv
aWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOwog
ICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRy
YW5zZm9ybSk7CkBAIC0xNzksNyArMTc5LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgYmluZEZy
YW1lYnVmZmVyVG9UZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3Bv
cnRSZWN0KTsKIAotICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSos
IENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3Vy
ZmFjZSosIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVj
dCYgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk7CiAKICAgICB2b2lkIHJlbGVhc2VS
ZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHAKaW5kZXggODBhOGEwM2ViYTYwNmE0MjUzYmNhZTc0ODgyMjE0NTQwMmM4NTQxMi4uN2Ux
MjMxNWQzZDllYTkwMWM4NGQ1NjkzZmQ4YWMyYzYwYmNhOTU3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC0zMyw4ICszMywxMiBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKKyNpbmNs
dWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKK3VzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJm
YWNlQ2hyb21pdW0oTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIpCkBAIC04Nyw1ICs5MSwxMSBA
QCBib29sIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVwbGljYUhhc01hc2soKSBjb25zdAogICAg
IHJldHVybiBoYXNSZXBsaWNhKCkgJiYgKG1fbWFza0xheWVyIHx8IG1fb3duaW5nTGF5ZXItPnJl
cGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSk7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNvbnN0IEZs
b2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KSBjb25zdAoreworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1fc2NyZWVuU3BhY2VUcmFuc2Zv
cm0uaW52ZXJzZSgpOworICAgIHJldHVybiBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3Qo
aW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLCByb290U2Npc3NvclJlY3QpOworfQorCiB9CiAj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaAppbmRleCBlNjcxMWVmMmE1YzUwZjE0YmZkMGY5MDdmZGU3NDZiNTg0Mzgz
NmQ0Li5lNmU2ODAwZDkzZTVmZTBlMzE2YWRmYTAyYWE0NmU3N2I2ZDhmZTBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtOTEsNiArOTEsOSBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAg
ICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgeyBtX2NsaXBSZWN0
ID0gY2xpcFJlY3Q7IH0KIAorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3Qg
SW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CisK
ICAgICB2b2lkIHNldEZpbHRlcnMoY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KIApA
QCAtMTE1LDEwICsxMTgsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0Owog
ICAgIGJvb2wgcmVwbGljYUhhc01hc2soKSBjb25zdDsKIAorICAgIEZsb2F0UmVjdCBjb21wdXRl
Um9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lz
c29yUmVjdCkgY29uc3Q7CiBwcml2YXRlOgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5
ZXI7CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRoaXMg
c3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1f
c2tpcHNEcmF3OwogCkBAIC0xMzQsNyArMTM5LDE2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nj
cmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2Jh
Y2tncm91bmRGaWx0ZXJzOworCisgICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2Un
cyB0YXJnZXQgc3VyZmFjZS4KICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBEdXJp
bmcgZHJhd2luZywgaWRlbnRpZmllcyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGlu
ZyBzaG91bGQgYmUgZHJhd24uCisgICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgc2V0IHRvIGxheWVy
J3MgY2xpcFJlY3QgaWYgdXNlc0xheWVyQ2xpcHBpbmcgaXMgdHJ1ZSwgb3RoZXJ3aXNlCisgICAg
Ly8gaXQncyB0YXJnZXRSZW5kZXJTdXJmYWNlJ3MgY29udGVudFJlY3QuCisgICAgLy8gVXNlcyB0
aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBJbnRSZWN0IG1f
c2Npc3NvclJlY3Q7CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9sYXll
ckxpc3Q7CiAKICAgICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZSB0aGF0
IHdpbGwgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNlLCBhbmQgdGhhdCBpcyBn
b2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEcmF3UXVhZC5oCmluZGV4IDM4MWNiYWVhY2YzZjI1MjE3NGQ1N2ZkZDMzZjIw
OWIxNThhMWQ1OTIuLmYyZDg5ZjI3OTg3MjI2NjMxN2I3ZTc2OGU2MGIxZTBmNTQ2MjdjNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RyYXdRdWFkLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpOyB9CiAgICAgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IElu
dFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXll
clJlY3QoKTsgfQotICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9zaGFyZWRRdWFkU3RhdGUtPmNsaXBSZWN0KCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lz
c29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5zY2lzc29yUmVjdCgp
OyB9CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRl
LT5vcGFjaXR5KCk7IH0KICAgICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIGJsZW5kaW5nLCB3aGF0
IHBhcnQgb2YgdGhlIGNvbnRlbnRzIG9mIHRoaXMgcXVhZCBhcmUgb3BhcXVlPwogICAgIEludFJl
Y3Qgb3BhcXVlUmVjdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDFmMDhi
OWI5OTczODQyNWQ0MWE0YzRkZmJjN2IwZTMwYjdkMGZlMzUuLjkxYTIwYjhmYmE2ZDJiMTIxYWJl
NWI1OTk3OWFhMGYxOGQzNGQ2NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEzOSwx
MCArMTM5LDcgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAK
IFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRR
dWFkU3RhdGUoKSBjb25zdAogewotICAgIEludFJlY3QgbGF5ZXJDbGlwUmVjdDsKLSAgICBpZiAo
dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgbGF5ZXJDbGlwUmVjdCA9IGNsaXBSZWN0KCk7
Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBk
cmF3VHJhbnNmb3JtKCksIHZpc2libGVMYXllclJlY3QoKSwgbGF5ZXJDbGlwUmVjdCwgZHJhd09w
YWNpdHkoKSwgb3BhcXVlKCkpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KHF1YWRUcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCB2aXNpYmxlTGF5ZXJSZWN0KCksIG1f
c2Npc3NvclJlY3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1ZSgpKTsKIH0KIAogdm9pZCBDQ0xheWVy
SW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGZiYzJkMWExZWFmZDVkYTJkODcwNmE3ZDZlYjIyMzc1MTU0NTJhZTAuLjM2NDE3Y2Fi
MDJkYThmN2NmN2FlZjQ1MzIxNmMxMmMyY2VhNjhhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMTYyLDYgKzE2MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVXNhZ2U6IGlmIHRoaXMtPnVzZXNM
YXllckNsaXBwaW5nKCkgaXMgZmFsc2UsIHRoZW4gdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJl
IHVzZWQuCiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Ns
aXBSZWN0OyB9CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1f
Y2xpcFJlY3QgPSByZWN0OyB9CisKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKwogICAgIENDUmVu
ZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRl
clN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQog
CkBAIC0yOTcsNiArMzAxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1y
ZWxhdGVkIHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJv
b2wgbV9sYXllclByb3BlcnR5Q2hhbmdlZDsKIAorICAgIC8vIFVzZXMgbGF5ZXIncyBjb250ZW50
IHNwYWNlLgogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIGJvb2wgbV9tYXNr
c1RvQm91bmRzOwogICAgIGJvb2wgbV9vcGFxdWU7CkBAIC0zNTEsMTcgKzM1NiwyNCBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSByZWN0IHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIHNjaXNzb3Igd2hl
biB0aGlzIGxheWVyIGlzIGRyYXduLgogICAgIC8vIEluaGVyaXRlZCBieSB0aGUgcGFyZW50IGxh
eWVyIGFuZCBmdXJ0aGVyIHJlc3RyaWN0ZWQgaWYgdGhpcyBsYXllciBtYXNrcwogICAgIC8vIHRv
IGJvdW5kcy4KKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVj
dCBtX2NsaXBSZWN0OwogCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJl
Z2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRyYXduLgorICAgIC8vIFVz
ZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CisK
ICAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxh
eWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKICAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZh
Y2UuCiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZT4gbV9yZW5kZXJTdXJmYWNlOwogCiAgICAg
Ly8gSGllcmFyY2hpY2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5kIGl0
cyBkZXNjZW5kYW50cy4KKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAg
SW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CiAKICAgICAvLyBSZWN0IGluZGljYXRpbmcg
d2hhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQgZHVyaW5nIHVwZGF0ZS4KICAgICAvLyBOb3RlIHRo
YXQgcGx1Z2luIGxheWVycyBieXBhc3MgdGhpcyBhbmQgbGVhdmUgaXQgZW1wdHkuCisgICAgLy8g
VXNlcyBsYXllcidzIGNvbnRlbnQgc3BhY2UuCiAgICAgRmxvYXRSZWN0IG1fdXBkYXRlUmVjdDsK
IAogICAgIC8vIE1hbmFnZXMgYW5pbWF0aW9ucyBmb3IgdGhpcyBsYXllci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGNiNjEwZGZkOWU5MmMyMjdjZDgzMTYzYjEzNDA0MDVl
YjZjZGZiMTYuLmFiOTc1MGUxYzg4NGVlOTczNTMxNjVhYzI4MGFkOTVhODJiOGI1MWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTE1LDcgKzUxNSwxMCBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgQ0NU
ZXh0dXJlVXBkYXRlciYgdQogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlU2NhbGVUcmFu
c2Zvcm07CiAgICAgICAgIGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxlKG1fc2V0dGluZ3MuZGV2
aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RMYXllciwgZGV2aWNl
U2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCB1cGRhdGVMaXN0LCByb290UmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJl
U2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0
eU1hdHJpeCwgdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0
UmVjdCByb290U2Npc3NvclJlY3QoRmxvYXRQb2ludCgwLCAwKSwgdmlld3BvcnRTaXplKCkpOwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHModXBkYXRlTGlzdCwgcm9vdFNjaXNzb3JSZWN0KTsKICAgICB9CiAKICAgICAvLyBSZXNl
dCBwYXJ0aWFsIHRleHR1cmUgdXBkYXRlIHJlcXVlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggYjViY2FiYmYwOGM2ZGMzMDIzM2M3YWMzZjYyOTYz
NzI2MmJjMDc0ZS4uOWNkMDMxNjBlMmIwYmM1YTdiNjUyZTgwYjlmMmJhZGJkMDFiYzNjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC02Nyw2ICs2Nyw0
MyBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3Qo
Y29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIHJldHVybiBsYXllclJlY3Q7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
CitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KExheWVyVHlwZSogbGF5
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQoreworICAgIFJlbmRlclN1cmZh
Y2VUeXBlKiB0YXJnZXRTdXJmYWNlID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKKwor
ICAgIEZsb2F0UmVjdCByb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UgPSB0YXJnZXRTdXJm
YWNlLT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShyb290U2Npc3NvclJl
Y3QpOworICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlOworICAgIGlmIChsYXllci0+dXNlc0xh
eWVyQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290
U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UsIGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICBlbHNl
CisgICAgICAgIGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9vdFNjaXNzb3JSZWN0SW5U
YXJnZXRTdXJmYWNlLCB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKKworICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3RhdGljIEludFJlY3Qg
Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQoreworICAgIExheWVyVHlwZSogcGFyZW50TGF5ZXIgPSBs
YXllci0+cGFyZW50KCk7CisgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBw
YXJlbnRMYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOworICAgIEFTU0VSVCh0YXJnZXRTdXJm
YWNlKTsKKworICAgIFJlbmRlclN1cmZhY2VUeXBlKiBjdXJyZW50U3VyZmFjZSA9IGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCk7CisgICAgQVNTRVJUKGN1cnJlbnRTdXJmYWNlKTsKKworICAgIEZsb2F0
UmVjdCBjbGlwUmVjdCA9IGN1cnJlbnRTdXJmYWNlLT5jbGlwUmVjdCgpOworCisgICAgLy8gRm9y
IHN1cmZhY2VzLCBlbXB0eSBjbGlwUmVjdCBtZWFucyB0aGUgc2FtZSBhcyBDQ0xheWVySW1wbDo6
dXNlc0xheWVyQ2xpcHBpbmcgYmVpbmcgZmFsc2UKKyAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgp
KQorICAgICAgICBjbGlwUmVjdCA9IGludGVyc2VjdGlvbih0YXJnZXRTdXJmYWNlLT5jb250ZW50
UmVjdCgpLCBjdXJyZW50U3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKworICAgIEZs
b2F0UmVjdCByb290U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UgPSB0YXJnZXRTdXJmYWNlLT5j
b21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShyb290U2Npc3NvclJlY3QpOwor
CisgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9vdFNjaXNzb3JS
ZWN0SW5UYXJnZXRTdXJmYWNlLCBjbGlwUmVjdCk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QoY2xpcEFuZERhbWFnZSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KIHN0
YXRpYyBpbmxpbmUgYm9vbCBsYXllcklzSW5FeGlzdGluZzNEUmVuZGVyaW5nQ29udGV4dChMYXll
clR5cGUqIGxheWVyKQogewpAQCAtMjg0LDcgKzMyMSw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVT
aG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxheWVyLCBib29sIGF4aXNB
bGlnCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUg
Z2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0
aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJv
b3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1
cmZhY2VUeXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBs
YXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQorc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXll
ciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1cmZhY2VU
eXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNv
cnRlciwgaW50IG1heFRleHR1cmVTaXplKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29tcHV0
ZXMgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb25zIHJlY3Vyc2l2ZWx5IGZvciB0aGlzCiAg
ICAgLy8gbGF5ZXIgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuIEl0IGFsc28gY29tcHV0ZXMgdGhl
IGFwcHJvcHJpYXRlIHJlbmRlciBzdXJmYWNlcy4KQEAgLTU3Miw3ICs2MDksNyBAQCBzdGF0aWMg
Ym9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5
cGUqIGxheWVyLCBMYXllcgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hp
bGRyZW4oKS5zaXplKCk7ICsraSkgewogICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXIt
PmNoaWxkcmVuKClbaV0uZ2V0KCk7Ci0gICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxp
c3QsIFJlbmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3Vi
bGF5ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zl
c1BpeGVscywgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVy
LCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50ID0gY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFj
ZVR5cGUsIExheWVyU29ydGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4
dEhpZXJhcmNoeU1hdHJpeCwgbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXpl
KTsKIAogICAgICAgICBpZiAoZHJhd3NDb250ZW50KSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQt
PnJlbmRlclN1cmZhY2UoKSkgewpAQCAtNjkzLDkgKzczMCw5IEBAIHN0YXRpYyBib29sIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyCiAKIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rp
b24gdG8gc2V0IHZpc2liaWxpdHkgcmVjdHMgb24gYSBzZWNvbmQKIC8vIHRyZWUgcGFzcywgcmV2
aXNlIGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoKSBzbyB0aGF0IHRoaXMgY2FuIGJlIGRvbmUg
aW4gYSBzaW5nbGUKLS8vIHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsPD4oKS4KKy8vIHBhc3MgaW5zaWRlIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zSW50ZXJuYWw8PigpLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBM
YXllckxpc3QsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotc3RhdGljIHZvaWQgd2Fsa0xh
eWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCkKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHNJbnRlcm5hbChjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNv
bnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQogewogICAgIC8vIFVzZSBCYWNrVG9Gcm9u
dCBzaW5jZSBpdCdzIGNoZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRlcGVuZGVudC4KICAgICB0
eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFj
ZVR5cGUsIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250PiBDQ0xheWVySXRlcmF0
b3JUeXBlOwpAQCAtNzA2LDE5ICs3NDMsMzQgQEAgc3RhdGljIHZvaWQgd2Fsa0xheWVyc0FuZENh
bGN1bGF0ZVZpc2libGVMYXllclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmEKICAg
ICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVMYXll
clJlY3QoKml0KTsKICAgICAgICAgICAgIGl0LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVM
YXllclJlY3QpOwogICAgICAgICB9CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkp
IHsKKyAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVMYXllclNjaXNz
b3JSZWN0PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+KCppdCwgcm9vdFNjaXNzb3JSZWN0
KTsKKyAgICAgICAgICAgIGl0LT5zZXRTY2lzc29yUmVjdChzY2lzc29yUmVjdCk7CisgICAgICAg
IH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgewor
ICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVN1cmZhY2VTY2lzc29y
UmVjdDxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPigqaXQsIHJvb3RTY2lzc29yUmVjdCk7
CisgICAgICAgICAgICBpdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRTY2lzc29yUmVjdChzY2lzc29y
UmVjdCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogbGF5
ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVy
YXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGlu
dCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKQoreworICAg
IFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZv
aWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
MCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXll
clNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3sKKyAgICBXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NM
YXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9vdExh
eWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKIHsKLSAgICBXZWJDb3JlOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllckNocm9taXVtLCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9p
ZD4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAw
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsK
LSAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHM8TGF5ZXJDaHJvbWl1
bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHNJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdFNj
aXNzb3JSZWN0KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBs
KiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0
b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0
dXJlU2l6ZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKIHsKLSAgICBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXll
ciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBsYXllckxpc3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgd2Fs
a0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzPENDTGF5ZXJJbXBsLCBWZWN0b3I8
Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KyAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzSW50ZXJuYWw8Q0NMYXllckltcGws
IFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3RTY2lzc29yUmVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggMDU4NWFmZjRmYjdjOGVm
NjQ2YmE2NWE0Y2VmMmM2NWQ1ODJmZWViMS4uZjgwNDUxNjE3ZGQyNWZiMTRjZjExZmE2ZWRhZTk3
NDlhZTI1ZDc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAg
LTQxLDggKzQxLDExIEBAIGNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1vbiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFy
Z2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVyQ2hyb21p
dW0qIHJvb3RMYXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFy
ZW50TWF0cml4LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGll
cmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBp
bnQgbWF4VGV4dHVyZVNpemUpOwotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVy
SW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOwor
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qLCBM
YXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxh
eWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVE
cmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1w
bCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOworCisg
ICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8Q0NM
YXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290
U2Npc3NvclJlY3QpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250cmlidXRlc1Rv
VGFyZ2V0KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMGE0OWY4ZTdkYTU5MDYyYWNiZGE0
NmE4YzU5NDU0OWY5NDY4MjUxZS4uNjcyMWUyZjI0NzQ1NTMzMWNkMzc0MjVjMDdjZWI2YThmMDFj
ZTQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTQxLDYg
KzQxLDcgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIK
KyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQYWdlU2NhbGVBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTIzMSwyNiArMjMyLDYgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBs
KiByb290RHJhd0xheWVyLAogICAgIH0KIH0KIAotc3RhdGljIEZsb2F0UmVjdCBkYW1hZ2VJblN1
cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHJvb3REYW1hZ2VSZWN0KQotewotICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsK
LSAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFz
IHRoZSBkYW1hZ2UgZm9yCi0gICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUg
dHJhbnNmb3Jtcy4KLSAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3Bl
Y3RpdmUoKSkgewotICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxh
eSBuaWNlIHdpdGggbWFwUmVjdCBvZgotICAgICAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMuIElu
IHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KLSAgICAgICAgLy8ganVzdCByZWRy
YXcgdGhlIGVudGlyZSBzdXJmYWNlLgotICAgICAgICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0ZVZp
c2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0g
ICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAg
ICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJl
Y3Qocm9vdERhbWFnZVJlY3QpOwotICAgIH0KLSAgICByZXR1cm4gc3VyZmFjZURhbWFnZVJlY3Q7
Ci19Ci0KIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxh
eWVyTGlzdChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBBU1NF
UlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5pc0VtcHR5KCkpOwpAQCAtMjY5LDcgKzI1MCwxNiBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxp
c3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cgogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNl
U2NhbGVUcmFuc2Zvcm07CiAgICAgICAgIGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxlKG1fc2V0
dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShtX3Jvb3RMYXllckltcGwuZ2V0
KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1
cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKG1fcm9vdExheWVySW1wbC5nZXQoKSwgbV9yb290TGF5
ZXJJbXBsLmdldCgpLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51
c2luZ1BhcnRpYWxTd2FwIHx8IHNldHRpbmdzKCkuc2hvd1N1cmZhY2VEYW1hZ2VSZWN0cykKKyAg
ICAgICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICAgICAgbV9yb290U2Npc3NvclJlY3QgPSBt
X3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOworCisgICAgICAgIGlmICghbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nUGFydGlhbFN3YXApCisgICAgICAgICAgICBtX3Jvb3RTY2lzc29yUmVjdCA9IEZsb2F0
UmVjdChGbG9hdFBvaW50KDAsIDApLCBkZXZpY2VWaWV3cG9ydFNpemUoKSk7CisgICAgCisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX3Jvb3RTY2lzc29yUmVjdCk7CiAgICAgfQogfQog
CkBAIC0yODEsOSArMjcxLDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKIAogICAgIFRSQUNF
X0VWRU5UMSgid2Via2l0IiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBh
c3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIsIHN0YXRpY19jYXN0PGxvbmcg
bG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpKTsKIAotICAgIGlm
IChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8fCBzZXR0aW5n
cygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCi0gICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3Vy
ZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAg
ICBtX3Jvb3REYW1hZ2VSZWN0ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBtX3Jvb3RMYXllckltcGwt
PnNldFNjaXNzb3JSZWN0KGVuY2xvc2luZ0ludFJlY3QobV9yb290U2Npc3NvclJlY3QpKTsKIAog
ICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyIHBhc3NlcyBpbiBkZXBlbmRlbmN5IG9yZGVyLgogICAg
IEhhc2hNYXA8Q0NSZW5kZXJTdXJmYWNlKiwgQ0NSZW5kZXJQYXNzKj4gc3VyZmFjZVBhc3NNYXA7
CkBAIC0yOTIsMjQgKzI4MCwxMiBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0
ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogICAgICAgICBD
Q1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKIAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5k
ZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHN1cmZh
Y2VEYW1hZ2VSZWN0OwotICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVz
aW5nUGFydGlhbFN3YXApCi0gICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGRhbWFnZUlu
U3VyZmFjZVNwYWNlKHJlbmRlclN1cmZhY2VMYXllciwgbV9yb290RGFtYWdlUmVjdCk7Ci0gICAg
ICAgIHBhc3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKLQogICAg
ICAgICBzdXJmYWNlUGFzc01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CiAgICAg
ICAgIHBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIEludFJlY3Qg
c2Npc3NvclJlY3Q7Ci0gICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1Bh
cnRpYWxTd2FwKQotICAgICAgICBzY2lzc29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9yb290
RGFtYWdlUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBzY2lzc29yUmVjdCA9IEludFJlY3QoSW50
UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpOwotCiAgICAgYm9vbCByZWNvcmRNZXRyaWNz
Rm9yRnJhbWUgPSB0cnVlOyAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgZGlzYWJsZSB0aGlzIHdo
ZW4gYWJvdXQ6dHJhY2luZyBpcyBvZmYuCi0gICAgQ0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2Ns
dXNpb25UcmFja2VyKHNjaXNzb3JSZWN0LCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpOworICAgIEND
T2NjbHVzaW9uVHJhY2tlckltcGwgb2NjbHVzaW9uVHJhY2tlcihlbmNsb3NpbmdJbnRSZWN0KG1f
cm9vdFNjaXNzb3JSZWN0KSwgcmVjb3JkTWV0cmljc0ZvckZyYW1lKTsKICAgICBvY2NsdXNpb25U
cmFja2VyLnNldE1pbmltdW1UcmFja2luZ1NpemUoQ0NPY2NsdXNpb25UcmFja2VySW1wbDo6cHJl
ZmVycmVkTWluaW11bVRyYWNraW5nU2l6ZSgpKTsKIAogICAgIC8vIEFkZCBxdWFkcyB0byB0aGUg
UmVuZGVyIHBhc3NlcyBpbiBGcm9udFRvQmFjayBvcmRlciB0byBhbGxvdyBmb3IgdGVzdGluZyBv
Y2NsdXNpb24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KQEAg
LTMyOCw5ICszMDQsOSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogCiAgICAgICAgIG9jY2x1
c2lvblRyYWNrZXIuZW50ZXJMYXllcihpdCk7CiAKLSAgICAgICAgaWYgKGl0LnJlcHJlc2VudHND
b250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpICYmICFpdC0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29y
UmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVy
U3VyZmFjZUxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIpOwotICAgICAgICBlbHNlIGlmIChp
dC5yZXByZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgp
KSB7CisgICAgICAgIGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2li
bGVMYXllclJlY3QoKS5pc0VtcHR5KCkgJiYgIWl0LT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgaXQtPndpbGxEcmF3KG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAgICAg
ICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvckxheWVyKCppdCwgJm9jY2x1c2lvblRyYWNrZXIs
IGhhZE1pc3NpbmdUaWxlcyk7CiAgICAgICAgIH0KQEAgLTQzMiw4ICs0MDgsMTIgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAg
ICAgbV9mcHNDb3VudGVyLT5tYXJrQmVnaW5uaW5nT2ZGcmFtZShjdXJyZW50VGltZSgpKTsKICAg
ICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKG1fcm9vdExheWVySW1wbC0+cmVu
ZGVyU3VyZmFjZSgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWUucmVuZGVy
UGFzc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQ
YXNzKGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NSZW5kZXJQ
YXNzKiByZW5kZXJQYXNzID0gZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpOworCisgICAgICAg
IEZsb2F0UmVjdCByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlID0gcmVuZGVyUGFzcy0+
dGFyZ2V0U3VyZmFjZSgpLT5jb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSht
X3Jvb3RTY2lzc29yUmVjdCk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBh
c3MocmVuZGVyUGFzcywgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk7CisgICAgfQog
CiAgICAgaWYgKG1fZGVidWdSZWN0SGlzdG9yeS0+ZW5hYmxlZChzZXR0aW5ncygpKSkKICAgICAg
ICAgbV9kZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZShtX3Jv
b3RMYXllckltcGwuZ2V0KCksIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QsIHNldHRpbmdz
KCkpOwpAQCAtNDg2LDcgKzQ2Niw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3dhcEJ1
ZmZlcnMoKQogICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwogCiAgICAgbV9mcHNDb3VudGVy
LT5tYXJrRW5kT2ZGcmFtZSgpOwotICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPnN3YXBCdWZm
ZXJzKGVuY2xvc2luZ0ludFJlY3QobV9yb290RGFtYWdlUmVjdCkpOworICAgIHJldHVybiBtX2xh
eWVyUmVuZGVyZXItPnN3YXBCdWZmZXJzKGVuY2xvc2luZ0ludFJlY3QobV9yb290U2Npc3NvclJl
Y3QpKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkaWRMb3NlQ29udGV4dCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggN2YwYzdmZjY2M2NhM2RmOGNj
ZTkzMWMyNmEzMWQ1MWU3YTYyYzcxNS4uZjNiNTczMzczMTQyNDc4MDI0N2NiMGVlYzdhODE1YzBm
MjI3NTAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjQwLDcg
KzI0MCw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CiAK
LSAgICBGbG9hdFJlY3QgbV9yb290RGFtYWdlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9yb290U2Np
c3NvclJlY3Q7CiAKICAgICBPd25QdHI8Q0NGcmFtZVJhdGVDb3VudGVyPiBtX2Zwc0NvdW50ZXI7
CiAgICAgT3duUHRyPENDRGVidWdSZWN0SGlzdG9yeT4gbV9kZWJ1Z1JlY3RIaXN0b3J5OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggZmQ4OTk5MGM3MTk4MTYwNjc2YTc2ZjViZWQyMTk2
ZmY3Yjk2ZWNjZS4uNWQzNDczNTkwMmNhOWJlNjEwYWMzZjM1ZjZhMTk5MDUzMzcxOWNhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQ0NSZW5kZXJQ
YXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIs
IENDT2NjbHVzCiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0
ZSA9IHN1cmZhY2UtPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogICAgIGJvb2wgaXNSZXBsaWNh
ID0gZmFsc2U7Ci0gICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgc2hhcmVkUXVh
ZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIHN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIHN1cmZh
Y2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBs
aWNhKTsKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5y
ZWxlYXNlKCkpOwogCiAgICAgaWYgKCFzdXJmYWNlLT5oYXNSZXBsaWNhKCkpCkBAIC03Nyw3ICs3
Nyw3IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXll
cihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVzCiAgICAgLy8gQWRkIHJlcGxpY2EgYWZ0ZXIg
dGhlIHN1cmZhY2Ugc28gdGhhdCBpdCBhcHBlYXJzIGJlbG93IHRoZSBzdXJmYWNlLgogICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcmVwbGljYVNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2Ut
PmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBpc1JlcGxpY2EgPSB0cnVlOwot
ICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3Rh
dGUuZ2V0KCksIGlzUmVwbGljYSwgc3VyZmFjZURhbWFnZVJlY3QoKSk7CisgICAgc3VyZmFjZS0+
YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNS
ZXBsaWNhKTsKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHJlcGxpY2FTaGFyZWRR
dWFkU3RhdGUucmVsZWFzZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCA0NTJh
ODYxMGY1YTlkYmMwMjE0YThjZGRiZmY2ZjAyNTRmZWNkYTI2Li4wMzU4ZWVjOTE4YjhmMTA4MmQy
ZWI0NWYwZDg3YmQ5YTg5NDYzMzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtNjIsMTYg
KzYyLDEyIEBAIHB1YmxpYzoKICAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0KIAotICAgIHZvaWQgc2V0U3Vy
ZmFjZURhbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgeyBtX3N1
cmZhY2VEYW1hZ2VSZWN0ID0gc3VyZmFjZURhbWFnZVJlY3Q7IH0KLSAgICBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlRGFtYWdlUmVj
dDsgfQotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDUmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZh
Y2UqKTsKIAogICAgIENDUmVuZGVyU3VyZmFjZSogbV90YXJnZXRTdXJmYWNlOwogICAgIENDUXVh
ZExpc3QgbV9xdWFkTGlzdDsKICAgICBWZWN0b3I8T3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiA+
IG1fc2hhcmVkUXVhZFN0YXRlTGlzdDsKLSAgICBGbG9hdFJlY3QgbV9zdXJmYWNlRGFtYWdlUmVj
dDsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4gQ0NSZW5kZXJQ
YXNzTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDk0M2M1M2ZiZjA4
MjdlMTI2YTdiNjJlZTE4ZDg2YmYzZDI4ZjU3OGMuLmQ2MmY1ZjlkYjM2YjE2NmE4NzJlODg5NzA0
ODU5OGI3NmQ4NGIwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMzcs
MTEgKzM3LDE1IEBACiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
KyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9D
Q1NoYXJlZFF1YWRTdGF0ZS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAordXNpbmcgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Y29uc3QgaW50IGRlYnVnU3VyZmFjZUJvcmRlcldpZHRoID0gMjsKQEAgLTEzOCwyMCArMTQyLDYg
QEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25z
dAogICAgIHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlICYmIG1fYmFja2dyb3VuZFRleHR1cmUt
PmlzUmVzZXJ2ZWQoKSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJl
Y3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJT
dXJmYWNlOjpzZXRTY2lzc29yUmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2Vz
TGF5ZXJDbGlwcGluZygpICYmIGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nUGFy
dGlhbFN3YXApIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0ID0gbV9jbGlw
UmVjdDsKLSAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1cmZhY2VEYW1hZ2VS
ZWN0KTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7Ci0gICAgfSBlbHNlIGlmIChsYXllclJlbmRlcmVy
LT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICBsYXllclJlbmRlcmVy
LT5zZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsK
LSAgICBlbHNlIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5w
YXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0
U2Npc3NvclRvUmVjdChtX2NsaXBSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIEdMQyhsYXllclJl
bmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci19Ci0KIFN0cmluZyBDQ1JlbmRlclN1cmZh
Y2U6Om5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3Vy
ZmFjZShpZD0laSxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVy
LT5kZWJ1Z05hbWUoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTI1MSwxNiArMjQxLDIyIEBAIGJvb2wg
Q0NSZW5kZXJTdXJmYWNlOjpzdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50
KCkgY29uc3QKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6
Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsKICAgICBib29sIGlzT3BhcXVlID0gZmFs
c2U7Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUob3JpZ2luVHJhbnNmb3Jt
KCksIGRyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09wYWNp
dHkoKSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9y
aWdpblRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIG1fc2Npc3Nv
clJlY3QsIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKIH0KIAogUGFzc093blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gQ0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRl
KCkgY29uc3QKIHsKICAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7Ci0gICAgcmV0dXJuIENDU2hh
cmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5zZm9ybSgpLCByZXBsaWNhRHJh
d1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgpLCBkcmF3T3BhY2l0eSgpLCBp
c09wYXF1ZSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9y
aWdpblRyYW5zZm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBt
X3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7Cit9CisKK0Zsb2F0UmVjdCBD
Q1JlbmRlclN1cmZhY2U6OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNv
bnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KSBjb25zdAoreworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1fc2NyZWVuU3BhY2VU
cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIHJldHVybiBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBl
ZFJlY3QoaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLCByb290U2Npc3NvclJlY3QpOwogfQog
Ci12b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlz
dCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhLCBj
b25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQordm9pZCBDQ1JlbmRlclN1cmZhY2U6
OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBz
aGFyZWRRdWFkU3RhdGUsIGJvb2wgZm9yUmVwbGljYSkKIHsKICAgICBBU1NFUlQoIWZvclJlcGxp
Y2EgfHwgaGFzUmVwbGljYSgpKTsKIApAQCAtMjkwLDcgKzI4Niw3IEBAIHZvaWQgQ0NSZW5kZXJT
dXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRT
dGF0ZSogc2hhCiAKICAgICBpbnQgbWFza1RleHR1cmVJZCA9IG1hc2tMYXllciA/IG1hc2tMYXll
ci0+Y29udGVudHNUZXh0dXJlSWQoKSA6IDA7CiAKLSAgICBxdWFkTGlzdC5hcHBlbmRTdXJmYWNl
KENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBjb250ZW50
UmVjdCgpLCBtX293bmluZ0xheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgZm9yUmVwbGljYSwgZmls
dGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkKSk7CisgICAgcXVhZExp
c3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgbV9vd25pbmdMYXllciwgZm9yUmVwbGljYSwgZmlsdGVy
cygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkKSk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggODU1ZmNjZTdlNDM1M2I4ZGRlZDUxZGVlMGVlZDBj
NDAwMzgyYTE2ZS4uYzRiYjk5OTZmOWRkODdiZThkMDU5MDg1YzM3OTQ0MWYzMDkxYTk4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTYwLDggKzYwLDYgQEAgcHVibGljOgogICAg
IHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7CiAgICAgYm9vbCBoYXNWYWxpZEJhY2tn
cm91bmRUZXh0dXJlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFNjaXNzb3JSZWN0KExheWVyUmVu
ZGVyZXJDaHJvbWl1bSosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpIGNvbnN0
OwotCiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIApAQCAtMTEyLDYgKzExMCw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KIAorICAgIHZvaWQgc2V0
U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9
IHNjaXNzb3JSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisKICAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0
IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudFJlY3Q7IH0KIApAQCAtMTM4LDEyICsxMzksMTMgQEAgcHVibGljOgogICAg
IFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNv
bnN0OwogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVJlcGxpY2FTaGFy
ZWRRdWFkU3RhdGUoKSBjb25zdDsKIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIHN1cmZhY2VE
YW1hZ2VSZWN0IHBhcmFtZXRlciB3aGVuIHRoZSB2YWx1ZSBpcyByZW1vdmVkIGZyb20gQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQuCi0gICAgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBD
Q1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBDQ1No
YXJlZFF1YWRTdGF0ZSosIGJvb2wgZm9yUmVwbGljYSk7CisgICAgRmxvYXRSZWN0IGNvbXB1dGVS
b290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNz
b3JSZWN0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDQ0xheWVySW1wbCogbV9vd25pbmdMYXll
cjsKIAorICAgIC8vIFVzZXMgdGhpcyBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX2Nv
bnRlbnRSZWN0OwogICAgIGJvb2wgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkOwogCkBAIC0xNjIs
NyArMTY0LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0Fy
ZUFuaW1hdGluZzsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwog
ICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOworCisg
ICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KICAg
ICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmll
cyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisg
ICAgLy8gVXNlcyB0aGUgc3BhY2Ugb2YgdGhlIHN1cmZhY2UncyB0YXJnZXQgc3VyZmFjZS4KKyAg
ICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CisKICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBtX2xh
eWVyTGlzdDsKIAogICAgIC8vIFRoZSBuZWFyZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRo
YXQgd2lsbCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlz
IGdvaW5nCkBAIC0xNzEsOSArMTgwLDYgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxDQ0RhbWFn
ZVRyYWNrZXI+IG1fZGFtYWdlVHJhY2tlcjsKIAotICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZh
Y2Ugc3BhY2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgot
ICAgIEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7Ci0KICAgICAvLyBGb3IgQ0NMYXllckl0ZXJhdG9y
QWN0aW9ucwogICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsK
ICAgICBpbnQgbV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKaW5kZXggZGYwMGMwZTBmYTM2NTYyMWEzNjYzYmMy
OTY2ZjIzN2MzYjc1YWI1Zi4uNTc0MjM4MmY2NjM3YmUxOWRiYWMzMTA2OGExMGI5MTg5ZTE5Y2U4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcApAQCAt
MjksMTUgKzI5LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZD4gQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VS
ZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0
ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQorUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZD4gQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXll
ckltcGwqIGxheWVyLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tn
cm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVj
dCwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0LCBpc1JlcGxpY2EsIGZpbHRlcnMsIGJhY2tncm91
bmRGaWx0ZXJzLCBtYXNrVGV4dHVyZUlkKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXllciwgaXNS
ZXBsaWNhLCBmaWx0ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCkpOwogfQog
Ci1DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVy
cywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKK0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0
YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBib29sIGlz
UmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25z
dCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25l
ZCBtYXNrVGV4dHVyZUlkKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJh
d1F1YWQ6OlJlbmRlclN1cmZhY2UsIHF1YWRSZWN0KQogICAgICwgbV9sYXllcihsYXllcikKLSAg
ICAsIG1fc3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpCiAgICAgLCBtX2lzUmVw
bGljYShpc1JlcGxpY2EpCiAgICAgLCBtX2ZpbHRlcnMoZmlsdGVycykKICAgICAsIG1fYmFja2dy
b3VuZEZpbHRlcnMoYmFja2dyb3VuZEZpbHRlcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQuaAppbmRleCAwYTAxMjgxZmE0ZjY5ZGUyY2Q2ZDI5MWZmMWE2MTZiNjk2
N2I5NGI2Li5lZGFlZTI0MTk2ODA3MjQyN2U5Nzc2Mzk4YjQ2NGQyNWRhZjc1MTEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKQEAgLTM3LDI0ICszNywxOSBA
QCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIDogcHVi
bGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVj
dCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9v
bCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywg
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5z
aWduZWQgbWFza1RleHR1cmVJZCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJl
Y3QmLCBDQ0xheWVySW1wbCosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
YmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpOwogCiAgICAgQ0NMYXll
ckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQogICAgIGJvb2wgaXNSZXBs
aWNhKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGxpY2E7IH0KICAgICB1bnNpZ25lZCBtYXNrVGV4
dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUlkOyB9CiAKLSAgICAvLyBUaGUg
c3VyZmFjZSBkYW1hZ2UgcmVjdCBmb3IgdGhlIHRhcmdldCBzdXJmYWNlIHRoaXMgcXVhZCBkcmF3
cyBpbnRvLgotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UgcmVuZGVyIHN1
cmZhY2VzIGdldCB0aGVpciBvd24gbGF5ZXIgdHlwZS4KLSAgICBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlRGFtYWdlUmVjdDsgfQot
CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zJiBiYWNrZ3JvdW5kRmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZpbHRl
cnM7IH0KIAogcHJpdmF0ZToKLSAgICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpOworICAgIEND
UmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50
UmVjdCYsIENDTGF5ZXJJbXBsKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCk7CiAKICAgICBDQ0xh
eWVySW1wbCogbV9sYXllcjsKLSAgICBGbG9hdFJlY3QgbV9zdXJmYWNlRGFtYWdlUmVjdDsKICAg
ICBib29sIG1faXNSZXBsaWNhOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2Zp
bHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRl
cnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKaW5kZXggM2YyODM3ZTA1MjBi
Zjg0NmI0NzNlYTFlNzM4NzE1ZjZlODA5NjAzZi4uNTM2YjM5ODY3ZDUwMjIwNWIxMjI3OTdkMGIx
MzViYWE2M2VjODQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcApAQCAt
MzEsMTYgKzMxLDE2IEBAIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NT
aGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVh
ZFRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3Jt
LCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9h
dCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKK1Bhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IEND
U2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1
YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9y
bSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwg
ZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNmb3JtLCBsYXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0
LCBjbGlwUmVjdCwgb3BhY2l0eSwgb3BhcXVlKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNmb3JtLCBsYXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0
LCBzY2lzc29yUmVjdCwgb3BhY2l0eSwgb3BhcXVlKSk7CiB9CiAKLUNDU2hhcmVkUXVhZFN0YXRl
OjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRy
YW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBv
cGFjaXR5LCBib29sIG9wYXF1ZSkKK0NDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0
ZShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXll
clJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9w
YXF1ZSkKICAgICA6IG1fcXVhZFRyYW5zZm9ybShxdWFkVHJhbnNmb3JtKQogICAgICwgbV9sYXll
clRyYW5zZm9ybShsYXllclRyYW5zZm9ybSkKICAgICAsIG1fbGF5ZXJSZWN0KGxheWVyUmVjdCkK
LSAgICAsIG1fY2xpcFJlY3QoY2xpcFJlY3QpCisgICAgLCBtX3NjaXNzb3JSZWN0KHNjaXNzb3JS
ZWN0KQogICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgLCBtX29wYXF1ZShvcGFxdWUpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaAppbmRleCBhMTRiMTdkYWFjZjEwYzdiOWM1
OTNhNTMwYTJhMjZiYjU4NTExNTk5Li40NTQwYTA2Zjg0ZWU1MmRmYWM1ZGUzNTYwNDhlYmIxOGM1
OGRiNzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKQEAgLTM2LDI3ICszNiwy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NTaGFyZWRRdWFkU3RhdGUpOwogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGUoY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVy
UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVl
KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5
LCBib29sIG9wYXF1ZSk7CiAKICAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgcXVhZHMgaW4gYSBD
Q0RyYXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3F1YWRUcmFuc2Zvcm07IH0KICAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkg
c2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCiAgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJh
bnNmb3JtOyB9CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclJlY3Q7IH0KLSAgICAvLyBVc2FnZTogaWYgY2xpcFJlY3QgaXMgZW1wdHksIHRoaXMg
Y2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkLgotICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQogCiAgICAgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogICAgIGJvb2wgaXNMYXllckF4aXNBbGlnbmVkSW50
UmVjdCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29s
IG9wYXF1ZSk7CisgICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29u
c3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKIAog
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9xdWFkVHJhbnNmb3JtOwogICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sYXllclRyYW5zZm9ybTsKICAgICBJ
bnRSZWN0IG1fbGF5ZXJSZWN0OwotICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKyAgICBJbnRSZWN0
IG1fc2Npc3NvclJlY3Q7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGJvb2wgbV9vcGFxdWU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAKaW5kZXggNTZkODVmYWZhOWZkN2I5YWM3ZjJmMjcyOGQ2Y2FmNjdiNzk2YWIx
My4uMDhlYTAzNTI4Y2I0OGVkYjUzNTUxZDc4ZmM1N2YxMWYzYTZjMmVkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBA
IC01OCw3ICs1OCw4IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9yPENDTGF5CiAKICAgICByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocm9vdCk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVy
U29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXll
clNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKIHZvaWQgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShDQ0xheWVySW1wbCogcm9vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCmluZGV4IDEwNWM3MTg2
ZTRjOTQzNWU4OWViMzMwY2EyNmM5MDE5YjJkMjU1MjUuLjVmYzYyNWYyMjE5MDE3YTQ4ZGMwMTY2
M2VlN2VlYjM2ZGNkMjhhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcApAQCAtMTQwLDEwICsxNDAsMTEgQEAgVEVTVChD
Q0xheWVySXRlcmF0b3JUZXN0LCBzaW1wbGVUcmVlKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocm9vdExheWVyLmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5n
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJM
aXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNl
KCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CkBA
IC0xODcsMTAgKzE4OCwxMSBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVl
KQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CiAgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyLmdldCgpKTsKLSAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShy
b290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGxheWVyTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5
ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgaXRl
cmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09V
TlQocm9vdExheWVyLCAwLCAtMSwgMSk7CkBAIC0yNDYsMTAgKzI0OCwxMSBAQCBURVNUKENDTGF5
ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVsdGlTdXJmYWNlKQogICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocm9vdExheWVyLmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJv
b3RMYXllci5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVy
TGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAt
MSwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBmY2U5MDQ2YzdlYjBjNTM2ODg3OWI3Mjc5
ZWZjZGFjNmQ3OGZlYWNmLi4xZDA2OWE1YmUzYWI1NDlmMGRmMTg2MTkyZGJiZWU5OTU2YzgzZTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTMxLDcgKzMxLDEyIEBACiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NNYXRoVXRpbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJjYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKIAogI2luY2x1
ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KQEAgLTU5LDcgKzY0
LDggQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJv
b3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIH0KIAogV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0KQpAQCAtMTc1LDcgKzE4MSw3IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKIAogICAgIC8vIENhc2UgNzogVmVyaWZ5IHRoYXQgcG9zaXRpb24g
cHJlLW11bHRpcGxpZXMgdGhlIGxheWVyIHRyYW5zZm9ybS4KLSAgICAvLyAgICAgICAgIFRoZSBj
dXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eSBkb2VzIHRoaXMgaW1wbGljaXRseSwgYnV0IGl0IGlzCisgICAgLy8gICAgICAgICBUaGUg
Y3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyBkb2VzIHRo
aXMgaW1wbGljaXRseSwgYnV0IGl0IGlzCiAgICAgLy8gICAgICAgICBzdGlsbCB3b3J0aCB0ZXN0
aW5nIHRvIGRldGVjdCBhY2NpZGVudGFsIHJlZ3Jlc3Npb25zLgogICAgIGV4cGVjdGVkUmVzdWx0
ID0gcG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zv
cm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUo
MTAsIDEyKSwgZmFsc2UpOwpAQCAtMzE4LDYgKzMyNCw1NTggQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKICAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3ROb0NsaXAp
Cit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFk
OworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisgICAg
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAg
MSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICB8ICAgICAg
ICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAg
ICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0t
LS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICB8ICAr
LS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGhhdmUgcmVuZGVyIHN1cmZhY2VzCisgICAgICov
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDMpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAxMDAsIDEwMCk7CisgICAgSW50UmVj
dCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIEludFJlY3QgZ3JhbmRDaGlsZFJlY3Qo
NSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55KCkpKTsKKyAgICByb290
LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkp
OworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShyb290UmVj
dC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNoaWxkLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHko
MC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxkUmVjdC53aWR0aCgpLCBj
aGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
CisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFu
ZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFu
ZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5k
Q2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0
ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRD
aGlsZC5nZXQoKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7
CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIFZlY3RvcjxDQ0xh
eWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsK
KyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKworICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
bGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAg
IEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teURhbWFnZVJlY3QpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGlsZFB0
ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNl
KCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIAorICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgMlUpOwor
ICAgIAorICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKKworICAgIC8vIExheWVyJ3MgY2xpcFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxk
cmVuJ3MgYm91bmRzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5k
Q2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgQVNTRVJUX0VR
KGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAg
QVNTRVJUX0VRKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBS
ZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIEFTU0VSVF9GQUxTRShyb290
LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNM
YXllckNsaXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5
ZXJDbGlwcGluZygpKTsKKyAgICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAg
ICBJbnRSZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290RGFtYWdlKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIGNo
aWxkIHN1cmZhY2UgZG9lc24ndCBoYXZlIGEgY2xpcCByZWN0LCB0aGVyZWZvcmUgaXQgd2lsbCBi
ZSBjb21wdXRlZCBhcyBpbnRlcnNlY3Rpb24KKyAgICAvLyBiZXR3ZWVuIHJvb3Qgc3VyZmFjZSdz
IGNvbnRlbnRyZWN0IGFuZCBjaGlsZCBzdXJmYWNlJ3MgZHJhd2FibGUgY29udGVudCByZWN0Lgor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRo
KCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsK
KworICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7
CisKKyAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3QsIGJ1dCBjaGlsZCBs
YXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdoIGl0IGhhcyBib3Vu
ZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxkcmVuCisgICAgLy8g
KHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBzY2lzc29yIHJlY3QK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgcm9v
dFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRS
ZWN0LnkoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgd2lsbCBoYXZlIHRoZSBzYW1lIHNjaXNz
b3IgcmVjdCBhcyBpdCBkb2Vzbid0IGhhdmUgYSBzdXJmYWNlCisgICAgLy8gb2YgaXRzIG93bgor
ICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNo
aWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICByb290RGFtYWdl
ID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERh
bWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNjaXNzb3IKKyAgICBF
WFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIAorICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhpbiBjaGlsZAorICAg
IHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21w
dXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRh
bWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwor
ICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBv
ZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55
KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8g
R3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lzc29y
IHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0
ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCks
IHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290
RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQK
KyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3Qg
Y29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGly
ZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdl
KTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgor
ICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8v
IEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJl
bnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJl
Y3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAg
IC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Np
c3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3Qu
eCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIHJv
b3QKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEwKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJl
IG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8g
Um9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRlbnRSZWN0
IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAgLy8gUmVzdWx0IGlz
IHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0Lndp
ZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnko
KSkpOworICAgIAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5nLCBzbyBp
dHMgY29udGVudCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UKKyAg
ICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBs
YXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3RE
YW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisKKyAgICAv
LyBDaGlsZHJlbidzIGNvbnRlbnQgcmVjdHMgYXJlIGJpZ2dlciB0aGFuIHRoZSByb290J3Mgc28g
dGhleSBkb24ndCBjbGlwIHRoZSBkYW1hZ2UgcmVjdCwgYnV0IGNoYW5nZSBpdHMgb2Zmc2V0Lgor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisgICAgRVhQRUNUX0VRKGdy
YW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lk
dGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXApCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBh
cmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0r
CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0t
LS0rICAgICB8CisgICAgICAgICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8
ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAgICAgICAg
IHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAg
ICAgICAgICB8ICAgICB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAy
IGhhdmUgcmVuZGVyIHN1cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNo
aWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdy
YW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVj
dCgwLCAwLCAxMDAsIDEwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTAp
OworICAgIEludFJlY3QgZ3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9v
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3Qu
eCgpLCByb290UmVjdC55KCkpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVj
dC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQo
KSkpKTsKKworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAg
ICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3Qu
eSgpKSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5k
cyhJbnRTaXplKGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBj
aGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50
UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFu
ZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENo
aWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5
ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQu
cmVsZWFzZSgpKTsKKworICAgIHJvb3QtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBW
ZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7CisgICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisKKyAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCBy
b290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsK
KworICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RS
VUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCksIDJVKTsKKyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGluZyB0byBpdHMgYm91bmRz
CisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKworICAgIC8vIExh
eWVyJ3MgY2xpcFJlY3QgaXMgYSB1bmlvbiBvZiBhbGwgaXRzIGNoaWxkcmVuJ3MgYm91bmRzCisg
ICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hp
bGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LnkoKSAr
IGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHIt
PmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgQVNTRVJUX0VRKHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAg
ICAvLyBDaGlsZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJvb3Qncwor
ICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290
UmVjdCk7CisgICAgCisgICAgQVNTRVJUX1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7
CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBB
U1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisg
ICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJv
b3RSZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisg
ICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAgICAKKyAg
ICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworCisg
ICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIg
c3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBp
dCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGlj
aCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0
LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55
KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwgaGF2ZSB0aGUgc2FtZSBzY2lzc29yIHJl
Y3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFjZQorICAgIC8vIG9mIGl0cyBvd24KKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290
UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJl
Y3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisgICAgcm9vdERhbWFnZSA9IElu
dFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2Up
OworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBzY2lzc29yCisgICAgRVhQRUNU
X0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIEVYUEVD
VF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAg
IEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRoaW4gY2hpbGQKKyAgICByb290
RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQg
Zm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2Ug
cmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAK
KyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVD
VF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBk
YW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1h
Z2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBy
b290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5k
IGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Npc3NvciByZWN0
IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290
RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFn
ZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAg
cm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1
dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7Cisg
ICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBF
WFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRp
cmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9m
ZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0Lnko
KSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBH
cmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3Ig
cmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRy
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3RE
YW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCByb290Cisg
ICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3Qg
Y29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIFJvb3Qg
c3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50UmVjdCB3aWxs
IGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3VsdCBpcyB0aGF0
IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgp
IC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsK
KyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywgc28gaXRzIGNv
bnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlCisgICAgLy8g
UmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIg
Ym91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdl
LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisgICAgLy8gTm93
IHRoZSBzY2lzc29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRlbnRSZWN0Cisg
ICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290
UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERh
bWFnZS55KCkpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0g
Y2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVj
dC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcEFuZFNwYWNlVHJhbnNmb3JtKQoreworICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAg
IC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAg
ICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAg
ICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwg
fCAgIDMsNCAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0t
LS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisg
ICAgICAgICBMYXllcnMgMSwgMiBhbmQgMyBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLwor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7Cisg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7Cisg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgz
KTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQyID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSg0KTsKKworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIElu
dFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRS
ZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAg
cm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0
KCkpKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9v
dFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFj
aXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgo
KSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwor
ICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwg
Z3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsK
KyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgp
LCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDAsIDApKTsKKyAgICBncmFuZENoaWxkMi0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGls
ZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkMi0+c2V0T3Bh
Y2l0eSgwLjVmKTsKKyAgICBncmFuZENoaWxkMi0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGls
ZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxk
Mi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0g
Y2hpbGQuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxk
LmdldCgpOworCisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIucmVsZWFzZSgp
KTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3Qt
PmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBk
dW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29y
dGVyOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkp
OworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAg
IAorICAgIEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VS
VF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGls
ZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCksIDNVKTsKKyAgICAKKyAgICAvLyBOb3cgcm9vdCBpcyBjbGlwcGlu
ZyB0byBpdHMgYm91bmRzCisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIHJvb3RSZWN0
KTsKKworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBj
aGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSAsIGNoaWxkUmVjdC55KCkgKyBn
cmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmRjaGlsZCBub3cgY2xpcHMK
KyAgICBBU1NFUlRfRVEoZ3JhbmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBn
cmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVj
dC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworCisgICAgQVNTRVJUX0VRKHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAg
ICAvLyBDaGlsZCBzdXJmYWNlJ3MgY2xpcHBpbmcgcmVjdCBpcyBub3cgc2V0IHRvIHJvb3Qncwor
ICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCByb290
UmVjdCk7CisgICAgCisgICAgQVNTRVJUX1RSVUUocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7
CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBB
U1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisg
ICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJv
b3RSZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisg
ICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsKKyAgICAKKyAg
ICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVjdCkpOworCisg
ICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hpbGQgbGF5ZXIg
c3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMgYm91bmRzLCBp
dCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAgIC8vICh3aGlj
aCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciByZWN0CisgICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0
LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55
KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGlzIG5vdyBzY2lzc29yZWQgYnkgdGhlIHJlbmRl
ciBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCkgLSBncmFuZENoaWxk
UmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSAtIGdyYW5kQ2hpbGRS
ZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2UgPSBJ
bnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdl
KTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVYUEVD
VF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBFWFBF
Q1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAg
ICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAgcm9v
dERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVk
IGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdl
IHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAg
CisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBF
Q1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUg
ZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNl
dAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFt
YWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwg
cm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFu
ZCBjaGlsZCBub3cgZ2V0cyBzY2lzc29yZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFzIHdlbGwg
YXMgcm9vdAorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGls
ZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3RE
YW1hZ2UuaGVpZ2h0KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBhcnRpYWwg
ZGFtYWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAs
IDgwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAg
Ly8gU2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJm
YWNlCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBp
cyB3aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJv
b3REYW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5
ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290
RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFn
ZS5oZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3NvcmVkIGJ5
IGl0cyB0YXJnZXQgc3VyZmFjZSBhcyB3ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVj
dC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgp
IC0gZ3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJl
Y3QueSgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3RE
YW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVk
IGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Np
c3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2Ug
ZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2Vk
IHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRh
bWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9F
UShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3RE
YW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisg
ICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJl
Y3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBp
cyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54
KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJv
b3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIE5vdyB0aGUgc2Np
c3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVjdAorICAgIEVYUEVD
VF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdFJlY3Qud2lk
dGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgp
KSk7CisKKyAgICAvLyBHcmFuZGNoaWxkJ3Mgc2Npc3NvciByZWN0IGlzIGNsaXBwZWQgYnkgaXRz
IHRhcmdldCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnko
KSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0Lngo
KSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworfQorCiBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZXBsaWNhKQog
ewogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKQEAgLTU0NSw3ICsxMTAzLDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxpc3RGb3JDbGlwTGF5ZXIpCiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEZsb2F0UmVjdCBkdW1t
eURhbWFnZVJlY3Q7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIC8vIFRoZSBjaGlsZCBsYXllcidzIGNvbnRl
bnQgaXMgZW50aXJlbHkgb3V0c2lkZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0LCBzbyB0aGUgaW50
ZXJtZWRpYXRlCiAgICAgLy8gcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVk
LiBSZW5kZXIgc3VyZmFjZXMgd2l0aG91dCBjaGlsZHJlbiBvciB2aXNpYmxlCkBAIC01NzMsNyAr
MTEzNCw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3Vy
ZmFjZUxpc3RGb3JUcmFuc3BhcmVudENoaWxkKQogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgLy8gU2luY2UgdGhl
IGxheWVyIGlzIHRyYW5zcGFyZW50LCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpIHNo
b3VsZCBub3QgaGF2ZSBnb3R0ZW4gYWRkZWQgYW55d2hlcmUuCiAgICAgLy8gQWxzbywgdGhlIGRy
YXdhYmxlIGNvbnRlbnQgcmVjdCBzaG91bGQgbm90IGhhdmUgYmVlbiBleHRlbmRlZCBieSB0aGUg
Y2hpbGRyZW4uCkBAIC02MDEsMTQgKzExNjQsMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlGb3JjZVJlbmRlclN1cmZhY2UpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIEVYUEVDVF9UUlVFKHJlbmRlclN1
cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSwgMVUpOwogCiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigp
OwogICAgIHJlbmRlclN1cmZhY2UxLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UoZmFsc2UpOwotICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKICAgICBFWFBFQ1RfRkFMU0UocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1
cmZhY2UoKSk7CiAgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAw
VSk7CiB9CkBAIC02NjYsNyArMTIyOSwxMSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICBwYXJlbnQtPnNldENs
aXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShw
YXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisK
IAogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwogICAg
IEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkp
OwpAQCAtNzI1LDcgKzEyOTIsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlc0NyYXNoUmVwcm8pCiAgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5zaXplKCkpOwogICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRl
clN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOwpAQCAtNzc2LDcgKzEzNDUsNyBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91
dFZpc2libGVDb250ZW50KQogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShw
YXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CiAKICAgICAvLyBXaXRob3V0IGFuIGFuaW1hdGlvbiwgd2Ugc2hvdWxkIGN1bGwg
Y2hpbGQgYW5kIGdyYW5kQ2hpbGQgZnJvbSB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4KICAg
ICBBU1NFUlRfRVEoMVUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKQEAgLTc5NSw3
ICsxMzY0LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVj
dEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBwYXJlbnQtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gV2l0aCBhbiBhbmltYXRpbmcg
dHJhbnNmb3JtLCB3ZSBzaG91bGQga2VlcCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBpbiB0aGUgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC4KICAgICBBU1NFUlRfRVEoM1UsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpKTsKQEAgLTg1NSw3ICsxNDI0LDEwIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykK
ICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5n
ZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAKICAgICBFWFBFQ1Rf
SU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBn
cmFuZENoaWxkMS0+Y2xpcFJlY3QoKSk7CiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0
KCkpOwpAQCAtOTI3LDcgKzE0OTksOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAK
LSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRD
aGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDItPnJl
bmRlclN1cmZhY2UoKSk7CkBAIC0xNDA4LDcgKzE5ODIsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhvdXRQcmVzZXJ2ZXMzZCkKICAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQo
KSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJpZnkgd2hpY2ggcmVuZGVyU3Vy
ZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9GQUxTRShmcm9udEZhY2luZ0NoaWxkLT5y
ZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTUxMyw3ICsyMDg3LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2QpCiAgICAg
cGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkp
OwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZh
Y2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfRkFMU0UoZnJvbnRGYWNpbmdDaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKTsKQEAgLTE1OTgsNyArMjE3Miw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aEFuaW1hdGluZ1RyYW5zZm9ybXMp
CiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIEVYUEVDVF9G
QUxTRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdT
dXJmYWNlLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTY3MCw3ICsyMjQ2LDcgQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVz
M2RGb3JGbGF0dGVuaW4KICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJp
Znkgd2hpY2ggcmVuZGVyU3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9UUlVFKGZy
b250RmFjaW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXgg
OTFjMmQxZGZmMTIxMjc5YTdjNzQ2MDcwYzVjYmRjMjIyNGYyYjY1YS4uNzQyMzRlZTRmZTkwMTM4
N2MyZDhjYjdlMDhlNDU2ODUxNjUwMjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTM2LDEwICsz
NiwxMiBAQAogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2Ny
b2xsYmFyTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgor
I2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0
dXJlTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRl
ICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5o
IgorI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNp
bmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRl
b0ZyYW1lUHJvdmlkZXIuaD4KQEAgLTQ5LDYgKzUxLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0
czsKIAordXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Cit1
c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6XzsKKwogbmFtZXNw
YWNlIHsKIAogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6
VGVzdCwgcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewpAQCAtNzAsNiArNzcsMjgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhy
ZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3Vi
bGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RTZXRD
b250ZW50c01lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFk
KHNpemVfdCkgT1ZFUlJJREUgeyB9CiAKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGw+IGNyZWF0ZUxheWVyVHJlZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290UHRyKQorICAgIHsKKyAgICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKworICAgICAgICBz
ZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgICAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNyZWF0ZShzZXR0aW5ncywgdGhpcyk7CisKKyAgICAgICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIoZ3JhcGhpY3NDb250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAg
ICAgICAgbXlIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisKKyAg
ICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gcm9vdFB0cjsKKworICAgICAgICByb290
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXpl
KDEwLCAxMCkpOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwg
MCwgMTAsIDEwKSk7CisgICAgICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAg
ICAgbXlIb3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0
dXJuIG15SG9zdEltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIGV4cGVj
dENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHsK
ICAgICAgICAgQVNTRVJUX0VRKGxheWVyLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKCkpOwpAQCAt
MTA5OSw2ICsxMTI4LDMxOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRp
YWxTd2FwUmVjZWl2ZXNEYW1hZ2VSZWN0KQogICAgIEVYUEVDVF9FUShleHBlY3RlZFN3YXBSZWN0
LmhlaWdodCgpLCBhY3R1YWxTd2FwUmVjdC5oZWlnaHQoKSk7CiB9CiAKK2NsYXNzIEZha2VMYXll
cldpdGhRdWFkcyA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8RmFrZUxheWVyV2l0aFF1YWRzPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgRmFrZUxheWVyV2l0aFF1YWRzKGlkKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sJikgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGNvbnN0
IENvbG9yIGdyYXkoMTAwLCAxMDAsIDEwMCk7CisgICAgICAgIEludFJlY3QgcXVhZFJlY3QoMCwg
MCwgNSwgNSk7CisgICAgICAgIE93blB0cjxDQ0RyYXdRdWFkPiBteVF1YWQgPSBDQ1NvbGlkQ29s
b3JEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGdyYXkpOworICAg
ICAgICBxdWFkTGlzdC5hcHBlbmQobXlRdWFkLnJlbGVhc2UoKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEZha2VMYXllcldpdGhRdWFkcyhpbnQgaWQpCisgICAgICAgIDogQ0NMYXllckltcGwo
aWQpCisgICAgeworICAgIH0KK307CisKK2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGljIEZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QxKHVzZVByb2dy
YW0sIHZvaWQoV2ViR0xJZCBwcm9ncmFtKSk7CisgICAgTU9DS19NRVRIT0Q1KHVuaWZvcm00Ziwg
dm9pZChXR0MzRGludCBsb2NhdGlvbiwgV0dDM0RmbG9hdCB4LCBXR0MzRGZsb2F0IHksIFdHQzNE
ZmxvYXQgeiwgV0dDM0RmbG9hdCB3KSk7CisgICAgTU9DS19NRVRIT0Q0KHVuaWZvcm1NYXRyaXg0
ZnYsIHZvaWQoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IFdHQzNEZmxvYXQqIHZhbHVlKSk7CisgICAgTU9DS19NRVRIT0Q0
KGRyYXdFbGVtZW50cywgdm9pZChXR0MzRGVudW0gbW9kZSwgV0dDM0RzaXplaSBjb3VudCwgV0dD
M0RlbnVtIHR5cGUsIFdHQzNEaW50cHRyIG9mZnNldCkpOworICAgIE1PQ0tfTUVUSE9EMShnZXRT
dHJpbmcsIFdlYlN0cmluZyhXR0MzRGVudW0gbmFtZSkpOworICAgIE1PQ0tfTUVUSE9EMChnZXRS
ZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSwgV2ViU3RyaW5nKCkpOworICAgIE1PQ0tfTUVU
SE9EMShlbmFibGUsIHZvaWQoV0dDM0RlbnVtIGNhcCkpOworICAgIE1PQ0tfTUVUSE9ENChzY2lz
c29yLCB2b2lkKFdHQzNEaW50IHgsIFdHQzNEaW50IHksIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNE
c2l6ZWkgaGVpZ2h0KSk7Cit9OworCitjbGFzcyBNb2NrQ29udGV4dEhhcm5lc3MgeworcHJpdmF0
ZToKKyAgICBNb2NrQ29udGV4dCogbV9jb250ZXh0OworcHVibGljOgorICAgIE1vY2tDb250ZXh0
SGFybmVzcyhNb2NrQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICB7CisgICAgICAgIC8vIENhdGNoICJ1bmludGVyZXN0aW5nIiBjYWxscworICAgICAg
ICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1c2VQcm9ncmFtKF8pKQorICAgICAgICAgICAgLlRp
bWVzKDApOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhf
LCBfLCBfLCBfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICAvLyBUaGVzZSBh
cmUgbm90IGFzc2VydGVkCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm1N
YXRyaXg0ZnYoXywgXywgXywgXykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJu
KCkpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVuaWZvcm00ZihfLCBfLCBf
LCBfLCBfKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisKKyAgICAg
ICAgLy8gQW55IG90aGVyIHN0cmluZ3MgYXJlIGVtcHR5CisgICAgICAgIEVYUEVDVF9DQUxMKCpt
X2NvbnRleHQsIGdldFN0cmluZyhfKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1
cm4oV2ViU3RyaW5nKCkpKTsKKworICAgICAgICAvLyBTdXBwb3J0IGZvciBwYXJ0aWFsIHN3YXAs
IGlmIG5lZWRlZAorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBnZXRTdHJpbmcoR3Jh
cGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5
KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpKSk7CisKKyAg
ICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hS
T01JVU0oKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oV2ViU3RyaW5nKCJH
TF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKSkpOworCisgICAgICAgIC8vIEFueSB1bi1zYW5j
dGlvbmVkIGNhbGxzIHRvIGVuYWJsZSgpIGFyZSBPSworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9j
b250ZXh0LCBlbmFibGUoXykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKCkp
OworICAgIH0KKworICAgIHZvaWQgbXVzdERyYXdTb2xpZFF1YWQoKQorICAgIHsKKyAgICAgICAg
RVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCkpCisgICAg
ICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJh
dGlvbigpOworCisgICAgICAgIC8vIDEgaXMgaGFyZGNvZGVkIHJldHVybiB2YWx1ZSBvZiBmYWtl
IGNyZWF0ZVByb2dyYW0oKQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1c2VQcm9n
cmFtKDEpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJl
dGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgIH0KKworICAgIHZvaWQgbXVzdFNldFNjaXNzb3Io
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgeworICAgICAgICBFWFBF
Q1RfQ0FMTCgqbV9jb250ZXh0LCBlbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJl
c09uU2F0dXJhdGlvbigpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHNjaXNz
b3IoeCwgeSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkp
CisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOworICAgIH0KKworfTsKKworVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub1BhcnRpYWxTd2FwKQoreworICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDb250
ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwor
ICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+
KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNv
bnRleHQuZ2V0KCkpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFybmVzcygmbW9ja0NvbnRl
eHQpOworCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3MubXVz
dFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAgICBP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhv
c3QoZmFsc2UsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKKworICAg
IENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRSht
eUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xh
eWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7Cisg
ICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKK30KKwor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcCkKK3sKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ29u
dGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsK
KyAgICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8TW9ja0NvbnRleHQq
PihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChj
b250ZXh0LmdldCgpKSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MoJm1vY2tDb250
ZXh0KTsKKworICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICAvLyBPbmUgc2Np
c3NvciBmb3IgY2xlYXJpbmcgc3VyZmFjZSwgYW5vdGhlciBmb3IgZHJhd2luZyB0aGUgcXVhZHMK
KyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisgICAgaGFybmVzcy5t
dXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KHRydWUsIGNvbnRleHQsIEZh
a2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6
OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9E
cmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlI
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBwYXJ0aWFsU3dhcE5vVXBkYXRlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDb250ZXh0KCkpLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIE1vY2tDb250
ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxNb2NrQ29udGV4dCo+KEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkp
KTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFybmVzcygmbW9ja0NvbnRleHQpOworCisgICAg
aGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIC8vIE9uZSBzY2lzc29yIGZvciBjbGVh
cmluZyBzdXJmYWNlLCBhbm90aGVyIGZvciBkcmF3aW5nIHRoZSBxdWFkcworICAgIGhhcm5lc3Mu
bXVzdFNldFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3Nvcigw
LCA4LCAyLCAyKTsKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVz
cy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNz
b3IoMCwgMCwgMTAsIDEwKTsKKworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhv
c3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdCh0cnVlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRo
UXVhZHM6OmNyZWF0ZSgxKSk7CisgICAgCisgICAgLy8gRHJhdyBvbmNlIHRvIG1ha2Ugc3VyZSBs
YXllciBpcyBub3QgbmV3CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1l
OworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAg
ICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3
QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgIC8vIEdlbmVyYXRlIHVwZGF0ZSBpbiBsYXllcgorICAg
IENDTGF5ZXJJbXBsKiByb290ID0gbXlIb3N0SW1wbC0+cm9vdExheWVyKCk7CisgICAgcm9vdC0+
c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMiwgMikpOworCisgICAgLy8gVGhpcyBkcmF3
IHNob3VsZCBnZW5lcmF0ZSBubyBuZXcgdWRwYXRlcworICAgIEVYUEVDVF9UUlVFKG15SG9zdElt
cGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZy
YW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgIE1v
Y2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK2NsYXNz
IFBhcnRpYWxTd2FwQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7Citw
dWJsaWM6CisgICAgV2ViU3RyaW5nIGdldFN0cmluZyhXR0MzRGVudW0gbmFtZSkKKyAgICB7Cisg
ICAgICAgIGlmIChuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKQorICAgICAg
ICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIik7Cisg
ICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgV2ViU3RyaW5nIGdl
dFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCkKKyAgICB7CisgICAgICAgIHJldHVybiBX
ZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIpOworICAgIH0KK307CisKK3N0
YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IHNldHVwTGF5ZXJzRm9yT3BhY2l0
eShib29sIHBhcnRpYWxTd2FwLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCit7
CisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJs
ZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdl
YkNvbnRleHQoYWRvcHRQdHIobmV3IFBhcnRpYWxTd2FwQ29udGV4dCgpKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0
aW5ncywgY2xpZW50KTsKKyAgICBteUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihj
b250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbXlIb3N0SW1wbC0+
c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIC8qCisgICAgICBMYXll
cnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0t
LS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAg
fCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAg
ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAg
fCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMg
MSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBncmFuZENoaWxkID0gRmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMyk7CisKKyAgICBJbnRS
ZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwg
MTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7
CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRT
aXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0
VmlzaWJsZUxheWVyUmVjdChyb290UmVjdCk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KGZh
bHNlKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkp
KTsKKworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBj
aGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgp
KSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJ
bnRTaXplKGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGls
ZC0+c2V0VmlzaWJsZUxheWVyUmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGls
ZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3Vu
ZHMoSW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQo
KSkpOworICAgIGdyYW5kQ2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoZ3JhbmRDaGlsZFJlY3Qp
OworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQu
cmVsZWFzZSgpKTsKKworICAgIG15SG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgcmV0dXJuIG15SG9zdEltcGwucmVsZWFzZSgpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29yUGFydGlhbFN3
YXApCit7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBzZXR1
cExheWVyc0Zvck9wYWNpdHkodHJ1ZSwgdGhpcyk7CisKKyAgICB7CisgICAgICAgIENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobXlIb3N0
SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAgICAgIC8vIEp1c3QgZm9yIGNvbnNp
c3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCisgICAg
ICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAgICBteUhvc3RJbXBsLT5k
aWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAvLyBWZXJpZnkgYWxsIHF1YWRzIGhh
dmUgYmVlbiBjb21wdXRlZAorICAgICAgICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nl
cy5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+
cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBh
c3Nlc1sxXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVh
ZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRl
cmlhbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIGZy
YW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgfQor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1w
dHlTY2lzc29yTm9QYXJ0aWFsU3dhcCkKK3sKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gbXlIb3N0SW1wbCA9IHNldHVwTGF5ZXJzRm9yT3BhY2l0eShmYWxzZSwgdGhpcyk7CisKKyAg
ICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAg
ICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBh
bHJlYWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwor
ICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAv
LyBWZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAorICAgICAgICBBU1NFUlRfRVEo
MlUsIGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZy
YW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRf
RVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBd
LT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1
YWQ6OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+
bWF0ZXJpYWwoKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHF1YWRzVG9GaWxsU2NyZWVuKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBt
eUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KHRydWUsIHRoaXMpOworCisgICAgLy8g
VGhpcyB3aWxsIGNhdXNlIENDTGF5ZXJUcmVlSG9zdEltcGwgdG8gYWRkIHF1YWRzIHRvIGZpbGwg
c2NyZWVuCisgICAgbXlIb3N0SW1wbC0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDI1NSwgMCwg
MCkpOworCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJh
bWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUp
KTsKKworICAgICAgICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1vc3QgaW50ZXJlc3Rp
bmcgc3R1ZmYgYWxyZWFkeSBoYXBwZW5lZAorICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJz
KGZyYW1lKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisK
KyAgICAgICAgLy8gVmVyaWZ5IGFsbCBxdWFkcyBoYXZlIGJlZW4gY29tcHV0ZWQKKyAgICAgICAg
QVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
X0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAg
ICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KCkuc2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRl
clBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9F
UShDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRM
aXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29s
aWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzFdLT5tYXRlcmlhbCgp
KTsKKyAgICB9Cit9CisKIC8vIE1ha2Ugc3VyZSB0aGF0IGNvbnRleHQgbG9zdCBub3RpZmljYXRp
b25zIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIHRyZWUuCiBjbGFzcyBDb250ZXh0TG9zdE5v
dGlmaWNhdGlvbkNoZWNrTGF5ZXIgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdC5jcHAKaW5kZXggODAzMTdhMDA4MTdkZDU2NDgzNWQ5MDJhNTQ0OTkxZWE3NzRkOTI3OC4u
YTY0OTY1ZjE2ZTJhMDU4YTgxZDU3YmZkNDFhZmUxYTU2ZDBiZGJiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3Bw
CkBAIC0yNjEsNyArMjYxLDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgcm9vdC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkpOwogICAgICAgICBt
X3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZChtX3Jvb3QuZ2V0KCkpOwogCi0gICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9
IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3Jl
bmRlclN1cmZhY2VMYXllckxpc3RJbXBsKTsKICAgICB9CiAKQEAgLTI3Nyw3ICsyODAsMTAgQEAg
cHJvdGVjdGVkOgogICAgICAgICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dENocm9taXVtLmFwcGVuZChtX3Jvb3QpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21p
dW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9t
aXVtLCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJl
Z2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxp
c3RDaHJvbWl1bSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA1Y2JlN2ZjNTRmNTJmMDMyMjAyZjY5
ODI0OGQ2ZTFkYWY3NzBhN2E2Li5jOGIwZWRhZWQxOGEyMmVkMzQ0OGQ5MWJlZjg1YTFhNjlkZmQy
ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3Vy
ZmFjZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJT
dXJmYWNlVGVzdC5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBURVNUKENDUmVuZGVyU3VyZmFjZVRl
c3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVkUXVhZFN0YXRlKQogICAg
IHJlbmRlclN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShvcmlnaW4pOwogICAgIHJlbmRlclN1
cmZhY2UtPnNldENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKICAgICByZW5kZXJTdXJmYWNlLT5z
ZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2Npc3NvclJlY3Qo
Y2xpcFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KDEpOwogCiAgICAg
T3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSByZW5kZXJTdXJmYWNl
LT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKQEAgLTExOSw3ICsxMjAsNyBAQCBURVNUKENDUmVu
ZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVkUXVh
ZFN0YXRlKQogICAgIEVYUEVDVF9FUSgzMCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9y
bSgpLm00MSgpKTsKICAgICBFWFBFQ1RfRVEoNDAsIHNoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFu
c2Zvcm0oKS5tNDIoKSk7CiAgICAgRVhQRUNUX0VRKGNvbnRlbnRSZWN0LCBzaGFyZWRRdWFkU3Rh
dGUtPmxheWVyUmVjdCgpKTsKLSAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0
ZS0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNUX0VRKGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUt
PnNjaXNzb3JSZWN0KCkpOwogICAgIEVYUEVDVF9FUSgxLCBzaGFyZWRRdWFkU3RhdGUtPm9wYWNp
dHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNoYXJlZFF1YWRTdGF0ZS0+aXNPcGFxdWUoKSk7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145444</attachid>
            <date>2012-06-02 06:36:45 -0700</date>
            <delta_ts>2012-06-02 13:34:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120602093644.patch</filename>
            <type>text/plain</type>
            <size>123844</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYThmMzBiYjgzODg2ZjY3
ZmQwMmZlZjY4Mjk3M2I1MThhMWQ1YzMyOS4uNDI3YzBjMTlhYTViOWNiNjI2MmI4NWZjMmNmZmVm
MjE0OWNhZDFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEyLTA2LTAyICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNvbXB1
dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0Zv
clJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoQ0NS
ZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2Np
c3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29yUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJlci5oOgorICAgICAgICAoQ0NSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1No
YXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJl
ZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3Nv
clJlY3QpOgorCiAyMDEyLTA2LTAyICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmVuYW1lIHRoZSBmbGV4Ym94IENTUyBwcm9wZXJ5IHZhbHVlcyBmcm9tIHN0YXJ0
IHRvIGZsZXgtc3RhcnQgYW5kIGVuZCB0byBmbGV4LWVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAzMzU2YmNkMjRmYTY4MWY0MGM2NzgyOWJmYTc5NmQ1NDhkY2NmYzRhLi5lOWM3NWVi
MzUyYmQ0ZmM0NDMyZTlhNjljMTNhMWM0MDYyMDVhMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA2LTAyICBaZWV2IExpZWJlciAgPHpsaWViZXJA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xlYW51cCBzY2lzc29yIHJlY3Qg
Y29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMgdG8gQ0NMYXllclRyZWVIb3N0SW1w
bCB1c2luZyBtb2NrIGdyYXBoaWMgY29udGV4dAorICAgICAgICB0byB2ZXJpZnkgZW5kLXRvLWVu
ZCBxdWFkIGRyYXdpbmcuCisKKyAgICAgICAgQWRkZWQgbW9yZSB0ZXN0IGNhc2VzIHRvIENDTGF5
ZXJUcmVlSG9zdENvbW1vbiB0byB2ZXJpZnkgY2xpcCBhbmQKKyAgICAgICAgc2Npc3NvciByZWN0
IGNvbXB1dGF0aW9ucy4KKworICAgICAgICAqIHRlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3Bw
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lv
blRyYWNrZXJUZXN0OjpjYWxjRHJhd0V0Yyk6CisgICAgICAgICogdGVzdHMvQ0NSZW5kZXJTdXJm
YWNlVGVzdC5jcHA6CisKIDIwMTItMDYtMDEgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU29mdHdhcmUgY29tcG9zaXRvciBpbml0aWFs
aXphdGlvbiBhbmQgYmFzZSBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggZTgwMmMzNjhj
YzFlZjg4NmRiZmZlY2JkMmM4OGMzYTFiZTBkMzExZC4uNWQ1MmY4YmM5ZmVlZDEyNDEwNjhkMTEx
MmRjYzhkOWU0Mzc0NjFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTM4LDYgKzEzOCw5IEBA
IHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0
KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0g
dmlzaWJsZUxheWVyUmVjdDsgfQogCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChj
b25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7
IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBj
b25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBv
c2l0aW9uOyB9CiAKQEAgLTMwNSw3ICszMDgsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIExheWVy
IHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKKworICAgIC8vIFVzZXMgbGF5ZXIn
cyBjb250ZW50IHNwYWNlLgogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OworCisgICAg
Ly8gRHVyaW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNo
IG5vdGhpbmcgc2hvdWxkIGJlIGRyYXduLgorICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0
byBsYXllcidzIGNsaXBSZWN0IGlmIHVzZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lz
ZQorICAgIC8vIGl0J3MgdGFyZ2V0UmVuZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgorICAgIC8v
IFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7
CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsK
ICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwpAQCAtMzQzLDEyICszNTQsMTYg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1
cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAgICBib29sIG1fZHJhd09wYWNpdHlJ
c0FuaW1hdGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50
UmVjdCBtX2NsaXBSZWN0OwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJh
bnNmb3JtOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JlZW5TcGFj
ZVRyYW5zZm9ybTsKICAgICBib29sIG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nOwogICAgIGJv
b2wgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybUlzQW5pbWF0aW5nOworCisgICAgLy8gVXNlcyB0YXJn
ZXQgc3VyZmFjZSBzcGFjZS4KICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKICAg
ICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCmluZGV4IDRkOTBjZTU2ODk0Mjc1ZmNiOGUzMGMyODhkNTJkZmFjODA2YjQ3YWQuLjky
ZTAzYTNmNzYzZjI0YjFiMDVjMjQ2MmVhNjEwYWQ1YjMzZTkzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRlclN1cmZh
Y2UgPSAwOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJm
YWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290
UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5kZXJTdXJmYWNlLCBjb25z
dCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpCiB7CiAgICAgLy8g
Tm9uLXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29udGVudHMgdG8gdHJh
bnNwYXJlbnQuIE9uIERFQlVHIGJ1aWxkcywgdGhlIHJvb3QgbGF5ZXIKICAgICAvLyBpcyBjbGVh
cmVkIHRvIGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24g
dGhlIHNjcmVlbi4gSWYgd2UKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFj
ZSwgQwogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MSwgMSkpOwogCiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCi0gICAg
ICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkp
OworICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qocm9vdFNjaXNzb3JS
ZWN0SW5DdXJyZW50U3VyZmFjZSkpOwogICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIApA
QCAtNDU0LDM2ICs0NTQsMjggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRvTm9PcCgp
CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzcykKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JS
ZWN0SW5DdXJyZW50U3VyZmFjZSkKIHsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZh
Y2UgPSByZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCk7CiAgICAgaWYgKCF1c2VSZW5kZXJTdXJm
YWNlKHJlbmRlclN1cmZhY2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlbmRlclN1
cmZhY2UocmVuZGVyU3VyZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgcmVuZGVyUGFzcy0+
c3VyZmFjZURhbWFnZVJlY3QoKSk7CisgICAgY2xlYXJSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZh
Y2UpOwogCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFk
TGlzdCgpOwogICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0
ID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9u
dEVuZCgpOyArK2l0KQotICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCksIHJlbmRlclBhc3MtPnN1
cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCkpOwogfQogCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVh
ZCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogewotICAgIEludFJl
Y3Qgc2Npc3NvclJlY3Q7Ci0gICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXAp
IHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0ID0gc3VyZmFjZURhbWFnZVJl
Y3Q7Ci0gICAgICAgIGlmICghcXVhZC0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3QocXVhZC0+Y2xpcFJlY3QoKSk7Ci0gICAgICAg
IHNjaXNzb3JSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCk7Ci0gICAg
ICAgIGlmIChzY2lzc29yUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fSBlbHNlCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gcXVhZC0+Y2xpcFJlY3QoKTsKKyAgICBJbnRS
ZWN0IHNjaXNzb3JSZWN0ID0gcXVhZC0+c2Npc3NvclJlY3QoKTsKIAorICAgIEFTU0VSVCghc2Np
c3NvclJlY3QuaXNFbXB0eSgpKTsKICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChzY2lz
c29yUmVjdCk7CisgICAgICAgIHJldHVybjsKKworICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3Nv
clJlY3QpOwogCiAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkKICAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CkBA
IC02NzYsOSArNjY4LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJT
dXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCoKIAogICAgIGRyYXdCYWNr
Z3JvdW5kRmlsdGVycyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CiAKLSAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgY2FsbCB3aGVuIHRoZSBxdWFkJ3Mgc2Npc3NvclJlY3QoKSBpcyBz
ZXQgY29ycmVjdGx5LgotICAgIGRyYXdpbmdTdXJmYWNlLT5zZXRTY2lzc29yUmVjdCh0aGlzLCBx
dWFkLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKLQogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZh
bHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBh
bmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4
dHVyZS4KICAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVh
ZC0+ZmlsdGVycygpLCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyZWZiZGIyNjBiYzM3NWZhNjNlM2MwODQ5
YjM4YjY2YTVkOWI5NjZjLi4yMGU4MTE5MzY5ZmU1ODdjOWYxMTI3MTJjMzVmM2MwMDAwOTMxYjI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNzYsNyArNzYsNyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQoKSBjb25zdCB7
IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5UXVhZDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2lu
RHJhd2luZ0ZyYW1lKENDUmVuZGVyU3VyZmFjZSogZGVmYXVsdFJlbmRlclN1cmZhY2UpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3Mq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5k
ZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNl
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCkgT1ZFUlJJ
REU7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJl
KiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CkBAIC0xMjUsNyArMTI1LDcgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0Kiwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkcmF3
UXVhZChjb25zdCBDQ0RyYXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3
Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9p
ZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwogICAg
IHZvaWQgZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
KiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3Jt
KTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBiaW5kRnJhbWVidWZm
ZXJUb1RleHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3Qp
OwogCi0gICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiwgQ0NSZW5k
ZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFt
YWdlUmVjdCk7CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiwg
Q0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiByb290
U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKIAogICAgIHZvaWQgcmVsZWFzZVJlbmRlclN1
cmZhY2VUZXh0dXJlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcApp
bmRleCA3YWI5YmEwMDg2ZTFkMjAzMmM4MzE4YmQ5NjAwMDAwMDg0YjRiYzRiLi5iN2ZlZTg3ODM1
MTIwN2MwNjBjOTc1OWY2ZTVmMWNiMjA2ZjY2NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZh
Y2VDaHJvbWl1bS5jcHAKQEAgLTMyLDggKzMyLDEyIEBACiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCisjaW5jbHVkZSA8cHVi
bGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCit1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OworCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNocm9t
aXVtKExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQpAQCAtODYsNSArOTAsMTEgQEAgYm9vbCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW06OnJlcGxpY2FIYXNNYXNrKCkgY29uc3QKICAgICByZXR1cm4g
aGFzUmVwbGljYSgpICYmIChtX21hc2tMYXllciB8fCBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCkpOwogfQogCitGbG9hdFJlY3QgUmVuZGVyU3VyZmFjZUNocm9taXVt
Ojpjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9hdFJlY3Qm
IHJvb3RTY2lzc29yUmVjdCkgY29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
bnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBtX3NjcmVlblNwYWNlVHJhbnNmb3JtLmludmVy
c2UoKTsKKyAgICByZXR1cm4gQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VT
Y3JlZW5TcGFjZVRyYW5zZm9ybSwgcm9vdFNjaXNzb3JSZWN0KTsKK30KKwogfQogI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmgKaW5kZXggZTY3MTFlZjJhNWM1MGYxNGJmZDBmOTA3ZmRlNzQ2YjU4NDM4MzZkNC4uZTZl
NjgwMGQ5M2U1ZmUwZTMxNmFkZmEwMmFhNDZlNzdiNmQ4ZmUwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVy
U3VyZmFjZUNocm9taXVtLmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAgIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQg
c2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBS
ZWN0OyB9CiAKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3Qm
IHNjaXNzb3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorCiAgICAgdm9p
ZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykg
eyBtX2ZpbHRlcnMgPSBmaWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAKQEAgLTExNSwx
MCArMTE4LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGhhc01hc2soKSBjb25zdDsKICAgICBib29s
IHJlcGxpY2FIYXNNYXNrKCkgY29uc3Q7CiAKKyAgICBGbG9hdFJlY3QgY29tcHV0ZVJvb3RTY2lz
c29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3Qp
IGNvbnN0OwogcHJpdmF0ZToKICAgICBMYXllckNocm9taXVtKiBtX293bmluZ0xheWVyOwogICAg
IExheWVyQ2hyb21pdW0qIG1fbWFza0xheWVyOwogCisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2Un
cyBzcGFjZS4KICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3NraXBzRHJh
dzsKIApAQCAtMTM0LDcgKzEzOSwxNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFj
ZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
IG1fZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5k
RmlsdGVyczsKKworICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0
IHN1cmZhY2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdp
bmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxk
IGJlIGRyYXduLgorICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBS
ZWN0IGlmIHVzZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQorICAgIC8vIGl0J3Mg
dGFyZ2V0UmVuZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgorICAgIC8vIFVzZXMgdGhlIHNwYWNl
IG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JS
ZWN0OworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fbGF5ZXJMaXN0Owog
CiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3aWxsIGNv
bnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29pbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRHJhd1F1YWQuaAppbmRleCAzODFjYmFlYWNmM2YyNTIxNzRkNTdmZGQzM2YyMDliMTU4YTFk
NTkyLi5mMmQ4OWYyNzk4NzIyNjYzMTdiN2U3NjhlNjBiMWUwZjU0NjI3Yzc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
cmF3UXVhZC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFyZWRRdWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBJbnRSZWN0JiBs
YXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJSZWN0KCk7
IH0KLSAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVk
UXVhZFN0YXRlLT5jbGlwUmVjdCgpOyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+c2Npc3NvclJlY3QoKTsgfQogICAg
IGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0
eSgpOyB9CiAgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiBibGVuZGluZywgd2hhdCBwYXJ0IG9m
IHRoZSBjb250ZW50cyBvZiB0aGlzIHF1YWQgYXJlIG9wYXF1ZT8KICAgICBJbnRSZWN0IG9wYXF1
ZVJlY3QoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA5M2FiMTc4MTg3MmJk
MzNmYzgyZDUwNmY5NWY0MzBkOWJlZjExYmIzLi40YTAzMmFlNGQ0YmIxNDVkYjZmNTdhMjhjOGRl
YTY4YzU0NDMxYTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMzgsMTAgKzEzOCw3
IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogCiBQYXNzT3du
UHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRl
KCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGxheWVyQ2xpcFJlY3Q7Ci0gICAgaWYgKHVzZXNMYXll
ckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVyQ2xpcFJlY3QgPSBjbGlwUmVjdCgpOwotICAgIHJl
dHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFuc2Zvcm0oKSwgZHJhd1RyYW5z
Zm9ybSgpLCB2aXNpYmxlTGF5ZXJSZWN0KCksIGxheWVyQ2xpcFJlY3QsIGRyYXdPcGFjaXR5KCks
IG9wYXF1ZSgpKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJh
bnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVjdCgpLCBtX3NjaXNzb3JS
ZWN0LCBkcmF3T3BhY2l0eSgpLCBvcGFxdWUoKSk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6Ondp
bGxEcmF3KENDUmVuZGVyZXIqLCBDQ0dyYXBoaWNzQ29udGV4dCopCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAppbmRleCBjZGI4YzdkNTlhMWNkMTUxYWNkNjc2ZmE4M2Q2OTdhZmM3ZDYzOTMxLi4wNDU2MjY5
NzY2Zjc2N2IwNTJhMGI5NGFlNDQ4MTIwNzcxZmNiNWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
QEAgLTE2NCw2ICsxNjQsMTAgQEAgcHVibGljOgogICAgIC8vIFVzYWdlOiBpZiB0aGlzLT51c2Vz
TGF5ZXJDbGlwcGluZygpIGlzIGZhbHNlLCB0aGVuIHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBi
ZSB1c2VkLgogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9j
bGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBt
X2NsaXBSZWN0ID0gcmVjdDsgfQorCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3QgPSByZWN0OyB9CisKICAgICBDQ1Jl
bmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Rhcmdl
dFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5k
ZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0K
IApAQCAtMjk4LDYgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgLy8gVHJhY2tzIGlmIGRyYXdpbmct
cmVsYXRlZCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0IHJlZHJhdy4KICAgICBi
b29sIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7CiAKKyAgICAvLyBVc2VzIGxheWVyJ3MgY29udGVu
dCBzcGFjZS4KICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBib29sIG1fbWFz
a3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwpAQCAtMzUyLDE3ICszNTcsMjQgQEAgcHJp
dmF0ZToKICAgICAvLyBUaGUgcmVjdCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzY2lzc29yIHdo
ZW4gdGhpcyBsYXllciBpcyBkcmF3bi4KICAgICAvLyBJbmhlcml0ZWQgYnkgdGhlIHBhcmVudCBs
YXllciBhbmQgZnVydGhlciByZXN0cmljdGVkIGlmIHRoaXMgbGF5ZXIgbWFza3MKICAgICAvLyB0
byBib3VuZHMuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJl
Y3QgbV9jbGlwUmVjdDsKIAorICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSBy
ZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBV
c2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0Owor
CiAgICAgLy8gUmVuZGVyIHN1cmZhY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuIFRoZSBs
YXllciBhbmQgaXRzIGRlc2NlbmRhbnRzCiAgICAgLy8gd2lsbCByZW5kZXIgdG8gdGhpcyBzdXJm
YWNlLgogICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+IG1fcmVuZGVyU3VyZmFjZTsKIAogICAg
IC8vIEhpZXJhcmNoaWNhbCBib3VuZGluZyByZWN0IGNvbnRhaW5pbmcgdGhlIGxheWVyIGFuZCBp
dHMgZGVzY2VuZGFudHMuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAg
IEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwogCiAgICAgLy8gUmVjdCBpbmRpY2F0aW5n
IHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0
aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgorICAgIC8v
IFVzZXMgbGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7
CiAKICAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAxNjU5ZWM1YmQ4OWEyYTUwOThkYmJjNDczMzQwOWZj
YzNkMDUxMTA5Li4xMjUxMGUyNDEyY2IyYTFjMDQ0M2Y2NmU1NTE2NDY3NmU4ZWI1NWQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTUxOCw3ICs1MTgsMTAgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIEND
VGV4dHVyZVVwZGF0ZXImIHUKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJh
bnNmb3JtOwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdzLmRl
dmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIGRldmlj
ZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9h
dFJlY3Qgcm9vdFNjaXNzb3JSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKTsK
KyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHVwZGF0ZUxpc3QsIHJvb3RTY2lzc29yUmVjdCk7CiAgICAgfQogCiAgICAgLy8gUmVz
ZXQgcGFydGlhbCB0ZXh0dXJlIHVwZGF0ZSByZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGI1YmNhYmJmMDhjNmRjMzAyMzNjN2FjM2Y2Mjk2
MzcyNjJiYzA3NGUuLjljZDAzMTYwZTJiMGJjNWE3YjY1MmU4MGI5ZjJiYWRiZDAxYmMzY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtNjcsNiArNjcs
NDMgQEAgSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0
KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2UKICAgICByZXR1cm4gbGF5ZXJSZWN0OwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
Pgorc3RhdGljIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJTY2lzc29yUmVjdChMYXllclR5cGUqIGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKK3sKKyAgICBSZW5kZXJTdXJm
YWNlVHlwZSogdGFyZ2V0U3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisK
KyAgICBGbG9hdFJlY3Qgcm9vdFNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlID0gdGFyZ2V0U3Vy
ZmFjZS0+Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uocm9vdFNjaXNzb3JS
ZWN0KTsKKyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZTsKKyAgICBpZiAobGF5ZXItPnVzZXNM
YXllckNsaXBwaW5nKCkpCisgICAgICAgIGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9v
dFNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlLCBsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgZWxz
ZQorICAgICAgICBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9uKHJvb3RTY2lzc29yUmVjdElu
VGFyZ2V0U3VyZmFjZSwgdGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3N0YXRpYyBJbnRSZWN0
IGNhbGN1bGF0ZVN1cmZhY2VTY2lzc29yUmVjdChMYXllclR5cGUqIGxheWVyLCBjb25zdCBGbG9h
dFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKK3sKKyAgICBMYXllclR5cGUqIHBhcmVudExheWVyID0g
bGF5ZXItPnBhcmVudCgpOworICAgIFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRTdXJmYWNlID0g
cGFyZW50TGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKKyAgICBBU1NFUlQodGFyZ2V0U3Vy
ZmFjZSk7CisKKyAgICBSZW5kZXJTdXJmYWNlVHlwZSogY3VycmVudFN1cmZhY2UgPSBsYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgIEFTU0VSVChjdXJyZW50U3VyZmFjZSk7CisKKyAgICBGbG9h
dFJlY3QgY2xpcFJlY3QgPSBjdXJyZW50U3VyZmFjZS0+Y2xpcFJlY3QoKTsKKworICAgIC8vIEZv
ciBzdXJmYWNlcywgZW1wdHkgY2xpcFJlY3QgbWVhbnMgdGhlIHNhbWUgYXMgQ0NMYXllckltcGw6
OnVzZXNMYXllckNsaXBwaW5nIGJlaW5nIGZhbHNlCisgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgY2xpcFJlY3QgPSBpbnRlcnNlY3Rpb24odGFyZ2V0U3VyZmFjZS0+Y29udGVu
dFJlY3QoKSwgY3VycmVudFN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisKKyAgICBG
bG9hdFJlY3Qgcm9vdFNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlID0gdGFyZ2V0U3VyZmFjZS0+
Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uocm9vdFNjaXNzb3JSZWN0KTsK
KworICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9uKHJvb3RTY2lzc29y
UmVjdEluVGFyZ2V0U3VyZmFjZSwgY2xpcFJlY3QpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBBbmREYW1hZ2UpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBz
dGF0aWMgaW5saW5lIGJvb2wgbGF5ZXJJc0luRXhpc3RpbmczRFJlbmRlcmluZ0NvbnRleHQoTGF5
ZXJUeXBlKiBsYXllcikKIHsKQEAgLTI4NCw3ICszMjEsNyBAQCBzdGF0aWMgYm9vbCBzdWJ0cmVl
U2hvdWxkUmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwgYm9vbCBheGlz
QWxpZwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhl
IGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1h
dGlvbnMsIGNsaXBSZWN0cywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgotc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiBy
b290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBSZW5kZXJT
dXJmYWNlVHlwZSogbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LCBMYXllclNvcnRlciog
bGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3N0YXRpYyBib29sIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5
ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBSZW5kZXJTdXJmYWNl
VHlwZSogbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LCBMYXllclNvcnRlciogbGF5ZXJT
b3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1
dGVzIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9ucyByZWN1cnNpdmVseSBmb3IgdGhpcwog
ICAgIC8vIGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLiBJdCBhbHNvIGNvbXB1dGVzIHRo
ZSBhcHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMuCkBAIC01NzIsNyArNjA5LDcgQEAgc3RhdGlj
IGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJU
eXBlKiBsYXllciwgTGF5ZXIKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNo
aWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxheWVy
LT5jaGlsZHJlbigpW2ldLmdldCgpOwotICAgICAgICBib29sIGRyYXdzQ29udGVudCA9IGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVyVHlwZSwgTGF5ZXJM
aXN0LCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1
YmxheWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92
ZXNQaXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRl
ciwgbWF4VGV4dHVyZVNpemUpOworICAgICAgICBib29sIGRyYXdzQ29udGVudCA9IGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZh
Y2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgsIG5l
eHRIaWVyYXJjaHlNYXRyaXgsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6
ZSk7CiAKICAgICAgICAgaWYgKGRyYXdzQ29udGVudCkgewogICAgICAgICAgICAgaWYgKGNoaWxk
LT5yZW5kZXJTdXJmYWNlKCkpIHsKQEAgLTY5Myw5ICs3MzAsOSBAQCBzdGF0aWMgYm9vbCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVy
LCBMYXllcgogCiAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0
aW9uIHRvIHNldCB2aXNpYmlsaXR5IHJlY3RzIG9uIGEgc2Vjb25kCiAvLyB0cmVlIHBhc3MsIHJl
dmlzZSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KCkgc28gdGhhdCB0aGlzIGNhbiBiZSBkb25l
IGluIGEgc2luZ2xlCi0vLyBwYXNzIGluc2lkZSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHlJbnRlcm5hbDw+KCkuCisvLyBwYXNzIGluc2lkZSBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0ludGVybmFsPD4oKS4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
TGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXN0YXRpYyB2b2lkIHdhbGtM
YXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCitzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzSW50ZXJuYWwoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBj
b25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKIHsKICAgICAvLyBVc2UgQmFja1RvRnJv
bnQgc2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBlbmRlbnQuCiAgICAg
dHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZh
Y2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJh
dG9yVHlwZTsKQEAgLTcwNiwxOSArNzQzLDM0IEBAIHN0YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRD
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhCiAg
ICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KCppdCk7CiAgICAgICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxl
TGF5ZXJSZWN0KTsKICAgICAgICAgfQorICAgICAgICBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigp
KSB7CisgICAgICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlTGF5ZXJTY2lz
c29yUmVjdDxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPigqaXQsIHJvb3RTY2lzc29yUmVj
dCk7CisgICAgICAgICAgICBpdC0+c2V0U2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAg
ICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsK
KyAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVTdXJmYWNlU2Npc3Nv
clJlY3Q8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4oKml0LCByb290U2Npc3NvclJlY3Qp
OworICAgICAgICAgICAgaXQtPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nv
clJlY3QpOworICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIGxh
eWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGll
cmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBp
bnQgbWF4VGV4dHVyZVNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RM
YXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3sKKyAg
ICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyQ2hyb21pdW0s
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2
b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgs
IDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNpemUp
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMoQ0NMYXllckltcGwqIGxheWVyLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5
ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCit7CisgICAgV2ViQ29y
ZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPEND
TGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RM
YXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBsYXllckxpc3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7Ci0gICAgV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZv
aWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
MCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7
Ci0gICAgd2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzPExheWVyQ2hyb21p
dW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVt
PihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RT
Y2lzc29yUmVjdCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIGxheWVyLCBDQ0xheWVySW1w
bCogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVy
SW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4
dHVyZVNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7Ci0gICAgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5
ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotICAgIHdh
bGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxDQ0xheWVySW1wbCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsPENDTGF5ZXJJbXBs
LCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlPihyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290U2Npc3NvclJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDA1ODVhZmY0ZmI3Yzhl
ZjY0NmJhNjVhNGNlZjJjNjVkNTgyZmVlYjEuLmY4MDQ1MTYxN2RkMjVmYjE0Y2YxMWZhNmVkYWU5
NzQ5YWUyNWQ3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBA
IC00MSw4ICs0MSwxMSBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21tb24gewogcHVibGljOgog
ICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRh
cmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9t
aXVtKiByb290TGF5ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
cmVudE1hdHJpeCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhp
ZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwg
aW50IG1heFRleHR1cmVTaXplKTsKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZl
Y3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsK
KyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiwg
TGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBs
YXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3Rv
cjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKKwor
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9v
dFNjaXNzb3JSZWN0KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNU
b1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDdkODNkMjA3ZGM2OTU0MTUyOWMx
MTk4YWFkMzE5ZWVjM2JhODc4MjUuLjJjY2JmMjIzYTYxMjYzNWQ1NjA2YTE3Yjc1MzBlODc0YTM4
ZjE2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgi
CisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUgImNjL0NDUGFnZVNjYWxlQW5p
bWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNs
dWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC0yMzAsMjYgKzIzMSw2IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciwKICAgICB9CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5T
dXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvYXRS
ZWN0JiByb290RGFtYWdlUmVjdCkKLXsKLSAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7
Ci0gICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBh
cyB0aGUgZGFtYWdlIGZvcgotICAgIC8vIGFsbCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZl
IHRyYW5zZm9ybXMuCi0gICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNw
YWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCk7Ci0gICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhhc1BlcnNw
ZWN0aXZlKCkpIHsKLSAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlvbnMgZG8gbm90IHBs
YXkgbmljZSB3aXRoIG1hcFJlY3Qgb2YKLSAgICAgICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm1zLiBJ
biB0aGlzIHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRvCi0gICAgICAgIC8vIGp1c3QgcmVk
cmF3IHRoZSBlbnRpcmUgc3VyZmFjZS4KLSAgICAgICAgLy8gRklYTUU6IHVzZSBjYWxjdWxhdGVW
aXNpYmxlUmVjdCB0byBoYW5kbGUgcHJvamVjdGlvbnMuCi0gICAgICAgIENDUmVuZGVyU3VyZmFj
ZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwot
ICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNj
cmVlblNwYWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAg
ICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBS
ZWN0KHJvb3REYW1hZ2VSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0
OwotfQotCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VM
YXllckxpc3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQVNT
RVJUKHJlbmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0eSgpKTsKQEAgLTI2OCw3ICsyNDksMTYg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmlj
ZVNjYWxlVHJhbnNmb3JtOwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3Nl
dHRpbmdzLmRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobV9yb290TGF5ZXJJbXBsLmdl
dCgpLCBtX3Jvb3RMYXllckltcGwuZ2V0KCksIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJT
dXJmYWNlKCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fcm9vdExh
eWVySW1wbC5nZXQoKSwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+bGF5
ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4
VGV4dHVyZVNpemUpOworCisgICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
dXNpbmdQYXJ0aWFsU3dhcCB8fCBzZXR0aW5ncygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCisg
ICAgICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQo
KSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgICAgIG1fcm9vdFNjaXNzb3JSZWN0ID0g
bV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVu
dERhbWFnZVJlY3QoKTsKKworICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICAgICAgbV9yb290U2Npc3NvclJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpOworICAgIAorICAg
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9yb290U2Npc3NvclJlY3QpOwogICAgIH0KIH0K
IApAQCAtMjgwLDkgKzI3MCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICBUUkFD
RV9FVkVOVDEoIndlYmtpdCIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQ
YXNzZXMiLCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkiLCBzdGF0aWNfY2FzdDxsb25n
IGxvbmcgdW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKSk7CiAKLSAgICBp
ZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgfHwgc2V0dGlu
Z3MoKS5zaG93U3VyZmFjZURhbWFnZVJlY3RzKQotICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1
cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0g
ICAgbV9yb290RGFtYWdlUmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgbV9yb290TGF5ZXJJbXBs
LT5zZXRTY2lzc29yUmVjdChlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdFNjaXNzb3JSZWN0KSk7CiAK
ICAgICAvLyBDcmVhdGUgdGhlIHJlbmRlciBwYXNzZXMgaW4gZGVwZW5kZW5jeSBvcmRlci4KICAg
ICBIYXNoTWFwPENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyUGFzcyo+IHN1cmZhY2VQYXNzTWFw
OwpAQCAtMjkxLDI0ICsyNzksMTIgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAg
Q0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CiAKICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVu
ZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOwotCi0gICAgICAgIEZsb2F0UmVjdCBzdXJm
YWNlRGFtYWdlUmVjdDsKLSAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51
c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBkYW1hZ2VJ
blN1cmZhY2VTcGFjZShyZW5kZXJTdXJmYWNlTGF5ZXIsIG1fcm9vdERhbWFnZVJlY3QpOwotICAg
ICAgICBwYXNzLT5zZXRTdXJmYWNlRGFtYWdlUmVjdChzdXJmYWNlRGFtYWdlUmVjdCk7Ci0KICAg
ICAgICAgc3VyZmFjZVBhc3NNYXAuYWRkKHJlbmRlclN1cmZhY2UsIHBhc3MuZ2V0KCkpOwogICAg
ICAgICBwYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBJbnRSZWN0
IHNjaXNzb3JSZWN0OwotICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQ
YXJ0aWFsU3dhcCkKLSAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcm9v
dERhbWFnZVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc2Npc3NvclJlY3QgPSBJbnRSZWN0KElu
dFBvaW50KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKTsKLQogICAgIGJvb2wgcmVjb3JkTWV0cmlj
c0ZvckZyYW1lID0gdHJ1ZTsgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3
aGVuIGFib3V0OnRyYWNpbmcgaXMgb2ZmLgotICAgIENDT2NjbHVzaW9uVHJhY2tlckltcGwgb2Nj
bHVzaW9uVHJhY2tlcihzY2lzc29yUmVjdCwgcmVjb3JkTWV0cmljc0ZvckZyYW1lKTsKKyAgICBD
Q09jY2x1c2lvblRyYWNrZXJJbXBsIG9jY2x1c2lvblRyYWNrZXIoZW5jbG9zaW5nSW50UmVjdCht
X3Jvb3RTY2lzc29yUmVjdCksIHJlY29yZE1ldHJpY3NGb3JGcmFtZSk7CiAgICAgb2NjbHVzaW9u
VHJhY2tlci5zZXRNaW5pbXVtVHJhY2tpbmdTaXplKENDT2NjbHVzaW9uVHJhY2tlckltcGw6OnBy
ZWZlcnJlZE1pbmltdW1UcmFja2luZ1NpemUoKSk7CiAKICAgICAvLyBBZGQgcXVhZHMgdG8gdGhl
IFJlbmRlciBwYXNzZXMgaW4gRnJvbnRUb0JhY2sgb3JkZXIgdG8gYWxsb3cgZm9yIHRlc3Rpbmcg
b2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcgZHVyaW5nIHRoZSB0cmVlIHdhbGsuCkBA
IC0zMjcsOSArMzAzLDkgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKIAogICAgICAgICBvY2Ns
dXNpb25UcmFja2VyLmVudGVyTGF5ZXIoaXQpOwogCi0gICAgICAgIGlmIChpdC5yZXByZXNlbnRz
Q29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBpZiAoaXQucmVwcmVzZW50c0Nv
bnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSAmJiAhaXQtPnJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvclJlbmRl
clN1cmZhY2VMYXllcigqaXQsICZvY2NsdXNpb25UcmFja2VyKTsKLSAgICAgICAgZWxzZSBpZiAo
aXQucmVwcmVzZW50c0l0c2VsZigpICYmICFpdC0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHko
KSkgeworICAgICAgICBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNp
YmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpICYmICAhaXQtPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBpdC0+d2lsbERyYXcobV9sYXllclJlbmRlcmVyLmdldCgpLCBjb250
ZXh0KCkpOwogICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcigqaXQsICZvY2Ns
dXNpb25UcmFja2VyLCBoYWRNaXNzaW5nVGlsZXMpOwogICAgICAgICB9CkBAIC00MzEsOCArNDA3
LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURh
dGEmIGZyYW1lKQogICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVu
dFRpbWUoKSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZShtX3Jvb3RM
YXllckltcGwtPnJlbmRlclN1cmZhY2UoKSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5kcmF3UmVuZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXNbaV0uZ2V0KCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQo
KTsKKworICAgICAgICBGbG9hdFJlY3Qgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSA9
IHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3Vy
cmVudFN1cmZhY2UobV9yb290U2Npc3NvclJlY3QpOworICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmRyYXdSZW5kZXJQYXNzKHJlbmRlclBhc3MsIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZh
Y2UpOworICAgIH0KIAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0dGlu
Z3MoKSkpCiAgICAgICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVjdHNGb3JDdXJy
ZW50RnJhbWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBzZXR0aW5ncygpKTsKQEAgLTQ4NSw3ICs0NjUsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnN3YXBCdWZmZXJzKCkKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKIAogICAg
IG1fZnBzQ291bnRlci0+bWFya0VuZE9mRnJhbWUoKTsKLSAgICByZXR1cm4gbV9sYXllclJlbmRl
cmVyLT5zd2FwQnVmZmVycyhlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdERhbWFnZVJlY3QpKTsKKyAg
ICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5zd2FwQnVmZmVycyhlbmNsb3NpbmdJbnRSZWN0KG1f
cm9vdFNjaXNzb3JSZWN0KSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZGlkTG9z
ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDkwYWEw
ZmIwNjg1NjFmNjkyMDljYzQ2YjkzYTViZmQ3YWI2MzliZWQuLmM3NDBhNjYyMDJmNGJkMGYxYjNk
MDYwNmQzYWViYTk0ODlkMjAwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKQEAgLTI0MSw3ICsyNDEsNyBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllclNvcnRlciBtX2xh
eWVyU29ydGVyOwogCi0gICAgRmxvYXRSZWN0IG1fcm9vdERhbWFnZVJlY3Q7CisgICAgRmxvYXRS
ZWN0IG1fcm9vdFNjaXNzb3JSZWN0OwogCiAgICAgT3duUHRyPENDRnJhbWVSYXRlQ291bnRlcj4g
bV9mcHNDb3VudGVyOwogICAgIE93blB0cjxDQ0RlYnVnUmVjdEhpc3Rvcnk+IG1fZGVidWdSZWN0
SGlzdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IGZkODk5OTBjNzE5ODE2MDY3
NmE3NmY1YmVkMjE5NmZmN2I5NmVjY2UuLjVkMzQ3MzU5MDJjYTliZTYxMGFjM2YzNWY2YTE5OTA1
MzM3MTljYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2
b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVyLCBDQ09jY2x1cwogCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBz
aGFyZWRRdWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBi
b29sIGlzUmVwbGljYSA9IGZhbHNlOwotICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxs
ZXIsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBzdXJmYWNlRGFtYWdlUmVjdCgp
KTsKKyAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRRdWFkU3RhdGUu
Z2V0KCksIGlzUmVwbGljYSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFy
ZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAogICAgIGlmICghc3VyZmFjZS0+aGFzUmVwbGljYSgp
KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5k
ZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ09jY2x1cwogICAgIC8vIEFkZCBy
ZXBsaWNhIGFmdGVyIHRoZSBzdXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0aGUgc3Vy
ZmFjZS4KICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJlcGxpY2FTaGFyZWRRdWFkU3Rh
dGUgPSBzdXJmYWNlLT5jcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCk7CiAgICAgaXNSZXBs
aWNhID0gdHJ1ZTsKLSAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCByZXBsaWNh
U2hhcmVkUXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIHN1cmZhY2VEYW1hZ2VSZWN0KCkpOwor
ICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3Rh
dGUuZ2V0KCksIGlzUmVwbGljYSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChy
ZXBsaWNhU2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
LmgKaW5kZXggNDUyYTg2MTBmNWE5ZGJjMDIxNGE4Y2RkYmZmNmYwMjU0ZmVjZGEyNi4uMDM1OGVl
YzkxOGI4ZjEwODJkMmViNDVmMGQ4N2JkOWE4OTQ2MzM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
LmgKQEAgLTYyLDE2ICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVh
ZExpc3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9CiAKLSAg
ICB2b2lkIHNldFN1cmZhY2VEYW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFn
ZVJlY3QpIHsgbV9zdXJmYWNlRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0gICAg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vy
ZmFjZURhbWFnZVJlY3Q7IH0KLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1JlbmRlclBhc3Mo
Q0NSZW5kZXJTdXJmYWNlKik7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFj
ZTsKICAgICBDQ1F1YWRMaXN0IG1fcXVhZExpc3Q7CiAgICAgVmVjdG9yPE93blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Q7Ci0gICAgRmxvYXRSZWN0IG1fc3Vy
ZmFjZURhbWFnZVJlY3Q7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNz
PiA+IENDUmVuZGVyUGFzc0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRl
eCA5NDNjNTNmYmYwODI3ZTEyNmE3YjYyZWUxOGQ4NmJmM2QyOGY1NzhjLi5kNjJmNWY5ZGIzNmIx
NjZhODcyZTg4OTcwNDg1OThiNzZkODRiMGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5jcHAKQEAgLTM3LDExICszNywxNSBAQAogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5o
IgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUgImNjL0ND
UXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3Vz
aW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJXaWR0aCA9IDI7CkBAIC0x
MzgsMjAgKzE0Miw2IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZEJhY2tncm91bmRU
ZXh0dXJlKCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNrZ3JvdW5kVGV4dHVyZSAmJiBtX2JhY2tn
cm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNWYWxp
ZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwogfQogCi12
b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSBjb25z
dAotewotICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5w
YXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRp
ZXMoKS51c2luZ1BhcnRpYWxTd2FwKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdl
UmVjdCA9IG1fY2xpcFJlY3Q7Ci0gICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChz
dXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1Jl
Y3QoZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCkpOwotICAgIH0gZWxzZSBpZiAo
bGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAg
bGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VE
YW1hZ2VSZWN0KSk7Ci0gICAgZWxzZSBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9v
d25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVy
UmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QobV9jbGlwUmVjdCk7Ci0gICAgZWxzZQotICAgICAg
ICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCkt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotfQotCiBTdHJpbmcg
Q0NSZW5kZXJTdXJmYWNlOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIlJlbmRlclN1cmZhY2UoaWQ9JWksb3duZXI9JXMpIiwgbV9vd25pbmdMYXllci0+aWQoKSwg
bV9vd25pbmdMYXllci0+ZGVidWdOYW1lKCkudXRmOCgpLmRhdGEoKSk7CkBAIC0yNTEsMTYgKzI0
MSwyMiBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlG
cm9tRGVzY2VuZGFudCgpIGNvbnN0CiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1Jl
bmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBp
c09wYXF1ZSA9IGZhbHNlOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9y
aWdpblRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0
KCksIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3Rh
dGU6OmNyZWF0ZShvcmlnaW5UcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVj
dCgpLCBtX3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKIFBhc3NP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNo
YXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAg
IHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0o
KSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJh
d09wYWNpdHkoKSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29u
dGVudFJlY3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOworfQor
CitGbG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJy
ZW50U3VyZmFjZShjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgY29uc3QKK3sKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBt
X3NjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICByZXR1cm4gQ0NNYXRoVXRpbDo6
cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSwgcm9vdFNjaXNz
b3JSZWN0KTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1
bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wg
Zm9yUmVwbGljYSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgQ0NS
ZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sIGZvclJlcGxpY2EpCiB7CiAgICAgQVNT
RVJUKCFmb3JSZXBsaWNhIHx8IGhhc1JlcGxpY2EoKSk7CiAKQEAgLTI5MCw3ICsyODYsNyBAQCB2
b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYQogCiAgICAgaW50IG1hc2tUZXh0dXJlSWQgPSBtYXNrTGF5
ZXIgPyBtYXNrTGF5ZXItPmNvbnRlbnRzVGV4dHVyZUlkKCkgOiAwOwogCi0gICAgcXVhZExpc3Qu
YXBwZW5kU3VyZmFjZShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZSwgY29udGVudFJlY3QoKSwgbV9vd25pbmdMYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGZv
clJlcGxpY2EsIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCkp
OworICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNy
ZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIG1fb3duaW5nTGF5ZXIsIGZvclJl
cGxpY2EsIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCkpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDg1NWZjY2U3ZTQzNTNiOGRk
ZWQ1MWRlZTBlZWQwYzQwMDM4MmExNmUuLmM0YmI5OTk2ZjlkZDg3YmU4ZDA1OTA4NWMzNzk0NDFm
MzA5MWE5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC02MCw4ICs2MCw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwogICAgIGJvb2wg
aGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRTY2lzc29y
UmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0KSBjb25zdDsKLQogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgdm9pZCBkdW1w
U3VyZmFjZShUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKQEAgLTExMiw2ICsxMTAs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAK
KyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1f
c2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRDb250
ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CiAKQEAgLTEzOCwxMiArMTM5LDEzIEBA
IHB1YmxpYzoKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGVTaGFyZWRR
dWFkU3RhdGUoKSBjb25zdDsKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVh
dGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZSBzdXJmYWNlRGFtYWdlUmVjdCBwYXJhbWV0ZXIgd2hlbiB0aGUgdmFsdWUgaXMgcmVtb3Zl
ZCBmcm9tIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkLgotICAgIHZvaWQgYXBwZW5kUXVhZHMoQ0NR
dWFkQ3VsbGVyJiwgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEZs
b2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFk
Q3VsbGVyJiwgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EpOworICAgIEZsb2F0
UmVjdCBjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9hdFJl
Y3QmIHJvb3RTY2lzc29yUmVjdCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllckltcGwq
IG1fb3duaW5nTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRoaXMgc3VyZmFjZSdzIHNwYWNlLgogICAg
IEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdl
ZDsKIApAQCAtMTYyLDcgKzE2NCwxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFj
ZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
IG1fZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5k
RmlsdGVyczsKKworICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0
IHN1cmZhY2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdp
bmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxk
IGJlIGRyYXduLgorICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0
IHN1cmZhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAgVmVjdG9yPENDTGF5
ZXJJbXBsKj4gbV9sYXllckxpc3Q7CiAKICAgICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJn
ZXQgc3VyZmFjZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNl
LCBhbmQgdGhhdCBpcyBnb2luZwpAQCAtMTcxLDkgKzE4MCw2IEBAIHByaXZhdGU6CiAKICAgICBP
d25QdHI8Q0NEYW1hZ2VUcmFja2VyPiBtX2RhbWFnZVRyYWNrZXI7CiAKLSAgICAvLyBTdG9yZWQg
aW4gdGhlICJzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Ig
c2Npc3NvcmluZy4KLSAgICBGbG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwotCiAgICAgLy8gRm9yIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnMKICAgICBpbnQgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJ
bmRleEhpc3Rvcnk7CiAgICAgaW50IG1fY3VycmVudExheWVySW5kZXhIaXN0b3J5OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCmluZGV4IGRmMDBjMGUwZmEz
NjU2MjFhMzY2M2JjMjk2NmYyMzdjM2I3NWFiNWYuLjU3NDIzODJmNjYzN2JlMTlkYmFjMzEwNjhh
MTBiOTE4OWUxOWNlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5jcHAKQEAgLTI5LDE1ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
OjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3Qg
SW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBz
dXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBi
YWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKK1Bhc3NPd25QdHI8Q0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVh
ZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRT
dGF0ZSwgcXVhZFJlY3QsIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNhLCBmaWx0
ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCkpOworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVj
dCwgbGF5ZXIsIGlzUmVwbGljYSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0
dXJlSWQpKTsKIH0KIAotQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURy
YXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFj
a2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCitDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
IHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBs
YXllciwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmls
dGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVh
ZFN0YXRlLCBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFkUmVjdCkKICAgICAsIG1fbGF5
ZXIobGF5ZXIpCi0gICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KQog
ICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNhKQogICAgICwgbV9maWx0ZXJzKGZpbHRlcnMpCiAg
ICAgLCBtX2JhY2tncm91bmRGaWx0ZXJzKGJhY2tncm91bmRGaWx0ZXJzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKaW5kZXggMGEwMTI4MWZhNGY2OWRlMmNkNmQy
OTFmZjFhNjE2YjY5NjdiOTRiNi4uZWRhZWUyNDE5NjgwNzI0MjdlOTc3NjM5OGI0NjRkMjVkYWY3
NTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCkBAIC0z
NywyNCArMzcsMTkgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSos
IGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3Vu
ZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsK
IAogICAgIENDTGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAg
ICBib29sIGlzUmVwbGljYSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CiAgICAgdW5z
aWduZWQgbWFza1RleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVJZDsgfQog
Ci0gICAgLy8gVGhlIHN1cmZhY2UgZGFtYWdlIHJlY3QgZm9yIHRoZSB0YXJnZXQgc3VyZmFjZSB0
aGlzIHF1YWQgZHJhd3MgaW50by4KLSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCBv
bmNlIHJlbmRlciBzdXJmYWNlcyBnZXQgdGhlaXIgb3duIGxheWVyIHR5cGUuCi0gICAgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURh
bWFnZVJlY3Q7IH0KLQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQogICAgIGNvbnN0IFdlYktpdDo6V2Vi
RmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmRGaWx0ZXJzOyB9CiAKIHByaXZhdGU6Ci0gICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwq
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVy
ZUlkKTsKKyAgICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQp
OwogCiAgICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7Ci0gICAgRmxvYXRSZWN0IG1fc3VyZmFjZURh
bWFnZVJlY3Q7CiAgICAgYm9vbCBtX2lzUmVwbGljYTsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2Jh
Y2tncm91bmRGaWx0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCmluZGV4IDNhNDU1MTU0MmE2MTg2M2Ri
YzdiYWY0NDZhN2RkYjU5NGQ5M2FkOGUuLmExYWEzM2Y2YjYxZjM3MmZjZTM3NjE0NTRjNzFhOWUy
ODNmMjc4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHdpbmRvd01hdHJpeCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2luZG93TWF0cml4OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5EcmF3aW5nRnJhbWUoQ0NSZW5kZXJTdXJmYWNlKiBkZWZhdWx0UmVuZGVyU3VyZmFjZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyos
IGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYg
aHVkU2l6ZSkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCmluZGV4IDNm
MjgzN2UwNTIwYmY4NDZiNDczZWExZTczODcxNWY2ZTgwOTYwM2YuLjUzNmIzOTg2N2Q1MDIyMDVi
MTIyNzk3ZDBiMTM1YmFhNjNlYzg0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0
ZS5jcHAKQEAgLTMxLDE2ICszMSwxNiBAQCB1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXll
clRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlw
UmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCitQYXNzT3duUHRyPENDU2hhcmVkUXVh
ZFN0YXRlPiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5
ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Np
c3NvclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NTaGFyZWRRdWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0s
IGxheWVyUmVjdCwgY2xpcFJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NTaGFyZWRRdWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0s
IGxheWVyUmVjdCwgc2Npc3NvclJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOwogfQogCi1DQ1NoYXJl
ZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRy
YW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCitDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFy
ZWRRdWFkU3RhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0s
IGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0
eSwgYm9vbCBvcGFxdWUpCiAgICAgOiBtX3F1YWRUcmFuc2Zvcm0ocXVhZFRyYW5zZm9ybSkKICAg
ICAsIG1fbGF5ZXJUcmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pCiAgICAgLCBtX2xheWVyUmVjdChs
YXllclJlY3QpCi0gICAgLCBtX2NsaXBSZWN0KGNsaXBSZWN0KQorICAgICwgbV9zY2lzc29yUmVj
dChzY2lzc29yUmVjdCkKICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQogICAgICwgbV9vcGFxdWUo
b3BhcXVlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKaW5kZXggYTE0YjE3ZGFh
Y2YxMGM3YjljNTkzYTUzMGEyYTI2YmI1ODUxMTU5OS4uNDU0MGEwNmY4NGVlNTJkZmFjNWRlMzU2
MDQ4ZWJiMThjNThkYjcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC0z
NiwyNyArMzYsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NTaGFyZWRRdWFkU3Rh
dGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDU2hhcmVkUXVhZFN0YXRlKTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBi
b29sIG9wYXF1ZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNy
ZWF0ZShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3Jt
LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwg
Y29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxv
YXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IHF1
YWRzIGluIGEgQ0NEcmF3UXVhZCBzaG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KICAgICBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9xdWFkVHJhbnNmb3JtOyB9CiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IGxh
eWVyUmVjdCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclRyYW5zZm9ybTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9Ci0gICAgLy8gVXNhZ2U6IGlmIGNsaXBSZWN0IGlzIGVt
cHR5LCB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4KLSAgICBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KKyAgICBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KIAogICAg
IGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICBib29sIGlz
T3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KICAgICBib29sIGlzTGF5ZXJBeGlz
QWxpZ25lZEludFJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1NoYXJlZFF1YWRTdGF0
ZShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3Bh
Y2l0eSwgYm9vbCBvcGFxdWUpOworICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXll
clJlY3QsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9w
YXF1ZSk7CiAKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcXVhZFRyYW5z
Zm9ybTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGF5ZXJUcmFuc2Zv
cm07CiAgICAgSW50UmVjdCBtX2xheWVyUmVjdDsKLSAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Cisg
ICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBib29s
IG1fb3BhcXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
RGFtYWdlVHJhY2tlclRlc3QuY3BwCmluZGV4IDU2ZDg1ZmFmYTlmZDdiOWFjN2YyZjI3MjhkNmNh
ZjY3Yjc5NmFiMTMuLjA4ZWEwMzUyOGNiNDhlZGI1MzU1MWQ3OGZjNTdmMTFmM2E2YzJlZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJU
ZXN0LmNwcApAQCAtNTgsNyArNTgsOCBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xheQogCiAgICAg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOwogICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHJvb3QpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCiB2
b2lkIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJvb3QpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcAppbmRl
eCAxMDVjNzE4NmU0Yzk0MzVlODllYjMzMGNhMjZjOTAxOWIyZDI1NTI1Li41ZmM2MjVmMjIxOTAx
N2E0OGRjMDE2NjNlZTdlZWIzNmRjZDI4YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTE0MCwxMCArMTQwLDEx
IEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgc2ltcGxlVHJlZSkKICAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgpLCBy
b290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXll
ckxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwg
LTEsIDEpOwpAQCAtMTg3LDEwICsxODgsMTEgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBj
b21wbGV4VHJlZSkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJM
aXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQo
KSwgcm9vdExheWVyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsK
IAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
RVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOwpAQCAtMjQ2LDEwICsyNDgsMTEgQEAg
VEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFjZSkKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVy
LmdldCgpLCByb290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBsYXllckxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RM
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNr
VG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RM
YXllciwgMCwgLTEsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggZmNlOTA0NmM3ZWIwYzUz
Njg4NzliNzI3OWVmY2RhYzZkNzhmZWFjZi4uMWQwNjlhNWJlM2FiNTQ5ZjBkZjE4NjE5MmRiYmVl
OTk1NmM4M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0zMSw3ICszMSwxMiBAQAogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5j
bHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgi
CiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CkBA
IC01OSw3ICs2NCw4IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVtbXlSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAK
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgoY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKQEAgLTE3NSw3ICsxODEsNyBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikK
ICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0LCBsYXll
ci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDc6IFZlcmlmeSB0aGF0
IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0uCi0gICAgLy8gICAg
ICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcworICAgIC8vICAg
ICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwogICAgIC8vICAgICAgICAgc3RpbGwg
d29ydGggdGVzdGluZyB0byBkZXRlY3QgYWNjaWRlbnRhbCByZWdyZXNzaW9ucy4KICAgICBleHBl
Y3RlZFJlc3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxh
eWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CiAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50KDUuMGYsIDEuMmYp
LCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKQEAgLTMxOCw2ICszMjQsNTU4IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1
cmZhY2UpCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JS
ZWN0Tm9DbGlwKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09u
SW1wbFRocmVhZDsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93
czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAg
fCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICst
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAg
ICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNl
cworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgzKTsKKworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOwor
ICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5k
Q2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBy
b290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7
CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNp
emUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5z
ZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qu
d2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0
LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKElu
dFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsK
KyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1w
bCogY2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0
ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5y
ZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBW
ZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7CisgICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisKKyAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCBy
b290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsK
KworICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RS
VUUoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCksIDJVKTsKKyAgICAKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisKKyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxs
IGl0cyBjaGlsZHJlbidzIGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3Qo
KSwgSW50UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0
aCgpLCBncmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAg
IEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKKworICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFj
ZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBBU1NFUlRf
RkFMU0Uocm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxk
UHRyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0
ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUg
c2NyZWVuCisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisK
KyAgICAvLyBjaGlsZCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBhIGNsaXAgcmVjdCwgdGhlcmVmb3Jl
IGl0IHdpbGwgYmUgY29tcHV0ZWQgYXMgaW50ZXJzZWN0aW9uCisgICAgLy8gYmV0d2VlbiByb290
IHN1cmZhY2UncyBjb250ZW50cmVjdCBhbmQgY2hpbGQgc3VyZmFjZSdzIGRyYXdhYmxlIGNvbnRl
bnQgcmVjdC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpLCByb290
UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJl
Y3QueSgpKSk7CisKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290UmVjdCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBi
dXQgY2hpbGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBp
dCBoYXMgYm91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJl
bgorICAgIC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Np
c3NvciByZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIGNoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwgaGF2ZSB0aGUg
c2FtZSBzY2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFjZQorICAgIC8vIG9m
IGl0cyBvd24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVp
Z2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisgICAg
cm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBzY2lz
c29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
ICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRoaW4g
Y2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFy
ZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8v
IEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVD
VF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290
RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBs
YXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKwor
ICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBk
aWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsK
KworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBp
dHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdy
YW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lk
dGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5
b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29y
cyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAg
ICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBF
WFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwg
cm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0
aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7
CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdp
dGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgp
IC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgp
KSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwg
c28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0g
Y2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdl
LndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdl
IGJleW9uZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNj
aXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KworICAgIC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBj
b250ZW50UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8v
IFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVy
IGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCBy
b290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9v
dERhbWFnZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlw
cGluZywgc28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGgg
ZGFtYWdlCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVk
IGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRo
KCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkp
OworCisgICAgLy8gQ2hpbGRyZW4ncyBjb250ZW50IHJlY3RzIGFyZSBiaWdnZXIgdGhhbiB0aGUg
cm9vdCdzIHNvIHRoZXkgZG9uJ3QgY2xpcCB0aGUgZGFtYWdlIHJlY3QsIGJ1dCBjaGFuZ2UgaXRz
IG9mZnNldC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVj
dC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworICAgIEVY
UEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2Uu
eCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290
RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKK30KKworVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQoreworICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8qCisgICAg
ICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAg
Ky0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAg
ICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAg
ICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAg
ICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAg
fAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBM
YXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIEludFJl
Y3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAx
MCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsK
KworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50
KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNp
emUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50
UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJl
Y3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgw
LCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwg
Y2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxk
LT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgp
KSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBv
c2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7
CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgo
KSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsK
KyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAg
ICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUp
OworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAg
ICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOwor
CisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAg
IEFTU0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVF
KHJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHIt
PnJlbmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpLCAyVSk7CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8g
aXRzIGJvdW5kcworICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisK
KyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidz
IGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAw
LCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxk
UmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEFTU0VSVF9FUShncmFu
ZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIEFTU0VS
VF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworCisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0
byByb290J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJl
Y3QoKSwgcm9vdFJlY3QpOworICAgIAorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkp
OworICAgIAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9v
dERhbWFnZShyb290UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2Up
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7
CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJl
Y3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNo
aWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFz
IGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAg
ICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3Ig
cmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBj
aGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUg
c2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAgICAvLyBvZiBpdHMg
b3duCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gY2hpbGRSZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3RE
YW1hZ2UgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBy
b290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3Nvcgor
ICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCks
IEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAK
KyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxk
CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90
IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRp
cmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEo
Y2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFn
ZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIK
KyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAv
LyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVy
ZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVj
dChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRS
ZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAg
ICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNj
aXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0
LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCks
IHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBj
aGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJl
IG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8g
RW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNU
X0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3RE
YW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxh
eWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisg
ICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRp
ZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNo
aWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOwor
CisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0
cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3Jh
bmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxk
UmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0
aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlv
bmQgcm9vdAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29y
cyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAg
ICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVu
dFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1
bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3Vu
ZGFyeQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lz
c29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJl
Y3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1h
Z2UueSgpKSk7CisgICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcs
IHNvIGl0cyBjb250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFn
ZQorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCBy
b290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0g
cm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKwor
ICAgIC8vIE5vdyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250
ZW50UmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChy
b290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0
LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngo
KSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9y
bSkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJl
YWQ7CisKKyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAg
ICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAg
ICAgICAyIHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICB8ICB8IHwgICAzLDQgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0t
LS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwg
ICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKworICAgICAgICAgTGF5ZXJzIDEsIDIgYW5kIDMgaGF2ZSByZW5kZXIgc3VyZmFjZXMK
KyAgICAgKi8KKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMyk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoNCk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAw
KTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBn
cmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0Lnko
KSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RS
ZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJ
bnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hp
bGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGls
ZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRS
ZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxk
UmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNp
dHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJl
Y3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEludFBvaW50
KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGls
ZDItPnNldE9wYWNpdHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5kcyhJbnRTaXpl
KGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAg
Z3JhbmRDaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBj
aGlsZFB0ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0g
Z3JhbmRDaGlsZC5nZXQoKTsKKworICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQy
LnJlbGVhc2UoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsK
KyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFz
a3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAg
ICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRl
ciBsYXllclNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChy
b290LmdldCgpKTsKKworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0
ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0UmVjdCBkdW1teURhbWFn
ZVJlY3Q7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3QpOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBBU1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVF
KGdyYW5kQ2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJl
bmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAzVSk7CisgICAgCisgICAgLy8gTm93IHJvb3Qg
aXMgY2xpcHBpbmcgdG8gaXRzIGJvdW5kcworICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgp
LCByb290UmVjdCk7CisKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJl
Y3QoMCwgMCwgY2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCkgLCBjaGlsZFJl
Y3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kY2hpbGQg
bm93IGNsaXBzCisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJl
Y3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3Jh
bmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIEFTU0VS
VF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworCisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0
byByb290J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJl
Y3QoKSwgcm9vdFJlY3QpOworICAgIAorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkp
OworICAgIAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9v
dERhbWFnZShyb290UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2Up
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7
CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJl
Y3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNo
aWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFz
IGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAg
ICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3Ig
cmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBj
aGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBpcyBub3cgc2Npc3NvcmVkIGJ5
IHRoZSByZW5kZXIgc3VyZmFjZQorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpIC0g
Z3JhbmRDaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkgLSBn
cmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICByb290
RGFtYWdlID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNjaXNzb3IK
KyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAg
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhpbiBjaGls
ZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5v
dCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VR
KGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1h
Z2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVy
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAg
Ly8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZl
cmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxk
UmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisg
ICAgLy8gR3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3NvcmVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFj
ZSBhcyB3ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3Qu
eCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisKKyAgICAv
LyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgx
MCwgMTAsIDgwLCA4MCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOwor
ICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBF
Q1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhl
IHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29y
UmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRo
aW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0
LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCks
IHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNj
aXNzb3JlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMgd2VsbCBhcyByb290CisgICAgRVhQRUNU
X0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkg
LSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1h
Z2Uud2lkdGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdy
YW5kQ2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QK
KyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEwKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5v
dCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gUm9v
dCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRlbnRSZWN0IHdp
bGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAgLy8gUmVzdWx0IGlzIHRo
YXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAg
ICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRo
KCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkp
OworICAgIAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5nLCBzbyBpdHMg
Y29udGVudCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UKKyAgICAv
LyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXll
ciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1h
Z2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisKKyAgICAvLyBO
b3cgdGhlIHNjaXNzb3IgcmVjdHMgYXJlIGNsaXBwZWQgYnkgc3VyZmFjZXMgY29udGVudFJlY3QK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFn
ZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJv
b3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290
RGFtYWdlLnkoKSkpOworCisgICAgLy8gR3JhbmRjaGlsZCdzIHNjaXNzb3IgcmVjdCBpcyBjbGlw
cGVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZQorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5z
Y2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9v
dERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCkgLSBncmFuZENo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsK
K30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9y
UmVwbGljYSkKIHsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CkBAIC01NDUsNyArMTEwMywxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9yQ2xpcExheWVyKQogICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBGbG9h
dFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQt
PnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICAvLyBUaGUgY2hpbGQgbGF5
ZXIncyBjb250ZW50IGlzIGVudGlyZWx5IG91dHNpZGUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdCwg
c28gdGhlIGludGVybWVkaWF0ZQogICAgIC8vIHJlbmRlciBzdXJmYWNlIHNob3VsZCBoYXZlIGJl
ZW4gcmVtb3ZlZC4gUmVuZGVyIHN1cmZhY2VzIHdpdGhvdXQgY2hpbGRyZW4gb3IgdmlzaWJsZQpA
QCAtNTczLDcgKzExMzQsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eVJlbmRlclN1cmZhY2VMaXN0Rm9yVHJhbnNwYXJlbnRDaGlsZCkKICAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIC8v
IFNpbmNlIHRoZSBsYXllciBpcyB0cmFuc3BhcmVudCwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1
cmZhY2UoKSBzaG91bGQgbm90IGhhdmUgZ290dGVuIGFkZGVkIGFueXdoZXJlLgogICAgIC8vIEFs
c28sIHRoZSBkcmF3YWJsZSBjb250ZW50IHJlY3Qgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXh0ZW5k
ZWQgYnkgdGhlIGNoaWxkcmVuLgpAQCAtNjAxLDE0ICsxMTY0LDE0IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Rm9yY2VSZW5kZXJTdXJmYWNlKQogICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBFWFBFQ1RfVFJV
RShyZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRVEocmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDFVKTsKIAogICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuY2xlYXIoKTsKICAgICByZW5kZXJTdXJmYWNlMS0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKGZh
bHNlKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAgICAgRVhQRUNUX0ZBTFNFKHJlbmRlclN1cmZhY2Ux
LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKSwgMFUpOwogfQpAQCAtNjY2LDcgKzEyMjksMTEgQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwog
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRS
ZWN0KCkpOworCiAKICAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
WzBdLT5pZCgpKTsKQEAgLTcyNSw3ICsxMjkyLDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQogICAg
IHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJv
dW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgp
KTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBBU1NFUlRfRVEoMlUs
IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LT5p
ZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsKQEAgLTc3Niw3ICsxMzQ1LDcg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3Vy
ZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwog
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gV2l0aG91dCBhbiBhbmltYXRpb24sIHdlIHNo
b3VsZCBjdWxsIGNoaWxkIGFuZCBncmFuZENoaWxkIGZyb20gdGhlIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuCiAgICAgQVNTRVJUX0VRKDFVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7
CkBAIC03OTUsNyArMTM2NCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFdpdGggYW4g
YW5pbWF0aW5nIHRyYW5zZm9ybSwgd2Ugc2hvdWxkIGtlZXAgY2hpbGQgYW5kIGdyYW5kQ2hpbGQg
aW4gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QuCiAgICAgQVNTRVJUX0VRKDNVLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CkBAIC04NTUsNyArMTQyNCwxMCBAQCBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5
VG9MYXllcnMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVu
ZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogCiAg
ICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgy
MCwgMjApKSwgZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCkpOwogICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQy
LT5jbGlwUmVjdCgpKTsKQEAgLTkyNyw3ICsxNDk5LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMp
CiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIEFTU0VSVF9U
UlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEFTU0VSVF9UUlVFKGdyYW5k
Q2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTQwOCw3ICsxOTgyLDcgQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRob3V0UHJlc2Vy
dmVzM2QpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNo
IHJlbmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfRkFMU0UoZnJvbnRGYWNp
bmdDaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE1MTMsNyArMjA4Nyw3IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZl
czNkKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCBy
ZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZyb250RmFjaW5n
Q2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTk4LDcgKzIxNzIsOSBAQCBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdU
cmFuc2Zvcm1zKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX1RSVUUo
YW5pbWF0aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE2NzAsNyArMjI0Niw3IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0
aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAg
ICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBF
Q1RfVFJVRShmcm9udEZhY2luZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qu
Y3BwCmluZGV4IGM3ZGYxOTE1Y2NkNzZkZWZiODdkMjkwYWE4YTViMjRhYTQ2MmZlMjQuLmZjNDA2
MTRkOWZiYWJmOGJlOGRhMmE5MWFmOWM0YTcwYTY1MjU1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBA
IC0zNiwxMCArMzYsMTIgQEAKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogI2luY2x1ZGUg
ImNjL0NDVGV4dHVyZUxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgi
CiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9M
YXllckltcGwuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWUuaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViVmlkZW9GcmFtZVByb3ZpZGVyLmg+CkBAIC00OSw2ICs1MSwxMSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0VGVzdHM7CiAKK3VzaW5nIDo6dGVzdGluZzo6TW9jazsKK3VzaW5nIDo6dGVzdGluZzo6
UmV0dXJuOwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1iZXI7Cit1c2luZyA6OnRlc3Rpbmc6Ol87
CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0IDogcHVibGlj
IHRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKQEAgLTcw
LDYgKzc3LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50
c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBwb3N0U2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlc1RvTWFpblRocmVhZE9u
SW1wbFRocmVhZChzaXplX3QpIE9WRVJSSURFIHsgfQogCisgICAgUGFzc093blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0KGJvb2wgcGFydGlhbFN3YXAsIFBhc3NS
ZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCwgUGFzc093blB0cjxDQ0xh
eWVySW1wbD4gcm9vdFB0cikKKyAgICB7CisgICAgICAgIENDU2V0dGluZ3Mgc2V0dGluZ3M7CisK
KyAgICAgICAgc2V0dGluZ3MucGFydGlhbFN3YXBFbmFibGVkID0gcGFydGlhbFN3YXA7CisKKyAg
ICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIHRoaXMpOworCisgICAgICAgIG15SG9zdEltcGwt
PmluaXRpYWxpemVMYXllclJlbmRlcmVyKGdyYXBoaWNzQ29udGV4dCwgVW50aHJvdHRsZWRVcGxv
YWRlcik7CisgICAgICAgIG15SG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAx
MCkpOworCisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IHJvb3RQdHI7CisKKyAg
ICAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgIHJv
b3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICByb290LT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KDAsIDAsIDEwLCAxMCkpOworICAgICAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisgICAgICAgIG15SG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Cisg
ICAgICAgIHJldHVybiBteUhvc3RJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisKICAgICBzdGF0aWMg
dm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBsYXll
cikKICAgICB7CiAgICAgICAgIEFTU0VSVF9FUShsYXllci0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6
ZSgpKTsKQEAgLTExMDEsNiArMTEzMCwzMTkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBwYXJ0aWFsU3dhcFJlY2VpdmVzRGFtYWdlUmVjdCkKICAgICBFWFBFQ1RfRVEoZXhwZWN0
ZWRTd2FwUmVjdC5oZWlnaHQoKSwgYWN0dWFsU3dhcFJlY3QuaGVpZ2h0KCkpOwogfQogCitjbGFz
cyBGYWtlTGF5ZXJXaXRoUXVhZHMgOiBwdWJsaWMgQ0NMYXllckltcGwgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPEZha2VMYXllcldpdGhRdWFkcz4gY3JlYXRlKGludCBpZCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IEZha2VMYXllcldpdGhRdWFkcyhpZCkpOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYpIE9WRVJSSURFCisgICAgeworICAg
ICAgICBjb25zdCBDb2xvciBncmF5KDEwMCwgMTAwLCAxMDApOworICAgICAgICBJbnRSZWN0IHF1
YWRSZWN0KDAsIDAsIDUsIDUpOworICAgICAgICBPd25QdHI8Q0NEcmF3UXVhZD4gbXlRdWFkID0g
Q0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBn
cmF5KTsKKyAgICAgICAgcXVhZExpc3QuYXBwZW5kKG15UXVhZC5yZWxlYXNlKCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBGYWtlTGF5ZXJXaXRoUXVhZHMoaW50IGlkKQorICAgICAgICA6IEND
TGF5ZXJJbXBsKGlkKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBNb2NrQ29udGV4dCA6IHB1
YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9E
MSh1c2VQcm9ncmFtLCB2b2lkKFdlYkdMSWQgcHJvZ3JhbSkpOworICAgIE1PQ0tfTUVUSE9ENSh1
bmlmb3JtNGYsIHZvaWQoV0dDM0RpbnQgbG9jYXRpb24sIFdHQzNEZmxvYXQgeCwgV0dDM0RmbG9h
dCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykpOworICAgIE1PQ0tfTUVUSE9ENCh1bmlm
b3JtTWF0cml4NGZ2LCB2b2lkKFdHQzNEaW50IGxvY2F0aW9uLCBXR0MzRHNpemVpIGNvdW50LCBX
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBXR0MzRGZsb2F0KiB2YWx1ZSkpOworICAgIE1P
Q0tfTUVUSE9ENChkcmF3RWxlbWVudHMsIHZvaWQoV0dDM0RlbnVtIG1vZGUsIFdHQzNEc2l6ZWkg
Y291bnQsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGludHB0ciBvZmZzZXQpKTsKKyAgICBNT0NLX01F
VEhPRDEoZ2V0U3RyaW5nLCBXZWJTdHJpbmcoV0dDM0RlbnVtIG5hbWUpKTsKKyAgICBNT0NLX01F
VEhPRDAoZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01JVU0sIFdlYlN0cmluZygpKTsKKyAg
ICBNT0NLX01FVEhPRDEoZW5hYmxlLCB2b2lkKFdHQzNEZW51bSBjYXApKTsKKyAgICBNT0NLX01F
VEhPRDQoc2Npc3Nvciwgdm9pZChXR0MzRGludCB4LCBXR0MzRGludCB5LCBXR0MzRHNpemVpIHdp
ZHRoLCBXR0MzRHNpemVpIGhlaWdodCkpOworfTsKKworY2xhc3MgTW9ja0NvbnRleHRIYXJuZXNz
IHsKK3ByaXZhdGU6CisgICAgTW9ja0NvbnRleHQqIG1fY29udGV4dDsKK3B1YmxpYzoKKyAgICBN
b2NrQ29udGV4dEhhcm5lc3MoTW9ja0NvbnRleHQqIGNvbnRleHQpCisgICAgICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCisgICAgeworICAgICAgICAvLyBDYXRjaCAidW5pbnRlcmVzdGluZyIgY2Fs
bHMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdXNlUHJvZ3JhbShfKSkKKyAgICAg
ICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBkcmF3
RWxlbWVudHMoXywgXywgXywgXykpCisgICAgICAgICAgICAuVGltZXMoMCk7CisKKyAgICAgICAg
Ly8gVGhlc2UgYXJlIG5vdCBhc3NlcnRlZAorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0
LCB1bmlmb3JtTWF0cml4NGZ2KF8sIF8sIF8sIF8pKQorICAgICAgICAgICAgLldpbGxSZXBlYXRl
ZGx5KFJldHVybigpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3Jt
NGYoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKCkp
OworCisgICAgICAgIC8vIEFueSBvdGhlciBzdHJpbmdzIGFyZSBlbXB0eQorICAgICAgICBFWFBF
Q1RfQ0FMTCgqbV9jb250ZXh0LCBnZXRTdHJpbmcoXykpCisgICAgICAgICAgICAuV2lsbFJlcGVh
dGVkbHkoUmV0dXJuKFdlYlN0cmluZygpKSk7CisKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgcGFy
dGlhbCBzd2FwLCBpZiBuZWVkZWQKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKSkKKyAgICAgICAgICAgIC5XaWxs
UmVwZWF0ZWRseShSZXR1cm4oV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIi
KSkpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFJlcXVlc3RhYmxlRXh0
ZW5zaW9uc0NIUk9NSVVNKCkpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdl
YlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICAvLyBB
bnkgdW4tc2FuY3Rpb25lZCBjYWxscyB0byBlbmFibGUoKSBhcmUgT0sKKyAgICAgICAgRVhQRUNU
X0NBTEwoKm1fY29udGV4dCwgZW5hYmxlKF8pKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5
KFJldHVybigpKTsKKyAgICB9CisKKyAgICB2b2lkIG11c3REcmF3U29saWRRdWFkKCkKKyAgICB7
CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRyYXdFbGVtZW50cyhHcmFwaGljc0Nv
bnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQs
IDApKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAgICAgLlJldGly
ZXNPblNhdHVyYXRpb24oKTsKKworICAgICAgICAvLyAxIGlzIGhhcmRjb2RlZCByZXR1cm4gdmFs
dWUgb2YgZmFrZSBjcmVhdGVQcm9ncmFtKCkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4
dCwgdXNlUHJvZ3JhbSgxKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oKSkKKyAgICAg
ICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAgICB9CisKKyAgICB2b2lkIG11c3RT
ZXRTY2lzc29yKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIHsKKyAg
ICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigpKQorICAgICAgICAg
ICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250
ZXh0LCBzY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgLldpbGxPbmNl
KFJldHVybigpKQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKyAgICB9CisK
K307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9QYXJ0aWFsU3dhcCkKK3sK
KyAgICBNb2NrQ29udGV4dCogbW9ja0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoKTsKKyAgICBS
ZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3Jl
YXRlM0QoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9t
V2ViQ29udGV4dChhZG9wdFB0cihtb2NrQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOworICAgIE1vY2tDb250ZXh0SGFybmVzcyBoYXJuZXNz
KG1vY2tDb250ZXh0KTsKKworICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBo
YXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4gdGVzdCBj
YXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVM
YXllclRyZWVIb3N0KGZhbHNlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgx
KSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQ
RUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4
dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXApCit7
CisgICAgTW9ja0NvbnRleHQqIG1vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KCk7CisgICAg
UmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNy
ZWF0ZTNEKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJv
bVdlYkNvbnRleHQoYWRvcHRQdHIobW9ja0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFybmVz
cyhtb2NrQ29udGV4dCk7CisKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAg
Ly8gT25lIHNjaXNzb3IgZm9yIGNsZWFyaW5nIHN1cmZhY2UsIGFub3RoZXIgZm9yIGRyYXdpbmcg
dGhlIHF1YWRzCisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworICAg
IGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdCh0cnVlLCBj
b250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+
cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUp
OworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXBOb1VwZGF0ZSkKK3sKKyAgICBNb2NrQ29u
dGV4dCogbW9ja0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoKTsKKyAgICBSZWZQdHI8Q0NHcmFw
aGljc0NvbnRleHQ+IGNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QoR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChh
ZG9wdFB0cihtb2NrQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykpOworICAgIE1vY2tDb250ZXh0SGFybmVzcyBoYXJuZXNzKG1vY2tDb250ZXh0
KTsKKworICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICAvLyBPbmUgc2Npc3Nv
ciBmb3IgY2xlYXJpbmcgc3VyZmFjZSwgYW5vdGhlciBmb3IgZHJhd2luZyB0aGUgcXVhZHMKKyAg
ICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDgsIDIsIDIpOworICAgIGhhcm5lc3MubXVzdFNl
dFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOwor
ICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKyAgICBoYXJuZXNzLm11
c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwgRmFr
ZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworICAgIAorICAgIC8vIERyYXcgb25jZSB0byBt
YWtlIHN1cmUgbGF5ZXIgaXMgbm90IG5ldworICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1l
RGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZy
YW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1w
bC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAvLyBHZW5lcmF0ZSB1cGRhdGUgaW4g
bGF5ZXIKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG15SG9zdEltcGwtPnJvb3RMYXllcigpOwor
ICAgIHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDIsIDIpKTsKKworICAgIC8v
IFRoaXMgZHJhdyBzaG91bGQgZ2VuZXJhdGUgbm8gbmV3IHVkcGF0ZXMKKyAgICBFWFBFQ1RfVFJV
RShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJh
d0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7
CisKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOwor
fQorCitjbGFzcyBQYXJ0aWFsU3dhcENvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0QgeworcHVibGljOgorICAgIFdlYlN0cmluZyBnZXRTdHJpbmcoV0dDM0RlbnVtIG5hbWUp
CisgICAgeworICAgICAgICBpZiAobmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RVhURU5TSU9O
UykKKyAgICAgICAgICAgIHJldHVybiBXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1
ZmZlciIpOworICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIFdl
YlN0cmluZyBnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpCisgICAgeworICAgICAg
ICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKTsKKyAgICB9
Cit9OworCitzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBzZXR1cExheWVy
c0Zvck9wYWNpdHkoYm9vbCBwYXJ0aWFsU3dhcCwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCog
Y2xpZW50KQoreworICAgIENDU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MucGFydGlh
bFN3YXBFbmFibGVkID0gcGFydGlhbFN3YXA7CisKKyAgICBSZWZQdHI8Q0NHcmFwaGljc0NvbnRl
eHQ+IGNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QoR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihu
ZXcgUGFydGlhbFN3YXBDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpKTsKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0
SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0aW5ncywgY2xpZW50KTsKKyAg
ICBteUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwg
VW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgbXlIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKElu
dFNpemUoMTAwLCAxMDApKTsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMg
Zm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAg
ICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8
ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAg
fAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBz
dXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gRmFr
ZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMyk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAs
IDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAg
SW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgw
LCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJv
b3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRo
KCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChy
b290UmVjdCk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICByb290LT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6
ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKworICAgIGNoaWxkLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CisgICAgY2hpbGQtPnNl
dE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGNoaWxkUmVjdC53
aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVy
UmVjdChjaGlsZFJlY3QpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworCisg
ICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3Jh
bmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3JhbmRDaGlsZFJlY3QueCgpLCBncmFuZENo
aWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShncmFuZENo
aWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGdyYW5kQ2hp
bGQtPnNldFZpc2libGVMYXllclJlY3QoZ3JhbmRDaGlsZFJlY3QpOworICAgIGdyYW5kQ2hpbGQt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxk
LnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAg
IG15SG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIG15
SG9zdEltcGwucmVsZWFzZSgpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IGNvbnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29yUGFydGlhbFN3YXApCit7CisgICAgT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBzZXR1cExheWVyc0Zvck9wYWNpdHko
dHJ1ZSwgdGhpcyk7CisKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1l
RGF0YSBmcmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJh
dyhmcmFtZSkpOworCisgICAgICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBp
bnRlcmVzdGluZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCisgICAgICAgIG15SG9zdEltcGwtPmRy
YXdMYXllcnMoZnJhbWUpOworICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKKworICAgICAgICAvLyBWZXJpZnkgYWxsIHF1YWRzIGhhdmUgYmVlbiBjb21wdXRlZAor
ICAgICAgICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOworICAgICAg
ICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkp
OworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3Qo
KS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJh
bWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIGZyYW1lLnJlbmRlclBhc3Nlc1sx
XS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29yTm9QYXJ0aWFs
U3dhcCkKK3sKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IHNl
dHVwTGF5ZXJzRm9yT3BhY2l0eShmYWxzZSwgdGhpcyk7CisKKyAgICB7CisgICAgICAgIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobXlI
b3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworCisgICAgICAgIC8vIEp1c3QgZm9yIGNv
bnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGluZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCisg
ICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAgICBteUhvc3RJbXBs
LT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgICAgICAvLyBWZXJpZnkgYWxsIHF1YWRz
IGhhdmUgYmVlbiBjb21wdXRlZAorICAgICAgICBBU1NFUlRfRVEoMlUsIGZyYW1lLnJlbmRlclBh
c3Nlcy5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRlclBhc3Nlc1sw
XS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLnJlbmRl
clBhc3Nlc1sxXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3
UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpWzBdLT5t
YXRlcmlhbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2Us
IGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAg
fQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHF1YWRzVG9GaWxsU2NyZWVu
KQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gc2V0dXBM
YXllcnNGb3JPcGFjaXR5KHRydWUsIHRoaXMpOworCisgICAgLy8gVGhpcyB3aWxsIGNhdXNlIEND
TGF5ZXJUcmVlSG9zdEltcGwgdG8gYWRkIHF1YWRzIHRvIGZpbGwgc2NyZWVuCisgICAgbXlIb3N0
SW1wbC0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDI1NSwgMCwgMCkpOworCisgICAgeworICAg
ICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVD
VF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKworICAgICAgICAvLyBK
dXN0IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgc3R1ZmYgYWxyZWFkeSBo
YXBwZW5lZAorICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAg
bXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAgICAgLy8gVmVyaWZ5
IGFsbCBxdWFkcyBoYXZlIGJlZW4gY29tcHV0ZWQKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFt
ZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5k
ZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBm
cmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExp
c3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5k
ZXJTdXJmYWNlLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFs
KCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUucmVu
ZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzFdLT5tYXRlcmlhbCgpKTsKKyAgICB9Cit9CisKIC8v
IE1ha2Ugc3VyZSB0aGF0IGNvbnRleHQgbG9zdCBub3RpZmljYXRpb25zIGFyZSBwcm9wYWdhdGVk
IHRocm91Z2ggdGhlIHRyZWUuCiBjbGFzcyBDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5
ZXIgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKaW5kZXggODAz
MTdhMDA4MTdkZDU2NDgzNWQ5MDJhNTQ0OTkxZWE3NzRkOTI3OC4uYTY0OTY1ZjE2ZTJhMDU4YTgx
ZDU3YmZkNDFhZmUxYTU2ZDBiZGJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCkBAIC0yNjEsNyArMjYxLDEw
IEBAIHByb3RlY3RlZDoKICAgICAgICAgcm9vdC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCByb290LT5ib3VuZHMoKSkpOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXll
ckxpc3RJbXBsLmFwcGVuZChtX3Jvb3QuZ2V0KCkpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3Qs
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3Qs
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyht
X3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJl
Z2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxp
c3RJbXBsKTsKICAgICB9CiAKQEAgLTI3Nyw3ICsyODAsMTAgQEAgcHJvdGVjdGVkOgogICAgICAg
ICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5k
cygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLmFwcGVuZCht
X3Jvb3QpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dENocm9taXVtLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAg
ICAgIG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVy
SXRlcmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3Vy
ZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZh
Y2VUZXN0LmNwcAppbmRleCA1Y2JlN2ZjNTRmNTJmMDMyMjAyZjY5ODI0OGQ2ZTFkYWY3NzBhN2E2
Li5jOGIwZWRhZWQxOGEyMmVkMzQ0OGQ5MWJlZjg1YTFhNjlkZmQyZDQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAg
LTExMSw2ICsxMTEsNyBAQCBURVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3Vy
ZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVkUXVhZFN0YXRlKQogICAgIHJlbmRlclN1cmZhY2UtPnNl
dE9yaWdpblRyYW5zZm9ybShvcmlnaW4pOwogICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRS
ZWN0KGNvbnRlbnRSZWN0KTsKICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVj
dCk7CisgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2Npc3NvclJlY3QoY2xpcFJlY3QpOwogICAgIHJl
bmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KDEpOwogCiAgICAgT3duUHRyPENDU2hhcmVkUXVh
ZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSByZW5kZXJTdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFk
U3RhdGUoKTsKQEAgLTExOSw3ICsxMjAsNyBAQCBURVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHNh
bml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVkUXVhZFN0YXRlKQogICAgIEVYUEVD
VF9FUSgzMCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpLm00MSgpKTsKICAgICBF
WFBFQ1RfRVEoNDAsIHNoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKS5tNDIoKSk7CiAg
ICAgRVhQRUNUX0VRKGNvbnRlbnRSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpKTsK
LSAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKSk7Cisg
ICAgRVhQRUNUX0VRKGNsaXBSZWN0LCBzaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCkpOwog
ICAgIEVYUEVDVF9FUSgxLCBzaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKHNoYXJlZFF1YWRTdGF0ZS0+aXNPcGFxdWUoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145458</attachid>
            <date>2012-06-02 13:34:33 -0700</date>
            <delta_ts>2012-06-04 07:22:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120602163432.patch</filename>
            <type>text/plain</type>
            <size>122493</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDMxYjViODZmYTU0NDZi
MTk2MmEyMjQ2MjM2Y2E2ZDBiY2Y3NTI4NC4uNTMzYmMzMzNmYjJmZDkwMGE4YjBlMTI0MzFiODI1
OTFhMTlmZjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEyLTA2LTAyICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlcmZvcm1pbmcgc2Npc3NvclJl
Y3QgY29tcHV0YXRpb24gZHVyaW5nCisgICAgICAgIGNhbGN1bGF0ZVJlbmRlclBhc3Nlcy4gU3Rv
cmluZyBzY2lzc29yUmVjdCBpbiBzaGFyZWQgcXVhZCBzdGF0ZQorICAgICAgICBpbnN0ZWFkIG9m
IGNvbXB1dGluZyBpdCBkdXJpbmcgZHJhd1F1YWQuIEFkZGVkIHNjaXNzb3JSZWN0IGZpZWxkcwor
ICAgICAgICBpbnRvIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBJbnRyb2R1Y2VkIG1vcmUgdW5pdCB0ZXN0cyB0
bworICAgICAgICB0ZXN0IGVuZC10by1lbmQgZHJhd2luZyB1c2luZyBtb2NrIGdyYXBoaWMgY29u
dGV4dCwgYW5kIGFkZGVkIG1vcmUKKyAgICAgICAgdGVzdCBjYXNlcyB0byBDQ0xheWVyVHJlZUhv
c3RDb21tb24gdG8gdmVyaWZ5IHNjaXNzb3JSZWN0IGNvbXB1dGF0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNvbXB1
dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNldFNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEcmF3UXVhZDo6c2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FsY3VsYXRlU3VyZmFjZVNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0Zv
clJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoQ0NS
ZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2Np
c3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzY2lzc29yUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJlci5oOgorICAgICAgICAoQ0NSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1No
YXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmg6CisgICAgICAgIChDQ1NoYXJl
ZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6c2Npc3Nv
clJlY3QpOgorCiAyMDEyLTA2LTAyICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbUGVyZm9ybWFuY2VdIE9wdGltaXplIHF1ZXJ5U2VsZWN0b3IoKSBieSBj
YWNoaW5nIFNlbGVjdG9yUXVlcnkgb2JqZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAzMzU2YmNkMjRmYTY4MWY0MGM2NzgyOWJmYTc5NmQ1NDhkY2NmYzRhLi5lOWM3NWViMzUyYmQ0
ZmM0NDMyZTlhNjljMTNhMWM0MDYyMDVhMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDEyLTA2LTAyICBaZWV2IExpZWJlciAgPHpsaWViZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xlYW51cCBzY2lzc29yIHJlY3QgY29tcHV0
YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbCB1c2lu
ZyBtb2NrIGdyYXBoaWMgY29udGV4dAorICAgICAgICB0byB2ZXJpZnkgZW5kLXRvLWVuZCBxdWFk
IGRyYXdpbmcuCisKKyAgICAgICAgQWRkZWQgbW9yZSB0ZXN0IGNhc2VzIHRvIENDTGF5ZXJUcmVl
SG9zdENvbW1vbiB0byB2ZXJpZnkgY2xpcCBhbmQKKyAgICAgICAgc2Npc3NvciByZWN0IGNvbXB1
dGF0aW9ucy4KKworICAgICAgICAqIHRlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAqIHRlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lv
blRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0OjpjYWxjRHJhd0V0Yyk6CisgICAgICAgICogdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHA6CisKIDIwMTItMDYtMDEgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0Bnb29nbGUuY29t
PgogCiAgICAgICAgIFtjaHJvbWl1bV0gU29mdHdhcmUgY29tcG9zaXRvciBpbml0aWFsaXphdGlv
biBhbmQgYmFzZSBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggZTgwMmMzNjhjYzFlZjg4
NmRiZmZlY2JkMmM4OGMzYTFiZTBkMzExZC4uNWQ1MmY4YmM5ZmVlZDEyNDEwNjhkMTExMmRjYzhk
OWU0Mzc0NjFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTM4LDYgKzEzOCw5IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJs
ZUxheWVyUmVjdDsgfQogCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJ
bnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwog
ICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9u
OyB9CiAKQEAgLTMwNSw3ICszMDgsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIExheWVyIHByb3Bl
cnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKKworICAgIC8vIFVzZXMgbGF5ZXIncyBjb250
ZW50IHNwYWNlLgogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OworCisgICAgLy8gRHVy
aW5nIGRyYXdpbmcsIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhp
bmcgc2hvdWxkIGJlIGRyYXduLgorICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXll
cidzIGNsaXBSZWN0IGlmIHVzZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQorICAg
IC8vIGl0J3MgdGFyZ2V0UmVuZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgorICAgIC8vIFVzZXMg
dGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CiAgICAg
SW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBi
b29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwpAQCAtMzQzLDEyICszNTQsMTYgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7
CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1h
dGluZzsKKworICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50UmVjdCBt
X2NsaXBSZWN0OwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJm
YWNlOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3Jt
OwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybTsKICAgICBib29sIG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nOwogICAgIGJvb2wgbV9z
Y3JlZW5TcGFjZVRyYW5zZm9ybUlzQW5pbWF0aW5nOworCisgICAgLy8gVXNlcyB0YXJnZXQgc3Vy
ZmFjZSBzcGFjZS4KICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKICAgICBmbG9h
dCBtX2NvbnRlbnRzU2NhbGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CmluZGV4IDRkOTBjZTU2ODk0Mjc1ZmNiOGUzMGMyODhkNTJkZmFjODA2YjQ3YWQuLjkyZTAzYTNm
NzYzZjI0YjFiMDVjMjQ2MmVhNjEwYWQ1YjMzZTkzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAw
OwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKEND
UmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVy
U3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5k
ZXJTdXJmYWNlLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5kZXJTdXJmYWNlLCBjb25zdCBGbG9h
dFJlY3QmIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpCiB7CiAgICAgLy8gTm9uLXJv
b3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29udGVudHMgdG8gdHJhbnNwYXJl
bnQuIE9uIERFQlVHIGJ1aWxkcywgdGhlIHJvb3QgbGF5ZXIKICAgICAvLyBpcyBjbGVhcmVkIHRv
IGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhlIHNj
cmVlbi4gSWYgd2UKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQwog
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwgMSkp
OwogCiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNl
dFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOworICAg
ICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qocm9vdFNjaXNzb3JSZWN0SW5D
dXJyZW50U3VyZmFjZSkpOwogICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIApAQCAtNDU0
LDM2ICs0NTQsMjggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRvTm9PcCgpCiAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIH0KIAotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFz
cykKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0SW5D
dXJyZW50U3VyZmFjZSkKIHsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCk7CiAgICAgaWYgKCF1c2VSZW5kZXJTdXJmYWNlKHJl
bmRlclN1cmZhY2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlbmRlclN1cmZhY2Uo
cmVuZGVyU3VyZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgcmVuZGVyUGFzcy0+c3VyZmFj
ZURhbWFnZVJlY3QoKSk7CisgICAgY2xlYXJSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UsIG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpOwog
CiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgp
OwogICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVh
ZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgp
OyArK2l0KQotICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCksIHJlbmRlclBhc3MtPnN1cmZhY2VE
YW1hZ2VSZWN0KCkpOworICAgICAgICBkcmF3UXVhZChpdC0+Z2V0KCkpOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogewotICAgIEludFJlY3Qgc2Np
c3NvclJlY3Q7Ci0gICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKLSAg
ICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0ID0gc3VyZmFjZURhbWFnZVJlY3Q7Ci0g
ICAgICAgIGlmICghcXVhZC0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGlw
QW5kRGFtYWdlUmVjdC5pbnRlcnNlY3QocXVhZC0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgIHNjaXNz
b3JSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCk7Ci0gICAgICAgIGlm
IChzY2lzc29yUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHNjaXNzb3JSZWN0ID0gcXVhZC0+Y2xpcFJlY3QoKTsKKyAgICBJbnRSZWN0IHNj
aXNzb3JSZWN0ID0gcXVhZC0+c2Npc3NvclJlY3QoKTsKIAorICAgIEFTU0VSVCghc2Npc3NvclJl
Y3QuaXNFbXB0eSgpKTsKICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVj
dCk7CisgICAgICAgIHJldHVybjsKKworICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3Qp
OwogCiAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkKICAgICAgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CkBAIC02NzYs
OSArNjY4LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJTdXJmYWNl
UXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCoKIAogICAgIGRyYXdCYWNrZ3JvdW5k
RmlsdGVycyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CiAKLSAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgY2FsbCB3aGVuIHRoZSBxdWFkJ3Mgc2Npc3NvclJlY3QoKSBpcyBzZXQgY29y
cmVjdGx5LgotICAgIGRyYXdpbmdTdXJmYWNlLT5zZXRTY2lzc29yUmVjdCh0aGlzLCBxdWFkLT5z
dXJmYWNlRGFtYWdlUmVjdCgpKTsKLQogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNv
IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRz
IHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4K
ICAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+Zmls
dGVycygpLCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyZWZiZGIyNjBiYzM3NWZhNjNlM2MwODQ5YjM4YjY2
YTVkOWI5NjZjLi4yMGU4MTE5MzY5ZmU1ODdjOWYxMTI3MTJjMzVmM2MwMDAwOTMxYjI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlZEdlb21ldHJ5UXVhZDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luRHJhd2lu
Z0ZyYW1lKENDUmVuZGVyU3VyZmFjZSogZGVmYXVsdFJlbmRlclN1cmZhY2UpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
KiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCkgT1ZFUlJJREU7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiwgY29u
c3QgSW50U2l6ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CkBAIC0xMjUsNyArMTI1LDcgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkcmF3UXVhZChj
b25zdCBDQ0RyYXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7Cisg
ICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3Q2hlY2tl
cmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3
RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwogICAgIHZvaWQg
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKiwgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKQEAg
LTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBiaW5kRnJhbWVidWZmZXJUb1Rl
eHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOwogCi0g
ICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiwgQ0NSZW5kZXJTdXJm
YWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCk7CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiwgQ0NSZW5k
ZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3Nv
clJlY3RJbkN1cnJlbnRTdXJmYWNlKTsKIAogICAgIHZvaWQgcmVsZWFzZVJlbmRlclN1cmZhY2VU
ZXh0dXJlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAppbmRleCA3
YWI5YmEwMDg2ZTFkMjAzMmM4MzE4YmQ5NjAwMDAwMDg0YjRiYzRiLi5iN2ZlZTg3ODM1MTIwN2Mw
NjBjOTc1OWY2ZTVmMWNiMjA2ZjY2NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKQEAgLTMyLDggKzMyLDEyIEBACiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCisjaW5jbHVkZSA8cHVibGljL1dl
YlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
Cit1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OworCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNocm9taXVtKExh
eWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQpAQCAtODYsNSArOTAsMTEgQEAgYm9vbCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW06OnJlcGxpY2FIYXNNYXNrKCkgY29uc3QKICAgICByZXR1cm4gaGFzUmVw
bGljYSgpICYmIChtX21hc2tMYXllciB8fCBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
bWFza0xheWVyKCkpOwogfQogCitGbG9hdFJlY3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpjb21w
dXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9hdFJlY3QmIHJvb3RT
Y2lzc29yUmVjdCkgY29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNl
U2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBtX3NjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKTsK
KyAgICByZXR1cm4gQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VTY3JlZW5T
cGFjZVRyYW5zZm9ybSwgcm9vdFNjaXNzb3JSZWN0KTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgK
aW5kZXggZTY3MTFlZjJhNWM1MGYxNGJmZDBmOTA3ZmRlNzQ2YjU4NDM4MzZkNC4uZTZlNjgwMGQ5
M2U1ZmUwZTMxNmFkZmEwMmFhNDZlNzdiNmQ4ZmUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xp
cFJlY3QoY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9
CiAKKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Np
c3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KSB7IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRG
aWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2Zp
bHRlcnMgPSBmaWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAKQEAgLTExNSwxMCArMTE4
LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGhhc01hc2soKSBjb25zdDsKICAgICBib29sIHJlcGxp
Y2FIYXNNYXNrKCkgY29uc3Q7CiAKKyAgICBGbG9hdFJlY3QgY29tcHV0ZVJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0
OwogcHJpdmF0ZToKICAgICBMYXllckNocm9taXVtKiBtX293bmluZ0xheWVyOwogICAgIExheWVy
Q2hyb21pdW0qIG1fbWFza0xheWVyOwogCisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2UncyBzcGFj
ZS4KICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKIApA
QCAtMTM0LDcgKzEzOSwxNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybXNBcmVBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmls
dGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVy
czsKKworICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZh
Y2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlk
ZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRy
YXduLgorICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIHNldCB0byBsYXllcidzIGNsaXBSZWN0IGlm
IHVzZXNMYXllckNsaXBwaW5nIGlzIHRydWUsIG90aGVyd2lzZQorICAgIC8vIGl0J3MgdGFyZ2V0
UmVuZGVyU3VyZmFjZSdzIGNvbnRlbnRSZWN0LgorICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRo
ZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0Owor
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fbGF5ZXJMaXN0OwogCiAgICAg
Ly8gVGhlIG5lYXJlc3QgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4g
dGhlIGNvbnRlbnRzIG9mIHRoaXMgc3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29pbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJh
d1F1YWQuaAppbmRleCAzODFjYmFlYWNmM2YyNTIxNzRkNTdmZGQzM2YyMDliMTU4YTFkNTkyLi5m
MmQ4OWYyNzk4NzIyNjYzMTdiN2U3NjhlNjBiMWUwZjU0NjI3Yzc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVh
ZC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPmxheWVyVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJSZWN0KCk7IH0KLSAg
ICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0
YXRlLT5jbGlwUmVjdCgpOyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+c2Npc3NvclJlY3QoKTsgfQogICAgIGZsb2F0
IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0eSgpOyB9
CiAgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiBibGVuZGluZywgd2hhdCBwYXJ0IG9mIHRoZSBj
b250ZW50cyBvZiB0aGlzIHF1YWQgYXJlIG9wYXF1ZT8KICAgICBJbnRSZWN0IG9wYXF1ZVJlY3Qo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA5M2FiMTc4MTg3MmJkMzNmYzgy
ZDUwNmY5NWY0MzBkOWJlZjExYmIzLi40YTAzMmFlNGQ0YmIxNDVkYjZmNTdhMjhjOGRlYTY4YzU0
NDMxYTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMzgsMTAgKzEzOCw3IEBAIGJv
b2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogCiBQYXNzT3duUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29u
c3QKIHsKLSAgICBJbnRSZWN0IGxheWVyQ2xpcFJlY3Q7Ci0gICAgaWYgKHVzZXNMYXllckNsaXBw
aW5nKCkpCi0gICAgICAgIGxheWVyQ2xpcFJlY3QgPSBjbGlwUmVjdCgpOwotICAgIHJldHVybiBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgp
LCB2aXNpYmxlTGF5ZXJSZWN0KCksIGxheWVyQ2xpcFJlY3QsIGRyYXdPcGFjaXR5KCksIG9wYXF1
ZSgpKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3Jt
KCksIGRyYXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVjdCgpLCBtX3NjaXNzb3JSZWN0LCBk
cmF3T3BhY2l0eSgpLCBvcGFxdWUoKSk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OndpbGxEcmF3
KENDUmVuZGVyZXIqLCBDQ0dyYXBoaWNzQ29udGV4dCopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRl
eCBjZGI4YzdkNTlhMWNkMTUxYWNkNjc2ZmE4M2Q2OTdhZmM3ZDYzOTMxLi4wNDU2MjY5NzY2Zjc2
N2IwNTJhMGI5NGFlNDQ4MTIwNzcxZmNiNWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE2
NCw2ICsxNjQsMTAgQEAgcHVibGljOgogICAgIC8vIFVzYWdlOiBpZiB0aGlzLT51c2VzTGF5ZXJD
bGlwcGluZygpIGlzIGZhbHNlLCB0aGVuIHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2Vk
LgogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVj
dDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2NsaXBS
ZWN0ID0gcmVjdDsgfQorCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3QgPSByZWN0OyB9CisKICAgICBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRl
clN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJm
YWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIApAQCAt
Mjk4LDYgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgLy8gVHJhY2tzIGlmIGRyYXdpbmctcmVsYXRl
ZCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0IHJlZHJhdy4KICAgICBib29sIG1f
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7CiAKKyAgICAvLyBVc2VzIGxheWVyJ3MgY29udGVudCBzcGFj
ZS4KICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBib29sIG1fbWFza3NUb0Jv
dW5kczsKICAgICBib29sIG1fb3BhcXVlOwpAQCAtMzUyLDE3ICszNTcsMjQgQEAgcHJpdmF0ZToK
ICAgICAvLyBUaGUgcmVjdCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzY2lzc29yIHdoZW4gdGhp
cyBsYXllciBpcyBkcmF3bi4KICAgICAvLyBJbmhlcml0ZWQgYnkgdGhlIHBhcmVudCBsYXllciBh
bmQgZnVydGhlciByZXN0cmljdGVkIGlmIHRoaXMgbGF5ZXIgbWFza3MKICAgICAvLyB0byBib3Vu
ZHMuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9j
bGlwUmVjdDsKIAorICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24g
b3V0c2lkZSBvZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBVc2VzIHRh
cmdldCBzdXJmYWNlJ3Mgc3BhY2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAg
Ly8gUmVuZGVyIHN1cmZhY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuIFRoZSBsYXllciBh
bmQgaXRzIGRlc2NlbmRhbnRzCiAgICAgLy8gd2lsbCByZW5kZXIgdG8gdGhpcyBzdXJmYWNlLgog
ICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+IG1fcmVuZGVyU3VyZmFjZTsKIAogICAgIC8vIEhp
ZXJhcmNoaWNhbCBib3VuZGluZyByZWN0IGNvbnRhaW5pbmcgdGhlIGxheWVyIGFuZCBpdHMgZGVz
Y2VuZGFudHMuCisgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJl
Y3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwogCiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQg
d2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBs
dWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgorICAgIC8vIFVzZXMg
bGF5ZXIncyBjb250ZW50IHNwYWNlLgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiAKICAg
ICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCAxNjU5ZWM1YmQ4OWEyYTUwOThkYmJjNDczMzQwOWZjYzNkMDUx
MTA5Li4xMjUxMGUyNDEyY2IyYTFjMDQ0M2Y2NmU1NTE2NDY3NmU4ZWI1NWQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTUxOCw3ICs1MTgsMTAgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIENDVGV4dHVy
ZVVwZGF0ZXImIHUKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJhbnNmb3Jt
OwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdzLmRldmljZVNj
YWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIGRldmljZVNjYWxl
VHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUp
OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRy
aXgsIHVwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJlY3Qg
cm9vdFNjaXNzb3JSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKTsKKyAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHVwZGF0ZUxpc3QsIHJvb3RTY2lzc29yUmVjdCk7CiAgICAgfQogCiAgICAgLy8gUmVzZXQgcGFy
dGlhbCB0ZXh0dXJlIHVwZGF0ZSByZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwCmluZGV4IGI1YmNhYmJmMDhjNmRjMzAyMzNjN2FjM2Y2Mjk2MzcyNjJi
YzA3NGUuLjljZDAzMTYwZTJiMGJjNWE3YjY1MmU4MGI5ZjJiYWRiZDAxYmMzY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtNjcsNiArNjcsNDMgQEAg
SW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0
IEludFJlY3QmIHRhcmdldFN1cmZhY2UKICAgICByZXR1cm4gbGF5ZXJSZWN0OwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3Rh
dGljIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJTY2lzc29yUmVjdChMYXllclR5cGUqIGxheWVyLCBj
b25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKK3sKKyAgICBSZW5kZXJTdXJmYWNlVHlw
ZSogdGFyZ2V0U3VyZmFjZSA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisKKyAgICBG
bG9hdFJlY3Qgcm9vdFNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlID0gdGFyZ2V0U3VyZmFjZS0+
Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uocm9vdFNjaXNzb3JSZWN0KTsK
KyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZTsKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNs
aXBwaW5nKCkpCisgICAgICAgIGNsaXBBbmREYW1hZ2UgPSBpbnRlcnNlY3Rpb24ocm9vdFNjaXNz
b3JSZWN0SW5UYXJnZXRTdXJmYWNlLCBsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgZWxzZQorICAg
ICAgICBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9uKHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0
U3VyZmFjZSwgdGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSk7CisKKyAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3N0YXRpYyBJbnRSZWN0IGNhbGN1
bGF0ZVN1cmZhY2VTY2lzc29yUmVjdChMYXllclR5cGUqIGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IHJvb3RTY2lzc29yUmVjdCkKK3sKKyAgICBMYXllclR5cGUqIHBhcmVudExheWVyID0gbGF5ZXIt
PnBhcmVudCgpOworICAgIFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRTdXJmYWNlID0gcGFyZW50
TGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKTsKKyAgICBBU1NFUlQodGFyZ2V0U3VyZmFjZSk7
CisKKyAgICBSZW5kZXJTdXJmYWNlVHlwZSogY3VycmVudFN1cmZhY2UgPSBsYXllci0+cmVuZGVy
U3VyZmFjZSgpOworICAgIEFTU0VSVChjdXJyZW50U3VyZmFjZSk7CisKKyAgICBGbG9hdFJlY3Qg
Y2xpcFJlY3QgPSBjdXJyZW50U3VyZmFjZS0+Y2xpcFJlY3QoKTsKKworICAgIC8vIEZvciBzdXJm
YWNlcywgZW1wdHkgY2xpcFJlY3QgbWVhbnMgdGhlIHNhbWUgYXMgQ0NMYXllckltcGw6OnVzZXNM
YXllckNsaXBwaW5nIGJlaW5nIGZhbHNlCisgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgY2xpcFJlY3QgPSBpbnRlcnNlY3Rpb24odGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3Qo
KSwgY3VycmVudFN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisKKyAgICBGbG9hdFJl
Y3Qgcm9vdFNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlID0gdGFyZ2V0U3VyZmFjZS0+Y29tcHV0
ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Uocm9vdFNjaXNzb3JSZWN0KTsKKworICAg
IEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0aW9uKHJvb3RTY2lzc29yUmVjdElu
VGFyZ2V0U3VyZmFjZSwgY2xpcFJlY3QpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGNs
aXBBbmREYW1hZ2UpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBzdGF0aWMg
aW5saW5lIGJvb2wgbGF5ZXJJc0luRXhpc3RpbmczRFJlbmRlcmluZ0NvbnRleHQoTGF5ZXJUeXBl
KiBsYXllcikKIHsKQEAgLTI4NCw3ICszMjEsNyBAQCBzdGF0aWMgYm9vbCBzdWJ0cmVlU2hvdWxk
UmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwgYm9vbCBheGlzQWxpZwog
Ly8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu
IG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMs
IGNsaXBSZWN0cywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5
cGVuYW1lIExheWVyU29ydGVyPgotc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5
ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBSZW5kZXJTdXJmYWNl
VHlwZSogbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LCBMYXllclNvcnRlciogbGF5ZXJT
b3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3N0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBSZW5kZXJTdXJmYWNlVHlwZSog
bmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LCBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIs
IGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRo
ZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9ucyByZWN1cnNpdmVseSBmb3IgdGhpcwogICAgIC8v
IGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLiBJdCBhbHNvIGNvbXB1dGVzIHRoZSBhcHBy
b3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMuCkBAIC01NzIsNyArNjA5LDcgQEAgc3RhdGljIGJvb2wg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXIKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxheWVyLT5jaGls
ZHJlbigpW2ldLmdldCgpOwotICAgICAgICBib29sIGRyYXdzQ29udGVudCA9IGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBS
ZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVy
TWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhl
bHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4
VGV4dHVyZVNpemUpOworICAgICAgICBib29sIGRyYXdzQ29udGVudCA9IGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZhY2VUeXBl
LCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgsIG5leHRIaWVy
YXJjaHlNYXRyaXgsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7CiAK
ICAgICAgICAgaWYgKGRyYXdzQ29udGVudCkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5k
ZXJTdXJmYWNlKCkpIHsKQEAgLTY5Myw5ICs3MzAsOSBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXll
cgogCiAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRv
IHNldCB2aXNpYmlsaXR5IHJlY3RzIG9uIGEgc2Vjb25kCiAvLyB0cmVlIHBhc3MsIHJldmlzZSBj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KCkgc28gdGhhdCB0aGlzIGNhbiBiZSBkb25lIGluIGEg
c2luZ2xlCi0vLyBwYXNzIGluc2lkZSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHlJbnRlcm5hbDw+KCkuCisvLyBwYXNzIGluc2lkZSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0lu
dGVybmFsPD4oKS4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJM
aXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXN0YXRpYyB2b2lkIHdhbGtMYXllcnNB
bmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCitzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
SW50ZXJuYWwoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBG
bG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKIHsKICAgICAvLyBVc2UgQmFja1RvRnJvbnQgc2lu
Y2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBlbmRlbnQuCiAgICAgdHlwZWRl
ZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZhY2VUeXBl
LCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlw
ZTsKQEAgLTcwNiwxOSArNzQzLDM0IEBAIHN0YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRDYWxjdWxh
dGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhCiAgICAgICAg
ICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0
KCppdCk7CiAgICAgICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJS
ZWN0KTsKICAgICAgICAgfQorICAgICAgICBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7Cisg
ICAgICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlTGF5ZXJTY2lzc29yUmVj
dDxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPigqaXQsIHJvb3RTY2lzc29yUmVjdCk7Cisg
ICAgICAgICAgICBpdC0+c2V0U2Npc3NvclJlY3Qoc2Npc3NvclJlY3QpOworICAgICAgICB9IGVs
c2UgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAg
ICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3Q8
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4oKml0LCByb290U2Npc3NvclJlY3QpOworICAg
ICAgICAgICAgaXQtPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3Qoc2Npc3NvclJlY3Qp
OworICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBM
YXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5
TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4
VGV4dHVyZVNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwg
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3sKKyAgICBXZWJD
b3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkPihs
YXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNpemUpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoQ0NM
YXllckltcGwqIGxheWVyLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0
ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCit7CisgICAgV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXllciwg
cGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBsYXllckxpc3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29u
c3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7Ci0gICAgV2ViQ29yZTo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxh
eWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAg
d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzPExheWVyQ2hyb21pdW0sIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtPihyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
SW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RTY2lzc29y
UmVjdCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIGxheWVyLCBDQ0xheWVySW1wbCogcm9v
dExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+
JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNp
emUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29u
c3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7Ci0gICAgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1w
bCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIsIHBh
cmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotICAgIHdhbGtMYXll
cnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAg
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0
b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290U2Npc3NvclJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDA1ODVhZmY0ZmI3YzhlZjY0NmJh
NjVhNGNlZjJjNjVkNTgyZmVlYjEuLmY4MDQ1MTYxN2RkMjVmYjE0Y2YxMWZhNmVkYWU5NzQ5YWUy
NWQ3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC00MSw4
ICs0MSwxMSBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21tb24gewogcHVibGljOgogICAgIHN0
YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1
cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiBy
b290TGF5ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNo
eU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1h
eFRleHR1cmVTaXplKTsKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxD
Q0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwq
PiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBz
dGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiwgTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1
bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxp
c3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXMoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYg
bGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKKworICAgIHN0
YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJ
bXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNz
b3JSZWN0KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
Y29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rhcmdl
dChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDdkODNkMjA3ZGM2OTU0MTUyOWMxMTk4YWFk
MzE5ZWVjM2JhODc4MjUuLjJjY2JmMjIzYTYxMjYzNWQ1NjA2YTE3Yjc1MzBlODc0YTM4ZjE2OWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5j
bHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUgImNjL0NDUGFnZVNjYWxlQW5pbWF0aW9u
LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJj
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC0yMzAsMjYgKzIzMSw2IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9v
dERyYXdMYXllciwKICAgICB9CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNl
U3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvYXRSZWN0JiBy
b290RGFtYWdlUmVjdCkKLXsKLSAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAg
Ly8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBhcyB0aGUg
ZGFtYWdlIGZvcgotICAgIC8vIGFsbCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZlIHRyYW5z
Zm9ybXMuCi0gICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJh
bnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCk7Ci0gICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhhc1BlcnNwZWN0aXZl
KCkpIHsKLSAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlvbnMgZG8gbm90IHBsYXkgbmlj
ZSB3aXRoIG1hcFJlY3Qgb2YKLSAgICAgICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm1zLiBJbiB0aGlz
IHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRvCi0gICAgICAgIC8vIGp1c3QgcmVkcmF3IHRo
ZSBlbnRpcmUgc3VyZmFjZS4KLSAgICAgICAgLy8gRklYTUU6IHVzZSBjYWxjdWxhdGVWaXNpYmxl
UmVjdCB0byBoYW5kbGUgcHJvamVjdGlvbnMuCi0gICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAg
ICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNw
YWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgICAgICBz
dXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KHJv
b3REYW1hZ2VSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0OwotfQot
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxp
c3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0eSgpKTsKQEAgLTI2OCw3ICsyNDksMTYgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KEND
TGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxl
VHJhbnNmb3JtOwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdz
LmRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobV9yb290TGF5ZXJJbXBsLmdldCgpLCBt
X3Jvb3RMYXllckltcGwuZ2V0KCksIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cygpLm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3JtcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fcm9vdExheWVySW1w
bC5nZXQoKSwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0
KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemUpOworCisgICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQ
YXJ0aWFsU3dhcCB8fCBzZXR0aW5ncygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCisgICAgICAg
ICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgICAgIG1fcm9vdFNjaXNzb3JSZWN0ID0gbV9yb290
TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKworICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2lu
Z1BhcnRpYWxTd2FwKQorICAgICAgICAgICAgbV9yb290U2Npc3NvclJlY3QgPSBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgwLCAwKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpOworICAgIAorICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9yb290U2Npc3NvclJlY3QpOwogICAgIH0KIH0KIApAQCAt
MjgwLDkgKzI3MCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVy
UGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICBUUkFDRV9FVkVO
VDEoIndlYmtpdCIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMi
LCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcg
dW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKSk7CiAKLSAgICBpZiAobGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgfHwgc2V0dGluZ3MoKS5z
aG93U3VyZmFjZURhbWFnZVJlY3RzKQotICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2Vz
KG1fcm9vdExheWVySW1wbC5nZXQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgbV9y
b290RGFtYWdlUmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgbV9yb290TGF5ZXJJbXBsLT5zZXRT
Y2lzc29yUmVjdChlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdFNjaXNzb3JSZWN0KSk7CiAKICAgICAv
LyBDcmVhdGUgdGhlIHJlbmRlciBwYXNzZXMgaW4gZGVwZW5kZW5jeSBvcmRlci4KICAgICBIYXNo
TWFwPENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyUGFzcyo+IHN1cmZhY2VQYXNzTWFwOwpAQCAt
MjkxLDI0ICsyNzksMTIgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAgQ0NSZW5k
ZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CiAKICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFz
czo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOwotCi0gICAgICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFt
YWdlUmVjdDsKLSAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1Bh
cnRpYWxTd2FwKQotICAgICAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBkYW1hZ2VJblN1cmZh
Y2VTcGFjZShyZW5kZXJTdXJmYWNlTGF5ZXIsIG1fcm9vdERhbWFnZVJlY3QpOwotICAgICAgICBw
YXNzLT5zZXRTdXJmYWNlRGFtYWdlUmVjdChzdXJmYWNlRGFtYWdlUmVjdCk7Ci0KICAgICAgICAg
c3VyZmFjZVBhc3NNYXAuYWRkKHJlbmRlclN1cmZhY2UsIHBhc3MuZ2V0KCkpOwogICAgICAgICBw
YXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBJbnRSZWN0IHNjaXNz
b3JSZWN0OwotICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFs
U3dhcCkKLSAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdERhbWFn
ZVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc2Npc3NvclJlY3QgPSBJbnRSZWN0KEludFBvaW50
KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKTsKLQogICAgIGJvb2wgcmVjb3JkTWV0cmljc0ZvckZy
YW1lID0gdHJ1ZTsgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIGRpc2FibGUgdGhpcyB3aGVuIGFi
b3V0OnRyYWNpbmcgaXMgb2ZmLgotICAgIENDT2NjbHVzaW9uVHJhY2tlckltcGwgb2NjbHVzaW9u
VHJhY2tlcihzY2lzc29yUmVjdCwgcmVjb3JkTWV0cmljc0ZvckZyYW1lKTsKKyAgICBDQ09jY2x1
c2lvblRyYWNrZXJJbXBsIG9jY2x1c2lvblRyYWNrZXIoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3RT
Y2lzc29yUmVjdCksIHJlY29yZE1ldHJpY3NGb3JGcmFtZSk7CiAgICAgb2NjbHVzaW9uVHJhY2tl
ci5zZXRNaW5pbXVtVHJhY2tpbmdTaXplKENDT2NjbHVzaW9uVHJhY2tlckltcGw6OnByZWZlcnJl
ZE1pbmltdW1UcmFja2luZ1NpemUoKSk7CiAKICAgICAvLyBBZGQgcXVhZHMgdG8gdGhlIFJlbmRl
ciBwYXNzZXMgaW4gRnJvbnRUb0JhY2sgb3JkZXIgdG8gYWxsb3cgZm9yIHRlc3Rpbmcgb2NjbHVz
aW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcgZHVyaW5nIHRoZSB0cmVlIHdhbGsuCkBAIC0zMjcs
OSArMzAzLDkgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNz
ZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKIAogICAgICAgICBvY2NsdXNpb25U
cmFja2VyLmVudGVyTGF5ZXIoaXQpOwogCi0gICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJp
YnV0aW5nUmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1
dGluZ1JlbmRlclN1cmZhY2UoKSAmJiAhaXQtPnJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZh
Y2VMYXllcigqaXQsICZvY2NsdXNpb25UcmFja2VyKTsKLSAgICAgICAgZWxzZSBpZiAoaXQucmVw
cmVzZW50c0l0c2VsZigpICYmICFpdC0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkgewor
ICAgICAgICBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNpYmxlTGF5
ZXJSZWN0KCkuaXNFbXB0eSgpICYmICAhaXQtPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBpdC0+d2lsbERyYXcobV9sYXllclJlbmRlcmVyLmdldCgpLCBjb250ZXh0KCkp
OwogICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcigqaXQsICZvY2NsdXNpb25U
cmFja2VyLCBoYWRNaXNzaW5nVGlsZXMpOwogICAgICAgICB9CkBAIC00MzEsOCArNDA3LDEyIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZy
YW1lKQogICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVudFRpbWUo
KSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZShtX3Jvb3RMYXllcklt
cGwtPnJlbmRlclN1cmZhY2UoKSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1l
LnJlbmRlclBhc3Nlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3
UmVuZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXNbaV0uZ2V0KCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEND
UmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpXS5nZXQoKTsKKwor
ICAgICAgICBGbG9hdFJlY3Qgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSA9IHJlbmRl
clBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1
cmZhY2UobV9yb290U2Npc3NvclJlY3QpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdS
ZW5kZXJQYXNzKHJlbmRlclBhc3MsIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpOwor
ICAgIH0KIAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0dGluZ3MoKSkp
CiAgICAgICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVjdHNGb3JDdXJyZW50RnJh
bWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBz
ZXR0aW5ncygpKTsKQEAgLTQ4NSw3ICs0NjUsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnN3YXBCdWZmZXJzKCkKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKIAogICAgIG1fZnBz
Q291bnRlci0+bWFya0VuZE9mRnJhbWUoKTsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5z
d2FwQnVmZmVycyhlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdERhbWFnZVJlY3QpKTsKKyAgICByZXR1
cm4gbV9sYXllclJlbmRlcmVyLT5zd2FwQnVmZmVycyhlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdFNj
aXNzb3JSZWN0KSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZGlkTG9zZUNvbnRl
eHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDkwYWEwZmIwNjg1
NjFmNjkyMDljYzQ2YjkzYTViZmQ3YWI2MzliZWQuLmM3NDBhNjYyMDJmNGJkMGYxYjNkMDYwNmQz
YWViYTk0ODlkMjAwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAg
LTI0MSw3ICsyNDEsNyBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29y
dGVyOwogCi0gICAgRmxvYXRSZWN0IG1fcm9vdERhbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1f
cm9vdFNjaXNzb3JSZWN0OwogCiAgICAgT3duUHRyPENDRnJhbWVSYXRlQ291bnRlcj4gbV9mcHND
b3VudGVyOwogICAgIE93blB0cjxDQ0RlYnVnUmVjdEhpc3Rvcnk+IG1fZGVidWdSZWN0SGlzdG9y
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IGZkODk5OTBjNzE5ODE2MDY3NmE3NmY1
YmVkMjE5NmZmN2I5NmVjY2UuLjVkMzQ3MzU5MDJjYTliZTYxMGFjM2YzNWY2YTE5OTA1MzM3MTlj
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEND
UmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwq
IGxheWVyLCBDQ09jY2x1cwogCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRR
dWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAgICBib29sIGlz
UmVwbGljYSA9IGZhbHNlOwotICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHNo
YXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBzdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAg
ICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRRdWFkU3RhdGUuZ2V0KCks
IGlzUmVwbGljYSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFk
U3RhdGUucmVsZWFzZSgpKTsKIAogICAgIGlmICghc3VyZmFjZS0+aGFzUmVwbGljYSgpKQpAQCAt
NzcsNyArNzcsNyBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJm
YWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ09jY2x1cwogICAgIC8vIEFkZCByZXBsaWNh
IGFmdGVyIHRoZSBzdXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0aGUgc3VyZmFjZS4K
ICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUgPSBz
dXJmYWNlLT5jcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCk7CiAgICAgaXNSZXBsaWNhID0g
dHJ1ZTsKLSAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCByZXBsaWNhU2hhcmVk
UXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EsIHN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIHN1
cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUuZ2V0
KCksIGlzUmVwbGljYSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChyZXBsaWNh
U2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5k
ZXggNDUyYTg2MTBmNWE5ZGJjMDIxNGE4Y2RkYmZmNmYwMjU0ZmVjZGEyNi4uMDM1OGVlYzkxOGI4
ZjEwODJkMmViNDVmMGQ4N2JkOWE4OTQ2MzM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAg
LTYyLDE2ICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJn
ZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9CiAKLSAgICB2b2lk
IHNldFN1cmZhY2VEYW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3Qp
IHsgbV9zdXJmYWNlRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0gICAgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURh
bWFnZVJlY3Q7IH0KLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1JlbmRlclBhc3MoQ0NSZW5k
ZXJTdXJmYWNlKik7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFjZTsKICAg
ICBDQ1F1YWRMaXN0IG1fcXVhZExpc3Q7CiAgICAgVmVjdG9yPE93blB0cjxDQ1NoYXJlZFF1YWRT
dGF0ZT4gPiBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Q7Ci0gICAgRmxvYXRSZWN0IG1fc3VyZmFjZURh
bWFnZVJlY3Q7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IEND
UmVuZGVyUGFzc0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCA5NDNj
NTNmYmYwODI3ZTEyNmE3YjYyZWUxOGQ4NmJmM2QyOGY1NzhjLi5kNjJmNWY5ZGIzNmIxNjZhODcy
ZTg4OTcwNDg1OThiNzZkODRiMGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAK
QEAgLTM3LDExICszNywxNSBAQAogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2lu
Y2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3VzaW5nIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJXaWR0aCA9IDI7CkBAIC0xMzgsMjAg
KzE0Miw2IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJl
KCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNrZ3JvdW5kVGV4dHVyZSAmJiBtX2JhY2tncm91bmRU
ZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNWYWxpZChtX2Nv
bnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwogfQogCi12b2lkIEND
UmVuZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSBjb25zdAotewot
ICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQo
KS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51
c2luZ1BhcnRpYWxTd2FwKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9
IG1fY2xpcFJlY3Q7Ci0gICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChzdXJmYWNl
RGFtYWdlUmVjdCk7Ci0gICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5j
bG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCkpOwotICAgIH0gZWxzZSBpZiAobGF5ZXJS
ZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VS
ZWN0KSk7Ci0gICAgZWxzZSBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdM
YXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIGxheWVyUmVuZGVy
ZXItPnNldFNjaXNzb3JUb1JlY3QobV9jbGlwUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBHTEMo
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotfQotCiBTdHJpbmcgQ0NSZW5k
ZXJTdXJmYWNlOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlJl
bmRlclN1cmZhY2UoaWQ9JWksb3duZXI9JXMpIiwgbV9vd25pbmdMYXllci0+aWQoKSwgbV9vd25p
bmdMYXllci0+ZGVidWdOYW1lKCkudXRmOCgpLmRhdGEoKSk7CkBAIC0yNTEsMTYgKzI0MSwyMiBA
QCBib29sIENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVz
Y2VuZGFudCgpIGNvbnN0CiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRlclN1
cmZhY2U6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1
ZSA9IGZhbHNlOwotICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKG9yaWdpblRy
YW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCksIGRy
YXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNy
ZWF0ZShvcmlnaW5UcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBt
X3NjaXNzb3JSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKIFBhc3NPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNoYXJlZFF1
YWRTdGF0ZSgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAgIHJldHVy
biBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVw
bGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwgY2xpcFJlY3QoKSwgZHJhd09wYWNp
dHkoKSwgaXNPcGFxdWUpOworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJl
cGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJl
Y3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOworfQorCitGbG9h
dFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3Vy
ZmFjZShjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkgY29uc3QKK3sKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBtX3NjcmVl
blNwYWNlVHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICByZXR1cm4gQ0NNYXRoVXRpbDo6cHJvamVj
dENsaXBwZWRSZWN0KGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSwgcm9vdFNjaXNzb3JSZWN0
KTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYg
cXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wgZm9yUmVw
bGljYSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgQ0NSZW5kZXJT
dXJmYWNlOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRT
dGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sIGZvclJlcGxpY2EpCiB7CiAgICAgQVNTRVJUKCFm
b3JSZXBsaWNhIHx8IGhhc1JlcGxpY2EoKSk7CiAKQEAgLTI5MCw3ICsyODYsNyBAQCB2b2lkIEND
UmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYQogCiAgICAgaW50IG1hc2tUZXh0dXJlSWQgPSBtYXNrTGF5ZXIgPyBt
YXNrTGF5ZXItPmNvbnRlbnRzVGV4dHVyZUlkKCkgOiAwOwogCi0gICAgcXVhZExpc3QuYXBwZW5k
U3VyZmFjZShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwg
Y29udGVudFJlY3QoKSwgbV9vd25pbmdMYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGZvclJlcGxp
Y2EsIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCkpOworICAg
IHF1YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShz
aGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIG1fb3duaW5nTGF5ZXIsIGZvclJlcGxpY2Es
IGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCkpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDg1NWZjY2U3ZTQzNTNiOGRkZWQ1MWRl
ZTBlZWQwYzQwMDM4MmExNmUuLmM0YmI5OTk2ZjlkZDg3YmU4ZDA1OTA4NWMzNzk0NDFmMzA5MWE5
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC02MCw4ICs2MCw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwogICAgIGJvb2wgaGFzVmFs
aWRCYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRTY2lzc29yUmVjdChM
YXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0
KSBjb25zdDsKLQogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wU3VyZmFj
ZShUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKQEAgLTExMiw2ICsxMTAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAKKyAgICB2
b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1fc2Npc3Nv
clJlY3QgPSBzY2lzc29yUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorCiAgICAgdm9pZCBzZXRDb250ZW50UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CiAKQEAgLTEzOCwxMiArMTM5LDEzIEBAIHB1Ymxp
YzoKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGVTaGFyZWRRdWFkU3Rh
dGUoKSBjb25zdDsKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGVSZXBs
aWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBz
dXJmYWNlRGFtYWdlUmVjdCBwYXJhbWV0ZXIgd2hlbiB0aGUgdmFsdWUgaXMgcmVtb3ZlZCBmcm9t
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkLgotICAgIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3Vs
bGVyJiwgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVy
JiwgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EpOworICAgIEZsb2F0UmVjdCBj
b21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShjb25zdCBGbG9hdFJlY3QmIHJv
b3RTY2lzc29yUmVjdCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllckltcGwqIG1fb3du
aW5nTGF5ZXI7CiAKKyAgICAvLyBVc2VzIHRoaXMgc3VyZmFjZSdzIHNwYWNlLgogICAgIEludFJl
Y3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZDsKIApA
QCAtMTYyLDcgKzE2NCwxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybXNBcmVBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmls
dGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVy
czsKKworICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZh
Y2UuCiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OworCisgICAgLy8gRHVyaW5nIGRyYXdpbmcsIGlk
ZW50aWZpZXMgdGhlIHJlZ2lvbiBvdXRzaWRlIG9mIHdoaWNoIG5vdGhpbmcgc2hvdWxkIGJlIGRy
YXduLgorICAgIC8vIFVzZXMgdGhlIHNwYWNlIG9mIHRoZSBzdXJmYWNlJ3MgdGFyZ2V0IHN1cmZh
Y2UuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gbV9sYXllckxpc3Q7CiAKICAgICAvLyBUaGUgbmVhcmVzdCBhbmNlc3RvciB0YXJnZXQgc3Vy
ZmFjZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhpcyBzdXJmYWNlLCBhbmQg
dGhhdCBpcyBnb2luZwpAQCAtMTcxLDkgKzE4MCw2IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8
Q0NEYW1hZ2VUcmFja2VyPiBtX2RhbWFnZVRyYWNrZXI7CiAKLSAgICAvLyBTdG9yZWQgaW4gdGhl
ICJzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIGRhbWFnZSBjYW4gYmUgdXNlZCBmb3Igc2Npc3Nv
cmluZy4KLSAgICBGbG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwotCiAgICAgLy8gRm9yIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnMKICAgICBpbnQgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhp
c3Rvcnk7CiAgICAgaW50IG1fY3VycmVudExheWVySW5kZXhIaXN0b3J5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCmluZGV4IGRmMDBjMGUwZmEzNjU2MjFh
MzY2M2JjMjk2NmYyMzdjM2I3NWFiNWYuLjU3NDIzODJmNjYzN2JlMTlkYmFjMzEwNjhhMTBiOTE4
OWUxOWNlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5j
cHAKQEAgLTI5LDE1ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25Q
dHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNl
RGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3Jv
dW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKK1Bhc3NPd25QdHI8Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3Qs
IENDTGF5ZXJJbXBsKiBsYXllciwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKIHsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwg
cXVhZFJlY3QsIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNhLCBmaWx0ZXJzLCBi
YWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCkpOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5
ZXIsIGlzUmVwbGljYSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQp
KTsKIH0KIAotQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFk
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3Vu
ZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCitDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwg
Ym9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywg
dW5zaWduZWQgbWFza1RleHR1cmVJZCkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRl
LCBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFkUmVjdCkKICAgICAsIG1fbGF5ZXIobGF5
ZXIpCi0gICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KQogICAgICwg
bV9pc1JlcGxpY2EoaXNSZXBsaWNhKQogICAgICwgbV9maWx0ZXJzKGZpbHRlcnMpCiAgICAgLCBt
X2JhY2tncm91bmRGaWx0ZXJzKGJhY2tncm91bmRGaWx0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKaW5kZXggMGEwMTI4MWZhNGY2OWRlMmNkNmQyOTFmZjFh
NjE2YjY5NjdiOTRiNi4uZWRhZWUyNDE5NjgwNzI0MjdlOTc3NjM5OGI0NjRkMjVkYWY3NTExMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCkBAIC0zNywyNCAr
MzcsMTkgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0
IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJl
Y3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRl
cnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25z
dCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKIAogICAg
IENDTGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICBib29s
IGlzUmVwbGljYSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CiAgICAgdW5zaWduZWQg
bWFza1RleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVJZDsgfQogCi0gICAg
Ly8gVGhlIHN1cmZhY2UgZGFtYWdlIHJlY3QgZm9yIHRoZSB0YXJnZXQgc3VyZmFjZSB0aGlzIHF1
YWQgZHJhd3MgaW50by4KLSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHJl
bmRlciBzdXJmYWNlcyBnZXQgdGhlaXIgb3duIGxheWVyIHR5cGUuCi0gICAgY29uc3QgRmxvYXRS
ZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJl
Y3Q7IH0KLQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91
bmRGaWx0ZXJzOyB9CiAKIHByaXZhdGU6Ci0gICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25z
dCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsK
KyAgICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNv
bnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpOwogCiAg
ICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7Ci0gICAgRmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJl
Y3Q7CiAgICAgYm9vbCBtX2lzUmVwbGljYTsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91
bmRGaWx0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCmluZGV4IDNhNDU1MTU0MmE2MTg2M2RiYzdiYWY0
NDZhN2RkYjU5NGQ5M2FkOGUuLmExYWEzM2Y2YjYxZjM3MmZjZTM3NjE0NTRjNzFhOWUyODNmMjc4
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHdpbmRvd01hdHJpeCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2luZG93TWF0cml4OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5EcmF3
aW5nRnJhbWUoQ0NSZW5kZXJTdXJmYWNlKiBkZWZhdWx0UmVuZGVyU3VyZmFjZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0
IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6
ZSkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCmluZGV4IDNmMjgzN2Uw
NTIwYmY4NDZiNDczZWExZTczODcxNWY2ZTgwOTYwM2YuLjUzNmIzOTg2N2Q1MDIyMDViMTIyNzk3
ZDBiMTM1YmFhNjNlYzg0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAK
QEAgLTMxLDE2ICszMSwxNiBAQCB1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+
IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5z
Zm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwg
ZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCitQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRl
PiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQogewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NTaGFyZWRRdWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVy
UmVjdCwgY2xpcFJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NTaGFyZWRRdWFkU3RhdGUocXVhZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVy
UmVjdCwgc2Npc3NvclJlY3QsIG9wYWNpdHksIG9wYXF1ZSkpOwogfQogCi1DQ1NoYXJlZFF1YWRT
dGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1
YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9y
bSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxv
YXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCitDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFk
U3RhdGUoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYg
bGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9v
bCBvcGFxdWUpCiAgICAgOiBtX3F1YWRUcmFuc2Zvcm0ocXVhZFRyYW5zZm9ybSkKICAgICAsIG1f
bGF5ZXJUcmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pCiAgICAgLCBtX2xheWVyUmVjdChsYXllclJl
Y3QpCi0gICAgLCBtX2NsaXBSZWN0KGNsaXBSZWN0KQorICAgICwgbV9zY2lzc29yUmVjdChzY2lz
c29yUmVjdCkKICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQogICAgICwgbV9vcGFxdWUob3BhcXVl
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKaW5kZXggYTE0YjE3ZGFhY2YxMGM3
YjljNTkzYTUzMGEyYTI2YmI1ODUxMTU5OS4uNDU0MGEwNmY4NGVlNTJkZmFjNWRlMzU2MDQ4ZWJi
MThjNThkYjcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC0zNiwyNyAr
MzYsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGUgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDU2hhcmVkUXVhZFN0YXRlKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBs
YXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9w
YXF1ZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3Bh
Y2l0eSwgYm9vbCBvcGFxdWUpOwogCiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IHF1YWRzIGlu
IGEgQ0NEcmF3UXVhZCBzaG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KICAgICBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9xdWFkVHJhbnNmb3JtOyB9CiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IGxheWVyUmVj
dCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
clRyYW5zZm9ybTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJSZWN0OyB9Ci0gICAgLy8gVXNhZ2U6IGlmIGNsaXBSZWN0IGlzIGVtcHR5LCB0
aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4KLSAgICBjb25zdCBJbnRSZWN0JiBjbGlw
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBz
Y2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KIAogICAgIGZsb2F0
IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICBib29sIGlzT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KICAgICBib29sIGlzTGF5ZXJBeGlzQWxpZ25l
ZEludFJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwg
Ym9vbCBvcGFxdWUpOworICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qs
IGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7
CiAKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcXVhZFRyYW5zZm9ybTsK
ICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGF5ZXJUcmFuc2Zvcm07CiAg
ICAgSW50UmVjdCBtX2xheWVyUmVjdDsKLSAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisgICAgSW50
UmVjdCBtX3NjaXNzb3JSZWN0OwogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBib29sIG1fb3Bh
cXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1h
Z2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdl
VHJhY2tlclRlc3QuY3BwCmluZGV4IDU2ZDg1ZmFmYTlmZDdiOWFjN2YyZjI3MjhkNmNhZjY3Yjc5
NmFiMTMuLjA4ZWEwMzUyOGNiNDhlZGI1MzU1MWQ3OGZjNTdmMTFmM2E2YzJlZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNw
cApAQCAtNTgsNyArNTgsOCBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xheQogCiAgICAgcm9vdC0+
cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOwogICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHJvb3QpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZs
YXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAm
bGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCiB2b2lkIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJvb3QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcAppbmRleCAxMDVj
NzE4NmU0Yzk0MzVlODllYjMzMGNhMjZjOTAxOWIyZDI1NTI1Li41ZmM2MjVmMjIxOTAxN2E0OGRj
MDE2NjNlZTdlZWIzNmRjZDI4YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTE0MCwxMCArMTQwLDExIEBAIFRF
U1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgc2ltcGxlVHJlZSkKICAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5
ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxh
eWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEp
OwpAQCAtMTg3LDEwICsxODgsMTEgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4
VHJlZSkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0Owog
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9v
dExheWVyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAg
IGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNU
X0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOwpAQCAtMjQ2LDEwICsyNDgsMTEgQEAgVEVTVChD
Q0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFjZSkKICAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgp
LCByb290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBs
YXllckxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+
cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9u
dCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwg
MCwgLTEsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggZmNlOTA0NmM3ZWIwYzUzNjg4Nzli
NzI3OWVmY2RhYzZkNzhmZWFjZi4uMWQwNjlhNWJlM2FiNTQ5ZjBkZjE4NjE5MmRiYmVlOTk1NmM4
M2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0zMSw3ICszMSwxMiBAQAogI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1
ZGUgImNjL0NDTWF0aFV0aWwuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAi
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCiAKICNp
bmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CkBAIC01OSw3
ICs2NCw4IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgoY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKQEAgLTE3NSw3ICsxODEsNyBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBDYXNlIDc6IFZlcmlmeSB0aGF0IHBvc2l0
aW9uIHByZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0uCi0gICAgLy8gICAgICAgICBU
aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcworICAgIC8vICAgICAgICAg
VGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMgZG9l
cyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcwogICAgIC8vICAgICAgICAgc3RpbGwgd29ydGgg
dGVzdGluZyB0byBkZXRlY3QgYWNjaWRlbnRhbCByZWdyZXNzaW9ucy4KICAgICBleHBlY3RlZFJl
c3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJh
bnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CiAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50KDUuMGYsIDEuMmYpLCBJbnRT
aXplKDEwLCAxMiksIGZhbHNlKTsKQEAgLTMxOCw2ICszMjQsNTU4IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2Up
CiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFu
c2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0Tm9D
bGlwKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRo
cmVhZDsKKworICAgIC8qCisgICAgICBMYXllcnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKwor
ICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAg
ICAgICAgIDIgfCAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAg
ICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0t
LS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAg
fCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tKworCisgICAgICAgICBMYXllcnMgMSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAg
ICAqLworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
Mik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgzKTsKKworICAgIEludFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIElu
dFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRS
ZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAg
cm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0
KCkpKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9v
dFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFj
aXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgo
KSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwor
ICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwg
Z3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUo
Z3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBn
cmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCogY2hp
bGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdy
YW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNl
KCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBWZWN0b3I8
Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxDQ0xh
eWVySW1wbCo+IGxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7CisgICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisKKyAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisKKyAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAg
ICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hp
bGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDJV
KTsKKyAgICAKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisKKyAgICAvLyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBj
aGlsZHJlbidzIGJvdW5kcworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50
UmVjdCgwLCAwLCBncmFuZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBn
cmFuZENoaWxkUmVjdC55KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEFTU0VS
VF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKwor
ICAgIEFTU0VSVF9FUShyb290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpLT5j
bGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBBU1NFUlRfRkFMU0Uo
cm9vdC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkUHRyLT51
c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZFB0ci0+dXNl
c0xheWVyQ2xpcHBpbmcoKSk7CisgICAgCisgICAgLy8gRGFtYWdlIHRoZSBlbnRpcmUgc2NyZWVu
CisgICAgSW50UmVjdCByb290RGFtYWdlKHJvb3RSZWN0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAv
LyBjaGlsZCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBhIGNsaXAgcmVjdCwgdGhlcmVmb3JlIGl0IHdp
bGwgYmUgY29tcHV0ZWQgYXMgaW50ZXJzZWN0aW9uCisgICAgLy8gYmV0d2VlbiByb290IHN1cmZh
Y2UncyBjb250ZW50cmVjdCBhbmQgY2hpbGQgc3VyZmFjZSdzIGRyYXdhYmxlIGNvbnRlbnQgcmVj
dC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpLCByb290UmVjdC53
aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgp
KSk7CisKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290UmVj
dCkpOworCisgICAgLy8gVGhlIGRhbWFnZSBpcyB0aGUgZW50aXJlIHJvb3RSZWN0LCBidXQgY2hp
bGQgbGF5ZXIgc3RhcnRzIGF0IGFuIG9mZnNldC4KKyAgICAvLyBFdmVuIHRob3VnaCBpdCBoYXMg
Ym91bmRzLCBpdCBpcyBub3QgY2xpcHBpbmcgdG8gYm91bmRzIHNvIGl0cyBjaGlsZHJlbgorICAg
IC8vICh3aGljaCBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMpIGV4dGVuZCB0aGUgc2Npc3NvciBy
ZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNo
aWxkUmVjdC55KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIHdpbGwgaGF2ZSB0aGUgc2FtZSBz
Y2lzc29yIHJlY3QgYXMgaXQgZG9lc24ndCBoYXZlIGEgc3VyZmFjZQorICAgIC8vIG9mIGl0cyBv
d24KKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkg
LSBjaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisgICAgcm9vdERh
bWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJv
b3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBzY2lzc29yCisg
ICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAor
ICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRoaW4gY2hpbGQK
KyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3JzIGFyZSBub3Qg
Y29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIC8vIEVudGly
ZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVYUEVDVF9FUShj
aGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdl
KTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllcgor
ICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKworICAgIC8v
IEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0aCBkaWZmZXJl
bnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJl
Y3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAg
IC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNlLCBzbyBpdHMgc2Np
c3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hp
bGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3Qu
eCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwg
cm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNo
aWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCA4MCwgODApOworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUg
bm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBF
bnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1Rf
RVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERh
bWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5
ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAg
ICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlm
ZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hp
bGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisK
KyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRz
IHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFu
ZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRS
ZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRo
KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9u
ZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50
UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3Vs
dCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5k
YXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVj
dC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFn
ZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywg
c28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdl
CisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJv
b3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBy
b290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisg
ICAgLy8gQ2hpbGRyZW4ncyBjb250ZW50IHJlY3RzIGFyZSBiaWdnZXIgdGhhbiB0aGUgcm9vdCdz
IHNvIHRoZXkgZG9uJ3QgY2xpcCB0aGUgZGFtYWdlIHJlY3QsIGJ1dCBjaGFuZ2UgaXRzIG9mZnNl
dC4KKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERh
bWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCks
IHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworICAgIEVYUEVDVF9F
UShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0g
Y2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdl
LndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQoreworICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKKworICAgIC8qCisgICAgICBMYXll
cnMgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgIDEgfAorICAgICAgICAgfCAgKy0tLS0t
LS0tLS0tKyAgICAgfAorICAgICAgICAgfCAgfCAgICAgICAgIDIgfCAgICAgfAorICAgICAgICAg
fCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgfCAgIDMgICAgICAgICAg
ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAg
fCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKyAgICAgfAorICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgICBMYXllcnMg
MSwgMiBoYXZlIHJlbmRlciBzdXJmYWNlcworICAgICAqLworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIEludFJlY3Qgcm9v
dFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAs
IDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKKworICAg
IHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RS
ZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9v
dFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVp
Z2h0KCkpKSk7CisKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7
CisgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRS
ZWN0LnkoKSkpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRC
b3VuZHMoSW50U2l6ZShjaGlsZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7Cisg
ICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9u
KEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3Jh
bmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBD
Q0xheWVySW1wbCogZ3JhbmRDaGlsZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBjaGls
ZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNo
aWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7Cisg
ICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAgICBW
ZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOworCisgICAg
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQo
KSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIEFTU0VS
VF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJvb3Qt
PnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpLCAyVSk7CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xpcHBpbmcgdG8gaXRzIGJv
dW5kcworICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290UmVjdCk7CisKKyAgICAv
LyBMYXllcidzIGNsaXBSZWN0IGlzIGEgdW5pb24gb2YgYWxsIGl0cyBjaGlsZHJlbidzIGJvdW5k
cworICAgIEFTU0VSVF9FUShjaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCBncmFu
ZENoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC55
KCkgKyBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIEFTU0VSVF9FUShncmFuZENoaWxk
UHRyLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAgIEFTU0VSVF9FUShy
b290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
CisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290
J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwg
cm9vdFJlY3QpOworICAgIAorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5n
KCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAg
IAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFn
ZShyb290UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAg
IAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAg
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsK
KworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxh
eWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5k
cywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAo
d2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290
UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJl
Y3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Npc3Nv
ciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAgICAvLyBvZiBpdHMgb3duCisg
ICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwg
cm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gY2hp
bGRSZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZQorICAgIHJvb3REYW1hZ2Ug
PSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFt
YWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1wdHkgc2Npc3NvcgorICAgIEVY
UEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICBF
WFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAg
RVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsK
KyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ugd2l0aGluIGNoaWxkCisgICAg
cm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1
dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFt
YWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQ
dHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7Cisg
ICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBF
WFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRp
cmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9m
ZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0Lnko
KSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBH
cmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFjZSwgc28gaXRzIHNjaXNzb3Ig
cmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRy
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3RE
YW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9uZCBjaGlsZAor
ICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgwKTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBj
b21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJl
IGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNo
aWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2Up
OworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisg
ICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8g
RW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVu
dCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVj
dC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAg
Ly8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNvIGl0cyBzY2lz
c29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCBy
b290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBiZXlvbmQgcm9v
dAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEwLCAxMTApOworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUg
bm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBS
b290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBzbyBpdHMgY29udGVudFJlY3Qg
d2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4KKyAgICAvLyBSZXN1bHQgaXMg
dGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lk
dGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgp
KSk7CisgICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5ZXIgY2xpcHBpbmcsIHNvIGl0
cyBjb250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZQorICAg
IC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxh
eWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
cm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERh
bWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8v
IE5vdyB0aGUgc2Npc3NvciByZWN0cyBhcmUgY2xpcHBlZCBieSBzdXJmYWNlcyBjb250ZW50UmVj
dAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFt
YWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwg
cm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJv
b3REYW1hZ2UueSgpKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnko
KSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9v
dFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworfQorCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9ybSkKK3sK
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisK
KyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwK
KyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAy
IHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8
ICB8IHwgICAzLDQgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0t
LS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KworICAgICAgICAgTGF5ZXJzIDEsIDIgYW5kIDMgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAg
Ki8KKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEp
OworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIp
OworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMyk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMiA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoNCk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAg
ICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENo
aWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9v
dC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOwor
ICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0Lmhl
aWdodCgpKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJl
bmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXpl
KHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0
T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0Lndp
ZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDAp
KTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54
KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC41
Zik7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoZ3JhbmRDaGlsZFJlY3Qud2lk
dGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZDItPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5k
Q2hpbGRSZWN0LngoKSwgZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZDItPnNl
dE9wYWNpdHkoMC41Zik7CisgICAgZ3JhbmRDaGlsZDItPnNldEJvdW5kcyhJbnRTaXplKGdyYW5k
Q2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRD
aGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZFB0
ciA9IGNoaWxkLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkUHRyID0gZ3JhbmRD
aGlsZC5nZXQoKTsKKworICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQyLnJlbGVh
c2UoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFza3NUb0Jv
dW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgeworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBp
bnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBsYXll
clNvcnRlcjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290Lmdl
dCgpKTsKKworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3QpOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBB
U1NFUlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYW5k
Q2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAzVSk7CisgICAgCisgICAgLy8gTm93IHJvb3QgaXMgY2xp
cHBpbmcgdG8gaXRzIGJvdW5kcworICAgIEFTU0VSVF9FUShyb290LT5jbGlwUmVjdCgpLCByb290
UmVjdCk7CisKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwg
MCwgY2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRoKCkgLCBjaGlsZFJlY3QueSgp
ICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kY2hpbGQgbm93IGNs
aXBzCisgICAgQVNTRVJUX0VRKGdyYW5kQ2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJlY3QoMCwg
MCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGls
ZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIEFTU0VSVF9FUShy
b290LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOwor
CisgICAgLy8gQ2hpbGQgc3VyZmFjZSdzIGNsaXBwaW5nIHJlY3QgaXMgbm93IHNldCB0byByb290
J3MKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwg
cm9vdFJlY3QpOworICAgIAorICAgIEFTU0VSVF9UUlVFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5n
KCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAg
IAorICAgIC8vIERhbWFnZSB0aGUgZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFn
ZShyb290UmVjdCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAg
IAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3RSZWN0KSk7CisgICAg
CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdFJlY3QpKTsK
KworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290UmVjdCwgYnV0IGNoaWxkIGxh
eWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0aG91Z2ggaXQgaGFzIGJvdW5k
cywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMgY2hpbGRyZW4KKyAgICAvLyAo
d2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQgdGhlIHNjaXNzb3IgcmVjdAor
ICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290
UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJl
Y3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBpcyBub3cgc2Npc3NvcmVkIGJ5IHRoZSBy
ZW5kZXIgc3VyZmFjZQorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpIC0gZ3JhbmRD
aGlsZFJlY3QueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkgLSBncmFuZENo
aWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAgICByb290RGFtYWdl
ID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERh
bWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNjaXNzb3IKKyAgICBF
WFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwg
MCwgMCwgMCkpOworICAgIAorICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhpbiBjaGlsZAorICAg
IHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21w
dXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gRW50aXJlIGRh
bWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQRUNUX0VRKGNoaWxk
UHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwor
ICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyCisgICAg
RVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOworCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRoIGRpZmZlcmVudCBv
ZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9v
dERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55
KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8g
R3JhbmQgY2hpbGQgbm93IGdldHMgc2Npc3NvcmVkIGJ5IGl0cyB0YXJnZXQgc3VyZmFjZSBhcyB3
ZWxsIGFzIHJvb3QKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0g
Y2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0gZ3JhbmRDaGlsZFJlY3QueCgpLCBy
b290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBQYXJ0
aWFsIGRhbWFnZSBiZXlvbmQgY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAs
IDgwLCA4MCk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAor
ICAgIC8vIFNjaXNzb3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEo
cm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qg
c3VyZmFjZQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5z
Y2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJl
Y3QgaXMgd2l0aGluIHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgp
LCByb290RGFtYWdlKTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhl
IGxheWVyLCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRy
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3RE
YW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNjaXNzb3Jl
ZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UgYXMgd2VsbCBhcyByb290CisgICAgRVhQRUNUX0VRKGdy
YW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGls
ZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lk
dGgoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hp
bGRSZWN0LnkoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIHJvb3QKKyAgICBy
b290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEwKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMgYXJlIG5vdCBjb21w
dXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gUm9vdCBzdXJm
YWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRzIGNvbnRlbnRSZWN0IHdpbGwgYmUg
dXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9v
dCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBF
Q1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBy
b290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAg
IAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNsaXBwaW5nLCBzbyBpdHMgY29udGVu
dCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UKKyAgICAvLyBSZXN1
bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9vdCBsYXllciBib3Vu
ZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1h
Z2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgp
LCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgpKSk7CisKKyAgICAvLyBOb3cgdGhl
IHNjaXNzb3IgcmVjdHMgYXJlIGNsaXBwZWQgYnkgc3VyZmFjZXMgY29udGVudFJlY3QKKyAgICBF
WFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkg
LSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3RSZWN0
LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdl
LnkoKSkpOworCisgICAgLy8gR3JhbmRjaGlsZCdzIHNjaXNzb3IgcmVjdCBpcyBjbGlwcGVkIGJ5
IGl0cyB0YXJnZXQgc3VyZmFjZQorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFn
ZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVj
dC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKK30KKwog
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGlj
YSkKIHsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CkBAIC01NDUsNyArMTEwMywxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9yQ2xpcExheWVyKQogICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBGbG9hdFJlY3Qg
ZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIncyBj
b250ZW50IGlzIGVudGlyZWx5IG91dHNpZGUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdCwgc28gdGhl
IGludGVybWVkaWF0ZQogICAgIC8vIHJlbmRlciBzdXJmYWNlIHNob3VsZCBoYXZlIGJlZW4gcmVt
b3ZlZC4gUmVuZGVyIHN1cmZhY2VzIHdpdGhvdXQgY2hpbGRyZW4gb3IgdmlzaWJsZQpAQCAtNTcz
LDcgKzExMzQsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRl
clN1cmZhY2VMaXN0Rm9yVHJhbnNwYXJlbnRDaGlsZCkKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIC8vIFNpbmNl
IHRoZSBsYXllciBpcyB0cmFuc3BhcmVudCwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2Uo
KSBzaG91bGQgbm90IGhhdmUgZ290dGVuIGFkZGVkIGFueXdoZXJlLgogICAgIC8vIEFsc28sIHRo
ZSBkcmF3YWJsZSBjb250ZW50IHJlY3Qgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXh0ZW5kZWQgYnkg
dGhlIGNoaWxkcmVuLgpAQCAtNjAxLDE0ICsxMTY0LDE0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5Rm9yY2VSZW5kZXJTdXJmYWNlKQogICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0
dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBFWFBFQ1RfVFJVRShyZW5k
ZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCksIDFVKTsKIAogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xl
YXIoKTsKICAgICByZW5kZXJTdXJmYWNlMS0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKGZhbHNlKTsK
LSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CiAgICAgRVhQRUNUX0ZBTFNFKHJlbmRlclN1cmZhY2UxLT5yZW5k
ZXJTdXJmYWNlKCkpOwogICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSwgMFUpOwogfQpAQCAtNjY2LDcgKzEyMjksMTEgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OworCiAKICAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsK
ICAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5p
ZCgpKTsKQEAgLTcyNSw3ICsxMjkyLDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQogICAgIHBhcmVu
dC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygp
KSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAot
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBBU1NFUlRfRVEoMlUsIHJlbmRl
clN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsKQEAgLTc3Niw3ICsxMzQ1LDcgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3VyZmFjZVdp
dGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOwogCiAgICAgLy8gV2l0aG91dCBhbiBhbmltYXRpb24sIHdlIHNob3VsZCBj
dWxsIGNoaWxkIGFuZCBncmFuZENoaWxkIGZyb20gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
CiAgICAgQVNTRVJUX0VRKDFVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CkBAIC03
OTUsNyArMTM2NCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xp
cFJlY3RDdWxsc1N1cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFdpdGggYW4gYW5pbWF0
aW5nIHRyYW5zZm9ybSwgd2Ugc2hvdWxkIGtlZXAgY2hpbGQgYW5kIGdyYW5kQ2hpbGQgaW4gdGhl
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuCiAgICAgQVNTRVJUX0VRKDNVLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSk7CkBAIC04NTUsNyArMTQyNCwxMCBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9MYXll
cnMpCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJl
bnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKKwogCiAgICAgRVhQ
RUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjAp
KSwgZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCkpOwogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQyLT5jbGlw
UmVjdCgpKTsKQEAgLTkyNyw3ICsxNDk5LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCiAgICAg
cGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkp
OwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIEFTU0VSVF9UUlVFKGdy
YW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQy
LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTQwOCw3ICsxOTgyLDcgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRob3V0UHJlc2VydmVzM2Qp
CiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRl
clN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfRkFMU0UoZnJvbnRGYWNpbmdDaGls
ZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE1MTMsNyArMjA4Nyw3IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkKQog
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5kZXJT
dXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZyb250RmFjaW5nQ2hpbGQt
PnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTk4LDcgKzIxNzIsOSBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdUcmFuc2Zv
cm1zKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBFWFBF
Q1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX1RSVUUoYW5pbWF0
aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE2NzAsNyArMjI0Niw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNl
cnZlczNkRm9yRmxhdHRlbmluCiAgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8g
VmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfVFJV
RShmcm9udEZhY2luZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmlu
ZGV4IGM3ZGYxOTE1Y2NkNzZkZWZiODdkMjkwYWE4YTViMjRhYTQ2MmZlMjQuLjdmYWE0M2QyN2Qx
NjY4YzhhYWMzMGRkMTJkMWM0OTQyOTE2MzIzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0zNiwx
MCArMzYsMTIgQEAKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9D
Q1Njcm9sbGJhckxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHku
aCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
VGV4dHVyZUxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5j
bHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllcklt
cGwuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CiAjaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWUuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VmlkZW9GcmFtZVByb3ZpZGVyLmg+CkBAIC00OSw2ICs1MSwxMiBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
VGVzdHM7CiAKK3VzaW5nIDo6dGVzdGluZzo6TW9jazsKK3VzaW5nIDo6dGVzdGluZzo6UmV0dXJu
OwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1iZXI7Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7
Cit1c2luZyA6OnRlc3Rpbmc6Ol87CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50IHsKQEAgLTcwLDYgKzc4LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURF
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBwb3N0U2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlc1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChzaXplX3QpIE9WRVJSSURFIHsgfQogCisg
ICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0KGJv
b2wgcGFydGlhbFN3YXAsIFBhc3NSZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dCwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKKyAgICB7CisgICAgICAgIEND
U2V0dGluZ3Mgc2V0dGluZ3M7CisKKyAgICAgICAgc2V0dGluZ3MucGFydGlhbFN3YXBFbmFibGVk
ID0gcGFydGlhbFN3YXA7CisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15
SG9zdEltcGwgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIHRoaXMpOwor
CisgICAgICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGdyYXBoaWNzQ29u
dGV4dCwgVW50aHJvdHRsZWRVcGxvYWRlcik7CisgICAgICAgIG15SG9zdEltcGwtPnNldFZpZXdw
b3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworCisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IHJvb3RQdHI7CisKKyAgICAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOwor
ICAgICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgcm9vdC0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwLCAxMCkpOworICAgICAgICByb290
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIG15SG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBteUhvc3RJbXBsLnJlbGVhc2UoKTsK
KyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJz
aXZlKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB7CiAgICAgICAgIEFTU0VSVF9FUShsYXllci0+
c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgpKTsKQEAgLTExMDEsNiArMTEzMSwyODggQEAgVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcFJlY2VpdmVzRGFtYWdlUmVjdCkK
ICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRTd2FwUmVjdC5oZWlnaHQoKSwgYWN0dWFsU3dhcFJlY3Qu
aGVpZ2h0KCkpOwogfQogCitjbGFzcyBGYWtlTGF5ZXJXaXRoUXVhZHMgOiBwdWJsaWMgQ0NMYXll
ckltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEZha2VMYXllcldpdGhRdWFk
cz4gY3JlYXRlKGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VMYXllcldpdGhRdWFk
cyhpZCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBx
dWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYp
IE9WRVJSSURFCisgICAgeworICAgICAgICBjb25zdCBDb2xvciBncmF5KDEwMCwgMTAwLCAxMDAp
OworICAgICAgICBJbnRSZWN0IHF1YWRSZWN0KDAsIDAsIDUsIDUpOworICAgICAgICBPd25QdHI8
Q0NEcmF3UXVhZD4gbXlRdWFkID0gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRR
dWFkU3RhdGUsIHF1YWRSZWN0LCBncmF5KTsKKyAgICAgICAgcXVhZExpc3QuYXBwZW5kKG15UXVh
ZC5yZWxlYXNlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGYWtlTGF5ZXJXaXRoUXVhZHMo
aW50IGlkKQorICAgICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgIHsKKyAgICB9Cit9OworCitj
bGFzcyBNb2NrQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVi
bGljOgorICAgIE1PQ0tfTUVUSE9EMSh1c2VQcm9ncmFtLCB2b2lkKFdlYkdMSWQgcHJvZ3JhbSkp
OworICAgIE1PQ0tfTUVUSE9ENSh1bmlmb3JtNGYsIHZvaWQoV0dDM0RpbnQgbG9jYXRpb24sIFdH
QzNEZmxvYXQgeCwgV0dDM0RmbG9hdCB5LCBXR0MzRGZsb2F0IHosIFdHQzNEZmxvYXQgdykpOwor
ICAgIE1PQ0tfTUVUSE9ENCh1bmlmb3JtTWF0cml4NGZ2LCB2b2lkKFdHQzNEaW50IGxvY2F0aW9u
LCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBXR0MzRGZs
b2F0KiB2YWx1ZSkpOworICAgIE1PQ0tfTUVUSE9ENChkcmF3RWxlbWVudHMsIHZvaWQoV0dDM0Rl
bnVtIG1vZGUsIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEZW51bSB0eXBlLCBXR0MzRGludHB0ciBv
ZmZzZXQpKTsKKyAgICBNT0NLX01FVEhPRDEoZ2V0U3RyaW5nLCBXZWJTdHJpbmcoV0dDM0RlbnVt
IG5hbWUpKTsKKyAgICBNT0NLX01FVEhPRDAoZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01J
VU0sIFdlYlN0cmluZygpKTsKKyAgICBNT0NLX01FVEhPRDEoZW5hYmxlLCB2b2lkKFdHQzNEZW51
bSBjYXApKTsKKyAgICBNT0NLX01FVEhPRDQoc2Npc3Nvciwgdm9pZChXR0MzRGludCB4LCBXR0Mz
RGludCB5LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCkpOworfTsKKworY2xh
c3MgTW9ja0NvbnRleHRIYXJuZXNzIHsKK3ByaXZhdGU6CisgICAgTW9ja0NvbnRleHQqIG1fY29u
dGV4dDsKK3B1YmxpYzoKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MoTW9ja0NvbnRleHQqIGNvbnRl
eHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgICAgICAvLyBDYXRj
aCAidW5pbnRlcmVzdGluZyIgY2FsbHMKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwg
dXNlUHJvZ3JhbShfKSkKKyAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICBFWFBFQ1Rf
Q0FMTCgqbV9jb250ZXh0LCBkcmF3RWxlbWVudHMoXywgXywgXywgXykpCisgICAgICAgICAgICAu
VGltZXMoMCk7CisKKyAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBhc3NlcnRlZAorICAgICAgICBF
WFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCB1bmlmb3JtTWF0cml4NGZ2KF8sIF8sIF8sIF8pKQorICAg
ICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybigpKTsKKworICAgICAgICBFWFBFQ1RfQ0FM
TCgqbV9jb250ZXh0LCB1bmlmb3JtNGYoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAuV2ls
bFJlcGVhdGVkbHkoUmV0dXJuKCkpOworCisgICAgICAgIC8vIEFueSBvdGhlciBzdHJpbmdzIGFy
ZSBlbXB0eQorICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBnZXRTdHJpbmcoXykpCisg
ICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0cmluZygpKSk7CisKKyAgICAg
ICAgLy8gU3VwcG9ydCBmb3IgcGFydGlhbCBzd2FwLCBpZiBuZWVkZWQKKyAgICAgICAgRVhQRUNU
X0NBTEwoKm1fY29udGV4dCwgZ2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05T
KSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oV2ViU3RyaW5nKCJHTF9DSFJP
TUlVTV9wb3N0X3N1Yl9idWZmZXIiKSkpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRl
eHQsIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCkpCisgICAgICAgICAgICAuV2ls
bFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVy
IikpKTsKKworICAgICAgICAvLyBBbnkgdW4tc2FuY3Rpb25lZCBjYWxscyB0byBlbmFibGUoKSBh
cmUgT0sKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZW5hYmxlKF8pKQorICAgICAg
ICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybigpKTsKKyAgICB9CisKKyAgICB2b2lkIG11c3RE
cmF3U29saWRRdWFkKCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGRy
YXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlQsIDApKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybigp
KQorICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKKworICAgICAgICAvLyAxIGlz
IGhhcmRjb2RlZCByZXR1cm4gdmFsdWUgb2YgZmFrZSBjcmVhdGVQcm9ncmFtKCkKKyAgICAgICAg
RVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdXNlUHJvZ3JhbSgxKSkKKyAgICAgICAgICAgIC5XaWxs
T25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAg
ICB9CisKKyAgICB2b2lkIG11c3RTZXRTY2lzc29yKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKQorICAgICAgICAgICAgLldpbGxSZXBl
YXRlZGx5KFJldHVybigpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbV9jb250ZXh0LCBzY2lz
c29yKHgsIHksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgLlRpbWVzKEF0TGVhc3QoMSkp
CisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKCkpOworICAgIH0KKworfTsKKwor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub1BhcnRpYWxTd2FwKQoreworICAgIE1v
Y2tDb250ZXh0KiBtb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dCgpOworICAgIFJlZlB0cjxD
Q0dyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVhdGUzRChH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KGFkb3B0UHRyKG1vY2tDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MobW9ja0Nv
bnRleHQpOworCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3Mu
bXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIC8vIFJ1biB0ZXN0IGNhc2UKKyAg
ICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJl
ZUhvc3QoZmFsc2UsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKKwor
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJV
RShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJh
d0xheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7
CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKK30K
KworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcCkKK3sKKyAgICBN
b2NrQ29udGV4dCogbW9ja0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoKTsKKyAgICBSZWZQdHI8
Q0NHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0Qo
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29u
dGV4dChhZG9wdFB0cihtb2NrQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdykpOworICAgIE1vY2tDb250ZXh0SGFybmVzcyBoYXJuZXNzKG1vY2tD
b250ZXh0KTsKKworICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsKKyAgICBoYXJuZXNz
Lm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwg
RmFrZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOworCisgICAgQ0NMYXllclRyZWVIb3N0SW1w
bDo6RnJhbWVEYXRhIGZyYW1lOworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVU
b0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBt
eUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwTm9VcGRhdGUpCit7CisgICAgTW9ja0NvbnRleHQqIG1v
Y2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KCk7CisgICAgUmVmUHRyPENDR3JhcGhpY3NDb250
ZXh0PiBjb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZTNEKEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIo
bW9ja0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3MgaGFybmVzcyhtb2NrQ29udGV4dCk7CisKKyAg
ICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3Nv
cigwLCA4LCAyLCAyKTsKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7CisgICAgaGFy
bmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworCisgICAgT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KHRydWUsIGNvbnRl
eHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKKyAgICAKKyAgICAvLyBEcmF3IG9u
Y2UgdG8gbWFrZSBzdXJlIGxheWVyIGlzIG5vdCBuZXcKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRv
RHJhdyhmcmFtZSkpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15
SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgLy8gR2VuZXJhdGUgdXBk
YXRlIGluIGxheWVyCisgICAgQ0NMYXllckltcGwqIHJvb3QgPSBteUhvc3RJbXBsLT5yb290TGF5
ZXIoKTsKKyAgICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAyLCAyKSk7CisK
KyAgICAvLyBUaGlzIGRyYXcgc2hvdWxkIGdlbmVyYXRlIG5vIG5ldyB1ZHBhdGVzCisgICAgRVhQ
RUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOworCisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250
ZXh0KTsKK30KKworY2xhc3MgUGFydGlhbFN3YXBDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBXZWJTdHJpbmcgZ2V0U3RyaW5nKFdHQzNEZW51
bSBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVY
VEVOU0lPTlMpCisgICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9wb3N0
X3N1Yl9idWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIH0KKyAgICAK
KyAgICBXZWJTdHJpbmcgZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01JVU0oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIik7
CisgICAgfQorfTsKKworc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gc2V0
dXBMYXllcnNGb3JPcGFjaXR5KGJvb2wgcGFydGlhbFN3YXAsIENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIHNldHRpbmdz
LnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhcnRpYWxTd2FwOworCisgICAgUmVmUHRyPENDR3JhcGhp
Y3NDb250ZXh0PiBjb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZTNEKEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRv
cHRQdHIobmV3IFBhcnRpYWxTd2FwQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KSk7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG15SG9zdEltcGwgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGluZ3MsIGNsaWVu
dCk7CisgICAgbXlIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dC5yZWxl
YXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgIG15SG9zdEltcGwtPnNldFZpZXdwb3J0
U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisKKyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVh
dGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAg
IHwKKyAgICAgICAgIHwgIHwgICAgICAgICAyIHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0t
LS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwgICAzICAgICAgICAgICAgICAgfAorICAg
ICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAg
IHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSBy
ZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGls
ZCA9IEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDMpOworCisgICAgSW50UmVjdCByb290UmVj
dCgwLCAwLCAxMDAsIDEwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTAp
OworICAgIEludFJlY3QgZ3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9v
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3Qu
eCgpLCByb290UmVjdC55KCkpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVj
dC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldFZpc2libGVMYXll
clJlY3Qocm9vdFJlY3QpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCks
IEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBj
aGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOworICAgIGNo
aWxkLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZShjaGls
ZFJlY3Qud2lkdGgoKSwgY2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgY2hpbGQtPnNldFZpc2li
bGVMYXllclJlY3QoY2hpbGRSZWN0KTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwor
ICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEludFBvaW50KGdyYW5kQ2hpbGRSZWN0LngoKSwg
Z3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUo
Z3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBn
cmFuZENoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGdyYW5kQ2hpbGRSZWN0KTsKKyAgICBncmFu
ZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3Jh
bmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7
CisKKyAgICBteUhvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIHJl
dHVybiBteUhvc3RJbXBsLnJlbGVhc2UoKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBjb250cmlidXRpbmdMYXllckVtcHR5U2Npc3NvclBhcnRpYWxTd2FwKQoreworICAg
IE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JP
cGFjaXR5KHRydWUsIHRoaXMpOworCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBh
cmVUb0RyYXcoZnJhbWUpKTsKKworICAgICAgICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwgdGhl
IG1vc3QgaW50ZXJlc3Rpbmcgc3R1ZmYgYWxyZWFkeSBoYXBwZW5lZAorICAgICAgICBteUhvc3RJ
bXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycyhmcmFtZSk7CisKKyAgICAgICAgLy8gVmVyaWZ5IGFsbCBxdWFkcyBoYXZlIGJlZW4gY29t
cHV0ZWQKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsK
KyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCku
c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1
YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlkQ29s
b3IsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBmcmFtZS5yZW5kZXJQ
YXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgIH0KK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjb250cmlidXRpbmdMYXllckVtcHR5U2Npc3Nvck5v
UGFydGlhbFN3YXApCit7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdElt
cGwgPSBzZXR1cExheWVyc0Zvck9wYWNpdHkoZmFsc2UsIHRoaXMpOworCisgICAgeworICAgICAg
ICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9U
UlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKworICAgICAgICAvLyBKdXN0
IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgc3R1ZmYgYWxyZWFkeSBoYXBw
ZW5lZAorICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgbXlI
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisKKyAgICAgICAgLy8gVmVyaWZ5IGFs
bCBxdWFkcyBoYXZlIGJlZW4gY29tcHV0ZWQKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5y
ZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQ
YXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFt
ZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3Qo
KVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJT
dXJmYWNlLCBmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkp
OworICAgIH0KK30KKwogLy8gTWFrZSBzdXJlIHRoYXQgY29udGV4dCBsb3N0IG5vdGlmaWNhdGlv
bnMgYXJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgdHJlZS4KIGNsYXNzIENvbnRleHRMb3N0Tm90
aWZpY2F0aW9uQ2hlY2tMYXllciA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LmNwcAppbmRleCA4MDMxN2EwMDgxN2RkNTY0ODM1ZDkwMmE1NDQ5OTFlYTc3NGQ5Mjc4Li5h
NjQ5NjVmMTZlMmEwNThhODFkNTdiZmQ0MWFmZTFhNTZkMGJkYmI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAK
QEAgLTI2MSw3ICsyNjEsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICByb290LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1f
cmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwuYXBwZW5kKG1fcm9vdC5nZXQoKSk7CiAKLSAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRl
clN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRl
clN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdEltcGwsIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0g
bV9sYXllckl0ZXJhdG9yQmVnaW4gPSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdEltcGwpOwogICAgIH0KIApAQCAtMjc3LDcgKzI4MCwxMCBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIHJvb3QtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
Q2hyb21pdW0uYXBwZW5kKG1fcm9vdCk7CiAKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdCwgcm9vdCwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1
bSwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21p
dW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMobV9yZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0sIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVu
dFJlY3QoKSk7CisKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9yQmVn
aW4gPSBUeXBlczo6TGF5ZXJJdGVyYXRvcjo6YmVnaW4oJm1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dENocm9taXVtKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCmluZGV4IDVjYmU3ZmM1NGY1MmYwMzIyMDJmNjk4
MjQ4ZDZlMWRhZjc3MGE3YTYuLmM4YjBlZGFlZDE4YTIyZWQzNDQ4ZDkxYmVmODVhMWE2OWRmZDJk
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJm
YWNlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1
cmZhY2VUZXN0LmNwcApAQCAtMTExLDYgKzExMSw3IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVz
dCwgc2FuaXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0NvcnJlY3RTaGFyZWRRdWFkU3RhdGUpCiAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0T3JpZ2luVHJhbnNmb3JtKG9yaWdpbik7CiAgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0Q29udGVudFJlY3QoY29udGVudFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNl
dENsaXBSZWN0KGNsaXBSZWN0KTsKKyAgICByZW5kZXJTdXJmYWNlLT5zZXRTY2lzc29yUmVjdChj
bGlwUmVjdCk7CiAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHJlbmRlclN1cmZhY2Ut
PmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIFRFU1QoQ0NSZW5k
ZXJTdXJmYWNlVGVzdCwgc2FuaXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0NvcnJlY3RTaGFyZWRRdWFk
U3RhdGUpCiAgICAgRVhQRUNUX0VRKDMwLCBzaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3Jt
KCkubTQxKCkpOwogICAgIEVYUEVDVF9FUSg0MCwgc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5z
Zm9ybSgpLm00MigpKTsKICAgICBFWFBFQ1RfRVEoY29udGVudFJlY3QsIHNoYXJlZFF1YWRTdGF0
ZS0+bGF5ZXJSZWN0KCkpOwotICAgIEVYUEVDVF9FUShjbGlwUmVjdCwgc2hhcmVkUXVhZFN0YXRl
LT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNoYXJlZFF1YWRTdGF0ZS0+
c2Npc3NvclJlY3QoKSk7CiAgICAgRVhQRUNUX0VRKDEsIHNoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0
eSgpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2hhcmVkUXVhZFN0YXRlLT5pc09wYXF1ZSgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145584</attachid>
            <date>2012-06-04 07:22:44 -0700</date>
            <delta_ts>2012-06-04 08:42:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87167-20120604102243.patch</filename>
            <type>text/plain</type>
            <size>122506</size>
            <attacher>zlieber</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTA2NTk4OTRkMjEyMDUw
NTVjNDdjN2ZkNjA5NTEzZjZjODczYmQ3My4uNmE2ZjFhMDAxZTJkODUwYzhiOTkxNzhlOGE0NDQy
YjI2ODBiZGI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEyLTA2LTA0ICBaZWV2
IExpZWJlciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2xl
YW51cCBzY2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBQZXJmb3JtaW5nIHNjaXNzb3JS
ZWN0IGNvbXB1dGF0aW9uIGR1cmluZworICAgICAgICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMuIFN0
b3Jpbmcgc2Npc3NvclJlY3QgaW4gc2hhcmVkIHF1YWQgc3RhdGUKKyAgICAgICAgaW5zdGVhZCBv
ZiBjb21wdXRpbmcgaXQgZHVyaW5nIGRyYXdRdWFkLiBBZGRlZCBzY2lzc29yUmVjdCBmaWVsZHMK
KyAgICAgICAgaW50byBsYXllcnMgYW5kIHJlbmRlciBzdXJmYWNlcy4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cy4gSW50cm9kdWNlZCBtb3JlIHVuaXQgdGVzdHMg
dG8KKyAgICAgICAgdGVzdCBlbmQtdG8tZW5kIGRyYXdpbmcgdXNpbmcgbW9jayBncmFwaGljIGNv
bnRleHQsIGFuZCBhZGRlZCBtb3JlCisgICAgICAgIHRlc3QgY2FzZXMgdG8gQ0NMYXllclRyZWVI
b3N0Q29tbW9uIHRvIHZlcmlmeSBzY2lzc29yUmVjdCBjb21wdXRhdGlvbi4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVu
ZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UmVuZGVyU3VyZmFjZVF1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpjb21w
dXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2Npc3NvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzZXRTY2lzc29y
UmVjdCk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDRHJhd1F1YWQ6OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpzZXRTY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVMYXllclNjaXNzb3JSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVN1cmZhY2VTY2lzc29yUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RDb21tb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzd2FwQnVmZmVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNG
b3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVh
ZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpjb21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKEND
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldFNj
aXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2Npc3NvclJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZURyYXdR
dWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6
OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oOgorICAgICAgICAoQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKENDUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOgorICAgICAgICAoQ0NTaGFy
ZWRRdWFkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OnNjaXNz
b3JSZWN0KToKKwogMjAxMi0wNi0wNCAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0
c2NoZXNAaW50ZWwuY29tPgogCiAgICAgICAgIFtDYWlyb10gSW1wbGVtZW50YXRpb24gb2YgR3Jh
cGhpY3NDb250ZXh0IGRvZXMgbm90IHNhdmUvcmVzdG9yZSBJbWFnZUludGVycG9sYXRpb24gY29y
cmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE5NDQ3Y2FhYjRlNjdlMTJiODZh
YzhkMzAxNzJkZjYyNWUwNGMxMGMuLjZkYjVjZDk4MzZjODU3ZWMyYjg5MWYzYjc3NDJjYzlkZmU1
YmExMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTIt
MDYtMDQgIFplZXYgTGllYmVyICA8emxpZWJlckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBDbGVhbnVwIHNjaXNzb3IgcmVjdCBjb21wdXRhdGlvbi91c2Ugd2l0aCBkYW1hZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MTY3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgorCisgICAgICAgIEFkZGVkIHVu
aXQgdGVzdHMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbCB1c2luZyBtb2NrIGdyYXBoaWMgY29udGV4
dAorICAgICAgICB0byB2ZXJpZnkgZW5kLXRvLWVuZCBxdWFkIGRyYXdpbmcuCisKKyAgICAgICAg
QWRkZWQgbW9yZSB0ZXN0IGNhc2VzIHRvIENDTGF5ZXJUcmVlSG9zdENvbW1vbiB0byB2ZXJpZnkg
Y2xpcCBhbmQKKyAgICAgICAgc2Npc3NvciByZWN0IGNvbXB1dGF0aW9ucy4KKworICAgICAgICAq
IHRlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkpOgorICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0OjpjYWxjRHJhd0V0Yyk6
CisgICAgICAgICogdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHA6CisKIDIwMTItMDYtMDMg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUm9sbCBDaHJvbWl1
bSBERVBTIGZyb20gcjE0MDIyMiB0byByMTQwMjYwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU4
MDJjMzY4Y2MxZWY4ODZkYmZmZWNiZDJjODhjM2ExYmUwZDMxMWQuLjVkNTJmOGJjOWZlZWQxMjQx
MDY4ZDExMTJkY2M4ZDllNDM3NDYxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEzOCw2ICsx
MzgsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVyUmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxh
eWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVy
UmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0KIAorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3Nv
clJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNz
b3JSZWN0OyB9CisKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7
CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxQb3NpdGlvbjsgfQogCkBAIC0zMDUsNyArMzA4LDE1IEBAIHByaXZhdGU6CiAKICAgICAv
LyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CisKKyAgICAvLyBVc2Vz
IGxheWVyJ3MgY29udGVudCBzcGFjZS4KICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsK
KworICAgIC8vIER1cmluZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBv
ZiB3aGljaCBub3RoaW5nIHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBDdXJyZW50bHkgdGhpcyBp
cyBzZXQgdG8gbGF5ZXIncyBjbGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBv
dGhlcndpc2UKKyAgICAvLyBpdCdzIHRhcmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4K
KyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCisgICAgSW50UmVjdCBtX3NjaXNz
b3JSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9s
bGFibGU7CiAgICAgYm9vbCBtX3Nob3VsZFNjcm9sbE9uTWFpblRocmVhZDsKQEAgLTM0MywxMiAr
MzU0LDE2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9y
ZW5kZXJTdXJmYWNlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdP
cGFjaXR5SXNBbmltYXRpbmc7CisKKyAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlIHNwYWNlLgog
ICAgIEludFJlY3QgbV9jbGlwUmVjdDsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
ZHJhd1RyYW5zZm9ybTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2RyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsK
ICAgICBib29sIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0FuaW1hdGluZzsKKworICAgIC8vIFVz
ZXMgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJl
Y3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAppbmRleCA0ZDkwY2U1Njg5NDI3NWZjYjhlMzBjMjg4ZDUyZGZhYzgwNmI0
N2FkLi45MmUwM2EzZjc2M2YyNGIxYjA1YzI0NjJlYTYxMGFkNWIzM2U5MzcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKICAgICBtX2N1cnJlbnRSZW5k
ZXJTdXJmYWNlID0gMDsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVu
ZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFj
ZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3Qp
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVy
U3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFj
ZSwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKQogewog
ICAgIC8vIE5vbi1yb290IGxheWVycyBzaG91bGQgY2xlYXIgdGhlaXIgZW50aXJlIGNvbnRlbnRz
IHRvIHRyYW5zcGFyZW50LiBPbiBERUJVRyBidWlsZHMsIHRoZSByb290IGxheWVyCiAgICAgLy8g
aXMgY2xlYXJlZCB0byBibHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRy
YXduIG9uIHRoZSBzY3JlZW4uIElmIHdlCkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRl
clN1cmZhY2UsIEMKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9y
KDAsIDAsIDEsIDEpKTsKIAogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2Fw
KQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFn
ZVJlY3QpKTsKKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJvb3RT
Y2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7CiAKQEAgLTQ1NCwzNiArNDU0LDI4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
b05vT3AoKQogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Zmx1c2goKSk7CiB9CiAKLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBh
c3MqIHJlbmRlclBhc3MpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBh
c3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RT
Y2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UpCiB7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5k
ZXJTdXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlmICghdXNlUmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJS
ZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJlbmRl
clBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIGNsZWFyUmVuZGVyU3VyZmFjZShyZW5k
ZXJTdXJmYWNlLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLCByb290U2Npc3NvclJlY3RJbkN1cnJl
bnRTdXJmYWNlKTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFz
cy0+cXVhZExpc3QoKTsKICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVy
YXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFj
a1RvRnJvbnRFbmQoKTsgKytpdCkKLSAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpLCByZW5kZXJQ
YXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICAgICAgZHJhd1F1YWQoaXQtPmdldCgpKTsK
IH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1
YWQqIHF1YWQsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCkKIHsKLSAg
ICBJbnRSZWN0IHNjaXNzb3JSZWN0OwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRp
YWxTd2FwKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IHN1cmZhY2VE
YW1hZ2VSZWN0OwotICAgICAgICBpZiAoIXF1YWQtPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHF1YWQtPmNsaXBSZWN0KCkpOwot
ICAgICAgICBzY2lzc29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3Qp
OwotICAgICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0gZWxzZQotICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7Cisg
ICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IHF1YWQtPnNjaXNzb3JSZWN0KCk7CiAKKyAgICBBU1NF
UlQoIXNjaXNzb3JSZWN0LmlzRW1wdHkoKSk7CiAgICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFNjaXNzb3JUb1Jl
Y3Qoc2Npc3NvclJlY3QpOworICAgICAgICByZXR1cm47CisKKyAgICBzZXRTY2lzc29yVG9SZWN0
KHNjaXNzb3JSZWN0KTsKIAogICAgIGlmIChxdWFkLT5uZWVkc0JsZW5kaW5nKCkpCiAgICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOwpAQCAtNjc2LDkgKzY2OCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UmVuZGVyU3VyZmFjZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAKICAgICBk
cmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOwogCi0g
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNhbGwgd2hlbiB0aGUgcXVhZCdzIHNjaXNzb3JSZWN0
KCkgaXMgc2V0IGNvcnJlY3RseS4KLSAgICBkcmF3aW5nU3VyZmFjZS0+c2V0U2Npc3NvclJlY3Qo
dGhpcywgcXVhZC0+c3VyZmFjZURhbWFnZVJlY3QoKSk7Ci0KICAgICAvLyBGSVhNRTogQ2FjaGUg
dGhpcyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1
cmZhY2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRl
bnRzIHRleHR1cmUuCiAgICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRo
aXMsIHF1YWQtPmZpbHRlcnMoKSwgZHJhd2luZ1N1cmZhY2UtPmNvbnRlbnRzVGV4dHVyZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggMmVmYmRiMjYwYmMzNzVmYTYz
ZTNjMDg0OWIzOGI2NmE1ZDliOTY2Yy4uMjBlODExOTM2OWZlNTg3YzlmMTEyNzEyYzM1ZjNjMDAw
MDkzMWIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTc2LDcgKzc2
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEZsb2F0UXVhZCYgc2hhcmVkR2VvbWV0cnlRdWFkKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFyZWRHZW9tZXRyeVF1YWQ7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbkRyYXdpbmdGcmFtZShDQ1JlbmRlclN1cmZhY2UqIGRlZmF1bHRSZW5kZXJTdXJmYWNl
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5k
ZXJQYXNzKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0
IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50
U3VyZmFjZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgp
IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2Vk
VGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpIE9WRVJSSURFOwpAQCAtMTI1LDcgKzEy
NSw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChm
bG9hdCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHZv
aWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOwog
ICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRy
YW5zZm9ybSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgYmluZEZy
YW1lYnVmZmVyVG9UZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3Bv
cnRSZWN0KTsKIAotICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSos
IENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QpOworICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3Vy
ZmFjZSosIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVj
dCYgcm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk7CiAKICAgICB2b2lkIHJlbGVhc2VS
ZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHAKaW5kZXggN2FiOWJhMDA4NmUxZDIwMzJjODMxOGJkOTYwMDAwMDA4NGI0YmM0Yi4uYjdm
ZWU4NzgzNTEyMDdjMDYwYzk3NTlmNmU1ZjFjYjIwNmY2NjVhMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC0zMiw4ICszMiwxMiBAQAogI2luY2x1ZGUgIkZpbHRl
ck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAordXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZh
Y2VDaHJvbWl1bShMYXllckNocm9taXVtKiBvd25pbmdMYXllcikKQEAgLTg2LDUgKzkwLDExIEBA
IGJvb2wgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpyZXBsaWNhSGFzTWFzaygpIGNvbnN0CiAgICAg
cmV0dXJuIGhhc1JlcGxpY2EoKSAmJiAobV9tYXNrTGF5ZXIgfHwgbV9vd25pbmdMYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpKTsKIH0KIAorRmxvYXRSZWN0IFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6Y29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxv
YXRSZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbV9zY3JlZW5TcGFjZVRyYW5zZm9y
bS5pbnZlcnNlKCk7CisgICAgcmV0dXJuIENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChp
bnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJvb3RTY2lzc29yUmVjdCk7Cit9CisKIH0KICNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZh
Y2VDaHJvbWl1bS5oCmluZGV4IGU2NzExZWYyYTVjNTBmMTRiZmQwZjkwN2ZkZTc0NmI1ODQzODM2
ZDQuLmU2ZTY4MDBkOTNlNWZlMGUzMTZhZGZhMDJhYTQ2ZTc3YjZkOGZlMGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC05MSw2ICs5MSw5IEBAIHB1YmxpYzoKICAgICBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAg
ICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3Qg
PSBjbGlwUmVjdDsgfQogCisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJ
bnRSZWN0JiBzY2lzc29yUmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKwog
ICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpIHsgbV9maWx0ZXJzID0gZmlsdGVyczsgfQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQogCkBA
IC0xMTUsMTAgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNNYXNrKCkgY29uc3Q7CiAg
ICAgYm9vbCByZXBsaWNhSGFzTWFzaygpIGNvbnN0OwogCisgICAgRmxvYXRSZWN0IGNvbXB1dGVS
b290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNz
b3JSZWN0KSBjb25zdDsKIHByaXZhdGU6CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25pbmdMYXll
cjsKICAgICBMYXllckNocm9taXVtKiBtX21hc2tMYXllcjsKIAorICAgIC8vIFVzZXMgdGhpcyBz
dXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9z
a2lwc0RyYXc7CiAKQEAgLTEzNCw3ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFj
a2dyb3VuZEZpbHRlcnM7CisKKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdz
IHRhcmdldCBzdXJmYWNlLgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKworICAgIC8vIER1cmlu
ZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5n
IHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBzZXQgdG8gbGF5ZXIn
cyBjbGlwUmVjdCBpZiB1c2VzTGF5ZXJDbGlwcGluZyBpcyB0cnVlLCBvdGhlcndpc2UKKyAgICAv
LyBpdCdzIHRhcmdldFJlbmRlclN1cmZhY2UncyBjb250ZW50UmVjdC4KKyAgICAvLyBVc2VzIHRo
ZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdzIHRhcmdldCBzdXJmYWNlLgorICAgIEludFJlY3QgbV9z
Y2lzc29yUmVjdDsKKwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVy
TGlzdDsKIAogICAgIC8vIFRoZSBuZWFyZXN0IGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHRoYXQg
d2lsbCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGlzIHN1cmZhY2UsIGFuZCB0aGF0IGlzIGdv
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RyYXdRdWFkLmgKaW5kZXggMzgxY2JhZWFjZjNmMjUyMTc0ZDU3ZmRkMzNmMjA5
YjE1OGExZDU5Mi4uZjJkODlmMjc5ODcyMjY2MzE3YjdlNzY4ZTYwYjFlMGY1NDYyN2M3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
cmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRHJhd1F1YWQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KICAgICBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpOyB9CiAgICAgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVy
UmVjdCgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NoYXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKTsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCk7
IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUt
Pm9wYWNpdHkoKTsgfQogICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgYmxlbmRpbmcsIHdoYXQg
cGFydCBvZiB0aGUgY29udGVudHMgb2YgdGhpcyBxdWFkIGFyZSBvcGFxdWU/CiAgICAgSW50UmVj
dCBvcGFxdWVSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggOTNhYjE3
ODE4NzJiZDMzZmM4MmQ1MDZmOTVmNDMwZDliZWYxMWJiMy4uNGEwMzJhZTRkNGJiMTQ1ZGI2ZjU3
YTI4YzhkZWE2OGM1NDQzMWE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTM4LDEw
ICsxMzgsNyBAQCBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKIAog
UGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1
YWRTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBsYXllckNsaXBSZWN0OwotICAgIGlmICh1
c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsK
LSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRy
YXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVjdCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3Bh
Y2l0eSgpLCBvcGFxdWUoKSk7CisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUo
cXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIHZpc2libGVMYXllclJlY3QoKSwgbV9z
Y2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgb3BhcXVlKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJ
bXBsOjp3aWxsRHJhdyhDQ1JlbmRlcmVyKiwgQ0NHcmFwaGljc0NvbnRleHQqKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKaW5kZXggY2RiOGM3ZDU5YTFjZDE1MWFjZDY3NmZhODNkNjk3YWZjN2Q2MzkzMS4u
MDQ1NjI2OTc2NmY3NjdiMDUyYTBiOTRhZTQ0ODEyMDc3MWZjYjVmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCkBAIC0xNjQsNiArMTY0LDEwIEBAIHB1YmxpYzoKICAgICAvLyBVc2FnZTogaWYgdGhp
cy0+dXNlc0xheWVyQ2xpcHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3Vs
ZCBub3QgYmUgdXNlZC4KICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpIHsgbV9jbGlwUmVjdCA9IHJlY3Q7IH0KKworICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3Nv
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gcmVjdDsgfQorCiAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CiAgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNl
KENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJm
YWNlOyB9CiAKQEAgLTI5OCw2ICszMDIsNyBAQCBwcml2YXRlOgogICAgIC8vIFRyYWNrcyBpZiBk
cmF3aW5nLXJlbGF0ZWQgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQgc2luY2UgbGFzdCByZWRyYXcu
CiAgICAgYm9vbCBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOwogCisgICAgLy8gVXNlcyBsYXllcidz
IGNvbnRlbnQgc3BhY2UuCiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9v
bCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKQEAgLTM1MiwxNyArMzU3LDI0
IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHJlY3QgdGhhdCBjb250cmlidXRlcyB0byB0aGUgc2Np
c3NvciB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJhd24uCiAgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBw
YXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCiAg
ICAgLy8gdG8gYm91bmRzLgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAg
ICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAKKyAgICAvLyBEdXJpbmcgZHJhd2luZywgaWRlbnRpZmll
cyB0aGUgcmVnaW9uIG91dHNpZGUgb2Ygd2hpY2ggbm90aGluZyBzaG91bGQgYmUgZHJhd24uCisg
ICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29y
UmVjdDsKKwogICAgIC8vIFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVy
LiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cwogICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRo
aXMgc3VyZmFjZS4KICAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlPiBtX3JlbmRlclN1cmZhY2U7
CiAKICAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXll
ciBhbmQgaXRzIGRlc2NlbmRhbnRzLgorICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFj
ZS4KICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKIAogICAgIC8vIFJlY3QgaW5k
aWNhdGluZyB3aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8v
IE5vdGUgdGhhdCBwbHVnaW4gbGF5ZXJzIGJ5cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4K
KyAgICAvLyBVc2VzIGxheWVyJ3MgY29udGVudCBzcGFjZS4KICAgICBGbG9hdFJlY3QgbV91cGRh
dGVSZWN0OwogCiAgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZvciB0aGlzIGxheWVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTY1OWVjNWJkODlhMmE1MDk4ZGJiYzQ3
MzM0MDlmY2MzZDA1MTEwOS4uMTI1MTBlMjQxMmNiMmExYzA0NDNmNjZlNTUxNjQ2NzZlOGViNTVk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01MTgsNyArNTE4LDEwIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyLCBDQ1RleHR1cmVVcGRhdGVyJiB1CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OwogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VT
Y2FsZVRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0
aW5ncy5kZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVy
LCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RS
ZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1h
eFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllciwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCB1cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0
KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAg
ICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdChGbG9hdFBvaW50KDAsIDApLCB2aWV3cG9ydFNp
emUoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyh1cGRhdGVMaXN0LCByb290U2Npc3NvclJlY3QpOwogICAgIH0KIAogICAg
IC8vIFJlc2V0IHBhcnRpYWwgdGV4dHVyZSB1cGRhdGUgcmVxdWVzdHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCBiNWJjYWJiZjA4YzZkYzMwMjMzYzdh
YzNmNjI5NjM3MjYyYmMwNzRlLi45Y2QwMzE2MGUyYjBiYzVhN2I2NTJlODBiOWYyYmFkYmQwMWJj
M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTY3
LDYgKzY3LDQzIEBAIEludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlCiAgICAgcmV0dXJuIGxheWVyUmVj
dDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyU2Npc3NvclJlY3QoTGF5ZXJU
eXBlKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCit7CisgICAgUmVu
ZGVyU3VyZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpOworCisgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSA9IHRh
cmdldFN1cmZhY2UtPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKHJvb3RT
Y2lzc29yUmVjdCk7CisgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2U7CisgICAgaWYgKGxheWVy
LT51c2VzTGF5ZXJDbGlwcGluZygpKQorICAgICAgICBjbGlwQW5kRGFtYWdlID0gaW50ZXJzZWN0
aW9uKHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSwgbGF5ZXItPmNsaXBSZWN0KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290U2Npc3Nv
clJlY3RJblRhcmdldFN1cmZhY2UsIHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpOworCisg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMg
SW50UmVjdCBjYWxjdWxhdGVTdXJmYWNlU2Npc3NvclJlY3QoTGF5ZXJUeXBlKiBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCit7CisgICAgTGF5ZXJUeXBlKiBwYXJlbnRM
YXllciA9IGxheWVyLT5wYXJlbnQoKTsKKyAgICBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0U3Vy
ZmFjZSA9IHBhcmVudExheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisgICAgQVNTRVJUKHRh
cmdldFN1cmZhY2UpOworCisgICAgUmVuZGVyU3VyZmFjZVR5cGUqIGN1cnJlbnRTdXJmYWNlID0g
bGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBBU1NFUlQoY3VycmVudFN1cmZhY2UpOworCisg
ICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gY3VycmVudFN1cmZhY2UtPmNsaXBSZWN0KCk7CisKKyAg
ICAvLyBGb3Igc3VyZmFjZXMsIGVtcHR5IGNsaXBSZWN0IG1lYW5zIHRoZSBzYW1lIGFzIENDTGF5
ZXJJbXBsOjp1c2VzTGF5ZXJDbGlwcGluZyBiZWluZyBmYWxzZQorICAgIGlmIChjbGlwUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIGNsaXBSZWN0ID0gaW50ZXJzZWN0aW9uKHRhcmdldFN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCksIGN1cnJlbnRTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwor
CisgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSA9IHRhcmdldFN1
cmZhY2UtPmNvbXB1dGVSb290U2Npc3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlKHJvb3RTY2lzc29y
UmVjdCk7CisKKyAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZSA9IGludGVyc2VjdGlvbihyb290
U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UsIGNsaXBSZWN0KTsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChjbGlwQW5kRGFtYWdlKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJU
eXBlPgogc3RhdGljIGlubGluZSBib29sIGxheWVySXNJbkV4aXN0aW5nM0RSZW5kZXJpbmdDb250
ZXh0KExheWVyVHlwZSogbGF5ZXIpCiB7CkBAIC0yODQsNyArMzIxLDcgQEAgc3RhdGljIGJvb2wg
c3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIsIGJv
b2wgYXhpc0FsaWcKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5n
IGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJh
bnNmb3JtYXRpb25zLCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KLXN0YXRpYyBib29sIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVy
VHlwZSogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0
cml4LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
UmVuZGVyU3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJT
b3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCitzdGF0aWMgYm9vbCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSog
cm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgUmVuZGVy
U3VyZmFjZVR5cGUqIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIq
IGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlv
biBjb21wdXRlcyB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnMgcmVjdXJzaXZlbHkgZm9y
IHRoaXMKICAgICAvLyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gSXQgYWxzbyBjb21w
dXRlcyB0aGUgYXBwcm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzLgpAQCAtNTcyLDcgKzYwOSw3IEBA
IHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFs
KExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQg
PSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQg
PSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxMYXllclR5cGUs
IExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVyPihjaGlsZCwgcm9vdExh
eWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJpeCwgbmVhcmVzdEFuY2VzdG9y
VGhhdE1vdmVzUGl4ZWxzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5
ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKKyAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgPSBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5k
ZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0
cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4
dHVyZVNpemUpOwogCiAgICAgICAgIGlmIChkcmF3c0NvbnRlbnQpIHsKICAgICAgICAgICAgIGlm
IChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7CkBAIC02OTMsOSArNzMwLDkgQEAgc3RhdGljIGJv
b2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBl
KiBsYXllciwgTGF5ZXIKIAogLy8gRklYTUU6IEluc3RlYWQgb2YgdXNpbmcgdGhlIGZvbGxvd2lu
ZyBmdW5jdGlvbiB0byBzZXQgdmlzaWJpbGl0eSByZWN0cyBvbiBhIHNlY29uZAogLy8gdHJlZSBw
YXNzLCByZXZpc2UgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCgpIHNvIHRoYXQgdGhpcyBjYW4g
YmUgZG9uZSBpbiBhIHNpbmdsZQotLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8PigpLgorLy8gcGFzcyBpbnNpZGUgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNJbnRlcm5hbDw+KCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdGF0aWMgdm9p
ZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0c0ludGVybmFsKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCiB7CiAgICAgLy8gVXNlIEJh
Y2tUb0Zyb250IHNpbmNlIGl0J3MgY2hlYXAgYW5kIHRoaXMgaXNuJ3Qgb3JkZXItZGVwZW5kZW50
LgogICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5k
ZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IENDTGF5
ZXJJdGVyYXRvclR5cGU7CkBAIC03MDYsMTkgKzc0MywzNCBAQCBzdGF0aWMgdm9pZCB3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYQogICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlz
aWJsZUxheWVyUmVjdCgqaXQpOwogICAgICAgICAgICAgaXQtPnNldFZpc2libGVMYXllclJlY3Qo
dmlzaWJsZUxheWVyUmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJ
dHNlbGYoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGNhbGN1bGF0ZUxh
eWVyU2Npc3NvclJlY3Q8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4oKml0LCByb290U2Np
c3NvclJlY3QpOworICAgICAgICAgICAgaXQtPnNldFNjaXNzb3JSZWN0KHNjaXNzb3JSZWN0KTsK
KyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFj
ZSgpKSB7CisgICAgICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlU3VyZmFj
ZVNjaXNzb3JSZWN0PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+KCppdCwgcm9vdFNjaXNz
b3JSZWN0KTsKKyAgICAgICAgICAgIGl0LT5yZW5kZXJTdXJmYWNlKCktPnNldFNjaXNzb3JSZWN0
KHNjaXNzb3JSZWN0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9t
aXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVy
TGlzdCwgaW50IG1heFRleHR1cmVTaXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVt
KiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUp
Cit7CisgICAgV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNo
cm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSwgdm9pZD4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5
TWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1
cmVTaXplKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0
LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQoreworICAg
IFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZl
Y3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVy
LCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUp
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQogewotICAgIFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVyQ2hy
b21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9t
aXVtLCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlN
YXRyaXgsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVy
ZVNpemUpOwotICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxMYXll
ckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgY2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0c0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290U2Npc3NvclJlY3QpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NM
YXllckltcGwqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVu
dE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8
Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50
IG1heFRleHR1cmVTaXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQogewotICAgIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0
b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwg
cm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIDAsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsK
LSAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHM8Q0NMYXllckltcGws
IFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOworICAgIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbDxDQ0xh
eWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdFNjaXNzb3JSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCAwNTg1YWZm
NGZiN2M4ZWY2NDZiYTY1YTRjZWYyYzY1ZDU4MmZlZWIxLi5mODA0NTE2MTdkZDI1ZmIxNGNmMTFm
YTZlZGFlOTc0OWFlMjVkNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uaApAQCAtNDEsOCArNDEsMTEgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRS
ZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHN0YXRpYyB2b2lk
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiwgTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXll
ckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RM
YXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0
cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJl
U2l6ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJv
bWl1bSosIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RMYXll
ciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4
LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJlU2l6
ZSk7CisKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZl
Y3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJl
Y3QmIHJvb3RTY2lzc29yUmVjdCk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFu
ZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRy
aWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA3ZDgzZDIwN2RjNjk1
NDE1MjljMTE5OGFhZDMxOWVlYzNiYTg3ODI1Li4yY2NiZjIyM2E2MTI2MzVkNTYwNmExN2I3NTMw
ZTg3NGEzOGYxNjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oIgorI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VT
Y2FsZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtMjMwLDI2ICsyMzEsNiBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NM
YXllckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGRh
bWFnZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgcm9vdERhbWFnZVJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1h
Z2VSZWN0OwotICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBk
YW1hZ2UgYXMgdGhlIGRhbWFnZSBmb3IKLSAgICAvLyBhbGwgc3VyZmFjZXMsIGV4Y2VwdCBwZXJz
cGVjdGl2ZSB0cmFuc2Zvcm1zLgotICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBz
Y3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgp
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOwotICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5o
YXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRv
IG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mCi0gICAgICAgIC8vIGludmVyc2UgdHJhbnNm
b3Jtcy4gSW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bwotICAgICAgICAvLyBq
dXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1cmZhY2UuCi0gICAgICAgIC8vIEZJWE1FOiB1c2UgY2Fs
Y3VsYXRlVmlzaWJsZVJlY3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgotICAgICAgICBDQ1JlbmRl
clN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZh
Y2UoKTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50
UmVjdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlu
dmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2Uo
KTsKLSAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zv
cm0ubWFwUmVjdChyb290RGFtYWdlUmVjdCk7Ci0gICAgfQotICAgIHJldHVybiBzdXJmYWNlRGFt
YWdlUmVjdDsKLX0KLQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewog
ICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CkBAIC0yNjgsNyAr
MjQ5LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFj
ZUxheWVyTGlzdChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyCiAgICAgICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkZXZpY2VTY2FsZVRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2Nh
bGUobV9zZXR0aW5ncy5kZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KG1fcm9vdExheWVy
SW1wbC5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fcm9vdExheWVySW1wbC0+
cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCBt
X3Jvb3RMYXllckltcGwuZ2V0KCksIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cygpLm1heFRleHR1cmVTaXplKTsKKworICAgICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLnVzaW5nUGFydGlhbFN3YXAgfHwgc2V0dGluZ3MoKS5zaG93U3VyZmFjZURhbWFnZVJl
Y3RzKQorICAgICAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhtX3Jvb3RMYXllcklt
cGwuZ2V0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgICAgICBtX3Jvb3RTY2lzc29y
UmVjdCA9IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCkt
PmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICAgICAgaWYgKCFsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgICAgIG1fcm9vdFNjaXNzb3JSZWN0
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKTsKKyAg
ICAKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fcm9vdFNjaXNzb3JSZWN0KTsKICAg
ICB9CiB9CiAKQEAgLTI4MCw5ICsyNzAsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogCiAg
ICAgVFJBQ0VfRVZFTlQxKCJ3ZWJraXQiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzIiwgInJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nh
c3Q8bG9uZyBsb25nIHVuc2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOwog
Ci0gICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8
IHNldHRpbmdzKCkuc2hvd1N1cmZhY2VEYW1hZ2VSZWN0cykKLSAgICAgICAgdHJhY2tEYW1hZ2VG
b3JBbGxTdXJmYWNlcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwotICAgIG1fcm9vdERhbWFnZVJlY3QgPSBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIG1fcm9vdExh
eWVySW1wbC0+c2V0U2Npc3NvclJlY3QoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3RTY2lzc29yUmVj
dCkpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSByZW5kZXIgcGFzc2VzIGluIGRlcGVuZGVuY3kgb3Jk
ZXIuCiAgICAgSGFzaE1hcDxDQ1JlbmRlclN1cmZhY2UqLCBDQ1JlbmRlclBhc3MqPiBzdXJmYWNl
UGFzc01hcDsKQEAgLTI5MSwyNCArMjc5LDEyIEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAg
ICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXll
ci0+cmVuZGVyU3VyZmFjZSgpOwogCiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3Mg
PSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKLQotICAgICAgICBGbG9hdFJl
Y3Qgc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0g
ZGFtYWdlSW5TdXJmYWNlU3BhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBtX3Jvb3REYW1hZ2VSZWN0
KTsKLSAgICAgICAgcGFzcy0+c2V0U3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3Qp
OwotCiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFkZChyZW5kZXJTdXJmYWNlLCBwYXNzLmdldCgp
KTsKICAgICAgICAgcGFzc2VzLmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAg
SW50UmVjdCBzY2lzc29yUmVjdDsKLSAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChtX3Jvb3REYW1hZ2VSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHNjaXNzb3JSZWN0ID0gSW50
UmVjdChJbnRQb2ludCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSk7Ci0KICAgICBib29sIHJlY29y
ZE1ldHJpY3NGb3JGcmFtZSA9IHRydWU7IC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCBkaXNhYmxl
IHRoaXMgd2hlbiBhYm91dDp0cmFjaW5nIGlzIG9mZi4KLSAgICBDQ09jY2x1c2lvblRyYWNrZXJJ
bXBsIG9jY2x1c2lvblRyYWNrZXIoc2Npc3NvclJlY3QsIHJlY29yZE1ldHJpY3NGb3JGcmFtZSk7
CisgICAgQ0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2NsdXNpb25UcmFja2VyKGVuY2xvc2luZ0lu
dFJlY3QobV9yb290U2Npc3NvclJlY3QpLCByZWNvcmRNZXRyaWNzRm9yRnJhbWUpOwogICAgIG9j
Y2x1c2lvblRyYWNrZXIuc2V0TWluaW11bVRyYWNraW5nU2l6ZShDQ09jY2x1c2lvblRyYWNrZXJJ
bXBsOjpwcmVmZXJyZWRNaW5pbXVtVHJhY2tpbmdTaXplKCkpOwogCiAgICAgLy8gQWRkIHF1YWRz
IHRvIHRoZSBSZW5kZXIgcGFzc2VzIGluIEZyb250VG9CYWNrIG9yZGVyIHRvIGFsbG93IGZvciB0
ZXN0aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3
YWxrLgpAQCAtMzI3LDkgKzMwMyw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICAg
ICAgb2NjbHVzaW9uVHJhY2tlci5lbnRlckxheWVyKGl0KTsKIAotICAgICAgICBpZiAoaXQucmVw
cmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgaWYgKGl0LnJlcHJl
c2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgJiYgIWl0LT5yZW5kZXJTdXJmYWNlKCkt
PnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNG
b3JSZW5kZXJTdXJmYWNlTGF5ZXIoKml0LCAmb2NjbHVzaW9uVHJhY2tlcik7Ci0gICAgICAgIGVs
c2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2libGVMYXllclJlY3QoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpICYmICFp
dC0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSAmJiAgIWl0LT5zY2lzc29yUmVjdCgpLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgaXQtPndpbGxEcmF3KG1fbGF5ZXJSZW5kZXJlci5nZXQo
KSwgY29udGV4dCgpKTsKICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yTGF5ZXIoKml0
LCAmb2NjbHVzaW9uVHJhY2tlciwgaGFkTWlzc2luZ1RpbGVzKTsKICAgICAgICAgfQpAQCAtNDMx
LDggKzQwNywxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3Qg
RnJhbWVEYXRhJiBmcmFtZSkKICAgICBtX2Zwc0NvdW50ZXItPm1hcmtCZWdpbm5pbmdPZkZyYW1l
KGN1cnJlbnRUaW1lKCkpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUo
bV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MoZnJhbWUucmVuZGVyUGFzc2VzW2ldLmdldCgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MgPSBmcmFtZS5yZW5kZXJQYXNzZXNb
aV0uZ2V0KCk7CisKKyAgICAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1
cmZhY2UgPSByZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCktPmNvbXB1dGVSb290U2Npc3NvclJl
Y3RJbkN1cnJlbnRTdXJmYWNlKG1fcm9vdFNjaXNzb3JSZWN0KTsKKyAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhyZW5kZXJQYXNzLCByb290U2Npc3NvclJlY3RJbkN1cnJl
bnRTdXJmYWNlKTsKKyAgICB9CiAKICAgICBpZiAobV9kZWJ1Z1JlY3RIaXN0b3J5LT5lbmFibGVk
KHNldHRpbmdzKCkpKQogICAgICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1Z1JlY3Rz
Rm9yQ3VycmVudEZyYW1lKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWUucmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7CkBAIC00ODUsNyArNDY1LDcgQEAgYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzd2FwQnVmZmVycygpCiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7
CiAKICAgICBtX2Zwc0NvdW50ZXItPm1hcmtFbmRPZkZyYW1lKCk7Ci0gICAgcmV0dXJuIG1fbGF5
ZXJSZW5kZXJlci0+c3dhcEJ1ZmZlcnMoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3REYW1hZ2VSZWN0
KSk7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+c3dhcEJ1ZmZlcnMoZW5jbG9zaW5nSW50
UmVjdChtX3Jvb3RTY2lzc29yUmVjdCkpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmRpZExvc2VDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRl
eCA5MGFhMGZiMDY4NTYxZjY5MjA5Y2M0NmI5M2E1YmZkN2FiNjM5YmVkLi5jNzQwYTY2MjAyZjRi
ZDBmMWIzZDA2MDZkM2FlYmE5NDg5ZDIwMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCkBAIC0yNDEsNyArMjQxLDcgQEAgcHJpdmF0ZToKIAogICAgIENDTGF5ZXJTb3J0
ZXIgbV9sYXllclNvcnRlcjsKIAotICAgIEZsb2F0UmVjdCBtX3Jvb3REYW1hZ2VSZWN0OworICAg
IEZsb2F0UmVjdCBtX3Jvb3RTY2lzc29yUmVjdDsKIAogICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNv
dW50ZXI+IG1fZnBzQ291bnRlcjsKICAgICBPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2Rl
YnVnUmVjdEhpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAppbmRleCBmZDg5OTkwYzcx
OTgxNjA2NzZhNzZmNWJlZDIxOTZmZjdiOTZlY2NlLi41ZDM0NzM1OTAyY2E5YmU2MTBhYzNmMzVm
NmExOTkwNTMzNzE5Y2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKQEAgLTY4LDcgKzY4
LDcgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXMKIAogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRT
dGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gc3VyZmFjZS0+Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7
CiAgICAgYm9vbCBpc1JlcGxpY2EgPSBmYWxzZTsKLSAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhx
dWFkQ3VsbGVyLCBzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIGlzUmVwbGljYSwgc3VyZmFjZURhbWFn
ZVJlY3QoKSk7CisgICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgc2hhcmVkUXVh
ZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EpOwogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBl
bmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiAKICAgICBpZiAoIXN1cmZhY2UtPmhhc1Jl
cGxpY2EoKSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRz
Rm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXMKICAgICAv
LyBBZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVhcnMgYmVsb3cg
dGhlIHN1cmZhY2UuCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByZXBsaWNhU2hhcmVk
UXVhZFN0YXRlID0gc3VyZmFjZS0+Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpOwogICAg
IGlzUmVwbGljYSA9IHRydWU7Ci0gICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwg
cmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBzdXJmYWNlRGFtYWdlUmVj
dCgpKTsKKyAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCByZXBsaWNhU2hhcmVk
UXVhZFN0YXRlLmdldCgpLCBpc1JlcGxpY2EpOwogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5h
cHBlbmQocmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBh
c3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oCmluZGV4IDQ1MmE4NjEwZjVhOWRiYzAyMTRhOGNkZGJmZjZmMDI1NGZlY2RhMjYu
LjAzNThlZWM5MThiOGYxMDgyZDJlYjQ1ZjBkODdiZDlhODk0NjMzNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oCkBAIC02MiwxNiArNjIsMTIgQEAgcHVibGljOgogICAgIGNvbnN0IENDUXVhZExp
c3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVuZGVy
U3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsg
fQogCi0gICAgdm9pZCBzZXRTdXJmYWNlRGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZh
Y2VEYW1hZ2VSZWN0KSB7IG1fc3VyZmFjZURhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsg
fQotICAgIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NSZW5k
ZXJQYXNzKENDUmVuZGVyU3VyZmFjZSopOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3Rhcmdl
dFN1cmZhY2U7CiAgICAgQ0NRdWFkTGlzdCBtX3F1YWRMaXN0OwogICAgIFZlY3RvcjxPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRRdWFkU3RhdGVMaXN0OwotICAgIEZsb2F0UmVj
dCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVu
ZGVyUGFzcz4gPiBDQ1JlbmRlclBhc3NMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5j
cHAKaW5kZXggOTQzYzUzZmJmMDgyN2UxMjZhN2I2MmVlMThkODZiZjNkMjhmNTc4Yy4uZDYyZjVm
OWRiMzZiMTY2YTg3MmU4ODk3MDQ4NTk4Yjc2ZDg0YjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwCkBAIC0zNywxMSArMzcsMTUgQEAKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRy
YWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRl
ICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZC5oIgogI2luY2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCisjaW5jbHVkZSA8cHVibGlj
L1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCit1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGggPSAy
OwpAQCAtMTM4LDIwICsxNDIsNiBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRCYWNr
Z3JvdW5kVGV4dHVyZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFja2dyb3VuZFRleHR1cmUgJiYg
bV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYmIG1fYmFja2dyb3VuZFRleHR1cmUt
PmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsK
IH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCkgY29uc3QKLXsKLSAgICBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdM
YXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkgJiYgbGF5ZXJSZW5kZXJlci0+Y2Fw
YWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFu
ZERhbWFnZVJlY3QgPSBtX2NsaXBSZWN0OwotICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRl
cnNlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lz
c29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpKTsKLSAgICB9IGVs
c2UgaWYgKGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0g
ICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChz
dXJmYWNlRGFtYWdlUmVjdCkpOwotICAgIGVsc2UgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgp
ICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAg
ICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KG1fY2xpcFJlY3QpOwotICAgIGVsc2UK
LSAgICAgICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLX0KLQog
U3RyaW5nIENDUmVuZGVyU3VyZmFjZTo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNlKGlkPSVpLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXIt
PmlkKCksIG1fb3duaW5nTGF5ZXItPmRlYnVnTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjUx
LDE2ICsyNDEsMjIgQEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5n
ZWRPbmx5RnJvbURlc2NlbmRhbnQoKSBjb25zdAogUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gQ0NSZW5kZXJTdXJmYWNlOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAg
IGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNy
ZWF0ZShvcmlnaW5UcmFuc2Zvcm0oKSwgZHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBj
bGlwUmVjdCgpLCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CisgICAgcmV0dXJuIENDU2hhcmVk
UXVhZFN0YXRlOjpjcmVhdGUob3JpZ2luVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgY29u
dGVudFJlY3QoKSwgbV9zY2lzc29yUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOwogfQog
CiBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJl
cGxpY2FTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxz
ZTsKLSAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShyZXBsaWNhT3JpZ2luVHJh
bnNmb3JtKCksIHJlcGxpY2FEcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0
KCksIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3Rh
dGU6OmNyZWF0ZShyZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIHJlcGxpY2FEcmF3VHJhbnNmb3Jt
KCksIGNvbnRlbnRSZWN0KCksIG1fc2Npc3NvclJlY3QsIGRyYXdPcGFjaXR5KCksIGlzT3BhcXVl
KTsKK30KKworRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6Y29tcHV0ZVJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFN1cmZhY2UoY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0
Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNm
b3JtID0gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgcmV0dXJuIENDTWF0
aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIHJv
b3RTY2lzc29yUmVjdCk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyhD
Q1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRl
LCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit2
b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhKQogewog
ICAgIEFTU0VSVCghZm9yUmVwbGljYSB8fCBoYXNSZXBsaWNhKCkpOwogCkBAIC0yOTAsNyArMjg2
LDcgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVh
ZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGEKIAogICAgIGludCBtYXNrVGV4dHVyZUlkID0g
bWFza0xheWVyID8gbWFza0xheWVyLT5jb250ZW50c1RleHR1cmVJZCgpIDogMDsKIAotICAgIHF1
YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFy
ZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIG1fb3duaW5nTGF5ZXIsIHN1cmZhY2VEYW1hZ2VS
ZWN0LCBmb3JSZXBsaWNhLCBmaWx0ZXJzKCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0
dXJlSWQpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBjb250ZW50UmVjdCgpLCBtX293bmluZ0xheWVy
LCBmb3JSZXBsaWNhLCBmaWx0ZXJzKCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJl
SWQpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCA4NTVmY2NlN2U0
MzUzYjhkZGVkNTFkZWUwZWVkMGM0MDAzODJhMTZlLi5jNGJiOTk5NmY5ZGQ4N2JlOGQwNTkwODVj
Mzc5NDQxZjMwOTFhOThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtNjAsOCAr
NjAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKICAg
ICBib29sIGhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0
U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCkgY29uc3Q7Ci0KICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZv
aWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCkBAIC0xMTIs
NiArMTEwLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYp
OwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVj
dDsgfQogCisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVj
dCkgeyBtX3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBz
Y2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKwogICAgIHZvaWQg
c2V0Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQogCkBAIC0xMzgsMTIgKzEz
OSwxMyBAQCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRl
U2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gY3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6
IFJlbW92ZSB0aGUgc3VyZmFjZURhbWFnZVJlY3QgcGFyYW1ldGVyIHdoZW4gdGhlIHZhbHVlIGlz
IHJlbW92ZWQgZnJvbSBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC4KLSAgICB2b2lkIGFwcGVuZFF1
YWRzKENDUXVhZEN1bGxlciYsIENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBj
b25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGFwcGVuZFF1YWRz
KENDUXVhZEN1bGxlciYsIENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhKTsKKyAg
ICBGbG9hdFJlY3QgY29tcHV0ZVJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2UoY29uc3Qg
RmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENDTGF5
ZXJJbXBsKiBtX293bmluZ0xheWVyOwogCisgICAgLy8gVXNlcyB0aGlzIHN1cmZhY2UncyBzcGFj
ZS4KICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3N1cmZhY2VQcm9wZXJ0
eUNoYW5nZWQ7CiAKQEAgLTE2Miw3ICsxNjQsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFj
a2dyb3VuZEZpbHRlcnM7CisKKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdz
IHRhcmdldCBzdXJmYWNlLgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKworICAgIC8vIER1cmlu
ZyBkcmF3aW5nLCBpZGVudGlmaWVzIHRoZSByZWdpb24gb3V0c2lkZSBvZiB3aGljaCBub3RoaW5n
IHNob3VsZCBiZSBkcmF3bi4KKyAgICAvLyBVc2VzIHRoZSBzcGFjZSBvZiB0aGUgc3VyZmFjZSdz
IHRhcmdldCBzdXJmYWNlLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKwogICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IG1fbGF5ZXJMaXN0OwogCiAgICAgLy8gVGhlIG5lYXJlc3QgYW5jZXN0
b3IgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMg
c3VyZmFjZSwgYW5kIHRoYXQgaXMgZ29pbmcKQEAgLTE3MSw5ICsxODAsNiBAQCBwcml2YXRlOgog
CiAgICAgT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gbV9kYW1hZ2VUcmFja2VyOwogCi0gICAgLy8g
U3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFjZSIgd2hlcmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVz
ZWQgZm9yIHNjaXNzb3JpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGFtYWdlUmVjdDsKLQogICAgIC8v
IEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCiAgICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVySW5kZXhIaXN0b3J5OwogICAgIGludCBtX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcAppbmRleCBkZjAw
YzBlMGZhMzY1NjIxYTM2NjNiYzI5NjZmMjM3YzNiNzVhYjVmLi41NzQyMzgyZjY2MzdiZTE5ZGJh
YzMxMDY4YTEwYjkxODllMTljZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwCkBAIC0yOSwxNSArMjksMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCitQYXNzT3du
UHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3Jl
YXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJl
Y3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFy
ZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGlzUmVwbGlj
YSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQpKTsKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwg
cXVhZFJlY3QsIGxheWVyLCBpc1JlcGxpY2EsIGZpbHRlcnMsIGJhY2tncm91bmRGaWx0ZXJzLCBt
YXNrVGV4dHVyZUlkKSk7CiB9CiAKLUNDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBj
b25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQorQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVy
SW1wbCogbGF5ZXIsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCiAgICAgOiBDQ0RyYXdRdWFkKHNo
YXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwgcXVhZFJlY3QpCiAgICAg
LCBtX2xheWVyKGxheWVyKQotICAgICwgbV9zdXJmYWNlRGFtYWdlUmVjdChzdXJmYWNlRGFtYWdl
UmVjdCkKICAgICAsIG1faXNSZXBsaWNhKGlzUmVwbGljYSkKICAgICAsIG1fZmlsdGVycyhmaWx0
ZXJzKQogICAgICwgbV9iYWNrZ3JvdW5kRmlsdGVycyhiYWNrZ3JvdW5kRmlsdGVycykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCmluZGV4IDBhMDEyODFmYTRmNjlk
ZTJjZDZkMjkxZmYxYTYxNmI2OTY3Yjk0YjYuLmVkYWVlMjQxOTY4MDcyNDI3ZTk3NzYzOThiNDY0
ZDI1ZGFmNzUxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQu
aApAQCAtMzcsMjQgKzM3LDE5IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFk
U3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJh
Y2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgYm9vbCBpc1JlcGxpY2EsIGNv
bnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1
cmVJZCk7CiAKICAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
OyB9CiAgICAgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQog
ICAgIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJl
SWQ7IH0KIAotICAgIC8vIFRoZSBzdXJmYWNlIGRhbWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1
cmZhY2UgdGhpcyBxdWFkIGRyYXdzIGludG8uCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJl
bW92ZWQgb25jZSByZW5kZXIgc3VyZmFjZXMgZ2V0IHRoZWlyIG93biBsYXllciB0eXBlLgotICAg
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1
cmZhY2VEYW1hZ2VSZWN0OyB9Ci0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsgfQogCiBwcml2YXRlOgotICAgIENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5
ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxp
Y2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFz
a1RleHR1cmVJZCk7CisgICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBib29sIGlzUmVwbGljYSwg
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4
dHVyZUlkKTsKIAogICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOwotICAgIEZsb2F0UmVjdCBtX3N1
cmZhY2VEYW1hZ2VSZWN0OwogICAgIGJvb2wgbV9pc1JlcGxpY2E7CiAgICAgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaAppbmRleCAzYTQ1NTE1NDJh
NjE4NjNkYmM3YmFmNDQ2YTdkZGI1OTRkOTNhZDhlLi5hMWFhMzNmNmI2MWYzNzJmY2UzNzYxNDU0
YzcxYTllMjgzZjI3ODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCkBAIC02OSw3ICs2OSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB3aW5kb3dN
YXRyaXgoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd01hdHJpeDsgfQogCiAgICAgdmlydHVhbCB2
b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKENDUmVuZGVyU3VyZmFjZSogZGVmYXVsdFJlbmRlclN1cmZh
Y2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQ
YXNzKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRl
clBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFN1cmZhY2Up
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCkgPSAwOwogCiAgICAg
dmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IElu
dFNpemUmIGh1ZFNpemUpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcApp
bmRleCAzZjI4MzdlMDUyMGJmODQ2YjQ3M2VhMWU3Mzg3MTVmNmU4MDk2MDNmLi41MzZiMzk4Njdk
NTAyMjA1YjEyMjc5N2QwYjEzNWJhYTYzZWM4NDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuY3BwCkBAIC0zMSwxNiArMzEsMTYgQEAgdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDU2hh
cmVkUXVhZFN0YXRlPiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorUGFzc093blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJh
bnNmb3JtLCBsYXllclJlY3QsIGNsaXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJh
bnNmb3JtLCBsYXllclJlY3QsIHNjaXNzb3JSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKIH0KIAot
Q0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorQ0NTaGFyZWRRdWFkU3RhdGU6
OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGZsb2F0
IG9wYWNpdHksIGJvb2wgb3BhcXVlKQogICAgIDogbV9xdWFkVHJhbnNmb3JtKHF1YWRUcmFuc2Zv
cm0pCiAgICAgLCBtX2xheWVyVHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtKQogICAgICwgbV9sYXll
clJlY3QobGF5ZXJSZWN0KQotICAgICwgbV9jbGlwUmVjdChjbGlwUmVjdCkKKyAgICAsIG1fc2Np
c3NvclJlY3Qoc2Npc3NvclJlY3QpCiAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKICAgICAsIG1f
b3BhcXVlKG9wYXF1ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCmluZGV4IGEx
NGIxN2RhYWNmMTBjN2I5YzU5M2E1MzBhMmEyNmJiNTg1MTE1OTkuLjQ1NDBhMDZmODRlZTUyZGZh
YzVkZTM1NjA0OGViYjE4YzU4ZGI3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aApAQCAtMzYsMjcgKzM2LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDU2hhcmVk
UXVhZFN0YXRlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0
ZShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3Bh
Y2l0eSwgYm9vbCBvcGFxdWUpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0
YXRlPiBjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRy
YW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0g
dGhhdCBxdWFkcyBpbiBhIENDRHJhd1F1YWQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCiAg
ICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fcXVhZFRyYW5zZm9ybTsgfQogICAgIC8vIFRoZSB0cmFuc2Zvcm0g
dGhhdCBsYXllclJlY3QoKSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KICAgICBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXJUcmFuc2Zvcm07IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVjdDsgfQotICAgIC8vIFVzYWdlOiBpZiBjbGlwUmVj
dCBpcyBlbXB0eSwgdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisgICAgY29u
c3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9
CiAKICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAgICAg
Ym9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAgICAgYm9vbCBpc0xh
eWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ0NTaGFyZWRR
dWFkU3RhdGUoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5z
Zm9ybSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zv
cm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZs
b2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKyAgICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgZmxvYXQgb3BhY2l0eSwg
Ym9vbCBvcGFxdWUpOwogCiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3F1
YWRUcmFuc2Zvcm07CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVy
VHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9sYXllclJlY3Q7Ci0gICAgSW50UmVjdCBtX2NsaXBS
ZWN0OworICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAg
ICAgYm9vbCBtX29wYXF1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAppbmRleCA1NmQ4NWZhZmE5ZmQ3YjlhYzdmMmYy
NzI4ZDZjYWY2N2I3OTZhYjEzLi4wOGVhMDM1MjhjYjQ4ZWRiNTM1NTFkNzhmYzU3ZjExZjNhNmMy
ZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJh
Y2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VU
cmFja2VyVGVzdC5jcHAKQEAgLTU4LDcgKzU4LDggQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8Q0NMYXkK
IAogICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290KTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LCByb290LCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsK
IH0KIAogdm9pZCBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKENDTGF5ZXJJbXBsKiByb290KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5j
cHAKaW5kZXggMTA1YzcxODZlNGM5NDM1ZTg5ZWIzMzBjYTI2YzkwMTliMmQyNTUyNS4uNWZjNjI1
ZjIyMTkwMTdhNDhkYzAxNjYzZWU3ZWViMzZkY2QyOGE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCkBAIC0xNDAsMTAg
KzE0MCwxMSBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCiAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5n
ZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1Rv
RnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5
ZXIsIDAsIC0xLCAxKTsKQEAgLTE4NywxMCArMTg4LDExIEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9y
VGVzdCwgY29tcGxleFRyZWUpCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJl
bmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IGxheWVyTGlzdDsKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIu
Z2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5
ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKSk7CiAKICAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwogICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKQEAgLTI0NiwxMCArMjQ4
LDExIEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxleFRyZWVNdWx0aVN1cmZhY2Up
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJv
b3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXll
ci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBpdGVy
YXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9DT1VO
VChyb290TGF5ZXIsIDAsIC0xLCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGZjZTkwNDZj
N2ViMGM1MzY4ODc5YjcyNzllZmNkYWM2ZDc4ZmVhY2YuLjFkMDY5YTViZTNhYjU0OWYwZGYxODYx
OTJkYmJlZTk5NTZjODNlMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzEsNyArMzEsMTIg
QEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5o
IgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgpAQCAtNTksNyArNjQsOCBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OwogfQogCiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQpCkBAIC0xNzUsNyArMTgxLDcgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xl
TGF5ZXIpCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJlc3Vs
dCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSA3OiBWZXJp
ZnkgdGhhdCBwb3NpdGlvbiBwcmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgotICAg
IC8vICAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKKyAg
ICAvLyAgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zIGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKICAgICAvLyAgICAgICAg
IHN0aWxsIHdvcnRoIHRlc3RpbmcgdG8gZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMuCiAg
ICAgZXhwZWN0ZWRSZXN1bHQgPSBwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNo
b3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3Jt
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBm
LCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CkBAIC0zMTgsNiArMzI0LDU1OCBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVS
ZW5kZXJTdXJmYWNlKQogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50
Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBz
Y2lzc29yUmVjdE5vQ2xpcCkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Nj
b3BlSXNPbkltcGxUaHJlYWQ7CisKKyAgICAvKgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFz
IGZvbGxvd3M6CisKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAxIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAg
ICAgICAgIHwgIHwgICAgICAgICAyIHwgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0t
LS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwgICAzICAgICAgICAgICAgICAgfAorICAgICAgICAg
fCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAg
IHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIg
c3VyZmFjZXMKKyAgICAgKi8KKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwg
MTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVj
dCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAsIDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7
CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0
LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJv
b3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAg
Y2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBj
aGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hp
bGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENo
aWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJv
dW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdo
dCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NM
YXllckltcGwqIGNoaWxkUHRyID0gY2hpbGQuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5k
Q2hpbGRQdHIgPSBncmFuZENoaWxkLmdldCgpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5k
Q2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOwor
CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB7
CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworICAgICAgICBDQ0xheWVyU29ydGVyIGxheWVyU29ydGVyOworCisg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworCisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5n
ZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIEFT
U0VSVF9UUlVFKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKHJv
b3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRQdHItPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpLCAyVSk7CisgICAgCisgICAgQVNTRVJUX0VRKHJvb3QtPmNsaXBSZWN0KCksIElu
dFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAgLy8gTGF5ZXIncyBjbGlwUmVjdCBpcyBhIHVuaW9u
IG9mIGFsbCBpdHMgY2hpbGRyZW4ncyBib3VuZHMKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNs
aXBSZWN0KCksIEludFJlY3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJl
Y3Qud2lkdGgoKSwgZ3JhbmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkp
KTsKKyAgICBBU1NFUlRfRVEoZ3JhbmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAw
LCAwLCAwKSk7CisKKyAgICBBU1NFUlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVj
dCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPnJlbmRl
clN1cmZhY2UoKS0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAg
QVNTRVJUX0ZBTFNFKHJvb3QtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxT
RShjaGlsZFB0ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5k
Q2hpbGRQdHItPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIAorICAgIC8vIERhbWFnZSB0aGUg
ZW50aXJlIHNjcmVlbgorICAgIEludFJlY3Qgcm9vdERhbWFnZShyb290UmVjdCk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIEVYUEVDVF9FUShyb290
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwg
MCkpOworCisgICAgLy8gY2hpbGQgc3VyZmFjZSBkb2Vzbid0IGhhdmUgYSBjbGlwIHJlY3QsIHRo
ZXJlZm9yZSBpdCB3aWxsIGJlIGNvbXB1dGVkIGFzIGludGVyc2VjdGlvbgorICAgIC8vIGJldHdl
ZW4gcm9vdCBzdXJmYWNlJ3MgY29udGVudHJlY3QgYW5kIGNoaWxkIHN1cmZhY2UncyBkcmF3YWJs
ZSBjb250ZW50IHJlY3QuCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0Lnko
KSwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0g
Y2hpbGRSZWN0LnkoKSkpOworCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdFJlY3QpKTsKKworICAgIC8vIFRoZSBkYW1hZ2UgaXMgdGhlIGVudGlyZSByb290
UmVjdCwgYnV0IGNoaWxkIGxheWVyIHN0YXJ0cyBhdCBhbiBvZmZzZXQuCisgICAgLy8gRXZlbiB0
aG91Z2ggaXQgaGFzIGJvdW5kcywgaXQgaXMgbm90IGNsaXBwaW5nIHRvIGJvdW5kcyBzbyBpdHMg
Y2hpbGRyZW4KKyAgICAvLyAod2hpY2ggZXh0ZW5kIGJleW9uZCB0aGUgYm91bmRzKSBleHRlbmQg
dGhlIHNjaXNzb3IgcmVjdAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkgLSBjaGlsZFJlY3QueSgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCB3aWxsIGhh
dmUgdGhlIHNhbWUgc2Npc3NvciByZWN0IGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIHN1cmZhY2UKKyAg
ICAvLyBvZiBpdHMgb3duCisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0
KCksIEludFJlY3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RS
ZWN0LmhlaWdodCgpIC0gY2hpbGRSZWN0LnkoKSkpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFn
ZQorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UgPT0gZW1w
dHkgc2Npc3NvcgorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNj
aXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAs
IDApKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRS
ZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgCisgICAgLy8gUGFydGlhbCBkYW1hZ2Ug
d2l0aGluIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAyMCwgMjApOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBTY2lz
c29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisK
KyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSByb290IHN1cmZhY2UKKyAg
ICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3Qo
KSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhp
biB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFn
ZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRoZSBsYXllciwgYnV0
IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJl
Y3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2Uu
eSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdo
dCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gc3VyZmFj
ZSwgc28gaXRzIHNjaXNzb3IgcmVjdCBpcyBpZGVudGljYWwgdG8gY2hpbGQncworICAgIEVYUEVD
VF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgp
IC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFt
YWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFt
YWdlIGJleW9uZCBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgODAsIDgw
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8g
U2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNl
CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JS
ZWN0KCksIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3
aXRoaW4gdGhlIGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3RE
YW1hZ2UpOworCisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIs
IGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFt
YWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5o
ZWlnaHQoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1
cmZhY2UsIHNvIGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdl
LngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9v
dERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFs
IGRhbWFnZSBiZXlvbmQgcm9vdAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMTEw
LCAxMTApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFtYWdlKTsKKyAgICAKKyAg
ICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290CisgICAgRVhQRUNUX0VRKHJv
b3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAw
LCAwKSk7CisKKyAgICAvLyBSb290IHN1cmZhY2UgZG9lcyBub3QgaGF2ZSBhIGNsaXBSZWN0LCBz
byBpdHMgY29udGVudFJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGRhbWFnZS4K
KyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBwZWQgYXQgcm9v
dCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdl
LnkoKSwgcm9vdFJlY3Qud2lkdGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQo
KSAtIHJvb3REYW1hZ2UueSgpKSk7CisgICAgCisgICAgLy8gUm9vdCBkb2VzIG5vdCB1c2UgbGF5
ZXIgY2xpcHBpbmcsIHNvIGl0cyBjb250ZW50IHJlY3Qgd2lsbCBiZSB1c2VkIHRvIGludGVyc2Vj
dCB3aXRoIGRhbWFnZQorICAgIC8vIFJlc3VsdCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMg
Y2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5kYXJ5CisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVj
dC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFn
ZS55KCkpKTsKKworICAgIC8vIENoaWxkcmVuJ3MgY29udGVudCByZWN0cyBhcmUgYmlnZ2VyIHRo
YW4gdGhlIHJvb3QncyBzbyB0aGV5IGRvbid0IGNsaXAgdGhlIGRhbWFnZSByZWN0LCBidXQgY2hh
bmdlIGl0cyBvZmZzZXQuCisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBj
aGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkpKTsK
KyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0Lnko
KSwgcm9vdERhbWFnZS53aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7Cit9CisKK1RFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRoQ2xpcCkKK3sKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CisKKyAgICAv
KgorICAgICAgTGF5ZXJzIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAxIHwKKyAgICAg
ICAgIHwgICstLS0tLS0tLS0tLSsgICAgIHwKKyAgICAgICAgIHwgIHwgICAgICAgICAyIHwgICAg
IHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8IHwg
ICAzICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KyAgICAgICAgIHwgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgIHwgICstLS0tLS0tLS0t
LSsgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAg
ICAgICAgTGF5ZXJzIDEsIDIgaGF2ZSByZW5kZXIgc3VyZmFjZXMKKyAgICAgKi8KKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAg
ICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNoaWxkUmVj
dCgxMCwgMTAsIDUwLCA1MCk7CisgICAgSW50UmVjdCBncmFuZENoaWxkUmVjdCg1LCA1LCAxNTAs
IDE1MCk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludChyb290UmVjdC54KCksIHJvb3RSZWN0LnkoKSkpOworICAgIHJvb3QtPnNldEJvdW5k
cyhJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKSk7CisgICAgcm9v
dC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCks
IHJvb3RSZWN0LmhlaWdodCgpKSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVj
dC54KCksIGNoaWxkUmVjdC55KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAg
ICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5o
ZWlnaHQoKSkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBncmFu
ZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxk
LT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0
LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0
LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkUHRyID0gY2hpbGQu
Z2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGRQdHIgPSBncmFuZENoaWxkLmdldCgp
OworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5k
cyh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgeworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OworICAgICAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNv
cnRlcjsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgp
KTsKKworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3QpOworICAgIH0KKyAg
ICAKKyAgICBBU1NFUlRfVFJVRShjaGlsZFB0ci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENo
aWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVYUEVDVF9FUShyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSwgMlUpOworICAgIAorICAgIC8vIE5vdyByb290IGlzIGNsaXBw
aW5nIHRvIGl0cyBib3VuZHMKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xpcFJlY3QoKSwgcm9vdFJl
Y3QpOworCisgICAgLy8gTGF5ZXIncyBjbGlwUmVjdCBpcyBhIHVuaW9uIG9mIGFsbCBpdHMgY2hp
bGRyZW4ncyBib3VuZHMKKyAgICBBU1NFUlRfRVEoY2hpbGRQdHItPmNsaXBSZWN0KCksIEludFJl
Y3QoMCwgMCwgZ3JhbmRDaGlsZFJlY3QueCgpICsgZ3JhbmRDaGlsZFJlY3Qud2lkdGgoKSwgZ3Jh
bmRDaGlsZFJlY3QueSgpICsgZ3JhbmRDaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBBU1NFUlRf
RVEoZ3JhbmRDaGlsZFB0ci0+Y2xpcFJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAg
ICBBU1NFUlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKworICAgIC8vIENoaWxkIHN1cmZhY2UncyBjbGlwcGluZyByZWN0IGlzIG5v
dyBzZXQgdG8gcm9vdCdzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkt
PmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKyAgICAKKyAgICBBU1NFUlRfVFJVRShyb290LT51c2Vz
TGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlw
cGluZygpKTsKKyAgICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRS
ZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
UmVjdCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3RSZWN0KSk7CisKKyAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3Qs
IGJ1dCBjaGlsZCBsYXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdo
IGl0IGhhcyBib3VuZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxk
cmVuCisgICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBz
Y2lzc29yIHJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdo
dCgpIC0gY2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgd2lsbCBoYXZlIHRo
ZSBzYW1lIHNjaXNzb3IgcmVjdCBhcyBpdCBkb2Vzbid0IGhhdmUgYSBzdXJmYWNlCisgICAgLy8g
b2YgaXRzIG93bgorICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJ
bnRSZWN0KDAsIDAsIHJvb3RSZWN0LndpZHRoKCkgLSBjaGlsZFJlY3QueCgpLCByb290UmVjdC5o
ZWlnaHQoKSAtIGNoaWxkUmVjdC55KCkpKTsKKyAgICAKKyAgICAvLyBFbXB0eSBkYW1hZ2UKKyAg
ICByb290RGFtYWdlID0gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlID09IGVtcHR5IHNj
aXNzb3IKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29y
UmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7
CisgICAgCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwg
MCwgMCkpOworICAgIEVYUEVDVF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdCgw
LCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3QoMCwgMCwgMCwgMCkpOworICAgIAorICAgIC8vIFBhcnRpYWwgZGFtYWdlIHdpdGhp
biBjaGlsZAorICAgIHJvb3REYW1hZ2UgPSBJbnRSZWN0KDEwLCAxMCwgMjAsIDIwKTsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gU2Npc3NvcnMg
YXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkpOworCisgICAg
Ly8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgcm9vdCBzdXJmYWNlCisgICAgRVhQ
RUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIHJv
b3REYW1hZ2UpOworICAgIAorICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhl
IGxheWVyCisgICAgRVhQRUNUX0VRKHJvb3QtPnNjaXNzb3JSZWN0KCksIHJvb3REYW1hZ2UpOwor
CisgICAgLy8gRW50aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIsIGJ1dCB3aXRo
IGRpZmZlcmVudCBvZmZzZXQKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCks
IEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAt
IGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkp
OworCisgICAgLy8gR3JhbmQgY2hpbGQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIHN1cmZhY2UsIHNv
IGl0cyBzY2lzc29yIHJlY3QgaXMgaWRlbnRpY2FsIHRvIGNoaWxkJ3MKKyAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSBi
ZXlvbmQgY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDgwLCA4MCk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNz
b3JzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKwor
ICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAg
IEVYUEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgp
LCByb290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGlu
IHRoZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdl
KTsKKworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQg
d2l0aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55
KCkgLSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0
KCkpKTsKKworICAgIC8vIEdyYW5kIGNoaWxkIGRvZXMgbm90IGhhdmUgaXRzIG93biBzdXJmYWNl
LCBzbyBpdHMgc2Npc3NvciByZWN0IGlzIGlkZW50aWNhbCB0byBjaGlsZCdzCisgICAgRVhQRUNU
X0VRKGdyYW5kQ2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkg
LSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1h
Z2Uud2lkdGgoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSkpOworCisgICAgLy8gUGFydGlhbCBkYW1h
Z2UgYmV5b25kIHJvb3QKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDExMCwgMTEw
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8g
U2Npc3NvcnMgYXJlIG5vdCBjb21wdXRlZCBmb3Igcm9vdAorICAgIEVYUEVDVF9FUShyb290LT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworCisgICAgLy8gUm9vdCBzdXJmYWNlIGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCwgc28gaXRz
IGNvbnRlbnRSZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0aCBkYW1hZ2UuCisgICAg
Ly8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJvb3QgbGF5
ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCks
IHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBy
b290RGFtYWdlLnkoKSkpOworICAgIAorICAgIC8vIFJvb3QgZG9lcyBub3QgdXNlIGxheWVyIGNs
aXBwaW5nLCBzbyBpdHMgY29udGVudCByZWN0IHdpbGwgYmUgdXNlZCB0byBpbnRlcnNlY3Qgd2l0
aCBkYW1hZ2UKKyAgICAvLyBSZXN1bHQgaXMgdGhhdCByb290IGRhbWFnZSByZWN0IGlzIGNsaXBw
ZWQgYXQgcm9vdCBsYXllciBib3VuZGFyeQorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVj
dCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpLCByb290RGFtYWdlLnkoKSwgcm9vdFJlY3Qud2lk
dGgoKSAtIHJvb3REYW1hZ2UueCgpLCByb290UmVjdC5oZWlnaHQoKSAtIHJvb3REYW1hZ2UueSgp
KSk7CisKKyAgICAvLyBOb3cgdGhlIHNjaXNzb3IgcmVjdHMgYXJlIGNsaXBwZWQgYnkgc3VyZmFj
ZXMgY29udGVudFJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIElu
dFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290RGFtYWdlLnkoKSAtIGNo
aWxkUmVjdC55KCksIHJvb3RSZWN0LndpZHRoKCkgLSByb290RGFtYWdlLngoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRy
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwg
cm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERh
bWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFnZS55KCkpKTsKK30KKworVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwQW5kU3BhY2VU
cmFuc2Zvcm0pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25J
bXBsVGhyZWFkOworCisgICAgLyoKKyAgICAgIExheWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dz
OgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8
ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAgICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgICAgfCAgfCB8ICAgMyw0ICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0t
LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICB8ICAgICAgICAgICB8ICAgICB8CisgICAg
ICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVycyAxLCAyIGFuZCAzIGhhdmUgcmVuZGVyIHN1
cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDMpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDIg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworCisgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAx
MDAsIDEwMCk7CisgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOworICAgIElu
dFJlY3QgZ3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOworCisgICAgcm9vdC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOworICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290
UmVjdC55KCkpKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgp
LCByb290UmVjdC5oZWlnaHQoKSkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKKwor
ICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7Cisg
ICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXpl
KGNoaWxkUmVjdC53aWR0aCgpLCBjaGlsZFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjaGlsZC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oSW50UG9pbnQoZ3Jh
bmRDaGlsZFJlY3QueCgpLCBncmFuZENoaWxkUmVjdC55KCkpKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRPcGFjaXR5KDAuNWYpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKGdyYW5k
Q2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisgICAgZ3JhbmRD
aGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZDItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRQb3NpdGlvbihJ
bnRQb2ludChncmFuZENoaWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdy
YW5kQ2hpbGQyLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRCb3VuZHMo
SW50U2l6ZShncmFuZENoaWxkUmVjdC53aWR0aCgpLCBncmFuZENoaWxkUmVjdC5oZWlnaHQoKSkp
OworICAgIGdyYW5kQ2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBDQ0xheWVy
SW1wbCogY2hpbGRQdHIgPSBjaGlsZC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGls
ZFB0ciA9IGdyYW5kQ2hpbGQuZ2V0KCk7CisKKyAgICBncmFuZENoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkMi5yZWxlYXNlKCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVh
c2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIHJvb3Qt
PnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGxheWVyTGlz
dDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIENDTGF5
ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocm9vdC5nZXQoKSk7CisKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwgJmxh
eWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgICAgICBGbG9hdFJlY3QgZHVt
bXlEYW1hZ2VSZWN0OworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VS
ZWN0KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX1RSVUUoY2hpbGRQdHItPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfVFJVRShncmFuZENoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIAorICAgIEVYUEVD
VF9FUShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSwgM1UpOworICAgIAorICAgIC8vIE5v
dyByb290IGlzIGNsaXBwaW5nIHRvIGl0cyBib3VuZHMKKyAgICBBU1NFUlRfRVEocm9vdC0+Y2xp
cFJlY3QoKSwgcm9vdFJlY3QpOworCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5jbGlwUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIGNoaWxkUmVjdC54KCkgKyBncmFuZENoaWxkUmVjdC53aWR0aCgpICwg
Y2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFu
ZGNoaWxkIG5vdyBjbGlwcworICAgIEFTU0VSVF9FUShncmFuZENoaWxkUHRyLT5jbGlwUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIGdyYW5kQ2hpbGRSZWN0LngoKSArIGdyYW5kQ2hpbGRSZWN0LndpZHRo
KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSArIGdyYW5kQ2hpbGRSZWN0LmhlaWdodCgpKSk7CisKKyAg
ICBBU1NFUlRfRVEocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpLCBJbnRSZWN0KDAs
IDAsIDAsIDApKTsKKworICAgIC8vIENoaWxkIHN1cmZhY2UncyBjbGlwcGluZyByZWN0IGlzIG5v
dyBzZXQgdG8gcm9vdCdzCisgICAgQVNTRVJUX0VRKGNoaWxkUHRyLT5yZW5kZXJTdXJmYWNlKCkt
PmNsaXBSZWN0KCksIHJvb3RSZWN0KTsKKyAgICAKKyAgICBBU1NFUlRfVFJVRShyb290LT51c2Vz
TGF5ZXJDbGlwcGluZygpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRQdHItPnVzZXNMYXllckNs
aXBwaW5nKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkUHRyLT51c2VzTGF5ZXJDbGlw
cGluZygpKTsKKyAgICAKKyAgICAvLyBEYW1hZ2UgdGhlIGVudGlyZSBzY3JlZW4KKyAgICBJbnRS
ZWN0IHJvb3REYW1hZ2Uocm9vdFJlY3QpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290
RGFtYWdlKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hp
bGRQdHItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290
UmVjdCkpOworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0
KHJvb3RSZWN0KSk7CisKKyAgICAvLyBUaGUgZGFtYWdlIGlzIHRoZSBlbnRpcmUgcm9vdFJlY3Qs
IGJ1dCBjaGlsZCBsYXllciBzdGFydHMgYXQgYW4gb2Zmc2V0LgorICAgIC8vIEV2ZW4gdGhvdWdo
IGl0IGhhcyBib3VuZHMsIGl0IGlzIG5vdCBjbGlwcGluZyB0byBib3VuZHMgc28gaXRzIGNoaWxk
cmVuCisgICAgLy8gKHdoaWNoIGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcykgZXh0ZW5kIHRoZSBz
Y2lzc29yIHJlY3QKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJl
Y3QoMCwgMCwgcm9vdFJlY3Qud2lkdGgoKSAtIGNoaWxkUmVjdC54KCksIHJvb3RSZWN0LmhlaWdo
dCgpIC0gY2hpbGRSZWN0LnkoKSkpOworCisgICAgLy8gR3JhbmQgY2hpbGQgaXMgbm93IHNjaXNz
b3JlZCBieSB0aGUgcmVuZGVyIHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZFB0ci0+
c2Npc3NvclJlY3QoKSwgSW50UmVjdCgwLCAwLCByb290UmVjdC53aWR0aCgpIC0gY2hpbGRSZWN0
LngoKSAtIGdyYW5kQ2hpbGRSZWN0LngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSBjaGlsZFJlY3Qu
eSgpIC0gZ3JhbmRDaGlsZFJlY3QueSgpKSk7CisgICAgCisgICAgLy8gRW1wdHkgZGFtYWdlCisg
ICAgcm9vdERhbWFnZSA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIEVtcHR5IGRhbWFnZSA9PSBlbXB0eSBz
Y2lzc29yCisgICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3Nv
clJlY3QoKSwgSW50UmVjdCgwLCAwLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNzb3JSZWN0KCksIEludFJlY3QoMCwgMCwgMCwgMCkp
OworICAgIAorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnNjaXNzb3JSZWN0KCksIEludFJlY3Qo
MCwgMCwgMCwgMCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKyAgICAKKyAgICAvLyBQYXJ0aWFsIGRhbWFnZSB3aXRo
aW4gY2hpbGQKKyAgICByb290RGFtYWdlID0gSW50UmVjdCgxMCwgMTAsIDIwLCAyMCk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIHJvb3Qgc3VyZmFjZQorICAgIEVY
UEVDVF9FUShjaGlsZFB0ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBy
b290RGFtYWdlKTsKKyAgICAKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0aGluIHRo
ZSBsYXllcgorICAgIEVYUEVDVF9FUShyb290LT5zY2lzc29yUmVjdCgpLCByb290RGFtYWdlKTsK
KworICAgIC8vIEVudGlyZSBkYW1hZ2UgcmVjdCBpcyB3aXRoaW4gdGhlIGxheWVyLCBidXQgd2l0
aCBkaWZmZXJlbnQgb2Zmc2V0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgp
LCBJbnRSZWN0KHJvb3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkg
LSBjaGlsZFJlY3QueSgpLCByb290RGFtYWdlLndpZHRoKCksIHJvb3REYW1hZ2UuaGVpZ2h0KCkp
KTsKKworICAgIC8vIEdyYW5kIGNoaWxkIG5vdyBnZXRzIHNjaXNzb3JlZCBieSBpdHMgdGFyZ2V0
IHN1cmZhY2UgYXMgd2VsbCBhcyByb290CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGRQdHItPnNj
aXNzb3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCkgLSBjaGlsZFJlY3QueCgpLCByb290
RGFtYWdlLnkoKSAtIGNoaWxkUmVjdC55KCksIHJvb3REYW1hZ2Uud2lkdGgoKSAtIGdyYW5kQ2hp
bGRSZWN0LngoKSwgcm9vdERhbWFnZS5oZWlnaHQoKSAtIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOwor
CisgICAgLy8gUGFydGlhbCBkYW1hZ2UgYmV5b25kIGNoaWxkCisgICAgcm9vdERhbWFnZSA9IElu
dFJlY3QoMTAsIDEwLCA4MCwgODApOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290RGFt
YWdlKTsKKyAgICAKKyAgICAvLyBTY2lzc29ycyBhcmUgbm90IGNvbXB1dGVkIGZvciByb290Cisg
ICAgRVhQRUNUX0VRKHJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwg
SW50UmVjdCgwLCAwLCAwLCAwKSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3QgaXMgd2l0
aGluIHRoZSByb290IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoY2hpbGRQdHItPnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisgICAgCisgICAgLy8gRW50
aXJlIGRhbWFnZSByZWN0IGlzIHdpdGhpbiB0aGUgbGF5ZXIKKyAgICBFWFBFQ1RfRVEocm9vdC0+
c2Npc3NvclJlY3QoKSwgcm9vdERhbWFnZSk7CisKKyAgICAvLyBFbnRpcmUgZGFtYWdlIHJlY3Qg
aXMgd2l0aGluIHRoZSBsYXllciwgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldAorICAgIEVYUEVD
VF9FUShjaGlsZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNo
aWxkUmVjdC54KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53
aWR0aCgpLCByb290RGFtYWdlLmhlaWdodCgpKSk7CisKKyAgICAvLyBHcmFuZCBjaGlsZCBub3cg
Z2V0cyBzY2lzc29yZWQgYnkgaXRzIHRhcmdldCBzdXJmYWNlIGFzIHdlbGwgYXMgcm9vdAorICAg
IEVYUEVDVF9FUShncmFuZENoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJvb3REYW1h
Z2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3QueSgpLCBy
b290RGFtYWdlLndpZHRoKCkgLSBncmFuZENoaWxkUmVjdC54KCksIHJvb3REYW1hZ2UuaGVpZ2h0
KCkgLSBncmFuZENoaWxkUmVjdC55KCkpKTsKKworICAgIC8vIFBhcnRpYWwgZGFtYWdlIGJleW9u
ZCByb290CisgICAgcm9vdERhbWFnZSA9IEludFJlY3QoMTAsIDEwLCAxMTAsIDExMCk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3REYW1hZ2UpOworICAgIAorICAgIC8vIFNjaXNzb3Jz
IGFyZSBub3QgY29tcHV0ZWQgZm9yIHJvb3QKKyAgICBFWFBFQ1RfRVEocm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KDAsIDAsIDAsIDApKTsKKworICAg
IC8vIFJvb3Qgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgY2xpcFJlY3QsIHNvIGl0cyBjb250ZW50
UmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdlLgorICAgIC8vIFJlc3Vs
dCBpcyB0aGF0IHJvb3QgZGFtYWdlIHJlY3QgaXMgY2xpcHBlZCBhdCByb290IGxheWVyIGJvdW5k
YXJ5CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnNjaXNz
b3JSZWN0KCksIEludFJlY3Qocm9vdERhbWFnZS54KCksIHJvb3REYW1hZ2UueSgpLCByb290UmVj
dC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgpIC0gcm9vdERhbWFn
ZS55KCkpKTsKKyAgICAKKyAgICAvLyBSb290IGRvZXMgbm90IHVzZSBsYXllciBjbGlwcGluZywg
c28gaXRzIGNvbnRlbnQgcmVjdCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJzZWN0IHdpdGggZGFtYWdl
CisgICAgLy8gUmVzdWx0IGlzIHRoYXQgcm9vdCBkYW1hZ2UgcmVjdCBpcyBjbGlwcGVkIGF0IHJv
b3QgbGF5ZXIgYm91bmRhcnkKKyAgICBFWFBFQ1RfRVEocm9vdC0+c2Npc3NvclJlY3QoKSwgSW50
UmVjdChyb290RGFtYWdlLngoKSwgcm9vdERhbWFnZS55KCksIHJvb3RSZWN0LndpZHRoKCkgLSBy
b290RGFtYWdlLngoKSwgcm9vdFJlY3QuaGVpZ2h0KCkgLSByb290RGFtYWdlLnkoKSkpOworCisg
ICAgLy8gTm93IHRoZSBzY2lzc29yIHJlY3RzIGFyZSBjbGlwcGVkIGJ5IHN1cmZhY2VzIGNvbnRl
bnRSZWN0CisgICAgRVhQRUNUX0VRKGNoaWxkUHRyLT5zY2lzc29yUmVjdCgpLCBJbnRSZWN0KHJv
b3REYW1hZ2UueCgpIC0gY2hpbGRSZWN0LngoKSwgcm9vdERhbWFnZS55KCkgLSBjaGlsZFJlY3Qu
eSgpLCByb290UmVjdC53aWR0aCgpIC0gcm9vdERhbWFnZS54KCksIHJvb3RSZWN0LmhlaWdodCgp
IC0gcm9vdERhbWFnZS55KCkpKTsKKworICAgIC8vIEdyYW5kY2hpbGQncyBzY2lzc29yIHJlY3Qg
aXMgY2xpcHBlZCBieSBpdHMgdGFyZ2V0IHN1cmZhY2UKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZFB0ci0+c2Npc3NvclJlY3QoKSwgSW50UmVjdChyb290RGFtYWdlLngoKSAtIGNoaWxkUmVjdC54
KCksIHJvb3REYW1hZ2UueSgpIC0gY2hpbGRSZWN0LnkoKSwgcm9vdERhbWFnZS53aWR0aCgpIC0g
Z3JhbmRDaGlsZFJlY3QueCgpLCByb290RGFtYWdlLmhlaWdodCgpIC0gZ3JhbmRDaGlsZFJlY3Qu
eSgpKSk7Cit9CisKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclJlcGxpY2EpCiB7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNTQ1LDcgKzExMDMsMTAgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikK
ICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgLy8gVGhlIGNo
aWxkIGxheWVyJ3MgY29udGVudCBpcyBlbnRpcmVseSBvdXRzaWRlIHRoZSBwYXJlbnQncyBjbGlw
IHJlY3QsIHNvIHRoZSBpbnRlcm1lZGlhdGUKICAgICAvLyByZW5kZXIgc3VyZmFjZSBzaG91bGQg
aGF2ZSBiZWVuIHJlbW92ZWQuIFJlbmRlciBzdXJmYWNlcyB3aXRob3V0IGNoaWxkcmVuIG9yIHZp
c2libGUKQEAgLTU3Myw3ICsxMTM0LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvclRyYW5zcGFyZW50Q2hpbGQpCiAgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAK
ICAgICAvLyBTaW5jZSB0aGUgbGF5ZXIgaXMgdHJhbnNwYXJlbnQsIHJlbmRlclN1cmZhY2UxLT5y
ZW5kZXJTdXJmYWNlKCkgc2hvdWxkIG5vdCBoYXZlIGdvdHRlbiBhZGRlZCBhbnl3aGVyZS4KICAg
ICAvLyBBbHNvLCB0aGUgZHJhd2FibGUgY29udGVudCByZWN0IHNob3VsZCBub3QgaGF2ZSBiZWVu
IGV4dGVuZGVkIGJ5IHRoZSBjaGlsZHJlbi4KQEAgLTYwMSwxNCArMTE2NCwxNCBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgRVhQ
RUNUX1RSVUUocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAxVSk7CiAKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmNsZWFyKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZvcmNlUmVuZGVyU3Vy
ZmFjZShmYWxzZSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogICAgIEVYUEVDVF9GQUxTRShyZW5kZXJT
dXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCksIDBVKTsKIH0KQEAgLTY2Niw3ICsxMjI5LDExIEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQog
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJl
Y3Q7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50UmVjdCgpKTsKKwogCiAgICAgQVNTRVJUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFswXS0+aWQoKSk7CkBAIC03MjUsNyArMTI5Miw5IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzQ3Jhc2hSZXBy
bykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgQVNTRVJU
X0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgRVhQRUNUX0VRKHBh
cmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CkBAIC03NzYsNyAr
MTM0NSw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RD
dWxsc1N1cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAgcGFyZW50LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFdpdGhvdXQgYW4gYW5pbWF0aW9u
LCB3ZSBzaG91bGQgY3VsbCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBmcm9tIHRoZSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgxVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkpOwpAQCAtNzk1LDcgKzEzNjQsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50KQogICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBX
aXRoIGFuIGFuaW1hdGluZyB0cmFuc2Zvcm0sIHdlIHNob3VsZCBrZWVwIGNoaWxkIGFuZCBncmFu
ZENoaWxkIGluIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgzVSwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwpAQCAtODU1LDcgKzE0MjQsMTAgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENv
cnJlY3RseVRvTGF5ZXJzKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7
CisKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIElu
dFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQxLT5jbGlwUmVjdCgpKTsKICAgICBFWFBFQ1RfSU5U
X1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFu
ZENoaWxkMi0+Y2xpcFJlY3QoKSk7CkBAIC05MjcsNyArMTQ5OSw5IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb1N1
cmZhY2VzKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAKICAgICBB
U1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBBU1NFUlRfVFJV
RShncmFuZENoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTE0MDgsNyArMTk4Miw3IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aG91
dFByZXNlcnZlczNkKQogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIC8vIFZlcmlm
eSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZy
b250RmFjaW5nQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNTEzLDcgKzIwODcsNyBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQ
cmVzZXJ2ZXMzZCkKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBWZXJpZnkg
d2hpY2ggcmVuZGVyU3VyZmFjZXMgd2VyZSBjcmVhdGVkLgogICAgIEVYUEVDVF9GQUxTRShmcm9u
dEZhY2luZ0NoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTU5OCw3ICsyMTcyLDkgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoQW5p
bWF0aW5nVHJhbnNmb3JtcykKICAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OwogCiAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEVYUEVD
VF9UUlVFKGFuaW1hdGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0xNjcwLDcgKzIy
NDYsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3Vs
bGluZ1dpdGhQcmVzZXJ2ZXMzZEZvckZsYXR0ZW5pbgogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAg
ICAgRVhQRUNUX1RSVUUoZnJvbnRGYWNpbmdTdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCBjN2RmMTkxNWNjZDc2ZGVmYjg3ZDI5MGFhOGE1YjI0YWE0NjJmZTI0
Li43ZmFhNDNkMjdkMTY2OGM4YWFjMzBkZDEyZDFjNDk0MjkxNjMyMzA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtMzYsMTAgKzM2LDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNp
bmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVEcmF3
UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+CiAjaW5jbHVk
ZSA8cHVibGljL1dlYlZpZGVvRnJhbWVQcm92aWRlci5oPgpAQCAtNDksNiArNTEsMTIgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdFRlc3RzOwogCit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRl
c3Rpbmc6OlJldHVybjsKK3VzaW5nIDo6dGVzdGluZzo6QW55TnVtYmVyOwordXNpbmcgOjp0ZXN0
aW5nOjpBdExlYXN0OwordXNpbmcgOjp0ZXN0aW5nOjpfOworCiBuYW1lc3BhY2UgewogCiBjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0LCBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CkBAIC03MCw2ICs3OCwyOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJl
YWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tU
aW1lKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdFNldENvbnRlbnRzTWVtb3J5
QWxsb2NhdGlvbkxpbWl0Qnl0ZXNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoc2l6ZV90KSBPVkVS
UklERSB7IH0KIAorICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5
ZXJUcmVlSG9zdChib29sIHBhcnRpYWxTd2FwLCBQYXNzUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0
PiBncmFwaGljc0NvbnRleHQsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJvb3RQdHIpCisgICAg
eworICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworCisgICAgICAgIHNldHRpbmdzLnBhcnRp
YWxTd2FwRW5hYmxlZCA9IHBhcnRpYWxTd2FwOworCisgICAgICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHNldHRp
bmdzLCB0aGlzKTsKKworICAgICAgICBteUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihncmFwaGljc0NvbnRleHQsIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgICAgICBteUhvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKworICAgICAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSByb290UHRyOworCisgICAgICAgIHJvb3QtPnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KDAsIDApKTsKKyAgICAgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7Cisg
ICAgICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMCwgMTApKTsK
KyAgICAgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBteUhvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gbXlIb3N0SW1w
bC5yZWxlYXNlKCk7CisgICAgfQorCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9s
bERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgewogICAgICAgICBBU1NF
UlRfRVEobGF5ZXItPnNjcm9sbERlbHRhKCksIEludFNpemUoKSk7CkBAIC0xMTAxLDYgKzExMzEs
Mjg4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3YXBSZWNlaXZl
c0RhbWFnZVJlY3QpCiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkU3dhcFJlY3QuaGVpZ2h0KCksIGFj
dHVhbFN3YXBSZWN0LmhlaWdodCgpKTsKIH0KIAorY2xhc3MgRmFrZUxheWVyV2l0aFF1YWRzIDog
cHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxGYWtl
TGF5ZXJXaXRoUXVhZHM+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtl
TGF5ZXJXaXRoUXVhZHMoaWQpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKEND
UXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFk
U3RhdGUsIGJvb2wmKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgY29uc3QgQ29sb3IgZ3JheSgx
MDAsIDEwMCwgMTAwKTsKKyAgICAgICAgSW50UmVjdCBxdWFkUmVjdCgwLCAwLCA1LCA1KTsKKyAg
ICAgICAgT3duUHRyPENDRHJhd1F1YWQ+IG15UXVhZCA9IENDU29saWRDb2xvckRyYXdRdWFkOjpj
cmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgZ3JheSk7CisgICAgICAgIHF1YWRMaXN0
LmFwcGVuZChteVF1YWQucmVsZWFzZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmFrZUxh
eWVyV2l0aFF1YWRzKGludCBpZCkKKyAgICAgICAgOiBDQ0xheWVySW1wbChpZCkKKyAgICB7Cisg
ICAgfQorfTsKKworY2xhc3MgTW9ja0NvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDEodXNlUHJvZ3JhbSwgdm9pZChXZWJH
TElkIHByb2dyYW0pKTsKKyAgICBNT0NLX01FVEhPRDUodW5pZm9ybTRmLCB2b2lkKFdHQzNEaW50
IGxvY2F0aW9uLCBXR0MzRGZsb2F0IHgsIFdHQzNEZmxvYXQgeSwgV0dDM0RmbG9hdCB6LCBXR0Mz
RGZsb2F0IHcpKTsKKyAgICBNT0NLX01FVEhPRDQodW5pZm9ybU1hdHJpeDRmdiwgdm9pZChXR0Mz
RGludCBsb2NhdGlvbiwgV0dDM0RzaXplaSBjb3VudCwgV0dDM0Rib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgV0dDM0RmbG9hdCogdmFsdWUpKTsKKyAgICBNT0NLX01FVEhPRDQoZHJhd0VsZW1lbnRz
LCB2b2lkKFdHQzNEZW51bSBtb2RlLCBXR0MzRHNpemVpIGNvdW50LCBXR0MzRGVudW0gdHlwZSwg
V0dDM0RpbnRwdHIgb2Zmc2V0KSk7CisgICAgTU9DS19NRVRIT0QxKGdldFN0cmluZywgV2ViU3Ry
aW5nKFdHQzNEZW51bSBuYW1lKSk7CisgICAgTU9DS19NRVRIT0QwKGdldFJlcXVlc3RhYmxlRXh0
ZW5zaW9uc0NIUk9NSVVNLCBXZWJTdHJpbmcoKSk7CisgICAgTU9DS19NRVRIT0QxKGVuYWJsZSwg
dm9pZChXR0MzRGVudW0gY2FwKSk7CisgICAgTU9DS19NRVRIT0Q0KHNjaXNzb3IsIHZvaWQoV0dD
M0RpbnQgeCwgV0dDM0RpbnQgeSwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQp
KTsKK307CisKK2NsYXNzIE1vY2tDb250ZXh0SGFybmVzcyB7Citwcml2YXRlOgorICAgIE1vY2tD
b250ZXh0KiBtX2NvbnRleHQ7CitwdWJsaWM6CisgICAgTW9ja0NvbnRleHRIYXJuZXNzKE1vY2tD
b250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAg
ICAgICAgLy8gQ2F0Y2ggInVuaW50ZXJlc3RpbmciIGNhbGxzCisgICAgICAgIEVYUEVDVF9DQUxM
KCptX2NvbnRleHQsIHVzZVByb2dyYW0oXykpCisgICAgICAgICAgICAuVGltZXMoMCk7CisKKyAg
ICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZHJhd0VsZW1lbnRzKF8sIF8sIF8sIF8pKQor
ICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAgIC8vIFRoZXNlIGFyZSBub3QgYXNzZXJ0
ZWQKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybU1hdHJpeDRmdihfLCBf
LCBfLCBfKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisKKyAgICAg
ICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgdW5pZm9ybTRmKF8sIF8sIF8sIF8sIF8pKQorICAg
ICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybigpKTsKKworICAgICAgICAvLyBBbnkgb3Ro
ZXIgc3RyaW5ncyBhcmUgZW1wdHkKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1fY29udGV4dCwgZ2V0
U3RyaW5nKF8pKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmco
KSkpOworCisgICAgICAgIC8vIFN1cHBvcnQgZm9yIHBhcnRpYWwgc3dhcCwgaWYgbmVlZGVkCisg
ICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGdldFN0cmluZyhHcmFwaGljc0NvbnRleHQz
RDo6RVhURU5TSU9OUykpCisgICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKFdlYlN0
cmluZygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIikpKTsKKworICAgICAgICBFWFBFQ1Rf
Q0FMTCgqbV9jb250ZXh0LCBnZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpKQorICAg
ICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybihXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bv
c3Rfc3ViX2J1ZmZlciIpKSk7CisKKyAgICAgICAgLy8gQW55IHVuLXNhbmN0aW9uZWQgY2FsbHMg
dG8gZW5hYmxlKCkgYXJlIE9LCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIGVuYWJs
ZShfKSkKKyAgICAgICAgICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisgICAgfQorCisg
ICAgdm9pZCBtdXN0RHJhd1NvbGlkUXVhZCgpCisgICAgeworICAgICAgICBFWFBFQ1RfQ0FMTCgq
bV9jb250ZXh0LCBkcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSkKKyAgICAgICAgICAgIC5XaWxs
T25jZShSZXR1cm4oKSkKKyAgICAgICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7CisKKyAg
ICAgICAgLy8gMSBpcyBoYXJkY29kZWQgcmV0dXJuIHZhbHVlIG9mIGZha2UgY3JlYXRlUHJvZ3Jh
bSgpCisgICAgICAgIEVYUEVDVF9DQUxMKCptX2NvbnRleHQsIHVzZVByb2dyYW0oMSkpCisgICAg
ICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKCkpCisgICAgICAgICAgICAuUmV0aXJlc09uU2F0dXJh
dGlvbigpOworCisgICAgfQorCisgICAgdm9pZCBtdXN0U2V0U2Npc3NvcihpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9DQUxMKCptX2Nv
bnRleHQsIGVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSkKKyAgICAgICAg
ICAgIC5XaWxsUmVwZWF0ZWRseShSZXR1cm4oKSk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1f
Y29udGV4dCwgc2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIC5UaW1l
cyhBdExlYXN0KDEpKQorICAgICAgICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybigpKTsKKyAg
ICB9CisKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9QYXJ0aWFsU3dh
cCkKK3sKKyAgICBNb2NrQ29udGV4dCogbW9ja0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoKTsK
KyAgICBSZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4
dDo6Y3JlYXRlM0QoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihtb2NrQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOworICAgIE1vY2tDb250ZXh0SGFybmVzcyBo
YXJuZXNzKG1vY2tDb250ZXh0KTsKKworICAgIGhhcm5lc3MubXVzdERyYXdTb2xpZFF1YWQoKTsK
KyAgICBoYXJuZXNzLm11c3RTZXRTY2lzc29yKDAsIDAsIDEwLCAxMCk7CisKKyAgICAvLyBSdW4g
dGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBj
cmVhdGVMYXllclRyZWVIb3N0KGZhbHNlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNy
ZWF0ZSgxKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7Cisg
ICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15
SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxM
YXllcnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2Nr
Q29udGV4dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFydGlhbFN3
YXApCit7CisgICAgTW9ja0NvbnRleHQqIG1vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KCk7
CisgICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRl
eHQ6OmNyZWF0ZTNEKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobW9ja0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKTsKKyAgICBNb2NrQ29udGV4dEhhcm5lc3Mg
aGFybmVzcyhtb2NrQ29udGV4dCk7CisKKyAgICBoYXJuZXNzLm11c3REcmF3U29saWRRdWFkKCk7
CisgICAgaGFybmVzcy5tdXN0U2V0U2Npc3NvcigwLCAwLCAxMCwgMTApOworCisgICAgT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KHRy
dWUsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKKworICAgIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJ
bXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhm
cmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgTW9j
azo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsU3dhcE5vVXBkYXRlKQoreworICAgIE1v
Y2tDb250ZXh0KiBtb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dCgpOworICAgIFJlZlB0cjxD
Q0dyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVhdGUzRChH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KGFkb3B0UHRyKG1vY2tDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSk7CisgICAgTW9ja0NvbnRleHRIYXJuZXNzIGhhcm5lc3MobW9ja0Nv
bnRleHQpOworCisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVhZCgpOworICAgIGhhcm5lc3Mu
bXVzdFNldFNjaXNzb3IoMCwgOCwgMiwgMik7CisgICAgaGFybmVzcy5tdXN0RHJhd1NvbGlkUXVh
ZCgpOworICAgIGhhcm5lc3MubXVzdFNldFNjaXNzb3IoMCwgMCwgMTAsIDEwKTsKKworICAgIE93
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9z
dCh0cnVlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgxKSk7CisgICAgCisg
ICAgLy8gRHJhdyBvbmNlIHRvIG1ha2Ugc3VyZSBsYXllciBpcyBub3QgbmV3CisgICAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIEVYUEVDVF9UUlVFKG15SG9zdElt
cGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZy
YW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgIC8v
IEdlbmVyYXRlIHVwZGF0ZSBpbiBsYXllcgorICAgIENDTGF5ZXJJbXBsKiByb290ID0gbXlIb3N0
SW1wbC0+cm9vdExheWVyKCk7CisgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwg
MCwgMiwgMikpOworCisgICAgLy8gVGhpcyBkcmF3IHNob3VsZCBnZW5lcmF0ZSBubyBuZXcgdWRw
YXRlcworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsK
KyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWRE
cmF3QWxsTGF5ZXJzKGZyYW1lKTsKKworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCZtb2NrQ29udGV4dCk7Cit9CisKK2NsYXNzIFBhcnRpYWxTd2FwQ29udGV4dDogcHVibGlj
IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgV2ViU3RyaW5nIGdldFN0
cmluZyhXR0MzRGVudW0gbmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lID09IEdyYXBoaWNz
Q29udGV4dDNEOjpFWFRFTlNJT05TKQorICAgICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xf
Q0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIik7CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsK
KyAgICB9CisgICAgCisgICAgV2ViU3RyaW5nIGdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9N
SVVNKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoIkdMX0NIUk9NSVVNX3Bvc3Rf
c3ViX2J1ZmZlciIpOworICAgIH0KK307CisKK3N0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IHNldHVwTGF5ZXJzRm9yT3BhY2l0eShib29sIHBhcnRpYWxTd2FwLCBDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCit7CisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsK
KyAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFsU3dhcDsKKworICAgIFJl
ZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGUzRChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21X
ZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBQYXJ0aWFsU3dhcENvbnRleHQoKSksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOworICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHNl
dHRpbmdzLCBjbGllbnQpOworICAgIG15SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVy
KGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICBteUhvc3RJbXBs
LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgLyoKKyAgICAgIExh
eWVycyBhcmUgY3JlYXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgMSB8CisgICAgICAgICB8ICArLS0t
LS0tLS0tLS0rICAgICB8CisgICAgICAgICB8ICB8ICAgICAgICAgMiB8ICAgICB8CisgICAgICAg
ICB8ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgfCB8ICAgMyAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgIHwgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8
ICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICB8ICArLS0tLS0tLS0tLS0rICAgICB8Cisg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIExheWVy
cyAxLCAyIGhhdmUgcmVuZGVyIHN1cmZhY2VzCisgICAgICovCisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGdyYW5kQ2hpbGQgPSBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNyZWF0ZSgzKTsKKworICAgIElu
dFJlY3Qgcm9vdFJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0KDEw
LCAxMCwgNTAsIDUwKTsKKyAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUw
KTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByb290LT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KHJvb3RSZWN0KTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQo
ZmFsc2UpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBJbnRTaXplKHJvb3RSZWN0LndpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgp
KSkpOworCisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAg
IGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGNoaWxkUmVjdC54KCksIGNoaWxkUmVjdC55
KCkpKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBjaGlsZC0+c2V0Qm91bmRz
KEludFNpemUoY2hpbGRSZWN0LndpZHRoKCksIGNoaWxkUmVjdC5oZWlnaHQoKSkpOworICAgIGNo
aWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNoaWxkUmVjdCk7CisgICAgY2hpbGQtPnNldERyYXdz
Q29udGVudChmYWxzZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlvbihJbnRQb2ludChncmFuZENo
aWxkUmVjdC54KCksIGdyYW5kQ2hpbGRSZWN0LnkoKSkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJv
dW5kcyhJbnRTaXplKGdyYW5kQ2hpbGRSZWN0LndpZHRoKCksIGdyYW5kQ2hpbGRSZWN0LmhlaWdo
dCgpKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChncmFuZENoaWxkUmVj
dCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgY2hpbGQt
PmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGls
ZC5yZWxlYXNlKCkpOworCisgICAgbXlIb3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFz
ZSgpKTsKKyAgICByZXR1cm4gbXlIb3N0SW1wbC5yZWxlYXNlKCk7Cit9CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udHJpYnV0aW5nTGF5ZXJFbXB0eVNjaXNzb3JQYXJ0aWFs
U3dhcCkKK3sKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbXlIb3N0SW1wbCA9IHNl
dHVwTGF5ZXJzRm9yT3BhY2l0eSh0cnVlLCB0aGlzKTsKKworICAgIHsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBFWFBFQ1RfVFJVRShteUhv
c3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisKKyAgICAgICAgLy8gSnVzdCBmb3IgY29u
c2lzdGVuY3ksIHRoZSBtb3N0IGludGVyZXN0aW5nIHN0dWZmIGFscmVhZHkgaGFwcGVuZWQKKyAg
ICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgICAgIG15SG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgICAgIC8vIFZlcmlmeSBhbGwgcXVhZHMg
aGF2ZSBiZWVuIGNvbXB1dGVkCisgICAgICAgIEFTU0VSVF9FUSgyVSwgZnJhbWUucmVuZGVyUGFz
c2VzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzBd
LT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUucmVuZGVy
UGFzc2VzWzFdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShDQ0RyYXdR
dWFkOjpTb2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1h
dGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwg
ZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKKyAgICB9
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udHJpYnV0aW5nTGF5ZXJF
bXB0eVNjaXNzb3JOb1BhcnRpYWxTd2FwKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBteUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KGZhbHNlLCB0aGlzKTsKKwor
ICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAg
ICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisKKyAg
ICAgICAgLy8gSnVzdCBmb3IgY29uc2lzdGVuY3ksIHRoZSBtb3N0IGludGVyZXN0aW5nIHN0dWZm
IGFscmVhZHkgaGFwcGVuZWQKKyAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
CisgICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworCisgICAgICAg
IC8vIFZlcmlmeSBhbGwgcXVhZHMgaGF2ZSBiZWVuIGNvbXB1dGVkCisgICAgICAgIEFTU0VSVF9F
USgyVSwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxVSwg
ZnJhbWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEFTU0VS
VF9FUSgxVSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpTb2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3
UXVhZDo6UmVuZGVyU3VyZmFjZSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBd
LT5tYXRlcmlhbCgpKTsKKyAgICB9Cit9CisKIC8vIE1ha2Ugc3VyZSB0aGF0IGNvbnRleHQgbG9z
dCBub3RpZmljYXRpb25zIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIHRyZWUuCiBjbGFzcyBD
b250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXIgOiBwdWJsaWMgQ0NMYXllckltcGwgewog
cHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1
c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdC5jcHAKaW5kZXggODAzMTdhMDA4MTdkZDU2NDgzNWQ5MDJhNTQ0OTkx
ZWE3NzRkOTI3OC4uYTY0OTY1ZjE2ZTJhMDU4YTgxZDU3YmZkNDFhZmUxYTU2ZDBiZGJiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJh
Y2tlclRlc3QuY3BwCkBAIC0yNjEsNyArMjYxLDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgcm9v
dC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5ib3VuZHMoKSkp
OwogICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZChtX3Jvb3QuZ2V0
KCkpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgZHVtbXlMYXllckxpc3QsIDAsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBs
LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5
ZXJJdGVyYXRvciA9IG1fbGF5ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6
OmJlZ2luKCZtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsKTsKICAgICB9CiAKQEAgLTI3Nyw3
ICsyODAsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICByb290LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7CiAgICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdENocm9taXVtLmFwcGVuZChtX3Jvb3QpOwogCi0gICAgICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3Qs
IHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV9yZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0Q2hyb21pdW0sIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290
LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdENocm9taXVtLCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisK
KyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmNvbnRlbnRSZWN0KCkpOworCiAgICAgICAgIG1fbGF5ZXJJdGVyYXRvciA9IG1fbGF5
ZXJJdGVyYXRvckJlZ2luID0gVHlwZXM6OkxheWVySXRlcmF0b3I6OmJlZ2luKCZtX3JlbmRlclN1
cmZhY2VMYXllckxpc3RDaHJvbWl1bSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA1Y2JlN2ZjNTRm
NTJmMDMyMjAyZjY5ODI0OGQ2ZTFkYWY3NzBhN2E2Li5jOGIwZWRhZWQxOGEyMmVkMzQ0OGQ5MWJl
Zjg1YTFhNjlkZmQyZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBURVNUKENDUmVu
ZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVkUXVh
ZFN0YXRlKQogICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShvcmlnaW4pOwog
ICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKICAgICByZW5k
ZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgcmVuZGVyU3VyZmFjZS0+c2V0
U2Npc3NvclJlY3QoY2xpcFJlY3QpOwogICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5
KDEpOwogCiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBy
ZW5kZXJTdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKQEAgLTExOSw3ICsxMjAsNyBA
QCBURVNUKENDUmVuZGVyU3VyZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3Jy
ZWN0U2hhcmVkUXVhZFN0YXRlKQogICAgIEVYUEVDVF9FUSgzMCwgc2hhcmVkUXVhZFN0YXRlLT5s
YXllclRyYW5zZm9ybSgpLm00MSgpKTsKICAgICBFWFBFQ1RfRVEoNDAsIHNoYXJlZFF1YWRTdGF0
ZS0+bGF5ZXJUcmFuc2Zvcm0oKS5tNDIoKSk7CiAgICAgRVhQRUNUX0VRKGNvbnRlbnRSZWN0LCBz
aGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpKTsKLSAgICBFWFBFQ1RfRVEoY2xpcFJlY3QsIHNo
YXJlZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNUX0VRKGNsaXBSZWN0LCBzaGFy
ZWRRdWFkU3RhdGUtPnNjaXNzb3JSZWN0KCkpOwogICAgIEVYUEVDVF9FUSgxLCBzaGFyZWRRdWFk
U3RhdGUtPm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNoYXJlZFF1YWRTdGF0ZS0+aXNP
cGFxdWUoKSk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>