<?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>70533</bug_id>
          
          <creation_ts>2011-10-20 12:04:13 -0700</creation_ts>
          <short_desc>[Chromium] Cull occluded tiles in tiled layers</short_desc>
          <delta_ts>2012-01-06 18:39:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73059</dependson>
          <blocked>70751</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="W. James MacLean">wjmaclean</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>487757</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-20 12:04:13 -0700</bug_when>
    <thetext>Avoids drawing of fully occluded tiles in CCTiledLayerImpl.

Simple first proof of concept - only considers tiles completely occluded by any single child.  This can be expanded to consider the union of children and siblings.

Currently does not work well as opaque() is true for layers even when it should not be.  That is something that can be addressed in parallel.

I&apos;d like this to be reviewed primarily for the direction it is going.  Is this how we&apos;d like to avoid overdraw within a layer, is it in the right place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487762</commentid>
    <comment_count>1</comment_count>
      <attachid>111820</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-20 12:12:46 -0700</bug_when>
    <thetext>Created attachment 111820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487769</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-20 12:19:50 -0700</bug_when>
    <thetext>http://code.google.com/p/chromium/issues/detail?id=99522</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487774</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-20 12:23:50 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Avoids drawing of fully occluded tiles in CCTiledLayerImpl.
&gt; 
&gt; Simple first proof of concept - only considers tiles completely occluded by any single child.  This can be expanded to consider the union of children and siblings.
&gt; 
&gt; Currently does not work well as opaque() is true for layers even when it should not be.  That is something that can be addressed in parallel.

The default for LayerChromium::m_opaque is wrong (different from GraphicsLayerChromium&apos;s default of false, but GrahpicsLayerChromium doesn&apos;t set it on the LayerChromium until it changes - and it never does).
https://bugs.webkit.org/show_bug.cgi?id=70085 fixes it. But it&apos;s a trivial change that you can include in this patch.

&gt; 
&gt; I&apos;d like this to be reviewed primarily for the direction it is going.  Is this how we&apos;d like to avoid overdraw within a layer, is it in the right place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487798</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-20 12:47:57 -0700</bug_when>
    <thetext>On the overall approach, I&apos;ll let James/Nat/Enne/Shawn pitch in.
I could imagine an approach that is less &quot;stateful&quot; where the logic goes to the LayerRendererChromium, keeping a list of occluders in drawLayersInternal, that we&apos;d pass to drawLayer, and then possibly to CCLayerImpl::draw. The advantage is that it wouldn&apos;t leak to LayerChromium, you would have access to a flattened list of children, and I think it would be closer to where you&apos;d need to implement a fuller approach (e.g. not limited to tiled content layers, possibly scissoring the tiles to eliminate more pixels). It may also integrate well with Shawn&apos;s scissoring patch.
That being said, there&apos;s possibly issues I&apos;m not seeing with that approach, so take it with a grain of salt.

Also, you&apos;ll probably won&apos;t want to consider as an occluder the layers that have a transform that is more than a x+y translation and scale, since their enclosing rect is a strict superset of the layer itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487819</commentid>
    <comment_count>5</comment_count>
      <attachid>111820</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-20 13:21:50 -0700</bug_when>
    <thetext>Comment on attachment 111820
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:300
&gt; +            if (child-&gt;opaque() &amp;&amp; child-&gt;opacity() &gt;= 0.9999 &amp;&amp; childRenderSurface-&gt;drawOpacity() &gt;= 0.9999)
&gt; +                layer-&gt;addOccludedArea(enclosingIntRect(childRenderSurface-&gt;drawableContentRect()));
&gt;          } else {
&gt;              IntRect drawableContentRect = layer-&gt;drawableContentRect();
&gt;              drawableContentRect.unite(child-&gt;drawableContentRect());
&gt;              layer-&gt;setDrawableContentRect(drawableContentRect);
&gt; +
&gt; +            if (child-&gt;opaque() &amp;&amp; child-&gt;opacity() &gt;= 0.9999 &amp;&amp; child-&gt;drawOpacity() &gt;= 0.9999)

I am not sure about this logic. Am I reading this code correctly that only a layer&apos;s direct child can occlude that layer, but not any other layers? Shouldn&apos;t it be the case that a layer is a potential occluder for all layers that draw before it so long as all of those layers are going into the same render surface? So, later siblings can occlude earlier siblings and children can occlude grandparents?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487828</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-20 13:27:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 111820 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111820&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:300
&gt; &gt; +            if (child-&gt;opaque() &amp;&amp; child-&gt;opacity() &gt;= 0.9999 &amp;&amp; childRenderSurface-&gt;drawOpacity() &gt;= 0.9999)
&gt; &gt; +                layer-&gt;addOccludedArea(enclosingIntRect(childRenderSurface-&gt;drawableContentRect()));
&gt; &gt;          } else {
&gt; &gt;              IntRect drawableContentRect = layer-&gt;drawableContentRect();
&gt; &gt;              drawableContentRect.unite(child-&gt;drawableContentRect());
&gt; &gt;              layer-&gt;setDrawableContentRect(drawableContentRect);
&gt; &gt; +
&gt; &gt; +            if (child-&gt;opaque() &amp;&amp; child-&gt;opacity() &gt;= 0.9999 &amp;&amp; child-&gt;drawOpacity() &gt;= 0.9999)
&gt; 
&gt; I am not sure about this logic. Am I reading this code correctly that only a layer&apos;s direct child can occlude that layer, but not any other layers? Shouldn&apos;t it be the case that a layer is a potential occluder for all layers that draw before it so long as all of those layers are going into the same render surface? So, later siblings can occlude earlier siblings and children can occlude grandparents?

Yes you&apos;re right.  It&apos;s a todo to pass occlusion up to parents if the current layer is non-opaque.  In the opaque case the parent will already occlude all its children.

Siblings can occlude too and is a todo also.  I&apos;m hoping we can just assume we&apos;re considering all the correct layers for occlusion and discuss other aspects of the code for this patch.  But your comments are right on point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487889</commentid>
    <comment_count>7</comment_count>
      <attachid>111850</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-20 14:29:42 -0700</bug_when>
    <thetext>Created attachment 111850
Updated to ignore non-axis-aligned transformations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487892</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-20 14:45:21 -0700</bug_when>
    <thetext>(In reply to comment #6)

&gt; In the opaque case the parent will already occlude all its children.

I don&apos;t believe this is true.  The layer tree is not a bounding box hierarchy.  An opaque parent may or may not occlude its children.

&gt; I&apos;m hoping we can just assume we&apos;re considering all the correct layers for occlusion and discuss other aspects of the code for this patch.

There aren&apos;t false positives here, but given the number of empty layers that get created in WebKit, I&apos;d really worry about all the potential occluders (mostly child -&gt; grand*parent relationships) that we&apos;re missing.  Maybe I&apos;m overstating this worry?

I&apos;m interested in Antoine&apos;s previous comment about where this might need to go in the future to support those TODOs.  If you constructed a flattened list of layers that get drawn into a render surface, the set of potential occluders for a layer in that list is all the (opaque) layers that come after it in the list.  If you didn&apos;t have such an ordered list, it seems like it&apos;d be O(n^2) to set all the potential occluders directly on each layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488413</commentid>
    <comment_count>9</comment_count>
      <attachid>111820</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-21 08:48:21 -0700</bug_when>
    <thetext>Comment on attachment 111820
Patch

Dana, do you have a sense of what the stateless approach would be like, both in terms of complexity-to-implement as well as complexity to maintain? I definitely like just folding in &quot;visibility culling&quot; as a postprocess --- there are maintainability wins and also testing wins to be had from such an approach.

If it helps, we have little indication that the time spent in the compositor drawing is a bottleneck. That is to say, an inefficient implementation thats maintainable is vastly preferred to the fastest version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488416</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-21 08:51:05 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 111820 [details])
&gt; Dana, do you have a sense of what the stateless approach would be like, both in terms of complexity-to-implement as well as complexity to maintain?

Will get back with any questions about it.  Haven&apos;t dug into what it all means yet as I&apos;ve been looking at setting our friend the opaque flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492477</commentid>
    <comment_count>11</comment_count>
      <attachid>112872</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-10-28 08:57:59 -0700</bug_when>
    <thetext>Created attachment 112872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492479</commentid>
    <comment_count>12</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-10-28 09:00:32 -0700</bug_when>
    <thetext>This is a first-attempt at addressing Antoine&apos;s desire to make the culling process less stateful. It does also attempt to consider all subsequent layers in the draw order when culling a tile, but does not attempt to draw partial tiles (although the code is designed to allow this).

Missing: the ability to actually draw a partial tile (i.e. a partial texture): looking for feedback on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492489</commentid>
    <comment_count>13</comment_count>
      <attachid>112872</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-28 09:33:45 -0700</bug_when>
    <thetext>Comment on attachment 112872
Patch

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

I&apos;m liking this approach.  :)

My biggest sadness is that the complexity of drawTiles is getting a little bit out of hand.  If there&apos;s some way to encapsulate the culling more into different functions or otherwise break up that monolithic function, I think that&apos;d be excellent.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:200
&gt; +static bool isAxisAligned(const TransformationMatrix&amp; m)

Out of curiosity, are you only considering axis-aligned rects so that you can use IntRect::contains rather than some more complicated occlusion test?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:310
&gt; +                    if (subsequentLayer-&gt;opacity() &gt;= 0.9999
&gt; +                            &amp;&amp; subsequentLayer-&gt;drawOpacity() &gt;= 0.9999

Can these checks get wrapped into some sort of drawsOpaque function? I also think you&apos;re going to need to check opaque() on the layer itself here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:322
&gt; +                continue; // WJM - verify this jumps out of the for loop with no ill effect ...

I think this is wrong.  This will not set prevEdgeX (see bottom of the loop).  See also: this function is too complex for its own good.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:405
&gt; +                // FIXME: this only works at present because we know tileRectsVisible contains at most
&gt; +                // one full-sized tile. When we need to process a list of sub-rects, then we need
&gt; +                // a way to draw a partial tile. Not sure if this is best done through a new
&gt; +                // shader (since the draw geometry is fixed) or what.

I guess you mention this, but I&apos;m a little confused why you have this loop inside of the loop.  It seems to me that you either need to collect up {tilerect, quad} or maybe {tilerect, i, j} pairs (so that you could defer all the quad calculations only for visible tiles) and then do all the occlusion culling and drawing in a later loop.  Alternatively, you need to just occlusion cull one tile at a time inside of this loop right here and not have a vector of visible tile rects.

Also, the draw geometry isn&apos;t fixed anymore for tiles.  The &quot;tileRect&quot; variable ends up storing the surface-space rectangle to draw from.  If you modify that rect to be smaller, it will only draw a partial tile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492501</commentid>
    <comment_count>14</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-10-28 09:52:36 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 112872 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112872&amp;action=review
&gt; 
&gt; I&apos;m liking this approach.  :)
&gt; 
&gt; My biggest sadness is that the complexity of drawTiles is getting a little bit out of hand.  If there&apos;s some way to encapsulate the culling more into different functions or otherwise break up that monolithic function, I think that&apos;d be excellent.

I agree ... this is here (in monolithic form) mostly as &apos;proof of concept&apos;, but I&apos;m happy to factor it out to simplify drawTiles().

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:200
&gt; &gt; +static bool isAxisAligned(const TransformationMatrix&amp; m)
&gt; 
&gt; Out of curiosity, are you only considering axis-aligned rects so that you can use IntRect::contains rather than some more complicated occlusion test?

Basically, yes. We&apos;re going for the low-hanging fruit first, although in subsequent iterations can consider more sophisticated overlaps.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:310
&gt; &gt; +                    if (subsequentLayer-&gt;opacity() &gt;= 0.9999
&gt; &gt; +                            &amp;&amp; subsequentLayer-&gt;drawOpacity() &gt;= 0.9999
&gt; 
&gt; Can these checks get wrapped into some sort of drawsOpaque function? I also think you&apos;re going to need to check opaque() on the layer itself here.

Yes, and yes (I thought I had checked opaqueness for this layer, but turns out I just check axis-aligned-ness ...).

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:322
&gt; &gt; +                continue; // WJM - verify this jumps out of the for loop with no ill effect ...
&gt; 
&gt; I think this is wrong.  This will not set prevEdgeX (see bottom of the loop).  See also: this function is too complex for its own good.

I suspected that might be a problem, but wasn&apos;t entirely sure so far. Will remove.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:405
&gt; &gt; +                // FIXME: this only works at present because we know tileRectsVisible contains at most
&gt; &gt; +                // one full-sized tile. When we need to process a list of sub-rects, then we need
&gt; &gt; +                // a way to draw a partial tile. Not sure if this is best done through a new
&gt; &gt; +                // shader (since the draw geometry is fixed) or what.
&gt; 
&gt; I guess you mention this, but I&apos;m a little confused why you have this loop inside of the loop.  It seems to me that you either need to collect up {tilerect, quad} or maybe {tilerect, i, j} pairs (so that you could defer all the quad calculations only for visible tiles) and then do all the occlusion culling and drawing in a later loop.  Alternatively, you need to just occlusion cull one tile at a time inside of this loop right here and not have a vector of visible tile rects.

I had imagined that occlusion-testing will return a list of sub-rects within the current tile, in case (for example) the visible portion of the tile was L-shaped, or split down the middle or some such thing. Not worth considering too many special cases though, as beyond rect or L-shaped it likely becomes more effort than it&apos;s worth.

&gt; Also, the draw geometry isn&apos;t fixed anymore for tiles.  The &quot;tileRect&quot; variable ends up storing the surface-space rectangle to draw from.  If you modify that rect to be smaller, it will only draw a partial tile.

Cool! I&apos;ll likely have more questions about this, but will first go back an re-read the relevant code to understand it better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492506</commentid>
    <comment_count>15</comment_count>
      <attachid>112872</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-28 10:19:10 -0700</bug_when>
    <thetext>Comment on attachment 112872
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:405
&gt;&gt;&gt; +                // shader (since the draw geometry is fixed) or what.
&gt;&gt; 
&gt;&gt; I guess you mention this, but I&apos;m a little confused why you have this loop inside of the loop.  It seems to me that you either need to collect up {tilerect, quad} or maybe {tilerect, i, j} pairs (so that you could defer all the quad calculations only for visible tiles) and then do all the occlusion culling and drawing in a later loop.  Alternatively, you need to just occlusion cull one tile at a time inside of this loop right here and not have a vector of visible tile rects.
&gt;&gt; 
&gt;&gt; Also, the draw geometry isn&apos;t fixed anymore for tiles.  The &quot;tileRect&quot; variable ends up storing the surface-space rectangle to draw from.  If you modify that rect to be smaller, it will only draw a partial tile.
&gt; 
&gt; I had imagined that occlusion-testing will return a list of sub-rects within the current tile, in case (for example) the visible portion of the tile was L-shaped, or split down the middle or some such thing. Not worth considering too many special cases though, as beyond rect or L-shaped it likely becomes more effort than it&apos;s worth.

Oh, I see where you&apos;re going.

I have mixed feelings about whether that&apos;d be useful.  I know on some platforms, John Bates has already talked about draw call overhead being expensive and wanting to make tile sizes bigger to help with that.  I guess I&apos;m trying to say that this won&apos;t be a win in all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492521</commentid>
    <comment_count>16</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-10-28 10:41:11 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 112872 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112872&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:405
&gt; &gt;&gt;&gt; +                // shader (since the draw geometry is fixed) or what.
&gt; &gt;&gt; 
&gt; &gt;&gt; I guess you mention this, but I&apos;m a little confused why you have this loop inside of the loop.  It seems to me that you either need to collect up {tilerect, quad} or maybe {tilerect, i, j} pairs (so that you could defer all the quad calculations only for visible tiles) and then do all the occlusion culling and drawing in a later loop.  Alternatively, you need to just occlusion cull one tile at a time inside of this loop right here and not have a vector of visible tile rects.
&gt; &gt;&gt; 
&gt; &gt;&gt; Also, the draw geometry isn&apos;t fixed anymore for tiles.  The &quot;tileRect&quot; variable ends up storing the surface-space rectangle to draw from.  If you modify that rect to be smaller, it will only draw a partial tile.
&gt; &gt; 
&gt; &gt; I had imagined that occlusion-testing will return a list of sub-rects within the current tile, in case (for example) the visible portion of the tile was L-shaped, or split down the middle or some such thing. Not worth considering too many special cases though, as beyond rect or L-shaped it likely becomes more effort than it&apos;s worth.
&gt; 
&gt; Oh, I see where you&apos;re going.
&gt; 
&gt; I have mixed feelings about whether that&apos;d be useful.  I know on some platforms, John Bates has already talked about draw call overhead being expensive and wanting to make tile sizes bigger to help with that.  I guess I&apos;m trying to say that this won&apos;t be a win in all cases.

That had occurred to us too ... If it&apos;s not too difficult to setup we can try it, and if it&apos;s not a win abandon it. That being said, I wouldn&apos;t imagine going  below two subrects for a tile, although if we can draw *one* smaller rect there may be some benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492527</commentid>
    <comment_count>17</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-28 10:52:54 -0700</bug_when>
    <thetext>(In reply to comment #15)

Maybe we should do some whiteboarding on this topic next week.

Personally, I think we should start with an architecturally clean approach to this, even if it may cost us a little bit in performance. DrawLayers et all is a pasta-monster already --- scissoring, culling are just making it worse.

What do people think of the following flow *per renderlayer*:
   class TileDrawCommand {
      transform;
      textureId // material;
   }
   vector&lt;TileDrawCommand&gt; tilesToDraw(walkTreeAndComputeTilesToDraw());
   if (settings().cullingEnabled) {
     vector&lt;TileDrawCommand&gt; culledTiles = cullTiles(tilesToDraw);
     drawTiles(culledTiles);
   } else {
     drawTiles(culledTIles);
   }

If that makes sense, would someone on this list be willing to sign up for step 0, which is refactoring the code into a design like above?

In parallel, we can start writing a cullTiles that takes a list of TileDrawCommands in culls it. But, for such an algorithm, I&apos;d really like to see it come with unit tests, quality tests [cull ratios, etc] and come with high level explanation of the genaeology of its algorithm -- e.g. rasterization, KD-trees, BSP, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492533</commentid>
    <comment_count>18</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-10-28 10:59:10 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; 
&gt; Maybe we should do some whiteboarding on this topic next week.
&gt; 
&gt; Personally, I think we should start with an architecturally clean approach to this, even if it may cost us a little bit in performance. DrawLayers et all is a pasta-monster already --- scissoring, culling are just making it worse.
&gt; 
&gt; What do people think of the following flow *per renderlayer*:
&gt;    class TileDrawCommand {
&gt;       transform;
&gt;       textureId // material;
&gt;    }
&gt;    vector&lt;TileDrawCommand&gt; tilesToDraw(walkTreeAndComputeTilesToDraw());
&gt;    if (settings().cullingEnabled) {
&gt;      vector&lt;TileDrawCommand&gt; culledTiles = cullTiles(tilesToDraw);
&gt;      drawTiles(culledTiles);
&gt;    } else {
&gt;      drawTiles(culledTIles);
&gt;    }
&gt; 
&gt; If that makes sense, would someone on this list be willing to sign up for step 0, which is refactoring the code into a design like above?
&gt; 
&gt; In parallel, we can start writing a cullTiles that takes a list of TileDrawCommands in culls it. But, for such an algorithm, I&apos;d really like to see it come with unit tests, quality tests [cull ratios, etc] and come with high level explanation of the genaeology of its algorithm -- e.g. rasterization, KD-trees, BSP, etc.

Yes, I very much like the sounds of this. And, as you say, it has the advantage of simplifying the code structure, which will be a great win for both maintainability as well as implementation. +1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492630</commentid>
    <comment_count>19</comment_count>
      <attachid>112872</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-28 13:21:49 -0700</bug_when>
    <thetext>Comment on attachment 112872
Patch

Attachment 112872 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10237319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493284</commentid>
    <comment_count>20</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-31 06:47:15 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; What do people think of the following flow *per renderlayer*:
&gt;    class TileDrawCommand {
&gt;       transform;
&gt;       textureId // material;
&gt;    }
&gt;    vector&lt;TileDrawCommand&gt; tilesToDraw(walkTreeAndComputeTilesToDraw());
&gt;    if (settings().cullingEnabled) {
&gt;      vector&lt;TileDrawCommand&gt; culledTiles = cullTiles(tilesToDraw);
&gt;      drawTiles(culledTiles);
&gt;    } else {
&gt;      drawTiles(culledTIles);
&gt;    }
&gt; 
&gt; If that makes sense, would someone on this list be willing to sign up for step 0, which is refactoring the code into a design like above?

I like this also.  If I finish layout tests or otherwise block on the opaque flag stuff before James gets to this I will take it on.

&gt; In parallel, we can start writing a cullTiles that takes a list of TileDrawCommands in culls it. But, for such an algorithm, I&apos;d really like to see it come with unit tests, quality tests [cull ratios, etc] and come with high level explanation of the genaeology of its algorithm -- e.g. rasterization, KD-trees, BSP, etc.

backer@ and I came up with a plan for this also, it&apos;s much simpler than KD-trees etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493293</commentid>
    <comment_count>21</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-10-31 06:59:42 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #17)
&gt; &gt; What do people think of the following flow *per renderlayer*:
&gt; &gt;    class TileDrawCommand {
&gt; &gt;       transform;
&gt; &gt;       textureId // material;
&gt; &gt;    }
&gt; &gt;    vector&lt;TileDrawCommand&gt; tilesToDraw(walkTreeAndComputeTilesToDraw());
&gt; &gt;    if (settings().cullingEnabled) {
&gt; &gt;      vector&lt;TileDrawCommand&gt; culledTiles = cullTiles(tilesToDraw);
&gt; &gt;      drawTiles(culledTiles);
&gt; &gt;    } else {
&gt; &gt;      drawTiles(culledTIles);
&gt; &gt;    }
&gt; &gt; 
&gt; &gt; If that makes sense, would someone on this list be willing to sign up for step 0, which is refactoring the code into a design like above?
&gt; 
&gt; I like this also.  If I finish layout tests or otherwise block on the opaque flag stuff before James gets to this I will take it on.
&gt; 
&gt; &gt; In parallel, we can start writing a cullTiles that takes a list of TileDrawCommands in culls it. But, for such an algorithm, I&apos;d really like to see it come with unit tests, quality tests [cull ratios, etc] and come with high level explanation of the genaeology of its algorithm -- e.g. rasterization, KD-trees, BSP, etc.
&gt; 
&gt; backer@ and I came up with a plan for this also, it&apos;s much simpler than KD-trees etc.

I&apos;m also happy to undertake the refactoring work. Dana, if you have a plan for cullTiles, perhaps it would make sense for you to put spare cycles into that effort?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493295</commentid>
    <comment_count>22</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-10-31 07:02:21 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; I&apos;m also happy to undertake the refactoring work. Dana, if you have a plan for cullTiles, perhaps it would make sense for you to put spare cycles into that effort?

Yup, sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497314</commentid>
    <comment_count>23</comment_count>
      <attachid>113897</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-07 11:18:09 -0800</bug_when>
    <thetext>Created attachment 113897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497327</commentid>
    <comment_count>24</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-07 11:25:58 -0800</bug_when>
    <thetext>&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:297
&gt; +            if (tile &amp;&amp; tile-&gt;textureId() &amp;&amp; tileCuller.nextTileToDraw() == tile) {

Why not just pass in a list of tiles?  I think the plan was to not have any optimization-specific code in here, something like a Vector (which all optimations would take in and return), rather than optimization objects.  Else we&apos;re going to have to keep passing in more and more optimization objects and changing this code every time a new optimization is added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497331</commentid>
    <comment_count>25</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-07 11:29:29 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=113897) [details]
&gt; Patch

This is a more modular version of the previous patch, taking into account our discussions last week. The main weakness I see is a fair bit of redundancy in determining whether a tile even draws in the first place, although some of this can be addresses through re-factoring the checks once we&apos;re OK with the approach.

Unit tests are coming next.

Enne, I think I gardened this through the solid-colour change OK, but please let me know if I got anything wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497332</commentid>
    <comment_count>26</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-07 11:30:36 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:297
&gt; &gt; +            if (tile &amp;&amp; tile-&gt;textureId() &amp;&amp; tileCuller.nextTileToDraw() == tile) {
&gt; 
&gt; Why not just pass in a list of tiles?  I think the plan was to not have any optimization-specific code in here, something like a Vector (which all optimations would take in and return), rather than optimization objects.  Else we&apos;re going to have to keep passing in more and more optimization objects and changing this code every time a new optimization is added.

Since CCTileCuller just maintains a single list, not one list per layer, we need some way for each layer to know where is starts in the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497334</commentid>
    <comment_count>27</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-07 11:33:21 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:297
&gt; &gt; &gt; +            if (tile &amp;&amp; tile-&gt;textureId() &amp;&amp; tileCuller.nextTileToDraw() == tile) {
&gt; &gt; 
&gt; &gt; Why not just pass in a list of tiles?  I think the plan was to not have any optimization-specific code in here, something like a Vector (which all optimations would take in and return), rather than optimization objects.  Else we&apos;re going to have to keep passing in more and more optimization objects and changing this code every time a new optimization is added.
&gt; 
&gt; Since CCTileCuller just maintains a single list, not one list per layer, we need some way for each layer to know where is starts in the list.

Yeh, definitely.  But this is something very specific to a single optimization (culling), whereas I think we want to pass something global to all future optimizations to this function, so that we don&apos;t end up passing N optimization-specific things to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497487</commentid>
    <comment_count>28</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-07 14:43:18 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:297
&gt; &gt; &gt; &gt; +            if (tile &amp;&amp; tile-&gt;textureId() &amp;&amp; tileCuller.nextTileToDraw() == tile) {
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not just pass in a list of tiles?  I think the plan was to not have any optimization-specific code in here, something like a Vector (which all optimations would take in and return), rather than optimization objects.  Else we&apos;re going to have to keep passing in more and more optimization objects and changing this code every time a new optimization is added.
&gt; &gt; 
&gt; &gt; Since CCTileCuller just maintains a single list, not one list per layer, we need some way for each layer to know where is starts in the list.
&gt; 
&gt; Yeh, definitely.  But this is something very specific to a single optimization (culling), whereas I think we want to pass something global to all future optimizations to this function, so that we don&apos;t end up passing N optimization-specific things to it.

It&apos;s easy to create a separate tile list support class to do this, and this can be done as part of this CL, but I&apos;d like to get some buy-in on the overall approach before further refinements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497533</commentid>
    <comment_count>29</comment_count>
      <attachid>113897</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-07 15:32:54 -0800</bug_when>
    <thetext>Comment on attachment 113897
Patch

Can we split this into a refactoring and feature patch?

I think I see here a patch that redirects tile drawing into some new classs that you&apos;re passin garound (CCRenderer instead of CCTileCuller?). That that class has a tileculler is something you could add later.

Also, I don&apos;t think we need the suffix on TileCuller. We really only need the impl suffix for classes where one exists on both sides of the fence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497594</commentid>
    <comment_count>30</comment_count>
      <attachid>113897</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-07 16:47:34 -0800</bug_when>
    <thetext>Comment on attachment 113897
Patch

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

I feel similarly to nduca that this patch is trying to do too much.  This patch should either be just culling changes (maybe where you hand a culler and an iterator to the draw function) or it should be a refactoring to use a CCRenderer and a list of tiles to draw, but not both.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:37
&gt; +bool CCTileCullerFunctor::isAxisAligned(const TransformationMatrix&amp; m)

This function and drawsOpaque should both be marked static.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:75
&gt; +void CCTileCullerImpl::createDrawTileList(const CCLayerList&amp; layerList, CCRenderSurface* targetSurface, const TransformationMatrix&amp; prefixMatrix)
&gt; +{
&gt; +    for (CCLayerList::const_iterator it = layerList.begin(); it != layerList.end(); ++it) {
&gt; +        CCLayerImpl* layer = it-&gt;get();
&gt; +        if (layer-&gt;isTiledLayer()) {

This whole function feels like a layering violation (pun intended).  I think I&apos;d prefer a model where we iterate through all the layers and ask them for all the quads they might draw, rather than reach in and get those tiles out.  The fragility of checking what tile is next and culling using that is a little bit worrisome too.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:85
&gt; +            const IntRect contentRect = CCLayerTreeHostCommon::calculateVisibleLayerRect&lt;CCLayerImpl&gt;(layer);

Ugh.  I believe that the visible rect could be set as a part of calculateDrawTransformsAndVisibility after recursing through a layer&apos;s children.  If you could write a small patch to fix that (both in paint and in draw), that&apos;d be an excellent cleanup.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:297
&gt; +            if (tile &amp;&amp; tile-&gt;textureId() &amp;&amp; tileCuller.nextTileToDraw() == tile) {

I think this if and the else if conditions would be clearer if you just had an early out for culling right at the top of the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497631</commentid>
    <comment_count>31</comment_count>
      <attachid>113897</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-07 17:33:34 -0800</bug_when>
    <thetext>Comment on attachment 113897
Patch

Agreeing with what everyone else has said - this needs to be broken up.

Also, what&apos;s the test strategy? Ideally I think you should be able to test CCTiledCullerImpl (or whatever its name ends up being) in isolation, but it looks like that would be pretty difficult to do with its current design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498189</commentid>
    <comment_count>32</comment_count>
      <attachid>114103</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-08 10:08:06 -0800</bug_when>
    <thetext>Created attachment 114103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498218</commentid>
    <comment_count>33</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-08 10:24:51 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Can we split this into a refactoring and feature patch?

Yes.

&gt; I think I see here a patch that redirects tile drawing into some new classs 
&gt; that you&apos;re passin garound (CCRenderer instead of CCTileCuller?). That that 
&gt; class has a tileculler is something you could add later.

Hmm, not this intention. All tile drawing is still done in CCTiledLayerImpl, all I&apos;m doing is passing in a list of tiles that (according to the culler) are worth drawing, and modifying drawTiles() to only draw those tiles. In the new patch I&apos;ve simplified the input to draw() to reflect that it is just a list of tile pointers (as unique id&apos;s)(as per Dana&apos;s suggestion).

&gt; Also, I don&apos;t think we need the suffix on TileCuller. We really only need the 
&gt; impl suffix for classes where one exists on both sides of the fence.

Removed. I wasn&apos;t sure about how the naming conventions would apply there.

(In reply to comment #30)

&gt; I feel similarly to nduca that this patch is trying to do too much.  This 
&gt; patch should either be just culling changes (maybe where you hand a culler 
&gt; and an iterator to the draw function) or it should be a refactoring to use a 
&gt; CCRenderer and a list of tiles to draw, but not both.

See comments above.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:37
&gt;&gt; +bool CCTileCullerFunctor::isAxisAligned(const TransformationMatrix&amp; m)
&gt;
&gt;This function and drawsOpaque should both be marked static.

Ooops, just now saw this. Will add to next patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:75
&gt;&gt; +void CCTileCullerImpl::createDrawTileList(const CCLayerList&amp; layerList, 
&gt;&gt; CCRenderSurface* targetSurface, const TransformationMatrix&amp; prefixMatrix)
&gt;&gt; +{
&gt;&gt; +    for (CCLayerList::const_iterator it = layerList.begin(); it != 
&gt;&gt;layerList.end(); ++it) {
&gt;&gt; +        CCLayerImpl* layer = it-&gt;get();
&gt;&gt; +        if (layer-&gt;isTiledLayer()) {
&gt;
&gt;This whole function feels like a layering violation (pun intended).  I think 
&gt;I&apos;d prefer a model where we iterate through all the layers and ask them for 
&gt;all the quads they might draw, rather than reach in and get those tiles out.

OK, I can try a build something like this. Again, I was trying to touch CCTiledLayerImpl as little as possible.

&gt;The fragility of checking what tile is next and culling using that is a little 
&gt;bit worrisome too.

Yeah, I worried about this also. That&apos;s why I included the checks at the end to make sure everything got drawn, but it would be nice if it wasn&apos;t order-dependent.

Would we be better putting the tiles to draw into a hash table of some sort? 

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:85
&gt; +            const IntRect contentRect = CCLayerTreeHostCommon::calculateVisibleLayerRect&lt;CCLayerImpl&gt;(layer);

&gt; Ugh.  I believe that the visible rect could be set as a part of 
&gt; calculateDrawTransformsAndVisibility after recursing through a layer&apos;s 
&gt; children.  If you could write a small patch to fix that (both in paint and in &gt; draw), that&apos;d be an excellent cleanup.

Will do this before proceeding. I was trying to change as little of existing infrastructure as possible until I got some feedback.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:297
&gt;&gt; +            if (tile &amp;&amp; tile-&gt;textureId() &amp;&amp; tileCuller.nextTileToDraw() == tile) {
&gt;
&gt;I think this if and the else if conditions would be clearer if you just had an 
&gt;early out for culling right at the top of the loop.

Will try to improve this. I had a certain amount of stuff that needed to be computed whether or not we drew the tile (edgeY, edgeX, etc.) but will see if I can tighten this up.

(In reply to comment #31)
&gt; (From update of attachment 113897 [details])
&gt; Agreeing with what everyone else has said - this needs to be broken up.

I&apos;m quite happy to break it up, but would like to get agreement on the final concept first.

&gt; Also, what&apos;s the test strategy? Ideally I think you should be able to test CCTiledCullerImpl (or whatever its name ends up being) in isolation, but it looks like that would be pretty difficult to do with its current design.

In addition to not breaking any existing layout tests, I plan to add unit tests to create a small stack of tiled layers, let it &quot;draw&quot;, and make sure occluded tiles are not drawn (similar to http://trac.webkit.org/changeset/98567, thanks to Enne for referring this to me). I haven&apos;t written this yet, but I&apos;m hoping it should be too difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498235</commentid>
    <comment_count>34</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-08 10:35:13 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=114103) [details]
&gt; Patch

Ugh, ignore this patch ... it&apos;s incomplete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498246</commentid>
    <comment_count>35</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-08 10:44:16 -0800</bug_when>
    <thetext>&gt; (In reply to comment #30)
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:75
&gt; &gt;&gt; +void CCTileCullerImpl::createDrawTileList(const CCLayerList&amp; layerList, 
&gt; &gt;&gt; CCRenderSurface* targetSurface, const TransformationMatrix&amp; prefixMatrix)
&gt; &gt;&gt; +{
&gt; &gt;&gt; +    for (CCLayerList::const_iterator it = layerList.begin(); it != 
&gt; &gt;&gt;layerList.end(); ++it) {
&gt; &gt;&gt; +        CCLayerImpl* layer = it-&gt;get();
&gt; &gt;&gt; +        if (layer-&gt;isTiledLayer()) {
&gt; &gt;
&gt; &gt;This whole function feels like a layering violation (pun intended).  I think 
&gt; &gt;I&apos;d prefer a model where we iterate through all the layers and ask them for 
&gt; &gt;all the quads they might draw, rather than reach in and get those tiles out.
&gt; 
&gt; OK, I can try a build something like this. Again, I was trying to touch CCTiledLayerImpl as little as possible.

If you&apos;re trying to optimize for &quot;least intrusive&quot;, passing the culler and an iterator to TiledLayerChromium and just calling cull() there rather than pre-generating a list seems like one way to do it.
 
&gt; &gt;The fragility of checking what tile is next and culling using that is a little 
&gt; &gt;bit worrisome too.
&gt; 
&gt; Yeah, I worried about this also. That&apos;s why I included the checks at the end to make sure everything got drawn, but it would be nice if it wasn&apos;t order-dependent.
&gt; 
&gt; Would we be better putting the tiles to draw into a hash table of some sort? 

The &quot;order-dependent&quot; comment wasn&apos;t about how the list of tiles to draw is stored, since that is already in a well-defined order.  I was worried more about the order-dependent fragility of checking whether a tile was culled or not by testing against the iterator.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCullerImpl.cpp:85
&gt; &gt; +            const IntRect contentRect = CCLayerTreeHostCommon::calculateVisibleLayerRect&lt;CCLayerImpl&gt;(layer);
&gt; 
&gt; &gt; Ugh.  I believe that the visible rect could be set as a part of 
&gt; &gt; calculateDrawTransformsAndVisibility after recursing through a layer&apos;s 
&gt; &gt; children.  If you could write a small patch to fix that (both in paint and in &gt; draw), that&apos;d be an excellent cleanup.
&gt; 
&gt; Will do this before proceeding. I was trying to change as little of existing infrastructure as possible until I got some feedback.

Thanks! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498275</commentid>
    <comment_count>36</comment_count>
      <attachid>114103</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-08 11:22:24 -0800</bug_when>
    <thetext>Comment on attachment 114103
Patch

Attachment 114103 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10376144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503822</commentid>
    <comment_count>37</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-16 06:39:44 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; &gt; (In reply to comment #30)
&gt; &gt; 
&gt; &gt; &gt;This whole function feels like a layering violation (pun intended).  I think 
&gt; &gt; &gt;I&apos;d prefer a model where we iterate through all the layers and ask them for 
&gt; &gt; &gt;all the quads they might draw, rather than reach in and get those tiles out.
&gt; &gt; 
&gt; &gt; OK, I can try a build something like this. Again, I was trying to touch CCTiledLayerImpl as little as possible.
&gt; 
&gt; If you&apos;re trying to optimize for &quot;least intrusive&quot;, passing the culler and an iterator to TiledLayerChromium and just calling cull() there rather than pre-generating a list seems like one way to do it.

Hmm, OK, but then that doesn&apos;t seem like the architecture of creating a tile list and passing it through multiple filters (culling, squashing, etc.).
 
&gt; &gt; &gt;The fragility of checking what tile is next and culling using that is a little 
&gt; &gt; &gt;bit worrisome too.
&gt; &gt; 
&gt; &gt; Yeah, I worried about this also. That&apos;s why I included the checks at the end to make sure everything got drawn, but it would be nice if it wasn&apos;t order-dependent.
&gt; &gt; 
&gt; &gt; Would we be better putting the tiles to draw into a hash table of some sort? 
&gt; 
&gt; The &quot;order-dependent&quot; comment wasn&apos;t about how the list of tiles to draw is stored, since that is already in a well-defined order.  I was worried more about the order-dependent fragility of checking whether a tile was culled or not by testing against the iterator.
&gt; 

I suppose one could test by doing a search in the list, although that seems expensive, as the list is presumably unsorted (w.r.t. the pointer values we store).

Ultimately we&apos;d only draw the tiles that were in the list, in the order they appear in the list, but that complicates computing the edge indices - but it&apos;s probably doable.

Let me ask *one* question here: do we prefer 

1) the cull-in-place option (with culling logic provided by an external object), 

or do we prefer 

2) &quot;provide a list of all drawable tiles to the culler, but only draw whatever subset of them that is returned by the culler&quot;?

I&apos;m happy to prepare a sample patch for either, but would prefer not to code both :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503982</commentid>
    <comment_count>38</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-16 09:43:59 -0800</bug_when>
    <thetext>(In reply to comment #37)

&gt; Let me ask *one* question here: do we prefer 
&gt; 
&gt; 1) the cull-in-place option (with culling logic provided by an external object), 
&gt; 
&gt; or do we prefer 
&gt; 
&gt; 2) &quot;provide a list of all drawable tiles to the culler, but only draw whatever subset of them that is returned by the culler&quot;?
&gt; 
&gt; I&apos;m happy to prepare a sample patch for either, but would prefer not to code both :-)

I think I prefer #1.

You&apos;re right that this doesn&apos;t seem like the architecture of creating a tile list.  However, I think that architectural change (#2) should be done in another patch, probably after this one.

Additionally, I think that the architecture needs to be that tiles are collected from layers and then drawn elsewhere, without going back to the layer classes.  So, I&apos;m picturing a lot of refactoring in what happens during drawing a CCTiledLayerImpl. The more encapsulated the culler is, the easier it will be to test and to move it to its proper place once that exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504989</commentid>
    <comment_count>39</comment_count>
      <attachid>115622</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-17 11:05:49 -0800</bug_when>
    <thetext>Created attachment 115622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504991</commentid>
    <comment_count>40</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-17 11:06:33 -0800</bug_when>
    <thetext>This new patch should be closer to what we&apos;re looking for, let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505251</commentid>
    <comment_count>41</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-17 14:52:17 -0800</bug_when>
    <thetext>Tried this out just now, nothing in a tab is rendering, and while it seems to have the right idea which tiles to cull, in some way, it seems to be skipping the opaque occluding tiles also.

Wanted to get some fps numbers with/without this, but can&apos;t even see an fps counter at the moment since tab contents aren&apos;t rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505598</commentid>
    <comment_count>42</comment_count>
      <attachid>115622</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-18 01:34:40 -0800</bug_when>
    <thetext>Comment on attachment 115622
Patch

Attachment 115622 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10517040

New failing tests:
compositing/geometry/video-opacity-overlay.html
compositing/reflections/load-video-in-reflection.html
compositing/overflow/overflow-compositing-descendant.html
fast/replaced/width100percent-textarea.html
compositing/layers-inside-overflow-scroll.html
compositing/geometry/video-fixed-scrolling.html
compositing/video-page-visibility.html
compositing/self-painting-layers.html
compositing/overflow/scroll-ancestor-update.html
compositing/geometry/clipped-video-controller.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507637</commentid>
    <comment_count>43</comment_count>
      <attachid>115622</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-22 09:15:56 -0800</bug_when>
    <thetext>Comment on attachment 115622
Patch

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

Sorry for being a bit late in the game on this issue. I apologize if I bring something up that&apos;s already been discussed.

The patch&apos;s algorithmic complexity is higher than it needs to be. It will run at O(n^2). This can be done in O(n) including the check for any combination of subsequent layers. I think it&apos;s also worth keeping in mind that we probably want to support isOpaque() on a per-tile basis in the future.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:46
&gt; +           &amp;&amp; !m.m14() &amp;&amp; !m.m24() &amp;&amp; !m.m43() &amp;&amp; m.m44();

This also needs to snap to the pixel grid to be correct. Instead of analyzing the transform, I think we should use the same logic as the anti-aliasing code, which is: transformedQuad.isRectilinear() &amp;&amp; transformedQuad.boundingBox().isExpressibleAsIntRect()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:52
&gt; +    return layer-&gt;opaque() &amp;&amp; layer-&gt;opacity() &gt;= 0.9999 &amp;&amp; layer-&gt;drawOpacity() &gt;= 0.9999;

LayerRendererChromium::drawLayer uses &quot;layer-&gt;drawOpacity() == 1&quot; to determine if a layer is opaque. I prefer if we were consistent. Maybe add a isOpaque() function?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:68
&gt; +bool CCTileCullerSimple::operator()(const IntRect&amp; tileRect)

Yes, we really want the covered by any combination of subsequent layers functionality here as you pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507840</commentid>
    <comment_count>44</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-11-22 15:31:46 -0800</bug_when>
    <thetext>How about making a first patch that defines the CCTileFilter that gets passed to all the CCLayerImpl::draw + the change to CCTiledLayerImpl::drawTiles to apply it, and a separate patch to implement the tile culler. The first one would be a small change with very little impact.
That way, Adrienne can work on the refactoring while James/Dana can work on the culler, and they should mostly be unaffected by each other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507938</commentid>
    <comment_count>45</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-22 22:11:57 -0800</bug_when>
    <thetext>Though I like the flexibility of a CCTileFilter getting passed to all the CCLayerImpl::draw calls, I&apos;m not sure this is the best approach here.

Afaik, to do this culling efficiently we would walk all layers in top-to-bottom order while creating an occlusion tile-set (TilingData class seem sufficient) from the opaque tiles we&apos;ve passed, which at the same time can be used to determine the tiles that are visible.

So there&apos;s basically two problems to solve:

1. Walk tiles in reverse order to how they are drawn.
2. We need a data structure that matches the compositor tree hierarchy to store information used to determine the tiles to draw in the bottom-to-top rendering pass.

The CCTileFilter approach seem to make both of these things more complicated. Number 2 for example could instead be easily solved by just adding an m_occluded member to the tile class.

General tree traversal on a per-tile basis is introduced in the following patch and I think that would be useful for solving problem number 1: 

https://bugs.webkit.org/show_bug.cgi?id=72192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508096</commentid>
    <comment_count>46</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-23 06:12:16 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; How about making a first patch that defines the CCTileFilter that gets passed to all the CCLayerImpl::draw + the change to CCTiledLayerImpl::drawTiles to apply it, and a separate patch to implement the tile culler. The first one would be a small change with very little impact.
&gt; That way, Adrienne can work on the refactoring while James/Dana can work on the culler, and they should mostly be unaffected by each other.

OK, although given that the TileCuller will likely need to be changed (possibly a lot) to match the refactoring, perhaps this should wait until there is at least an API spec available for the re-factoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508101</commentid>
    <comment_count>47</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-23 06:17:46 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 115622 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115622&amp;action=review
&gt; 
&gt; Sorry for being a bit late in the game on this issue. I apologize if I bring something up that&apos;s already been discussed.
&gt; 
&gt; The patch&apos;s algorithmic complexity is higher than it needs to be. It will run at O(n^2). This can be done in O(n) including the check for any combination of subsequent layers. I think it&apos;s also worth keeping in mind that we probably want to support isOpaque() on a per-tile basis in the future.

&quot;isOpaque()&quot; is being implemented in another patch, in parallel.

As for O(n^2), this was previously discussed, and is the eventual high-road goal. However, for this patch, which we had originally hoped to land for the upcoming release, we decided O(n^2) would suffice, especially as n is small enough that the additional computation is still small with the cost of overdraw.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:46
&gt; &gt; +           &amp;&amp; !m.m14() &amp;&amp; !m.m24() &amp;&amp; !m.m43() &amp;&amp; m.m44();
&gt; 
&gt; This also needs to snap to the pixel grid to be correct. Instead of analyzing the transform, I think we should use the same logic as the anti-aliasing code, which is: transformedQuad.isRectilinear() &amp;&amp; transformedQuad.boundingBox().isExpressibleAsIntRect()

Excellent suggestion, thanks!

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:52
&gt; &gt; +    return layer-&gt;opaque() &amp;&amp; layer-&gt;opacity() &gt;= 0.9999 &amp;&amp; layer-&gt;drawOpacity() &gt;= 0.9999;
&gt; 
&gt; LayerRendererChromium::drawLayer uses &quot;layer-&gt;drawOpacity() == 1&quot; to determine if a layer is opaque.

Sure thing.

&gt; I prefer if we were consistent. Maybe add a isOpaque() function?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:68
&gt; &gt; +bool CCTileCullerSimple::operator()(const IntRect&amp; tileRect)
&gt; 
&gt; Yes, we really want the covered by any combination of subsequent layers functionality here as you pointed out.

Yes, in a future, improved version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508105</commentid>
    <comment_count>48</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-23 06:22:17 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; Though I like the flexibility of a CCTileFilter getting passed to all the CCLayerImpl::draw calls, I&apos;m not sure this is the best approach here.

The final intention of this work has always been that we would operate on a single list of all tiles to be drawn, to be collected across layers. This of course requires substantial refactoring in CCTiledLayerImpl, and so is a ways off. Such a list allows for other optimizations, such as tile squashing.

The approach in this patch is just an intermediate step on our way to the final version.

&gt; Afaik, to do this culling efficiently we would walk all layers in top-to-bottom order while creating an occlusion tile-set (TilingData class seem sufficient) from the opaque tiles we&apos;ve passed, which at the same time can be used to determine the tiles that are visible.

Yes, this is the eventual plan.

&gt; So there&apos;s basically two problems to solve:
&gt; 
&gt; 1. Walk tiles in reverse order to how they are drawn.

Easily solve once tiles are exported to a draw list in the CCTiledLayerImpl refactoring.

&gt; 2. We need a data structure that matches the compositor tree hierarchy to store information used to determine the tiles to draw in the bottom-to-top rendering pass.
&gt; 
&gt; The CCTileFilter approach seem to make both of these things more complicated. Number 2 for example could instead be easily solved by just adding an m_occluded member to the tile class.

It was desired to avoid putting too much extra state into the tiles themselves.

&gt; General tree traversal on a per-tile basis is introduced in the following patch and I think that would be useful for solving problem number 1: 
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=72192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508233</commentid>
    <comment_count>49</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-23 10:56:40 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #45)
&gt; &gt; Though I like the flexibility of a CCTileFilter getting passed to all the CCLayerImpl::draw calls, I&apos;m not sure this is the best approach here.
&gt; 
&gt; The final intention of this work has always been that we would operate on a single list of all tiles to be drawn, to be collected across layers. This of course requires substantial refactoring in CCTiledLayerImpl, and so is a ways off. Such a list allows for other optimizations, such as tile squashing.
&gt; 
&gt; The approach in this patch is just an intermediate step on our way to the final version.
&gt; 
&gt; &gt; Afaik, to do this culling efficiently we would walk all layers in top-to-bottom order while creating an occlusion tile-set (TilingData class seem sufficient) from the opaque tiles we&apos;ve passed, which at the same time can be used to determine the tiles that are visible.
&gt; 
&gt; Yes, this is the eventual plan.
&gt; 
&gt; &gt; So there&apos;s basically two problems to solve:
&gt; &gt; 
&gt; &gt; 1. Walk tiles in reverse order to how they are drawn.
&gt; 
&gt; Easily solve once tiles are exported to a draw list in the CCTiledLayerImpl refactoring.
&gt; 
&gt; &gt; 2. We need a data structure that matches the compositor tree hierarchy to store information used to determine the tiles to draw in the bottom-to-top rendering pass.
&gt; &gt; 
&gt; &gt; The CCTileFilter approach seem to make both of these things more complicated. Number 2 for example could instead be easily solved by just adding an m_occluded member to the tile class.
&gt; 
&gt; It was desired to avoid putting too much extra state into the tiles themselves.

I agree that it would be nice to not add extra state to the tiles themselves. It&apos;s just so simple compared to the alternatives :) Anyhow, the m_occluded approach would be awkward in the current version of the compositor as there&apos;s no general per tile/texture data structure. This will change once 72192 lands and the m_occluded approach would be straight forward so I just wanted to make sure you&apos;re aware of that.

You seem to have your head wrapped around this. Sorry if I was repeating things that had already been discussed. Just wanted to make sure we were all on the same page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508254</commentid>
    <comment_count>50</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-23 11:27:10 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; &gt; It was desired to avoid putting too much extra state into the tiles themselves.
&gt; 
&gt; I agree that it would be nice to not add extra state to the tiles themselves. It&apos;s just so simple compared to the alternatives :) Anyhow, the m_occluded approach would be awkward in the current version of the compositor as there&apos;s no general per tile/texture data structure. This will change once 72192 lands and the m_occluded approach would be straight forward so I just wanted to make sure you&apos;re aware of that.

Thanks for the head&apos;s up, I will keep an eye on that.
 
&gt; You seem to have your head wrapped around this. Sorry if I was repeating things that had already been discussed. Just wanted to make sure we were all on the same page.

NP ... I appreciate your taking the time to make the suggestions (all of them good!). It&apos;s not always easy to know where discussions have been offline :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508846</commentid>
    <comment_count>51</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-24 11:21:43 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=115622&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:74
&gt; +        IntRect layerRect = layer-&gt;drawableContentRect();

Can construct a Region from these content rects, and then test if the region contains tileRect. See comment on bug #70751 regarding this.  It would not make the code much larger, and I think we could drop #70751 and just do it here.

Here&apos;s code sample for testing contains: https://bugs.webkit.org/attachment.cgi?id=116403&amp;action=diff#a/Source/WebCore/rendering/RenderLayerBacking.cpp_sec2

And you can just use Region::unite() to construct the Region.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511740</commentid>
    <comment_count>52</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-30 07:32:52 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115622&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTileCuller.cpp:74
&gt; &gt; +        IntRect layerRect = layer-&gt;drawableContentRect();
&gt; 
&gt; Can construct a Region from these content rects, and then test if the region contains tileRect. See comment on bug #70751 regarding this.  It would not make the code much larger, and I think we could drop #70751 and just do it here.
&gt; 
&gt; Here&apos;s code sample for testing contains: https://bugs.webkit.org/attachment.cgi?id=116403&amp;action=diff#a/Source/WebCore/rendering/RenderLayerBacking.cpp_sec2
&gt; 
&gt; And you can just use Region::unite() to construct the Region.

Cool, I didn&apos;t know about Region. This will simplify things greatly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511781</commentid>
    <comment_count>53</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-30 08:41:43 -0800</bug_when>
    <thetext>Parachuting into a conversation thread late, but please please please no ephemeral state on persistent objects.

m_occluded on a tile is an example of badness I really want to avoid. Occlusion is an ephemeral state --- m_occluded is only valid during draw. Once draw returns, m_occluded may be invalid. Putting it on a tile, which is a persisted resource, leads to badness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511978</commentid>
    <comment_count>54</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 11:53:44 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; Parachuting into a conversation thread late, but please please please no ephemeral state on persistent objects.
&gt; 
&gt; m_occluded on a tile is an example of badness I really want to avoid. Occlusion is an ephemeral state --- m_occluded is only valid during draw. Once draw returns, m_occluded may be invalid. Putting it on a tile, which is a persisted resource, leads to badness.

Yes, I perfectly right about that.

I think that rather then having some form of tile filter call-back in the existing drawing code. The occlusion code should be the only code actually doing a pass over the tree of persistent resources. The drawing code should instead operate on a draw list generated by the occlusion pass. I assume this is what&apos;s planned once enne&apos;s tile drawing re-factoring has landed.

Btw, the general per tile data structure I mentioned earlier on this thread is unrelated to all this. That&apos;s only for texture uploads. Sorry about the confusion there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526246</commentid>
    <comment_count>55</comment_count>
      <attachid>120319</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 07:27:57 -0800</bug_when>
    <thetext>Created attachment 120319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526248</commentid>
    <comment_count>56</comment_count>
      <attachid>120319</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 07:38:44 -0800</bug_when>
    <thetext>Comment on attachment 120319
Patch

Attachment 120319 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10986505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526256</commentid>
    <comment_count>57</comment_count>
      <attachid>120322</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 07:54:36 -0800</bug_when>
    <thetext>Created attachment 120322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526347</commentid>
    <comment_count>58</comment_count>
      <attachid>120339</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 10:28:58 -0800</bug_when>
    <thetext>Created attachment 120339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526348</commentid>
    <comment_count>59</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 10:30:08 -0800</bug_when>
    <thetext>Revised to remove commented-out code that was being retained pending whether the Windows bot would accept the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526380</commentid>
    <comment_count>60</comment_count>
      <attachid>120339</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-22 11:18:43 -0800</bug_when>
    <thetext>Comment on attachment 120339
Patch

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

Other than a few small things, this looks great and so much more encapsulated.  Thanks for waiting until I could land that refactoring patch.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:193
&gt; +    // FIXME: if there is useful information to share between render passes to
&gt; +    //        assist in optimization, plumb it here.

Small quibble: I tend to use FIXME only when I&apos;m knowingly implementing something suboptimal or that makes some assumptions that I&apos;d like to remove later.  I don&apos;t think it&apos;s useful for a &quot;here&apos;s where future features can go&quot;.  Future features can sort that out themselves, and (in this case) it may turn out that this is not the best place to do such a thing and it requires some larger refactoring.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:42
&gt; +// Specialize for OwnPtr&lt;CCDrawQuad&gt; since Vector doesn&apos;t know how to reverse a Vector of OwnPtr&lt;T&gt; in general.
&gt; +template&lt;&gt; void swap(WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp;a, WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp; b) { a.swap(b); }

I think this should go in wtf/OwnPtr.h and not be specialized.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:78
&gt; +    for (int i = quadList.size() -1; i &gt;= 0; --i) {

nit: space between &apos;-&apos; and &apos;1&apos;.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:89
&gt; +        // FIXME: have all quads treated the same!
&gt; +        switch (drawQuad-&gt;material()) {
&gt; +        case CCDrawQuad::CustomLayer:
&gt; +            quadRect = drawQuad-&gt;toCustomLayerDrawQuad()-&gt;layer()-&gt;drawableContentRect();
&gt; +            break;
&gt; +        default:
&gt; +            quadRect = drawQuad-&gt;quadTransform().mapRect(drawQuad-&gt;quadRect());
&gt; +        }

This is unexpected.  Does the default case for custom layers not return the right information? I had hoped it would.  Maybe we should change it so it does?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:99
&gt; +        else
&gt; +            quadList[i].clear(); // This releases the quad permanently.

Do you need to do this? Doesn&apos;t the vector destroy them when it gets destroyed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526394</commentid>
    <comment_count>61</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 11:37:20 -0800</bug_when>
    <thetext>(In reply to comment #60)
&gt; (From update of attachment 120339 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120339&amp;action=review
&gt; 
&gt; Other than a few small things, this looks great and so much more encapsulated.  Thanks for waiting until I could land that refactoring patch.

No problem, then end-product is much nicer ...

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:193
&gt; &gt; +    // FIXME: if there is useful information to share between render passes to
&gt; &gt; +    //        assist in optimization, plumb it here.
&gt; 
&gt; Small quibble: I tend to use FIXME only when I&apos;m knowingly implementing something suboptimal or that makes some assumptions that I&apos;d like to remove later.  I don&apos;t think it&apos;s useful for a &quot;here&apos;s where future features can go&quot;.  Future features can sort that out themselves, and (in this case) it may turn out that this is not the best place to do such a thing and it requires some larger refactoring.

OK, will remove.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:42
&gt; &gt; +// Specialize for OwnPtr&lt;CCDrawQuad&gt; since Vector doesn&apos;t know how to reverse a Vector of OwnPtr&lt;T&gt; in general.
&gt; &gt; +template&lt;&gt; void swap(WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp;a, WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp; b) { a.swap(b); }
&gt; 
&gt; I think this should go in wtf/OwnPtr.h and not be specialized.

I agree, except I&apos;m not sure partial-specialization is allowed for functions (I couldn&apos;t get it to compile with

template&lt;typename T&gt; void swap(WTF::OwnPtr&lt;T&gt;&amp;a, WTF::OwnPtr&lt;T&gt;&amp; b)

and also there seem to be issues with overloading std::swap ... I&apos;m open to suggestions.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:78
&gt; &gt; +    for (int i = quadList.size() -1; i &gt;= 0; --i) {
&gt; 
&gt; nit: space between &apos;-&apos; and &apos;1&apos;.

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:89
&gt; &gt; +        // FIXME: have all quads treated the same!
&gt; &gt; +        switch (drawQuad-&gt;material()) {
&gt; &gt; +        case CCDrawQuad::CustomLayer:
&gt; &gt; +            quadRect = drawQuad-&gt;toCustomLayerDrawQuad()-&gt;layer()-&gt;drawableContentRect();
&gt; &gt; +            break;
&gt; &gt; +        default:
&gt; &gt; +            quadRect = drawQuad-&gt;quadTransform().mapRect(drawQuad-&gt;quadRect());
&gt; &gt; +        }
&gt; 
&gt; This is unexpected.  Does the default case for custom layers not return the right information? I had hoped it would.  Maybe we should change it so it does?

Sure, sounds good ... want me to do that?

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:99
&gt; &gt; +        else
&gt; &gt; +            quadList[i].clear(); // This releases the quad permanently.
&gt; 
&gt; Do you need to do this? Doesn&apos;t the vector destroy them when it gets destroyed?

I guess it would ... will remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526416</commentid>
    <comment_count>62</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 11:53:55 -0800</bug_when>
    <thetext>(In reply to comment #60)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:89
&gt; &gt; +        // FIXME: have all quads treated the same!
&gt; &gt; +        switch (drawQuad-&gt;material()) {
&gt; &gt; +        case CCDrawQuad::CustomLayer:
&gt; &gt; +            quadRect = drawQuad-&gt;toCustomLayerDrawQuad()-&gt;layer()-&gt;drawableContentRect();
&gt; &gt; +            break;
&gt; &gt; +        default:
&gt; &gt; +            quadRect = drawQuad-&gt;quadTransform().mapRect(drawQuad-&gt;quadRect());
&gt; &gt; +        }
&gt; 
&gt; This is unexpected.  Does the default case for custom layers not return the right information? I had hoped it would.  Maybe we should change it so it does?
&gt; 

Sorry, forgot to answer your question. I found, which testing with Aura, that the custome layer quadRect together with the quadTransform gave a different location on the screen from where the layer was actually being drawn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526442</commentid>
    <comment_count>63</comment_count>
      <attachid>120362</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 12:23:56 -0800</bug_when>
    <thetext>Created attachment 120362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526443</commentid>
    <comment_count>64</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-22 12:28:46 -0800</bug_when>
    <thetext>I took care of all the comments save one:

I took another look at putting a partial swap specialization into OwnPtr.h, namely

namespace std {

template&lt;typename T&gt; void swap(WTF::OwnPtr&lt;T&gt;&amp;a, WTF::OwnPtr&lt;T&gt;&amp; b) 
{ 
    a.swap(b);
}
}

but my template-fu is too weak. Many other headers complained I was re-defining &quot;swap&quot; (e.g. HashTable.h +273), but Vector specifically uses std::swap. I did read somewhere that you&apos;re not allowed to *overload* swap, yet partial specialization of a function isn&apos;t allowed.

If there is a way, I&apos;m happy to make the change ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526451</commentid>
    <comment_count>65</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-22 12:38:40 -0800</bug_when>
    <thetext>(In reply to comment #64)
&gt; I took care of all the comments save one:
&gt; 
&gt; I took another look at putting a partial swap specialization into OwnPtr.h, namely
&gt; 
&gt; namespace std {
&gt; 
&gt; template&lt;typename T&gt; void swap(WTF::OwnPtr&lt;T&gt;&amp;a, WTF::OwnPtr&lt;T&gt;&amp; b) 
&gt; { 
&gt;     a.swap(b);
&gt; }
&gt; }
&gt; 
&gt; but my template-fu is too weak. Many other headers complained I was re-defining &quot;swap&quot; (e.g. HashTable.h +273), but Vector specifically uses std::swap. I did read somewhere that you&apos;re not allowed to *overload* swap, yet partial specialization of a function isn&apos;t allowed.
&gt; 
&gt; If there is a way, I&apos;m happy to make the change ...

No, you&apos;re quite right.  I think your original solution is the best you can do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526488</commentid>
    <comment_count>66</comment_count>
      <attachid>120362</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-22 13:46:08 -0800</bug_when>
    <thetext>Comment on attachment 120362
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:133
&gt; +    IntRect quadRect(quadTransform().inverse().mapRect(drawableContentRect()));
&gt; +    quadList.append(CCCustomLayerDrawQuad::create(sharedQuadState, quadRect, this));

drawableContentRect() is not what you want.  That&apos;s the enclosed IntRect of the transformed layer.  So, if the layer is rotated, it&apos;ll be much larger than the actual layer (and not fully opaque within its bounds).  I think you need a layer rect that&apos;s something more like CCLayerTreeHostCommon.cpp:223, where you offset it by half the width and height.

I&apos;m not totally sure how to handle the FloatRect/IntRect issue.  Quads are really all IntRect in size, so it&apos;d be sad to have to move to float to handle a drawing offset.  One alternative might be to bake that half-width/half-height offset into the transform for the custom layer quad instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527756</commentid>
    <comment_count>67</comment_count>
      <attachid>120696</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-28 13:11:38 -0800</bug_when>
    <thetext>Created attachment 120696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527759</commentid>
    <comment_count>68</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-28 13:13:31 -0800</bug_when>
    <thetext>Revised computation of quadRect in CCLayerImpl. Compensated for non-int-ness by adding correction into quadTransform().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527776</commentid>
    <comment_count>69</comment_count>
      <attachid>120696</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-28 14:37:39 -0800</bug_when>
    <thetext>Comment on attachment 120696
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:133
&gt; +    IntRect quadRect(-0.5 * bounds().width(), -0.5 * bounds().height(), bounds().width(), bounds().height());
&gt; +    quadList.append(CCCustomLayerDrawQuad::create(sharedQuadState, quadRect, this));

Sorry to add one last nitpick, but is it possible to do this offset entirely in the quad transform? It&apos;s a little magic to have this implicit flooring here and correction elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527933</commentid>
    <comment_count>70</comment_count>
      <attachid>120750</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-29 08:11:39 -0800</bug_when>
    <thetext>Created attachment 120750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527934</commentid>
    <comment_count>71</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-29 08:13:28 -0800</bug_when>
    <thetext>Moved additional float calculations into quadTransform(). This is certainly better, I just wasn&apos;t sure what other expectations there might have been for the quadRect values themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527959</commentid>
    <comment_count>72</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-29 09:51:55 -0800</bug_when>
    <thetext>(In reply to comment #71)
&gt; Moved additional float calculations into quadTransform(). This is certainly better, I just wasn&apos;t sure what other expectations there might have been for the quadRect values themselves.

Thanks.  This patch looks good to me.

For what it&apos;s worth, my expectation is that transforming the quadRect by the quadTransform should always give the transformed rect in target surface space.  The shaders themselves might care more about what&apos;s in the rect vs. the transform, but as more layers get converted to not use CCDrawQuad::CustomLayer, they can override quadTransform and appendQuads to provide the values they want, as CCTiledLayerImpl does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527964</commentid>
    <comment_count>73</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-29 09:56:48 -0800</bug_when>
    <thetext>(In reply to comment #72)
&gt; (In reply to comment #71)
&gt; &gt; Moved additional float calculations into quadTransform(). This is certainly better, I just wasn&apos;t sure what other expectations there might have been for the quadRect values themselves.
&gt; 
&gt; Thanks.  This patch looks good to me.

Thanks!

&gt; For what it&apos;s worth, my expectation is that transforming the quadRect by the quadTransform should always give the transformed rect in target surface space.  The shaders themselves might care more about what&apos;s in the rect vs. the transform, but as more layers get converted to not use CCDrawQuad::CustomLayer, they can override quadTransform and appendQuads to provide the values they want, as CCTiledLayerImpl does.

Yeah, that was sort of what I expected, although I wasn&apos;t sure if there might be other uses for the drawQuad values that it might affect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528645</commentid>
    <comment_count>74</comment_count>
      <attachid>120750</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-02 20:07:02 -0800</bug_when>
    <thetext>Comment on attachment 120750
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:179
&gt; +    TransformationMatrix qt = drawTransform();

we don&apos;t use abbreviations for variables like this in WebKit, can you please give this a descriptive name (or at least one that&apos;s a word)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:193
&gt; +        passes[i].get()-&gt;optimizeQuads();

just &quot;passes[i]-&gt;optimizeQuads();&quot; please

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:137
&gt; +    void optimizeRenderPasses(Vector&lt;OwnPtr&lt;CCRenderPass&gt; &gt;&amp;);

nit: i&apos;d slightly prefer this function&apos;s declaration and definition be after calculateRenderPasses()es, to make it a bit easier to read through the code in order

can we get a typedef for Vector&lt;OwnPtr&lt;CCRenderPass&gt; &gt; please? it&apos;s a mouthful

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:42
&gt; +template&lt;&gt; void swap(WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp;a, WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp; b) { a.swap(b); }

we don&apos;t normally use WTF:: prefixes for OwnPtr because there&apos;s a using declaration in OwnPtr.h putting WTF::OwnPtr into the global namespace. do you definitely need those here or will it compile without it?

space before the &quot;a&quot; in the param list please.

some newlines, please! i&apos;d put one after &quot;template&lt;&gt;&quot; and space out the function  like a normal function

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:35
&gt; +    CCQuadCuller() { };

nit: no trailing ;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:36
&gt; +    virtual void operator()(CCQuadList&amp;) = 0;

we very rarely use operator overloading in WebKit or chromium - are you really sure you need it here? i think i would prefer a descriptively-named virtual functions

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:40
&gt; +class CCQuadCullerSimple : public CCQuadCuller {
&gt; +public:

do you want the compiler-generated copy and assignment c&apos;tors? we normally put WTF_MAKE_NONCOPYABLE on every class unless there&apos;s a specific need for it to be copyable

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:44
&gt; +    virtual void operator()(CCQuadList&amp;);
&gt; +};

are CCQuadCullers expected to have state between calls?

&gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:72
&gt; +TEST_F(CCQuadCullerTest, verifyQuadsAreCulledProperly)

Why are you  using a test fixture here if you aren&apos;t using any state fro mthe CCQuadCullerTest class? you could just declare this TEST()

&gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:85
&gt; +    // Test culling of centre tile in root layer.
&gt; +    {

please break these out into separate TEST()s with descriptive names. you can share the setup code in a SetUp() function if you&apos;d like. having these bunched together risks sharing state between tests and makes failures harder to diagnose</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528648</commentid>
    <comment_count>75</comment_count>
      <attachid>120750</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-02 20:10:05 -0800</bug_when>
    <thetext>Comment on attachment 120750
Patch

I don&apos;t understand where you are going with a CCQuadCuller base class and virtual implementations - it seems to be designed for some use case that isn&apos;t in effect here and isn&apos;t obvious to me. If you want to have potentially different cullers, why aren&apos;t they just different static functions? with just one implementation, do you need a base class at all?

a single static function should do just fine here. this looks overengineered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528914</commentid>
    <comment_count>76</comment_count>
      <attachid>120973</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-03 11:40:27 -0800</bug_when>
    <thetext>Created attachment 120973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528919</commentid>
    <comment_count>77</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-03 11:46:21 -0800</bug_when>
    <thetext>(In reply to comment #74)
&gt; (From update of attachment 120750 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120750&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:179
&gt; &gt; +    TransformationMatrix qt = drawTransform();
&gt; 
&gt; we don&apos;t use abbreviations for variables like this in WebKit, can you please give this a descriptive name (or at least one that&apos;s a word)?

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:193
&gt; &gt; +        passes[i].get()-&gt;optimizeQuads();
&gt; 
&gt; just &quot;passes[i]-&gt;optimizeQuads();&quot; please

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:137
&gt; &gt; +    void optimizeRenderPasses(Vector&lt;OwnPtr&lt;CCRenderPass&gt; &gt;&amp;);
&gt; 
&gt; nit: i&apos;d slightly prefer this function&apos;s declaration and definition be after calculateRenderPasses()es, to make it a bit easier to read through the code in order

Done.

&gt; can we get a typedef for Vector&lt;OwnPtr&lt;CCRenderPass&gt; &gt; please? it&apos;s a mouthful

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:42
&gt; &gt; +template&lt;&gt; void swap(WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp;a, WTF::OwnPtr&lt;WebCore::CCDrawQuad&gt;&amp; b) { a.swap(b); }
&gt; 
&gt; we don&apos;t normally use WTF:: prefixes for OwnPtr because there&apos;s a using declaration in OwnPtr.h putting WTF::OwnPtr into the global namespace. do you definitely need those here or will it compile without it?

Done.

&gt; space before the &quot;a&quot; in the param list please.

Done.

&gt; some newlines, please! i&apos;d put one after &quot;template&lt;&gt;&quot; and space out the function  like a normal function

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:35
&gt; &gt; +    CCQuadCuller() { };
&gt; 
&gt; nit: no trailing ;

Oops, done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:36
&gt; &gt; +    virtual void operator()(CCQuadList&amp;) = 0;
&gt; 
&gt; we very rarely use operator overloading in WebKit or chromium - are you really sure you need it here? i think i would prefer a descriptively-named virtual functions

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:40
&gt; &gt; +class CCQuadCullerSimple : public CCQuadCuller {
&gt; &gt; +public:
&gt; 
&gt; do you want the compiler-generated copy and assignment c&apos;tors? we normally put WTF_MAKE_NONCOPYABLE on every class unless there&apos;s a specific need for it to be copyable

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:44
&gt; &gt; +    virtual void operator()(CCQuadList&amp;);
&gt; &gt; +};
&gt; 
&gt; are CCQuadCullers expected to have state between calls?

Yes, that was the ultimate architecutre we decided on earlier. QuadCullerSimple doesn&apos;t keep state, but in general state may be desired, e.g. when culling several RenderPassLists with one QuadCuller object.

&gt; &gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:72
&gt; &gt; +TEST_F(CCQuadCullerTest, verifyQuadsAreCulledProperly)
&gt; 
&gt; Why are you  using a test fixture here if you aren&apos;t using any state fro mthe CCQuadCullerTest class? you could just declare this TEST()

Done.

&gt; &gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:85
&gt; &gt; +    // Test culling of centre tile in root layer.
&gt; &gt; +    {
&gt; 
&gt; please break these out into separate TEST()s with descriptive names. you can share the setup code in a SetUp() function if you&apos;d like. having these bunched together risks sharing state between tests and makes failures harder to diagnose

Done.

&gt; I don&apos;t understand where you are going with a CCQuadCuller base class and 
&gt; virtual implementations - it seems to be designed for some use case that 
&gt; isn&apos;t in effect here and isn&apos;t obvious to me. If you want to have potentially &gt; different cullers, why aren&apos;t they just different static functions? with just 
&gt; one implementation, do you need a base class at all?

&gt; a single static function should do just fine here. this looks overengineered.

I have made it a single static function in the CCQuadCuller class, as requested, although I think the hope was to (ultimately) be able to compare different culling approaches &quot;on the fly&quot;, in which case using multiple derived classes overriding a virtual function makes the most sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530615</commentid>
    <comment_count>78</comment_count>
      <attachid>120973</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 14:07:37 -0800</bug_when>
    <thetext>Comment on attachment 120973
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:54
&gt; +static bool regionContainsRect(const Region&amp; region, const IntRect&amp; rect)

static is redundant with the anonymous namespace. i think i would just drop the anonymous namespace here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:97
&gt; +} // Namespace WebCore

nit: it&apos;s normally capitalized &apos;namespace WebCore&apos;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

it&apos;s 2012 now

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h:34
&gt; +    WTF_MAKE_NONCOPYABLE(CCQuadCuller);

even better would be making this class not instantiable (private c&apos;tor) since it&apos;s just for namespacing and isn&apos;t really an object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530655</commentid>
    <comment_count>79</comment_count>
      <attachid>121336</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-05 14:53:10 -0800</bug_when>
    <thetext>Created attachment 121336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530656</commentid>
    <comment_count>80</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-05 14:54:40 -0800</bug_when>
    <thetext>(In reply to comment #79)
&gt; Created an attachment (id=121336) [details]
&gt; Patch

Sorry for the delay, repo woes!

If this is worthy of r+, can you hit c+ too? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530816</commentid>
    <comment_count>81</comment_count>
      <attachid>121336</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 17:18:53 -0800</bug_when>
    <thetext>Comment on attachment 121336
Patch

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

R=me. I&apos;d like to see test coverage for a couple more cases, but otherwise we&apos;re good to go.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp:81
&gt; +        if (keepQuad &amp;&amp; drawQuad-&gt;drawsOpaque() &amp;&amp; drawQuad-&gt;isLayerAxisAlignedIntRect())

can you please add some tests for non-axis aligned quads to make sure that we (a) don&apos;t consider them as generating opaque regions and (b) only cull when it&apos;s definitely safe to do so?

&gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

2012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531062</commentid>
    <comment_count>82</comment_count>
      <attachid>121429</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 06:49:10 -0800</bug_when>
    <thetext>Created attachment 121429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531063</commentid>
    <comment_count>83</comment_count>
      <attachid>121430</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 06:51:56 -0800</bug_when>
    <thetext>Created attachment 121430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531064</commentid>
    <comment_count>84</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 06:52:42 -0800</bug_when>
    <thetext>(In reply to comment #83)
&gt; Created an attachment (id=121430) [details]
&gt; Patch

Tests added, copyright date corrected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531357</commentid>
    <comment_count>85</comment_count>
      <attachid>121486</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 13:49:19 -0800</bug_when>
    <thetext>Created attachment 121486
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531567</commentid>
    <comment_count>86</comment_count>
      <attachid>121486</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-06 18:39:34 -0800</bug_when>
    <thetext>Comment on attachment 121486
Patch for landing

Clearing flags on attachment: 121486

Committed r104368: &lt;http://trac.webkit.org/changeset/104368&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531568</commentid>
    <comment_count>87</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-06 18:39:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111820</attachid>
            <date>2011-10-20 12:12:46 -0700</date>
            <delta_ts>2011-10-21 08:48:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111020151244.patch</filename>
            <type>text/plain</type>
            <size>22067</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNTI5MTIyNGZhMGQxM2Y2
ZDE2M2Y4NTdjZmE0YjgxMjY3ZjJhNWI1Li4yYTQ5Y2MzOTkxM2M5YzBjNGRiNjFiMDBjYTgyYWI0
YTAwZjE4ZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjAgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBnb29nbGUuY29tPgorCisgICAgICAgIFtDaHJvbWl1bV0gQ3VsbCBv
Y2NsdWRlZCB0aWxlcyBpbiB0aWxlZCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3Rz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKTog
UHVzaCB0aGUgb3BhcXVlIHByb3BlcnR5IHRvIENDTGF5ZXJJbXBsLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OmNsZWFyT2NjbHVkZWRBcmVhKTogQWRkIGZ1bmN0aW9uIHRvIG1hdGNo
IHRoZSBDQ0xheWVySW1wbCBpbnRlcmZhY2UuIE5vIG9jY2x1c2lvbiBjdWxsaW5nIGRvbmUgaGVy
ZSB0aG91Z2guCisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRPY2NsdWRlZEFy
ZWEpOiBBZGQgZnVuY3Rpb24gdG8gbWF0Y2ggdGhlIENDTGF5ZXJJbXBsIGludGVyZmFjZS4gTm8g
b2NjbHVzaW9uIGN1bGxpbmcgZG9uZSBoZXJlIHRob3VnaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OmNsZWFyT2NjbHVkZWRBcmVhKTogQWRkIHZpcnR1YWwgZnVuY3Rpb24gZm9yIGFs
bCBDQyBsYXllcnMsIGRvZXMgbm90aGluZyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmFkZE9jY2x1ZGVkQXJlYSk6IGFkZCB2aXJ0dWFsIGZ1bmN0aW9uIGZvciBhbGwgQ0Mg
bGF5ZXJzLCBkb2VzIG5vdGhpbmcgaGVyZS4gU29tZSBsYXllciB0eXBlcyBtYXkgc2tpcCBkcmF3
aW5nIGJhc2VkIG9uIHRoZSBvY2NsdWRlZCBhcmVhcyBnaXZlbiBoZXJlLgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OnNldE9wYXF1ZSk6IEFkZCBmdW5jdGlvbiBmb3IgY2xvbmluZyBD
aHJvbWl1bUxheWVyJ3Mgb3BhcXVlIHByb3BlcnR5LgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6Om9wYXF1ZSk6IEFkZCBmdW5jdGlvbiBmb3IgY2xvbmluZyBDaHJvbWl1bUxheWVyJ3Mg
b3BhcXVlIHByb3BlcnR5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdE
YXRhOjpvY2NsdWRlZFJlY3RUb1RpbGVJbmRpY2VzKTogQ29udmVydCBhIHJlY3RhbmdsZSB0byBh
IHNldCBvZiB0aWxlIGluZGljZXMgd2hpY2ggYXJlIGNvbXBsZXRlbHkgY29udGFpbmVkIHdpdGhp
biB0aGUgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmNs
ZWFyT2NjbHVkZWRBcmVhKTogQ2xlYXIgdGhlIGFyZWFzIG1hcmtlZCBhcyBvY2NsdWRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjphZGRPY2NsdWRlZEFyZWEpOiBSZW1l
bWJlciB0aGUgcmVjdGFuZ3VsYXIgYXJlYSBvZiBhbiBvcGFxdWUgY2hpbGQsIHNvIHdlIGRvbid0
IGRyYXcgdGlsZXMgdW5kZXIgaXQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0
YTo6dGlsZU9jY2x1ZGVkKTogUmV0dXJucyB0cnVlIGlmIGEgdGlsZSBpcyBvY2NsdWRlZCBieSBv
cGFxdWUgY2hpbGRyZW4uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRpbGluZ0RhdGEuaDogQWRkIG1fb3BhcXVlQ2hpbGRSZWN0cyB0byB0cmFjayB0aGUg
b3BhcXVlIGNoaWxkcmVuIGFib3ZlIHVzIGZvciB0aWxlT2NjbHVkZWQoKSB0byB1c2UuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eUludGVybmFsKTogQWZ0ZXIgY29tcHV0aW5nIHRoZSB2aXNpYmlsaXR5IG9mIGEgY2hpbGQs
IG1hcmsgaXRzIGFyZWEgYXMgb2NjbHVkZWQgaW4gdGhlIHBhcmVudC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXdUaWxlcyk6IFNraXAgb2NjbHVkZWQgdGls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Y2xlYXJPY2NsdWRl
ZEFyZWEpOiBPdmVycmlkZXMgQ0NMYXllckltcGxlLCBhbmQgcGFzc2VzIG9uIHRoZSByZXF1ZXN0
IHRvIHRoZSBDQ0xheWVyVGlsaW5nRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXll
ckltcGw6OmFkZE9jY2x1ZGVkQXJlYSk6IE92ZXJyaWRlcyBDQ0xheWVySW1wbGUsIGFuZCBwYXNz
ZXMgb24gdGhlIHJlcXVlc3QgdG8gdGhlIENDTGF5ZXJUaWxpbmdEYXRhLgorCiAyMDExLTEwLTE3
ICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQXZvaWQg
bGVha2luZyBkb2N1bWVudCB3aGVuIGxlYXZpbmcgZ29vZ2xlLmNvbSBkdWUgdG8gZ2VvbG9jYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmUyY2Q0ZWIxNWRmNGRkM2ZmNjE3MGI2YWFj
ZGRlMGU5MGQzMmEzOC4uN2U3ZWQ2ODczMjM5NGQyMTBiZjY4NmViNjQ2NDBkOTI5NGQyMTA4MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5MSw2ICsyOTEsNyBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0
TmFtZShtX25hbWUpOwogICAgIGxheWVyLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CisgICAgbGF5
ZXItPnNldE9wYXF1ZShtX29wYXF1ZSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRp
b24pOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXll
ci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
aW5kZXggYjVkNjQ4M2M5ODg4N2FiZjlmODdkZDI2OTVkM2UyMDk2NmJjZjdhMy4uYmE1NGQ3Yjgz
ZjgzMjRjNzRlYmNkYmQ2OWZiZTAyYmM1ZGE5NGYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAt
MTY0LDYgKzE2NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVu
dHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJPY2NsdWRlZEFyZWEoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
YWRkT2NjbHVkZWRBcmVhKGNvbnN0IEludFJlY3QmIGFyZWEpIHsgfQogCiAgICAgLy8gVGhlc2Ug
ZXhpc3QganVzdCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVyKCkpLgogICAgIHZv
aWQgc2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
aW5kZXggMTViZTc1MTU2Yzc3ODAwMTQ0OThkYjZlNDc4YWQ2MzY3MDhkOGI2MC4uMTE1MDk4YzE5
ZmM2ZDM4ZTQzYmYzZjM3MGU5YzczNGE0ZDhhYWNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBA
IC03NCw2ICs3NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopOwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2NjbHVkZWRBcmVhKCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGFkZE9jY2x1ZGVkQXJlYShjb25zdCBJbnRSZWN0JiBhcmVhKSB7IH0K
KwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxheWVyIGhhcyBjb250ZW50IHRvIGRyYXcu
CiAgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpIHsgbV9kcmF3c0Nv
bnRlbnQgPSBkcmF3c0NvbnRlbnQ7IH0KICAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd3NDb250ZW50OyB9CkBAIC05NSw2ICs5OCw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CiAg
ICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogCisgICAgdm9p
ZCBzZXRPcGFxdWUoYm9vbCBvcGFxdWUpIHsgbV9vcGFxdWUgPSBvcGFxdWU7IH0KKyAgICBib29s
IG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKICAgICB2b2lkIHNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsg
fQogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3Np
dGlvbjsgfQogCkBAIC0yMDgsNiArMjE0LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fdmlz
aWJsZUxheWVyUmVjdDsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKICAgICBmbG9hdCBtX29w
YWNpdHk7CisgICAgYm9vbCBtX29wYXF1ZTsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CiAg
ICAgYm9vbCBtX3ByZXNlcnZlczNEOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5
ZXJUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggYzU0
MmI3ZDQyNmI3MTRkZDNlOTMwMjY2ZmQyOTgwNGY3Yzc1M2FkMS4uYmJhMGNlMmE4ZTQ0YWZhOGRj
MzQyZGUzYTdhMzExMTQ2YTI0Y2NmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcApAQCAtMTAwLDYgKzEwMCwyNSBAQCB2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpjb250ZW50
UmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludAogICAgIGJv
dHRvbSA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhZ
KCkgLSAxKTsKIH0KIAordm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6b2NjbHVkZWRSZWN0VG9UaWxl
SW5kaWNlcyhjb25zdCBJbnRSZWN0JiBvY2NsdWRlZFJlY3QsIGludCYgbGVmdCwgaW50JiB0b3As
IGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAoreworICAgIEludFJlY3QgYm91bmRzOwor
CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG9jY2x1ZGVkUmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKKworICAgIGJvdW5kcyA9IG1fdGlsaW5nRGF0YS50aWxlQm91bmRzKG1f
dGlsaW5nRGF0YS50aWxlSW5kZXgobGVmdCwgdG9wKSk7CisgICAgaWYgKG9jY2x1ZGVkUmVjdC54
KCkgPiBib3VuZHMueCgpKQorICAgICAgICArK2xlZnQ7CisgICAgaWYgKG9jY2x1ZGVkUmVjdC55
KCkgPiBib3VuZHMueSgpKQorICAgICAgICArK3RvcDsKKworICAgIGJvdW5kcyA9IG1fdGlsaW5n
RGF0YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgocmlnaHQsIGJvdHRvbSkpOwor
ICAgIGlmIChvY2NsdWRlZFJlY3QubWF4WCgpIDwgYm91bmRzLm1heFgoKSkKKyAgICAgICAgLS1y
aWdodDsKKyAgICBpZiAob2NjbHVkZWRSZWN0Lm1heFkoKSA8IGJvdW5kcy5tYXhZKCkpCisgICAg
ICAgIC0tYm90dG9tOworfQorCiBJbnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjpjb250ZW50UmVj
dFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAogewogICAgIElu
dFBvaW50IHBvcyhjb250ZW50UmVjdC54KCkgLSBtX2xheWVyUG9zaXRpb24ueCgpLCBjb250ZW50
UmVjdC55KCkgLSBtX2xheWVyUG9zaXRpb24ueSgpKTsKQEAgLTEzMyw2ICsxNTIsNDAgQEAgSW50
UmVjdCBDQ0xheWVyVGlsaW5nRGF0YTo6dGlsZUxheWVyUmVjdChjb25zdCBUaWxlKiB0aWxlKSBj
b25zdAogICAgIHJldHVybiBsYXllclJlY3Q7CiB9CiAKK3ZvaWQgQ0NMYXllclRpbGluZ0RhdGE6
OmNsZWFyT2NjbHVkZWRBcmVhKCkKK3sKKyAgICBtX29wYXF1ZUNoaWxkUmVjdHMuY2xlYXIoKTsK
K30KKwordm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6YWRkT2NjbHVkZWRBcmVhKGNvbnN0IEludFJl
Y3QmIGFyZWEpCit7CisgICAgaWYgKGFyZWEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBWZWN0b3I8SW50UmVjdD46Oml0ZXJhdG9yIGl0LCBlbmQ7CisgICAgZW5kID0gbV9vcGFx
dWVDaGlsZFJlY3RzLmVuZCgpOworICAgIGZvciAoaXQgPSBtX29wYXF1ZUNoaWxkUmVjdHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZiAoYXJlYS5jb250YWlucygqaXQpKSB7
CisgICAgICAgICAgICAqaXQgPSBhcmVhOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgbV9vcGFxdWVDaGlsZFJlY3RzLmFwcGVuZChhcmVhKTsKK30KKworYm9vbCBDQ0xheWVy
VGlsaW5nRGF0YTo6dGlsZU9jY2x1ZGVkKGludCBpLCBpbnQgaikKK3sKKyAgICBWZWN0b3I8SW50
UmVjdD46Oml0ZXJhdG9yIGl0LCBlbmQ7CisgICAgZW5kID0gbV9vcGFxdWVDaGlsZFJlY3RzLmVu
ZCgpOworICAgIGZvciAoaXQgPSBtX29wYXF1ZUNoaWxkUmVjdHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgICAg
IG9jY2x1ZGVkUmVjdFRvVGlsZUluZGljZXMoKml0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OworCisgICAgICAgIGlmIChpID49IGxlZnQgJiYgaSA8PSByaWdodCAmJiBqID49IHRvcCAmJiBq
IDw9IGJvdHRvbSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIHZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldExheWVyUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCiB7CiAgICAgbV9sYXllclBvc2l0aW9uID0gbGF5
ZXJQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oCmluZGV4IGQxMmVhNzA2
YjNlNjFiMzI4MDU5YmJmMWY5ZDA0M2Q4NjNlMTRkNWUuLjBlNzlhODJhYTVkODg5Nzk1MjE0MGVm
OWMwMzJmZGRiYTFkMGZlNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaApAQCAt
OTgsMTEgKzk4LDE4IEBAIHB1YmxpYzoKICAgICAvLyBHcm93IGxheWVyIHNpemUgdG8gY29udGFp
biB0aGlzIHJlY3RhbmdsZS4KICAgICB2b2lkIGdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdm9pZCBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCAmbGVmdCwgaW50ICZ0b3AsIGludCAmcmlnaHQs
IGludCAmYm90dG9tKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRoZSBzZXQgb2YgdGlsZXMgdGhh
dCBhcmUgZnVsbHkgaW5jbHVkZWQgaW4gdGhlIGNvbnRlbnQgcmVjdC4gSWYgbm8gdGlsZXMgYXJl
IGZ1bGx5IGluY2x1ZGVkLCB0aGVuCisgICAgLy8gbGVmdCB3aWxsIGJlIGxlc3MgdGhhbiByaWdo
dCwgb3IgYm90dG9tIGxlc3MgdGhhbiB0b3AuCisgICAgdm9pZCBvY2NsdWRlZFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnN0IEludFJlY3QmIG9jY2x1ZGVkUmVjdCwgaW50ICZsZWZ0LCBpbnQgJnRvcCwg
aW50ICZyaWdodCwgaW50ICZib3R0b20pIGNvbnN0OwogICAgIEludFJlY3QgY29udGVudFJlY3RU
b0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiAgICAgSW50UmVj
dCBsYXllclJlY3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3Q7
CiAgICAgSW50UmVjdCB0aWxlQ29udGVudFJlY3QoY29uc3QgVGlsZSopIGNvbnN0OwogICAgIElu
dFJlY3QgdGlsZUxheWVyUmVjdChjb25zdCBUaWxlKikgY29uc3Q7CiAKKyAgICB2b2lkIGNsZWFy
T2NjbHVkZWRBcmVhKCk7CisgICAgdm9pZCBhZGRPY2NsdWRlZEFyZWEoY29uc3QgSW50UmVjdCYg
YXJlYSk7CisgICAgYm9vbCB0aWxlT2NjbHVkZWQoaW50LCBpbnQpOworCiAgICAgdm9pZCByZXNl
dCgpOwogCiBwcm90ZWN0ZWQ6CkBAIC0xMTIsNiArMTE5LDcgQEAgcHJvdGVjdGVkOgogICAgIElu
dFNpemUgbV90aWxlU2l6ZTsKICAgICBJbnRQb2ludCBtX2xheWVyUG9zaXRpb247CiAgICAgVGls
aW5nRGF0YSBtX3RpbGluZ0RhdGE7CisgICAgVmVjdG9yPEludFJlY3Q+IG1fb3BhcXVlQ2hpbGRS
ZWN0czsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CmluZGV4IGJjZDVhYzczNWVlYmExOTFhYWNiY2Y4ZDhjMWYyZmZkZjMzM2ZhMDkuLmQ3ZTg3MDRj
MjUzMzcxNWUyZTFmOTQ2Yzg1MTE2OWE4NzI5YWMxNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMjUxLDYgKzI1MSw4IEBAIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5
ZXIsIExheWVyCiAgICAgfSBlbHNlCiAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoKSk7CiAKKyAgICBsYXllci0+Y2xlYXJPY2NsdWRlZEFyZWEoKTsKKwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVyIGRvZXNuJ3QgcHJlc2Vy
dmUgM0QuCkBAIC0yODcsMTAgKzI4OSwxNiBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAg
ICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxk
UmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7CiAgICAgICAgICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAg
ICAgIGRlc2NlbmRhbnRzLmFwcGVuZChjaGlsZCk7CisKKyAgICAgICAgICAgIGlmIChjaGlsZC0+
b3BhcXVlKCkgJiYgY2hpbGQtPm9wYWNpdHkoKSA+PSAwLjk5OTkgJiYgY2hpbGRSZW5kZXJTdXJm
YWNlLT5kcmF3T3BhY2l0eSgpID49IDAuOTk5OSkKKyAgICAgICAgICAgICAgICBsYXllci0+YWRk
T2NjbHVkZWRBcmVhKGVuY2xvc2luZ0ludFJlY3QoY2hpbGRSZW5kZXJTdXJmYWNlLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFJlY3Qg
ZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAg
ICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpOwogICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2Fi
bGVDb250ZW50UmVjdCk7CisKKyAgICAgICAgICAgIGlmIChjaGlsZC0+b3BhcXVlKCkgJiYgY2hp
bGQtPm9wYWNpdHkoKSA+PSAwLjk5OTkgJiYgY2hpbGQtPmRyYXdPcGFjaXR5KCkgPj0gMC45OTk5
KQorICAgICAgICAgICAgICAgIGxheWVyLT5hZGRPY2NsdWRlZEFyZWEoY2hpbGQtPmRyYXdhYmxl
Q29udGVudFJlY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAKaW5kZXggMTE1NWE0Y2FkNTM3YzZhNjZlNjM2ZjA0MDIwYmZhOTZjZjkyYmQ3
ZC4uNjYzOGYyYjRiN2Q3MjRlOWIwNWJiZDEwZGM0ZDE4ZWU5MjY2YTYxMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTI2NSw0MyArMjY1LDYgQEAgdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVy
LCBjb25zdCBJbnQKIAogICAgICAgICAgICAgdGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RU
b0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKIAotICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVj
dCh0aWxlUmVjdCk7Ci0gICAgICAgICAgICAvLyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRv
IGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZs
YXRpbmcgdGhlIHRpbGUgcmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAg
ICAgICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRp
bmcgY2xhbXAgcmVnaW9uCi0gICAgICAgICAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1
YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFuZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sg
dG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIK
LSAgICAgICAgICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAg
ICAgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxv
YXQgY2xhbXBYID0gbWluKDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsK
LSAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAv
IDIuMCAtIGVwc2lsb24pOwotICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgp
OwotICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAg
RmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9h
dFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgdGV4T2Zmc2V0ID0gbV90aWxlci0+dGV4dHVyZU9mZnNldCh0aWxlLT5pKCksIHRpbGUtPmoo
KSkgKyBjbGFtcE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAg
IGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgp
LndpZHRoKCkpOwotICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZs
b2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFw
IGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZl
cnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwot
ICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8g
Y2xhbXBSZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0g
dGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQg
dmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7
Ci0KLSAgICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMu
Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgp
IC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0g
dGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRl
eFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxv
YXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0Owot
Ci0gICAgICAgICAgICAvLyBPcGVuR0wgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgot
ICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZs
aXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3Jp
ZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhU
cmFuc2xhdGVZOwotICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0g
ICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIGVkZ2VYID0gY29u
dGVudFF1YWQucmlnaHQoKTsKICAgICAgICAgICAgIGlmIChpIDwgKG1fdGlsZXItPm51bVRpbGVz
WCgpIC0gMSkpIHsKICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgo
KSwgdGlsZVJlY3QueSgpKTsKQEAgLTMxNiwzNyArMjc5LDc2IEBAIHZvaWQgQ0NUaWxlZExheWVy
SW1wbDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29u
c3QgSW50CiAgICAgICAgICAgICAgICAgZWRnZVguc2NhbGUoc2lnbik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAg
IENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRnZVksIGVkZ2VYLCBlZGdl
WSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgotICAgICAgICAg
ICAgRmxvYXRRdWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9h
dFF1YWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAg
ICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVj
dC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0
aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJh
bnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRo
aXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAg
ICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24t
bmVnYXRpdmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBp
biBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5n
IG91dHNpZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBm
cmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJh
Z21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBm
cmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9
IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVgg
Kz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5z
bGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNs
YXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVy
dGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQot
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChnbG9iYWxUcmFuc2Zv
cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0
LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5t
YXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkucG9pbnRMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghbV90aWxlci0+dGlsZU9jY2x1
ZGVkKGksIGopKSB7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVj
dCk7CisgICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9p
ZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmxh
dGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAorICAgICAg
ICAgICAgICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1
bHRpbmcgY2xhbXAgcmVnaW9uCisgICAgICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1
bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgICAgICAgICAg
ICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdt
ZW50IHNoYWRlcgorICAgICAgICAgICAgICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0x
IHJhbmdlLgorICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4w
ZjsKKyAgICAgICAgICAgICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lk
dGgoKSAvIDIuMCAtIGVwc2lsb24pOworICAgICAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9IG1p
bigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOworICAgICAgICAgICAg
ICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKKyAgICAgICAgICAgICAgICBjbGFtcFJl
Y3QuaW5mbGF0ZVkoLWNsYW1wWSk7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1wT2Zm
c2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1p
blhNaW5ZQ29ybmVyKCk7CisKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRleE9mZnNldCA9
IG1fdGlsZXItPnRleHR1cmVPZmZzZXQodGlsZS0+aSgpLCB0aWxlLT5qKCkpICsgY2xhbXBPZmZz
ZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNldCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdGls
ZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7
CisgICAgICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE1hcCBj
bGFtcGluZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUuCisgICAgICAgICAgICAgICAgZmxvYXQg
dmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3QueCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7
CisgICAgICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3Qu
eSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgICAgIGZsb2F0IHZlcnRleFRl
eFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1w
UmVjdC5oZWlnaHQoKTsKKworICAgICAgICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRl
eHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFu
c2xhdGVYID0gdGV4T2Zmc2V0LngoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgICAgICBmbG9h
dCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgp
IC8gdGlsZVdpZHRoOworICAgICAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0g
Y2xhbXBSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsKKworICAgICAgICAgICAgICAgIC8vIE9w
ZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCisgICAgICAgICAgICAgICAgLy8g
SWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUg
Y29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0aW9uID09
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0
ZVk7CisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBx
dWFkLgorICAgICAgICAgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBw
cmV2RWRnZVksIGVkZ2VYLCBlZGdlWSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXAgcXVhZCB0
byBsYXllciBzcGFjZS4KKyAgICAgICAgICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IHF1YWRUcmFu
c2Zvcm0ubWFwUXVhZChkZXZpY2VRdWFkLmZsb2F0UXVhZCgpKTsKKworICAgICAgICAgICAgICAg
IC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KKyAgICAgICAgICAgICAgICBxdWFkLnNjYWxlKDEu
MGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkpOworCisgICAg
ICAgICAgICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZl
cnRleCBzaGFkZXIuIFdlIGNhbiBkbworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdoaWxl
IHN0aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMKKyAgICAgICAgICAgICAgICAgICAg
Ly8gZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdh
dGl2ZQorICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBp
biBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICAvLyBzYW1w
bGluZyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgdmVydGV4VGV4U2Nh
bGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhT
Y2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAg
ICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRl
WTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFn
bWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2Fs
ZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5z
Zm9ybUxvY2F0aW9uKCksIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVks
IHZlcnRleFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgICAgICBs
YXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2JhbFRyYW5zZm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCks
IHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkucG9pbnRMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHJl
dkVkZ2VYID0gZWRnZVg7CiAgICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCBkZDFjMjkwODdlMjliNDQ2MzNmNzQ5ZGQ0YTRm
ZTQ1MDJmMTdhZmZiLi43N2Y1MGU0ODY3YzA4ZDkwMDYxNjNlMzY0ZTVlNTg5MDY5ZGMyZDE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC00OCw2ICs0OCw5IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50KSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhck9jY2x1ZGVkQXJlYSgpIHsg
bV90aWxlci0+Y2xlYXJPY2NsdWRlZEFyZWEoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRPY2Ns
dWRlZEFyZWEoY29uc3QgSW50UmVjdCYgYXJlYSkgeyBtX3RpbGVyLT5hZGRPY2NsdWRlZEFyZWEo
YXJlYSk7IH0KKwogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tp
cHNEcmF3ID0gc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlT3JpZW50YXRpb24oTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gdGV4dHVyZU9yaWVudGF0aW9uKSB7IG1fdGV4
dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZU9yaWVudGF0aW9uOyB9CiAgICAgdm9pZCBzZXRTYW1w
bGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNh
bXBsZWRUZXhlbEZvcm1hdCkgeyBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZv
cm1hdDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111850</attachid>
            <date>2011-10-20 14:29:42 -0700</date>
            <delta_ts>2011-10-28 08:57:49 -0700</delta_ts>
            <desc>Updated to ignore non-axis-aligned transformations</desc>
            <filename>bug-70533-20111020172941.patch</filename>
            <type>text/plain</type>
            <size>24170</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNTI5MTIyNGZhMGQxM2Y2
ZDE2M2Y4NTdjZmE0YjgxMjY3ZjJhNWI1Li4yYTQ5Y2MzOTkxM2M5YzBjNGRiNjFiMDBjYTgyYWI0
YTAwZjE4ZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjAgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBnb29nbGUuY29tPgorCisgICAgICAgIFtDaHJvbWl1bV0gQ3VsbCBv
Y2NsdWRlZCB0aWxlcyBpbiB0aWxlZCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3Rz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKTog
UHVzaCB0aGUgb3BhcXVlIHByb3BlcnR5IHRvIENDTGF5ZXJJbXBsLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OmNsZWFyT2NjbHVkZWRBcmVhKTogQWRkIGZ1bmN0aW9uIHRvIG1hdGNo
IHRoZSBDQ0xheWVySW1wbCBpbnRlcmZhY2UuIE5vIG9jY2x1c2lvbiBjdWxsaW5nIGRvbmUgaGVy
ZSB0aG91Z2guCisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRPY2NsdWRlZEFy
ZWEpOiBBZGQgZnVuY3Rpb24gdG8gbWF0Y2ggdGhlIENDTGF5ZXJJbXBsIGludGVyZmFjZS4gTm8g
b2NjbHVzaW9uIGN1bGxpbmcgZG9uZSBoZXJlIHRob3VnaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OmNsZWFyT2NjbHVkZWRBcmVhKTogQWRkIHZpcnR1YWwgZnVuY3Rpb24gZm9yIGFs
bCBDQyBsYXllcnMsIGRvZXMgbm90aGluZyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmFkZE9jY2x1ZGVkQXJlYSk6IGFkZCB2aXJ0dWFsIGZ1bmN0aW9uIGZvciBhbGwgQ0Mg
bGF5ZXJzLCBkb2VzIG5vdGhpbmcgaGVyZS4gU29tZSBsYXllciB0eXBlcyBtYXkgc2tpcCBkcmF3
aW5nIGJhc2VkIG9uIHRoZSBvY2NsdWRlZCBhcmVhcyBnaXZlbiBoZXJlLgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OnNldE9wYXF1ZSk6IEFkZCBmdW5jdGlvbiBmb3IgY2xvbmluZyBD
aHJvbWl1bUxheWVyJ3Mgb3BhcXVlIHByb3BlcnR5LgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6Om9wYXF1ZSk6IEFkZCBmdW5jdGlvbiBmb3IgY2xvbmluZyBDaHJvbWl1bUxheWVyJ3Mg
b3BhcXVlIHByb3BlcnR5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdE
YXRhOjpvY2NsdWRlZFJlY3RUb1RpbGVJbmRpY2VzKTogQ29udmVydCBhIHJlY3RhbmdsZSB0byBh
IHNldCBvZiB0aWxlIGluZGljZXMgd2hpY2ggYXJlIGNvbXBsZXRlbHkgY29udGFpbmVkIHdpdGhp
biB0aGUgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmNs
ZWFyT2NjbHVkZWRBcmVhKTogQ2xlYXIgdGhlIGFyZWFzIG1hcmtlZCBhcyBvY2NsdWRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjphZGRPY2NsdWRlZEFyZWEpOiBSZW1l
bWJlciB0aGUgcmVjdGFuZ3VsYXIgYXJlYSBvZiBhbiBvcGFxdWUgY2hpbGQsIHNvIHdlIGRvbid0
IGRyYXcgdGlsZXMgdW5kZXIgaXQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0
YTo6dGlsZU9jY2x1ZGVkKTogUmV0dXJucyB0cnVlIGlmIGEgdGlsZSBpcyBvY2NsdWRlZCBieSBv
cGFxdWUgY2hpbGRyZW4uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRpbGluZ0RhdGEuaDogQWRkIG1fb3BhcXVlQ2hpbGRSZWN0cyB0byB0cmFjayB0aGUg
b3BhcXVlIGNoaWxkcmVuIGFib3ZlIHVzIGZvciB0aWxlT2NjbHVkZWQoKSB0byB1c2UuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eUludGVybmFsKTogQWZ0ZXIgY29tcHV0aW5nIHRoZSB2aXNpYmlsaXR5IG9mIGEgY2hpbGQs
IG1hcmsgaXRzIGFyZWEgYXMgb2NjbHVkZWQgaW4gdGhlIHBhcmVudC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXdUaWxlcyk6IFNraXAgb2NjbHVkZWQgdGls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Y2xlYXJPY2NsdWRl
ZEFyZWEpOiBPdmVycmlkZXMgQ0NMYXllckltcGxlLCBhbmQgcGFzc2VzIG9uIHRoZSByZXF1ZXN0
IHRvIHRoZSBDQ0xheWVyVGlsaW5nRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXll
ckltcGw6OmFkZE9jY2x1ZGVkQXJlYSk6IE92ZXJyaWRlcyBDQ0xheWVySW1wbGUsIGFuZCBwYXNz
ZXMgb24gdGhlIHJlcXVlc3QgdG8gdGhlIENDTGF5ZXJUaWxpbmdEYXRhLgorCiAyMDExLTEwLTE3
ICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQXZvaWQg
bGVha2luZyBkb2N1bWVudCB3aGVuIGxlYXZpbmcgZ29vZ2xlLmNvbSBkdWUgdG8gZ2VvbG9jYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDk0MTVkZTRjNjI1MmVjNDMw
ZGJkN2VmYjc1YTkzZmNkMzllZmFmMGMuLjM2MzM2Mjk2N2FjY2RlYmMyNTU5ZTI5YzI0ZDQzYzFj
ODg4ODAzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTQxLDYgKzE0
MSw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVu
dHMpCiAgICAgbV9pbWFnZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAs
IDApLCBib3VuZHMoKSk7CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgc2V0T3BhcXVlKCFt
X2NvbnRlbnRzLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggZmUyY2Q0ZWIxNWRmNGRkM2ZmNjE3MGI2YWFjZGRlMGU5MGQzMmEzOC4uZWU0ZGU4ZjkyZDJm
MjRjY2IwNDZhMDYwNzZmNDNiNDQ2ODMzOTM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTY2LDcgKzY2LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqIGRlbGVnYXRlKQogICAgICwgbV9vcGFjaXR5KDEuMCkKICAgICAsIG1fYW5jaG9yUG9pbnRa
KDApCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCi0gICAgLCBtX29wYXF1ZSh0cnVlKQor
ICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBt
X3VzZXNMYXllclNjaXNzb3IoZmFsc2UpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQo
ZmFsc2UpCkBAIC0yOTEsNiArMjkxLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVy
dGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRp
b24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldE5hbWUobV9uYW1lKTsKICAg
ICBsYXllci0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIGxheWVyLT5zZXRPcGFxdWUobV9v
cGFxdWUpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0
aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI1ZDY0ODNjOTg4
ODdhYmY5Zjg3ZGQyNjk1ZDNlMjA5NjZiY2Y3YTMuLmJhNTRkN2I4M2Y4MzI0Yzc0ZWJjZGJkNjlm
YmUwMmJjNWRhOTRmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE2NCw2ICsxNjQsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyT2NjbHVkZWRBcmVhKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkZE9jY2x1ZGVkQXJlYShj
b25zdCBJbnRSZWN0JiBhcmVhKSB7IH0KIAogICAgIC8vIFRoZXNlIGV4aXN0IGp1c3QgZm9yIGRl
YnVnZ2luZyAodmlhIGRyYXdEZWJ1Z0JvcmRlcigpKS4KICAgICB2b2lkIHNldERlYnVnQm9yZGVy
Q29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDE1YmU3NTE1NmM3
NzgwMDE0NDk4ZGI2ZTQ3OGFkNjM2NzA4ZDhiNjAuLjExNTA5OGMxOWZjNmQzOGU0M2JmM2YzNzBl
OWM3MzRhNGQ4YWFjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNzQsNiArNzQsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBjbGVhck9jY2x1ZGVkQXJlYSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBh
ZGRPY2NsdWRlZEFyZWEoY29uc3QgSW50UmVjdCYgYXJlYSkgeyB9CisKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhpcyBsYXllciBoYXMgY29udGVudCB0byBkcmF3LgogICAgIHZvaWQgc2V0RHJh
d3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50ID0gZHJhd3NDb250
ZW50OyB9CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29u
dGVudDsgfQpAQCAtOTUsNiArOTgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFjaXR5KGZs
b2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAorICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wg
b3BhcXVlKSB7IG1fb3BhcXVlID0gb3BhcXVlOyB9CisgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7
IHJldHVybiBtX29wYXF1ZTsgfQorCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIApAQCAtMjA4
LDYgKzIxNCw3IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAg
ICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgZmxvYXQgbV9vcGFjaXR5OworICAgIGJvb2wg
bV9vcGFxdWU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIGJvb2wgbV9wcmVzZXJ2
ZXMzRDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRpbGluZ0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCmluZGV4IGM1NDJiN2Q0MjZiNzE0ZGQzZTkz
MDI2NmZkMjk4MDRmN2M3NTNhZDEuLmJiYTBjZTJhOGU0NGFmYThkYzM0MmRlM2E3YTMxMTE0NmEy
NGNjZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKQEAgLTEwMCw2ICsx
MDAsMjUgQEAgdm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6Y29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQKICAgICBib3R0b20gPSBtX3RpbGluZ0Rh
dGEudGlsZVlJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QubWF4WSgpIC0gMSk7CiB9CiAKK3Zv
aWQgQ0NMYXllclRpbGluZ0RhdGE6Om9jY2x1ZGVkUmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50
UmVjdCYgb2NjbHVkZWRSZWN0LCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQm
IGJvdHRvbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGJvdW5kczsKKworICAgIGNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhvY2NsdWRlZFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisK
KyAgICBib3VuZHMgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kcyhtX3RpbGluZ0RhdGEudGlsZUlu
ZGV4KGxlZnQsIHRvcCkpOworICAgIGlmIChvY2NsdWRlZFJlY3QueCgpID4gYm91bmRzLngoKSkK
KyAgICAgICAgKytsZWZ0OworICAgIGlmIChvY2NsdWRlZFJlY3QueSgpID4gYm91bmRzLnkoKSkK
KyAgICAgICAgKyt0b3A7CisKKyAgICBib3VuZHMgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kcyht
X3RpbGluZ0RhdGEudGlsZUluZGV4KHJpZ2h0LCBib3R0b20pKTsKKyAgICBpZiAob2NjbHVkZWRS
ZWN0Lm1heFgoKSA8IGJvdW5kcy5tYXhYKCkpCisgICAgICAgIC0tcmlnaHQ7CisgICAgaWYgKG9j
Y2x1ZGVkUmVjdC5tYXhZKCkgPCBib3VuZHMubWF4WSgpKQorICAgICAgICAtLWJvdHRvbTsKK30K
KwogSW50UmVjdCBDQ0xheWVyVGlsaW5nRGF0YTo6Y29udGVudFJlY3RUb0xheWVyUmVjdChjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBwb3MoY29udGVu
dFJlY3QueCgpIC0gbV9sYXllclBvc2l0aW9uLngoKSwgY29udGVudFJlY3QueSgpIC0gbV9sYXll
clBvc2l0aW9uLnkoKSk7CkBAIC0xMzMsNiArMTUyLDQwIEBAIEludFJlY3QgQ0NMYXllclRpbGlu
Z0RhdGE6OnRpbGVMYXllclJlY3QoY29uc3QgVGlsZSogdGlsZSkgY29uc3QKICAgICByZXR1cm4g
bGF5ZXJSZWN0OwogfQogCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpjbGVhck9jY2x1ZGVkQXJl
YSgpCit7CisgICAgbV9vcGFxdWVDaGlsZFJlY3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRpbGluZ0RhdGE6OmFkZE9jY2x1ZGVkQXJlYShjb25zdCBJbnRSZWN0JiBhcmVhKQoreworICAg
IGlmIChhcmVhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEludFJl
Y3Q+OjppdGVyYXRvciBpdCwgZW5kOworICAgIGVuZCA9IG1fb3BhcXVlQ2hpbGRSZWN0cy5lbmQo
KTsKKyAgICBmb3IgKGl0ID0gbV9vcGFxdWVDaGlsZFJlY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgaWYgKGFyZWEuY29udGFpbnMoKml0KSkgeworICAgICAgICAgICAgKml0
ID0gYXJlYTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIG1fb3BhcXVlQ2hp
bGRSZWN0cy5hcHBlbmQoYXJlYSk7Cit9CisKK2Jvb2wgQ0NMYXllclRpbGluZ0RhdGE6OnRpbGVP
Y2NsdWRlZChpbnQgaSwgaW50IGopCit7CisgICAgVmVjdG9yPEludFJlY3Q+OjppdGVyYXRvciBp
dCwgZW5kOworICAgIGVuZCA9IG1fb3BhcXVlQ2hpbGRSZWN0cy5lbmQoKTsKKyAgICBmb3IgKGl0
ID0gbV9vcGFxdWVDaGlsZFJlY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgICAgICBvY2NsdWRlZFJlY3RUb1Rp
bGVJbmRpY2VzKCppdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKworICAgICAgICBpZiAo
aSA+PSBsZWZ0ICYmIGkgPD0gcmlnaHQgJiYgaiA+PSB0b3AgJiYgaiA8PSBib3R0b20pCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lk
IENDTGF5ZXJUaWxpbmdEYXRhOjpzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBsYXll
clBvc2l0aW9uKQogewogICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxheWVyUG9zaXRpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVGlsaW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaAppbmRleCBkMTJlYTcwNmIzZTYxYjMyODA1OWJiZjFm
OWQwNDNkODYzZTE0ZDVlLi4wZTc5YTgyYWE1ZDg4OTc5NTIxNDBlZjljMDMyZmRkYmExZDBmZTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVGlsaW5nRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmgKQEAgLTk4LDExICs5OCwxOCBAQCBw
dWJsaWM6CiAgICAgLy8gR3JvdyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUu
CiAgICAgdm9pZCBncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OwogICAgIHZvaWQgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBpbnQgJmxlZnQsIGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29u
c3Q7CisgICAgLy8gUmV0dXJucyB0aGUgc2V0IG9mIHRpbGVzIHRoYXQgYXJlIGZ1bGx5IGluY2x1
ZGVkIGluIHRoZSBjb250ZW50IHJlY3QuIElmIG5vIHRpbGVzIGFyZSBmdWxseSBpbmNsdWRlZCwg
dGhlbgorICAgIC8vIGxlZnQgd2lsbCBiZSBsZXNzIHRoYW4gcmlnaHQsIG9yIGJvdHRvbSBsZXNz
IHRoYW4gdG9wLgorICAgIHZvaWQgb2NjbHVkZWRSZWN0VG9UaWxlSW5kaWNlcyhjb25zdCBJbnRS
ZWN0JiBvY2NsdWRlZFJlY3QsIGludCAmbGVmdCwgaW50ICZ0b3AsIGludCAmcmlnaHQsIGludCAm
Ym90dG9tKSBjb25zdDsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogICAgIEludFJlY3QgbGF5ZXJSZWN0VG9Db250
ZW50UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpIGNvbnN0OwogICAgIEludFJlY3QgdGls
ZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUqKSBjb25zdDsKICAgICBJbnRSZWN0IHRpbGVMYXllclJl
Y3QoY29uc3QgVGlsZSopIGNvbnN0OwogCisgICAgdm9pZCBjbGVhck9jY2x1ZGVkQXJlYSgpOwor
ICAgIHZvaWQgYWRkT2NjbHVkZWRBcmVhKGNvbnN0IEludFJlY3QmIGFyZWEpOworICAgIGJvb2wg
dGlsZU9jY2x1ZGVkKGludCwgaW50KTsKKwogICAgIHZvaWQgcmVzZXQoKTsKIAogcHJvdGVjdGVk
OgpAQCAtMTEyLDYgKzExOSw3IEBAIHByb3RlY3RlZDoKICAgICBJbnRTaXplIG1fdGlsZVNpemU7
CiAgICAgSW50UG9pbnQgbV9sYXllclBvc2l0aW9uOwogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdE
YXRhOworICAgIFZlY3RvcjxJbnRSZWN0PiBtX29wYXF1ZUNoaWxkUmVjdHM7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCBiY2Q1YWM3MzVl
ZWJhMTkxYWFjYmNmOGQ4YzFmMmZmZGYzMzNmYTA5Li43MzI2M2ZjMzA3ZjNiZjJhOGFkNTZlNzhm
NzMyMDRhNTE3YTNiMzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKQEAgLTg1LDYgKzg1LDE5IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9u
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKKy8vIFRlc3QgaWYgdGhlIHRy
YW5zbGF0aW9uIGdpdmVzIGEgcmVzdWx0IHRoYXQgaXMgYXhpcy1hbGlnbmVkLgorLy8gU2NhbGVz
IGFuZCB0cmFuc2xhdGlvbnMgYXJlIGFsbG93ZWQsIGJ1dCBhbHNvIHJvdGF0aW9ucyBieSBtdWx0
aXBsZXMgb2YKKy8vIHBpLzIgYWxvbmcgYW55IGF4aXMuCitzdGF0aWMgYm9vbCBpc0F4aXNBbGln
bmVkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQoreworICAgIC8vIFdlIGFsbG93IG9u
bHkgb25lIG5vbi16ZXJvIGluIHRoZSB1cHBlciAzeDMgbWF0cml4LCBhbmQgY29weSB0aGUgbG9n
aWMgZnJvbQorICAgIC8vIGlzU2NhbGVPclRyYW5zbGF0aW9uIG90aGVyd2lzZS4KKyAgICByZXR1
cm4gKCghbS5tMTEoKSAmJiAhbS5tMjEpIHx8ICghbS5tMTEoKSAmJiAhbS5tMzEpIHx8ICghbS5t
MjEoKSAmJiAhbS5tMzEpKQorICAgICAgICAgICAmJiAoKCFtLm0xMigpICYmICFtLm0yMikgfHwg
KCFtLm0xMSgpICYmICFtLm0zMikgfHwgKCFtLm0yMSgpICYmICFtLm0zMikpCisgICAgICAgICAg
ICYmICgoIW0ubTEzKCkgJiYgIW0ubTIzKSB8fCAoIW0ubTExKCkgJiYgIW0ubTMzKSB8fCAoIW0u
bTIxKCkgJiYgIW0ubTMzKSkKKyAgICAgICAgICAgJiYgIW0ubTE0KCkgJiYgIW0ubTI0KCkgJiYg
IW0ubTQzKCkgJiYgbS5tNDQoKTsKK30KKwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVy
IHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8v
IG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1
cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KQEAgLTI1MSw2ICsyNjQsOCBAQCBz
dGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIH0gZWxzZQogICAgICAgICBsYXllci0+c2V0RHJh
d2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwogCisgICAgbGF5ZXItPmNsZWFyT2NjbHVkZWRB
cmVhKCk7CisKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVy
LT5kcmF3VHJhbnNmb3JtKCk7CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBk
b2Vzbid0IHByZXNlcnZlIDNELgpAQCAtMjg3LDEwICszMDIsMTYgQEAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXll
ciwgTGF5ZXIKICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoZW5jbG9zaW5n
SW50UmVjdChjaGlsZFJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSkpOwogICAg
ICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVj
dCk7CiAgICAgICAgICAgICBkZXNjZW5kYW50cy5hcHBlbmQoY2hpbGQpOworCisgICAgICAgICAg
ICBpZiAoY2hpbGQtPm9wYXF1ZSgpICYmIGNoaWxkLT5vcGFjaXR5KCkgPj0gMC45OTk5ICYmIGNo
aWxkUmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSA+PSAwLjk5OTkgJiYgaXNBeGlzQWxpZ25l
ZChjaGlsZFJlbmRlclN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKSkpCisgICAgICAgICAgICAgICAg
bGF5ZXItPmFkZE9jY2x1ZGVkQXJlYShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFj
ZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVj
dCgpOwogICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShjaGlsZC0+ZHJhd2Fi
bGVDb250ZW50UmVjdCgpKTsKICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworCisgICAgICAgICAgICBpZiAoY2hpbGQtPm9wYXF1
ZSgpICYmIGNoaWxkLT5vcGFjaXR5KCkgPj0gMC45OTk5ICYmIGNoaWxkLT5kcmF3T3BhY2l0eSgp
ID49IDAuOTk5OSAmJiBpc0F4aXNBbGlnbmVkKGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpKQorICAg
ICAgICAgICAgICAgIGxheWVyLT5hZGRPY2NsdWRlZEFyZWEoY2hpbGQtPmRyYXdhYmxlQ29udGVu
dFJlY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5jcHAKaW5kZXggMTE1NWE0Y2FkNTM3YzZhNjZlNjM2ZjA0MDIwYmZhOTZjZjkyYmQ3ZC4uNjYz
OGYyYjRiN2Q3MjRlOWIwNWJiZDEwZGM0ZDE4ZWU5MjY2YTYxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAKQEAgLTI2NSw0MyArMjY1LDYgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25z
dCBJbnQKIAogICAgICAgICAgICAgdGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRl
bnRSZWN0KHRpbGVSZWN0KTsKIAotICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxl
UmVjdCk7Ci0gICAgICAgICAgICAvLyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lk
IHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcg
dGhlIHRpbGUgcmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAgICAgICAg
IC8vIG1pbnVzIGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xh
bXAgcmVnaW9uCi0gICAgICAgICAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5
IHRoZSB2ZXJ0ZXggc2hhZGVyIGFuZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9y
bWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKLSAgICAg
ICAgICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAgICAgICAg
Y29uc3QgZmxvYXQgZXBzaWxvbiA9IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxvYXQgY2xh
bXBYID0gbWluKDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAg
ICAgICAgIGZsb2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAt
IGVwc2lsb24pOwotICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOwotICAg
ICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAgRmxvYXRT
aXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3Qo
dGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4
T2Zmc2V0ID0gbV90aWxlci0+dGV4dHVyZU9mZnNldCh0aWxlLT5pKCksIHRpbGUtPmooKSkgKyBj
bGFtcE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0
IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRo
KCkpOwotICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1w
aW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRl
eFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBS
ZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJl
Y3Qud2lkdGgoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4
VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAg
ICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAg
ICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGls
ZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zm
c2V0LnkoKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxl
WCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJh
Z21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAg
ICAgICAgICAvLyBPcGVuR0wgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAg
ICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhl
IHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRp
b24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xh
dGVZOwotICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIGVkZ2VYID0gY29udGVudFF1
YWQucmlnaHQoKTsKICAgICAgICAgICAgIGlmIChpIDwgKG1fdGlsZXItPm51bVRpbGVzWCgpIC0g
MSkpIHsKICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGls
ZVJlY3QueSgpKTsKQEAgLTMxNiwzNyArMjc5LDc2IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6
ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50
CiAgICAgICAgICAgICAgICAgZWRnZVguc2NhbGUoc2lnbik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAgIENDTGF5
ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRnZVksIGVkZ2VYLCBlZGdlWSk7Ci0K
LSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgotICAgICAgICAgICAgRmxv
YXRRdWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9hdFF1YWQo
KSk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAgICAgICAg
IHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID09
IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3Jt
IHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2hp
bGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAgICAgIC8v
IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24tbmVnYXRp
dmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdh
eSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5nIG91dHNp
ZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVu
dFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRU
ZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVu
dFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdt
ZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJh
Z21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkg
Kz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9y
bUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwg
ZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVy
dGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4
VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQotICAgICAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChnbG9iYWxUcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRo
KCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9p
bnRMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghbV90aWxlci0+dGlsZU9jY2x1ZGVkKGks
IGopKSB7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7Cisg
ICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1w
bGluZyBvdXRzaWRlIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0
aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAorICAgICAgICAgICAg
ICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcg
Y2xhbXAgcmVnaW9uCisgICAgICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNx
dWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgICAgICAgICAgICAgLy8g
YmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNo
YWRlcgorICAgICAgICAgICAgICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdl
LgorICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAv
IDIuMCAtIGVwc2lsb24pOworICAgICAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9IG1pbigwLjUs
IGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOworICAgICAgICAgICAgICAgIGNs
YW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKKyAgICAgICAgICAgICAgICBjbGFtcFJlY3QuaW5m
bGF0ZVkoLWNsYW1wWSk7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0g
Y2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5Z
Q29ybmVyKCk7CisKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRleE9mZnNldCA9IG1fdGls
ZXItPnRleHR1cmVPZmZzZXQodGlsZS0+aSgpLCB0aWxlLT5qKCkpICsgY2xhbXBPZmZzZXQgKyBG
bG9hdFNpemUoZGlzcGxheU9mZnNldCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRo
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAg
ICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVy
LT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE1hcCBjbGFtcGlu
ZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUuCisgICAgICAgICAgICAgICAgZmxvYXQgdmVydGV4
VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3QueCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAg
ICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8g
Y2xhbXBSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxl
WCA9IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgICAg
ICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1wUmVjdC5o
ZWlnaHQoKTsKKworICAgICAgICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUg
Y29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVY
ID0gdGV4T2Zmc2V0LngoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgICAgICBmbG9hdCBmcmFn
bWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGls
ZVdpZHRoOworICAgICAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBS
ZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsKKworICAgICAgICAgICAgICAgIC8vIE9wZW5HTCBj
b29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCisgICAgICAgICAgICAgICAgLy8gSWYgdGls
ZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRp
bmF0ZXMuCisgICAgICAgICAgICAgICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0aW9uID09IExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Cisg
ICAgICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgor
ICAgICAgICAgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRn
ZVksIGVkZ2VYLCBlZGdlWSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXAgcXVhZCB0byBsYXll
ciBzcGFjZS4KKyAgICAgICAgICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IHF1YWRUcmFuc2Zvcm0u
bWFwUXVhZChkZXZpY2VRdWFkLmZsb2F0UXVhZCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE5v
cm1hbGl6ZSB0byB0aWxlUmVjdC4KKyAgICAgICAgICAgICAgICBxdWFkLnNjYWxlKDEuMGYgLyB0
aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgICAg
ICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBz
aGFkZXIuIFdlIGNhbiBkbworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdoaWxlIHN0aWxs
IHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZQor
ICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdh
eSB0aGF0IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICAvLyBzYW1wbGluZyBv
dXRzaWRlIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9
IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkg
Kj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5z
bGF0ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRl
eFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZy
YWdtZW50VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxv
Y2F0aW9uKCksIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRl
eFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgICAgICBsYXllclJl
bmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2JhbFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVS
ZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCku
cG9pbnRMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHJldkVkZ2VY
ID0gZWRnZVg7CiAgICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaAppbmRleCBkZDFjMjkwODdlMjliNDQ2MzNmNzQ5ZGQ0YTRmZTQ1MDJm
MTdhZmZiLi43N2Y1MGU0ODY3YzA4ZDkwMDYxNjNlMzY0ZTVlNTg5MDY5ZGMyZDE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC00OCw2ICs0OCw5IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhck9jY2x1ZGVkQXJlYSgpIHsgbV90aWxl
ci0+Y2xlYXJPY2NsdWRlZEFyZWEoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRPY2NsdWRlZEFy
ZWEoY29uc3QgSW50UmVjdCYgYXJlYSkgeyBtX3RpbGVyLT5hZGRPY2NsdWRlZEFyZWEoYXJlYSk7
IH0KKwogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNEcmF3
ID0gc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gdGV4dHVyZU9yaWVudGF0aW9uKSB7IG1fdGV4dHVyZU9y
aWVudGF0aW9uID0gdGV4dHVyZU9yaWVudGF0aW9uOyB9CiAgICAgdm9pZCBzZXRTYW1wbGVkVGV4
ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRU
ZXhlbEZvcm1hdCkgeyBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1hdDsg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112872</attachid>
            <date>2011-10-28 08:57:59 -0700</date>
            <delta_ts>2011-11-07 11:18:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111028115757.patch</filename>
            <type>text/plain</type>
            <size>23363</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZGU4NTlkNTMxZTRjMTU5
MDEwMjQ5NzYwYTcwMDkzZTAxNWNiZTQ2Li5lOThmYTUzMTMxODZjYmM5YjQyZmNiMDBiNWZlYTIy
YjM0MTE3YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMTAtMjggIFcuIEph
bWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ3VsbCBvY2NsdWRlZCB0aWxlcyBpbiB0aWxlZCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTMzCisKKyAgICAgICAgQWxsb3dzIEND
VGlsZWRMYXllciB0byBjaGVjayBvcGFxdWVuZXNzIG9mIGxheWVycyB0aGF0IGRyYXcgYWZ0ZXIg
aXQgaW4gb3JkZXIKKyAgICAgICAgdG8gYXR0ZW1wdCBjdWxsaW5nIG9mIGNvbXBsZXRlbHkgb2Nj
bHVkZWQgdGlsZXMuIFdpbGwgdWx0aW1hdGVseSBhbHNvIGRldGVjdAorICAgICAgICBwYXJ0aWFs
bHkgb2NjbHVkZWQgdGlsZXMgYW5kIG9ubHkgZHJhdyB0aGUgcmVsZXZhbnQgc3ViLXJlZ2lvbgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gKFlldCEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJMaXN0VHJh
dmVyc2U6OkNDTGF5ZXJMaXN0VHJhdmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckxp
c3RUcmF2ZXJzZTo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckxpc3RUcmF2ZXJz
ZTo6ZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6aXNBeGlzQWxpZ25lZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wdXRlVGlsZVJlY3RzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3VGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaDoKKwogMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmVtb3ZlIHRob3NlIHVuLW5l
ZWRlZCBmaWxlcyBjb21taXR0ZWQgYnkgZXJyb3IgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCmluZGV4IDA1NzZhZDkyMzgzOTI2OGI4NTBjMDk0OGZlNDRiMjIwODczNGE2
ZWUuLjE4YThmYjlmMGY1NGM5ZDk1MzQ2ZDQ5N2IyMTAwZjNmNmM0ZDljOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUg
IlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIu
aCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUg
ImNjL0NDTWFpblRocmVhZFRhc2suaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFByb3h5LmgiCkBA
IC0zMzIsOSArMzMxLDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNP
bnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEKICAgICAgICAgICAgICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IEND
TGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxp
c3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVy
TGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAgICAgICAgICBDQ0xh
eWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAg
ICAgICBmb3IgKENDTGF5ZXJMaXN0OjppdGVyYXRvciBsYXllckl0ID0gbGF5ZXJMaXN0LmJlZ2lu
KCk7IGxheWVySXQgIT0gbGF5ZXJMaXN0LmVuZCgpOyArK2xheWVySXQpCisgICAgICAgICAgICAg
ICAgZHJhd0xheWVyKENDTGF5ZXJMaXN0VHJhdmVyc2UobGF5ZXJJdCwgbGF5ZXJMaXN0LmVuZCgp
KSwgcmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC01NjgsOCArNTY3LDkg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJT
dXJmYWNlKiB0YXJnZXRTdXJmYWNlKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcihjb25zdCBDQ0xheWVyTGlzdFRyYXZlcnNlJiBsYXllclRyYXZlcnNlLCBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UpCiB7CisgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJU
cmF2ZXJzZS5iZWdpbigpLT5nZXQoKTsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAm
JiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKICAgICAgICAgbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CiAg
ICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsK
QEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZQogICAgIGVsc2UKICAg
ICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAotICAgIGxheWVyLT5kcmF3KHRoaXMpOworICAgIGxh
eWVyLT5kcmF3KHRoaXMsIGxheWVyVHJhdmVyc2UpOwogCiAgICAgLy8gRHJhdyB0aGUgZGVidWcg
Ym9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KICAgICBsYXllci0+ZHJhd0RlYnVnQm9yZGVyKHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA2NDZlYTZlNWM0NDhhNThj
NjEyNDEzNDJiMGY5YTZlYWRkYWVmNDQ3Li44YTE0NGVlZGUzNDEwODZhM2E0NWIzYWI3ZDk2NGQ2
ODMwNmRlZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0ND
Q2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdp
bkxheWVySW1wbC5oIgpAQCAtNjQsNyArNjUsNiBAQCBjbGFzcyBHckNvbnRleHQ7CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7Ci1jbGFzcyBDQ0xheWVySW1w
bDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKQEAgLTE0OSw4ICsxNDksNiBAQCBwdWJsaWM6CiAKICAg
ICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwotCiAgICAgc3RhdGljIHZvaWQgdG9HTE1h
dHJpeChmbG9hdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9pZCBkcmF3
VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgRmxvYXRRdWFkJiwKQEAgLTE2Miw3ICsxNjAsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbnRv
UmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVy
SW1wbCosIENDUmVuZGVyU3VyZmFjZSopOworICAgIHZvaWQgZHJhd0xheWVyKGNvbnN0IENDTGF5
ZXJMaXN0VHJhdmVyc2UmLCBDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAgIE1hbmFnZWRUZXh0dXJl
KiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAgICB2b2lkIGNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKaW5kZXgg
MjI0MzYwN2EzMTMwMzgzMjg1ZjcwMzZkMDQ1YmVjNjllODRmNjJiNC4uMjg5ZmJkNzliYzI4YmVh
OGNmYmQ3YWVlNTA5MThjY2EyNjE2OGIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmNwcApAQCAtNDgsNyArNDgsNyBAQCBDQ0NhbnZhc0xheWVySW1wbDo6fkNDQ2FudmFzTGF5
ZXJJbXBsKCkKIHsKIH0KIAotdm9pZCBDQ0NhbnZhc0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgQ0NMYXllckxpc3RU
cmF2ZXJzZSYgbGF5ZXJUcmF2ZXJzZSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwogICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0g
bGF5ZXJSZW5kZXJlci0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaAppbmRleCAzODI2NzA4NmY0YjQzZTY1NzdjN2Q5YzcxNWRlOTg0ODY0M2VkYWY4
Li40N2QzMDViNDA0NDdmYjI1MTE0NDJkNDA2NzJjZjg3NmVjNzNjNTY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgdHlw
ZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdC
QVRleEZsaXBBbHBoYT4gUHJvZ3JhbTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IENDTGF5ZXJMaXN0VHJhdmVyc2UmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
dW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDJiMDVkOWZmMGQxN2UwMmJiNGVlN2Q4M2JiMGYzYjI0
ZmNiNzVjZjMuLjA5ZTAyOWIzMDFiYzczNDAwOGQwYmY5NzNhOTRkMGE1ZDU3OTU3MjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBib29sIENDTGF5ZXJJbXBs
OjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
Q0NMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKikKK3ZvaWQgQ0NMYXllcklt
cGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgQ0NMYXllckxpc3RUcmF2ZXJz
ZSYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApp
bmRleCAzOWM2ZjhlMTBiYTBmODc3YjkyYWZhMTMwZjQxMTg0MzRmYTVlY2E0Li5iZTlkNzAzNzE5
Yzc5YTY2NjljZDBjNmI0MzQ0YjY2ZGYyYzI2NjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAg
LTM5LDEwICszOSwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJJ
bXBsOwogY2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBM
YXllclJlbmRlcmVyQ2hyb21pdW07CiAKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1w
bD4gPiBDQ0xheWVyTGlzdDsKKworY2xhc3MgQ0NMYXllckxpc3RUcmF2ZXJzZSB7CitwdWJsaWM6
CisgICAgQ0NMYXllckxpc3RUcmF2ZXJzZShDQ0xheWVyTGlzdDo6aXRlcmF0b3IgYmVnaW4sIEND
TGF5ZXJMaXN0OjppdGVyYXRvciBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAg
ICAgLCBtX2VuZChlbmQpCisgICAgeworICAgIH0KKyAgICBDQ0xheWVyTGlzdDo6aXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgQ0NMYXllckxpc3Q6Oml0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9Citwcml2YXRlOgorICAgIENDTGF5ZXJM
aXN0OjppdGVyYXRvciBtX2JlZ2luOworICAgIENDTGF5ZXJMaXN0OjppdGVyYXRvciBtX2VuZDsK
K307CisKIGNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGlu
dCBpZCkKQEAgLTcwLDcgKzg3LDcgQEAgcHVibGljOgogICAgIGludCBkZWJ1Z0lEKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSosIGNvbnN0IENDTGF5ZXJMaXN0VHJhdmVyc2UmKTsKICAgICB2b2lkIHVucmVz
ZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAKaW5kZXggNmFmZTgwMTI0Yjc5N2QyMTYxNzRmN2Y4ZDQ5M2JkODc3ZWZmZWNjNC4u
YmMzZTY4OTY3MzM3ZjUwYjI2MDIwNDFiYmJiZTgwMDBlNWMwNjJhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtNjYsNyArNjYsNyBAQCBDQ1BsdWdpbkxheWVySW1w
bDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKIHsKIH0KIAotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6
ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lkIENDUGx1Z2lu
TGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29u
c3QgQ0NMYXllckxpc3RUcmF2ZXJzZSYgbGF5ZXJUcmF2ZXJzZSkKIHsKICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFBsdWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAppbmRleCA1NjBlMTc0N2NhMTU0ZDBmOTQ3
ZWJiMzE1YWJjNDgxOGYwZWM1NjU5Li40NmYyYmI1YzgzYTMwZjMxNTljYWJiYzdkY2ZkZGY1NWNj
YzRjOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKQEAgLTQzLDcgKzQzLDcg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKICAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFs
cGhhPiBQcm9ncmFtRmxpcDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSos
IGNvbnN0IENDTGF5ZXJMaXN0VHJhdmVyc2UmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAxMTU1YTRjYWQ1MzdjNmE2NmU2MzZmMDQwMjBi
ZmE5NmNmOTJiZDdkLi5jMGNmYzUxMTYxYmU1ZDFmZTkzNWIyMzU4MDdiN2FkMmI2NjY2N2NjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIFRy
YW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5zZm9ybSgpIGNv
bnN0CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpk
cmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NUaWxlZExh
eWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0
IENDTGF5ZXJMaXN0VHJhdmVyc2UmIGxheWVyVHJhdmVyc2UpCiB7CiAgICAgY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOwogCkBAIC0xNTEsMTkgKzE1MSwxOSBA
QCB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKQogICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0UkdCQToKICAgICAgICAgaWYgKHVzZUFBKSB7CiAgICAgICAgICAgICBjb25zdCBQcm9ncmFt
QUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1BQSgpOwotICAgICAgICAg
ICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRl
dmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFt
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24o
KSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2
aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0s
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpLCBsYXllclRyYXZlcnNl
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW0qIHByb2dyYW0g
PSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW0oKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhs
YXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRl
dmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKKyAg
ICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNm
b3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwg
cHJvZ3JhbSwgLTEsIC0xLCBsYXllclRyYXZlcnNlKTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE6
CiAgICAgICAgIGlmICh1c2VBQSkgewogICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVN3aXp6bGVB
QSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwotICAg
ICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zv
cm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBw
cm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAg
ICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9y
bSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHBy
b2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2Nh
dGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpLCBsYXllclRy
YXZlcnNlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6
emxlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAg
ICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zv
cm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBw
cm9ncmFtLCAtMSwgLTEpOworICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxh
eWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJR
dWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEsIGxheWVyVHJhdmVyc2UpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xOTMsOCArMTkzLDM2IEBA
IHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50IGosIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZUlkKQogICAgIHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQp
OwogfQogCisvLyBkYW5ha2oncyBjb2RlCisvLyBUZXN0IGlmIHRoZSB0cmFuc2xhdGlvbiBnaXZl
cyBhIHJlc3VsdCB0aGF0IGlzIGF4aXMtYWxpZ25lZC4KKy8vIFNjYWxlcyBhbmQgdHJhbnNsYXRp
b25zIGFyZSBhbGxvd2VkLCBidXQgYWxzbyByb3RhdGlvbnMgYnkgbXVsdGlwbGVzIG9mCisvLyBw
aS8yIGFsb25nIGFueSBheGlzLgorc3RhdGljIGJvb2wgaXNBeGlzQWxpZ25lZChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbSkKK3sKKyAgICAvLyBXZSBhbGxvdyBvbmx5IG9uZSBub24temVy
byBpbiB0aGUgdXBwZXIgM3gzIG1hdHJpeCwgYW5kIGNvcHkgdGhlIGxvZ2ljIGZyb20KKyAgICAv
LyBpc1NjYWxlT3JUcmFuc2xhdGlvbiBvdGhlcndpc2UuCisgICAgcmV0dXJuICgoIW0ubTExKCkg
JiYgIW0ubTIxKCkpIHx8ICghbS5tMTEoKSAmJiAhbS5tMzEoKSkgfHwgKCFtLm0yMSgpICYmICFt
Lm0zMSgpKSkKKyAgICAgICAgICAgJiYgKCghbS5tMTIoKSAmJiAhbS5tMjIoKSkgfHwgKCFtLm0x
MSgpICYmICFtLm0zMigpKSB8fCAoIW0ubTIxKCkgJiYgIW0ubTMyKCkpKQorICAgICAgICAgICAm
JiAoKCFtLm0xMygpICYmICFtLm0yMygpKSB8fCAoIW0ubTExKCkgJiYgIW0ubTMzKCkpIHx8ICgh
bS5tMjEoKSAmJiAhbS5tMzMoKSkpCisgICAgICAgICAgICYmICFtLm0xNCgpICYmICFtLm0yNCgp
ICYmICFtLm00MygpICYmIG0ubTQ0KCk7Cit9CisKKy8vIEZJWE1FOiBEZWxldGUgdGhpcyB3aGVu
IHdlIGNvbnZlcnQgdG8gRGFuYSdzIGNvZGUuCitzdGF0aWMgdm9pZCBDb21wdXRlVGlsZVJlY3Rz
VmlzaWJsZShWZWN0b3I8SW50UmVjdD4mIHRpbGVSZWN0cywgVmVjdG9yPEludFJlY3Q+JiBzdWJz
ZXF1ZW50UmVjdHMpCit7CisgICAgLy8gRG8gYSBzaW1wbGUgdGVzdCB3aGVyZSB3ZSBvbmx5IGRl
dGVjdCBpZiB0aGUgdGlsZSdzIHJlY3QgaXMgY29tcGxldGVseSBvY2NsdWRlZCBieSBhIHNpbmds
ZQorICAgIC8vIHN1YnNlcXVlbnQgbGF5ZXIuIERhbmEncyBjb2RlIHdpbGwgZXhwYW5kIG9uIHRo
aXMgYW5kIGRpY2UgdGhlIHRpbGUncyByZWN0IHVwCisgICAgLy8gYXMgaXQgY29uc2lkZXJzIHN1
YnNlcXVlbnQgbGF5ZXJzLCBwcm9kdWNpbmcgYSBsaXN0IG9mIHdoYXQgKGlmIGFueXRoaW5nKSBy
ZW1haW5zIHRvIGJlCisgICAgLy8gZHJhd24uCisgICAgZm9yIChWZWN0b3I8SW50UmVjdD46Oml0
ZXJhdG9yIGl0ID0gc3Vic2VxdWVudFJlY3RzLmJlZ2luKCk7IGl0ICE9IHN1YnNlcXVlbnRSZWN0
cy5lbmQoKTsgKytpdCkKKyAgICAgICAgaWYgKGl0LT5jb250YWlucyh0aWxlUmVjdHMuYXQoMCkp
KSB7CisgICAgICAgICAgICB0aWxlUmVjdHMuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorfQorCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgQ0NUaWxlZExheWVySW1w
bDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxU
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0sIGNv
bnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgY29udGVudFF1
YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5z
Zm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKQordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpk
cmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5z
Zm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3Qg
Q0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50UXVhZCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3Jt
TG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24sIGNvbnN0IENDTGF5ZXJMaXN0VHJhdmVyc2UmIGxh
eWVyVHJhdmVyc2UpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CkBAIC0yNjUsNiArMjkzLDM1IEBAIHZvaWQgQ0NUaWxlZExh
eWVySW1wbDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwg
Y29uc3QgSW50CiAKICAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9D
b250ZW50UmVjdCh0aWxlUmVjdCk7CiAKKyAgICAgICAgICAgIC8vIFdKTSAtIE5vdyB0aGF0IHdl
IGhhdmUgdGhlIHRpbGUgcmVjdCwgd2hpY2ggSSBhc3N1bWUgaXMgaW4gc3VyZmFjZSBjb29yZHMs
CisgICAgICAgICAgICAvLyBjb21wYXJlIGl0IGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgZHJh
dyBpbnRvIHRoaXMgc3VyZmFjZS4KKyAgICAgICAgICAgIENDTGF5ZXJMaXN0OjppdGVyYXRvciBp
dCA9IGxheWVyVHJhdmVyc2UuYmVnaW4oKTsKKyAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBpdGVy
YXRvciBzaG91bGQgaW5pdGlhbGx5IHJlZmVyZW5jZSB0aGlzIGxheWVyLCBzbyBpdCBzaG91bGQK
KyAgICAgICAgICAgIC8vIG5ldmVyIGJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICAg
ICAgICBBU1NFUlQoaXQgIT0gbGF5ZXJUcmF2ZXJzZS5lbmQoKSk7CisgICAgICAgICAgICBWZWN0
b3I8SW50UmVjdD4gdGlsZVJlY3RzVmlzaWJsZTsKKyAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBzdWJzZXF1ZW50UmVjdHM7CisKKyAgICAgICAgICAgIHRpbGVSZWN0c1Zpc2libGUuYXBwZW5k
KHRpbGVSZWN0KTsKKyAgICAgICAgICAgIGlmIChpc0F4aXNBbGlnbmVkKGl0LT5nZXQoKS0+ZHJh
d1RyYW5zZm9ybSgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoKytpdCAhPSBsYXllclRyYXZl
cnNlLmVuZCgpICYmICF0aWxlUmVjdHNWaXNpYmxlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBDQ0xheWVySW1wbCogc3Vic2VxdWVudExheWVyID0gaXQtPmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoc3Vic2VxdWVudExheWVyLT5vcGFjaXR5KCkgPj0gMC45OTk5Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3Vic2VxdWVudExheWVyLT5kcmF3T3BhY2l0
eSgpID49IDAuOTk5OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQXhpc0FsaWdu
ZWQoc3Vic2VxdWVudExheWVyLT5kcmF3VHJhbnNmb3JtKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdWJzZXF1ZW50UmVjdHMuYXBwZW5kKHN1YnNlcXVlbnRMYXllci0+ZHJhd2FibGVD
b250ZW50UmVjdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyB3aXRoIERhbmEncyBpbXByb3Zl
ZCB2ZXJzaW9uLgorICAgICAgICAgICAgQ29tcHV0ZVRpbGVSZWN0c1Zpc2libGUodGlsZVJlY3Rz
VmlzaWJsZSwgc3Vic2VxdWVudFJlY3RzKTsKKworICAgICAgICAgICAgaWYgKHRpbGVSZWN0c1Zp
c2libGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBuZXh0
IGxpbmUgYmVmb3JlIGxhbmRpbmcgcGF0Y2guCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJ3am0gTGF5ZXIoJXAsICVkLCAlZCkgaXMgY29tcGxldGVseSBvY2NsdWRlZCwgbm8gbmVl
ZCB0byBkcmF3IVxuIiwgdGhpcywgaSwgaik7CisgICAgICAgICAgICAgICAgY29udGludWU7IC8v
IFdKTSAtIHZlcmlmeSB0aGlzIGp1bXBzIG91dCBvZiB0aGUgZm9yIGxvb3Agd2l0aCBubyBpbGwg
ZWZmZWN0IC4uLgorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBGbG9hdFJlY3QgY2xhbXBS
ZWN0KHRpbGVSZWN0KTsKICAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMg
dG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKICAgICAgICAgICAgIC8vIGJ5IGRl
ZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbApAQCAt
MzQxLDEyICszOTgsMjAgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGlsZXMoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnQKICAgICAgICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb24sIGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZnJhZ21lbnRUZXhUcmFuc2xhdGVZLCBmcmFn
bWVudFRleFNjYWxlWCwgZnJhZ21lbnRUZXhTY2FsZVkpKTsKIAogICAgICAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52ZXJ0ZXhU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOwotCi0gICAgICAgICAg
ICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2JhbFRyYW5zZm9ybSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwg
dGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1YWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0
aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExv
Y2F0aW9uKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJSZWN0SW5kZXggPSAwOyBz
dWJSZWN0SW5kZXggPCB0aWxlUmVjdHNWaXNpYmxlLnNpemUoKTsgKytzdWJSZWN0SW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBvbmx5IHdvcmtzIGF0IHByZXNlbnQgYmVj
YXVzZSB3ZSBrbm93IHRpbGVSZWN0c1Zpc2libGUgY29udGFpbnMgYXQgbW9zdAorICAgICAgICAg
ICAgICAgIC8vIG9uZSBmdWxsLXNpemVkIHRpbGUuIFdoZW4gd2UgbmVlZCB0byBwcm9jZXNzIGEg
bGlzdCBvZiBzdWItcmVjdHMsIHRoZW4gd2UgbmVlZAorICAgICAgICAgICAgICAgIC8vIGEgd2F5
IHRvIGRyYXcgYSBwYXJ0aWFsIHRpbGUuIE5vdCBzdXJlIGlmIHRoaXMgaXMgYmVzdCBkb25lIHRo
cm91Z2ggYSBuZXcKKyAgICAgICAgICAgICAgICAvLyBzaGFkZXIgKHNpbmNlIHRoZSBkcmF3IGdl
b21ldHJ5IGlzIGZpeGVkKSBvciB3aGF0LgorCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFk
ZCBjb2RlIHRvIGRyYXcgc3VicmVnaW9ucyBvZiBhIHRleHR1cmUgaGVyZS4KKworICAgICAgICAg
ICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZ2xvYmFsVHJhbnNmb3JtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qu
d2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1YWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCkpOworICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBwcmV2RWRnZVggPSBlZGdlWDsKICAgICAgICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IGRkMWMyOTA4N2UyOWI0NDYzM2Y3
NDlkZDRhNGZlNDUwMmYxN2FmZmIuLmJjODIyMjBhOTBiNDliOWJkOTZiMzBiZThmMDhkNWY2NTIz
MmJkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTQzLDcgKzQzLDcgQEAg
cHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1RpbGVkTGF5ZXJJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBDQ0xheWVyTGlzdFRyYXZlcnNl
Jik7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAKICAg
ICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAg
IHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNl
VHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1
YWQmIGNvbnRlbnRRdWFkLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7CisgICAgdm9pZCBk
cmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0sIGNvbnN0IENDTGF5ZXJRdWFkJiBk
ZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgY29udGVudFF1YWQsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQg
ZWRnZUxvY2F0aW9uLCBjb25zdCBDQ0xheWVyTGlzdFRyYXZlcnNlJiBsYXllclRyYXZlcnNlKTsK
IAogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50
YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
Y3BwCmluZGV4IDE3NDM2OGVhNzI4NDNhNmUxNjNkMjNkZDBmYTYyNjBmZTBmMzNhYmQuLmZiNDYx
YmU1ZTlkMjRhN2ZmZjE3OWE2ZTRiOTNiYmU1NDZjZDgwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6
c2V0VGV4dHVyZShzaXplX3QgaW5kZXgsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25z
CiAgICAgbV90ZXh0dXJlc1tpbmRleF0udmlzaWJsZVNpemUgPSB2aXNpYmxlU2l6ZTsKIH0KIAot
dm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IENDTGF5ZXJMaXN0VHJhdmVyc2UmIGxheWVyVHJhdmVy
c2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5oCmluZGV4IGU2YTU0NGQ4ZjU4NmQzODIzYWNkYzNjZTU2MzVlNDM4
NzA0MGM5MTIuLjAxOTIxNjFkNDRhYWFhMTNkMTlmNGJhMWUyOGEzZjI4OTliNDBiMzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFn
bWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJHQkFQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJv
Z3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZ
VVZWaWRlbz4gWVVWUHJvZ3JhbTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSosIGNvbnN0IENDTGF5ZXJMaXN0VHJhdmVyc2UmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1w
TGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113897</attachid>
            <date>2011-11-07 11:18:09 -0800</date>
            <delta_ts>2011-11-08 10:08:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111107141807.patch</filename>
            <type>text/plain</type>
            <size>38975</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk0MDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZmRlOTNkZjY4YzBlMzk5
N2ZmZjUwN2IxZmJkNzc2Y2UwNGY4MjhjLi42MmY0Y2I0MDgyYWJjNmIxNmIzNTZkOTdjYzZkNzI5
MTNjMmNhNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMTEtMDcgIFcuIEph
bWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ3VsbCBvY2NsdWRlZCB0aWxlcyBpbiB0aWxlZCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTMzCisKKyAgICAgICAgQWRkIHRpbGUg
Y3VsbGVyIHRvIHJlZHVjZSBvdmVyZHJhdyBpbiBDaHJvbWl1bSBDb21wb3NpdG9yLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
KE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OmlzVGlsZWRMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaWxlQ3VsbGVyRnVuY3Rvcjo6aXNBeGlzQWxpZ25lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RpbGVDdWxsZXJGdW5jdG9yOjpkcmF3c09wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RpbGVDdWxsZXJGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZUN1bGxlckltcGw6OmNyZWF0ZURyYXdUaWxlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVDdWxsZXJJbXBsOjpyZXNldEN1cnJlbnREcmF3VGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RpbGVDdWxsZXJJbXBsOjpuZXh0VGlsZVRvRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVDdWxsZXJJbXBsOjphZHZhbmNlTmV4dFRpbGVUb0RyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZUN1bGxlckltcGwuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZUN1bGxlckltcGw6OkNDVGlsZUN1
bGxlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlQ3VsbGVySW1wbDo6ZHJhd1RpbGVM
aXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXdhYmxl
VGlsZVRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3
YWJsZVRpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjppc1RpbGVkTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6aXNUaWxlckVtcHR5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKwogMjAxMS0xMS0w
NyAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGF1dG9jb21wbGV0ZSBjb21ib2JveCBmb3IgU3R5bGVzIHNpZGViYXIgYW5k
IENvbnNvbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmEwY2UyNjAyMzEzYjQ4MDhkNGI1YjZhNDEz
MGE2OTY2MDY1OTkyMS4uYjE0YWEyNzQxZTI2YWEyNWMwOGEyNmE2MmZjYmQwYzFkMjhlNGNjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU4Miw2ICszNTgyLDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVySW1w
bC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZUN1bGxlckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1lU291cmNlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZGYyNTQzNTZiZGJkNjFmODJkOTIxZThlOWMwZGNlZWM5
YWE1ZThhMi4uNTczNmQwZGYxMTQ5NWIzODEwMTg3NjY2NDQ5MzAzMTA5NTdlYzE3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NNYWluVGhy
ZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9D
Q1RpbGVDdWxsZXJJbXBsLmgiCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
LmgiCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCkBAIC0zMzMsOCArMzM0LDE2IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJ
bXBsKiByb290RHJhd0xhCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IENDTGF5
ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKworICAgICAg
ICAgICAgQ0NUaWxlQ3VsbGVyRnVuY3RvciBmdW5jOworICAgICAgICAgICAgQ0NUaWxlQ3VsbGVy
SW1wbCB0aWxlQ3VsbGVyKGZ1bmMpOworICAgICAgICAgICAgdGlsZUN1bGxlci5jcmVhdGVEcmF3
VGlsZUxpc3QobGF5ZXJMaXN0LCByZW5kZXJTdXJmYWNlLCB3aW5kb3dNYXRyaXgoKSAqIHByb2pl
Y3Rpb25NYXRyaXgoKSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9
IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAg
ICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3Vy
ZmFjZSk7CisgICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5n
ZXQoKSwgcmVuZGVyU3VyZmFjZSwgdGlsZUN1bGxlcik7CisKKyAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB3ZSBkcmV3IGFsbCB0aGUgdGlsZXMgd2UgcHV0IGluIHRoZSBsaXN0LgorICAgICAgICAg
ICAgQVNTRVJUKCF0aWxlQ3VsbGVyLm5leHRUaWxlVG9EcmF3KCkpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtNTY4LDcgKzU3Nyw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VS
ZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UsIENDVGlsZUN1bGxlckltcGwmIHRpbGVDdWxsZXIpCiB7CiAg
ICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAh
PSB0YXJnZXRTdXJmYWNlKSB7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXco
dGhpcywgbGF5ZXItPmdldERyYXdSZWN0KCkpOwpAQCAtNTkxLDcgKzYwMCw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRl
clN1cmZhY2UqIHRhcmdlCiAgICAgaWYgKG9wYXF1ZSkKICAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogCi0g
ICAgbGF5ZXItPmRyYXcodGhpcyk7CisgICAgbGF5ZXItPmRyYXcodGhpcywgdGlsZUN1bGxlcik7
CiAKICAgICBpZiAob3BhcXVlKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggNjQ2ZWE2ZTVjNDQ4YTU4YzYxMjQxMzQyYjBmOWE2ZWFkZGFl
ZjQ0Ny4uZGQxYjY0MDZiNjRhY2IyNTdiYWYzNGUxNjkzMzg3NDY5N2NjMzE3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJW
aWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKQEAgLTY2
LDYgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsK
IGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIEND
VGlsZUN1bGxlcjsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAtMTQ5LDggKzE1MSw2IEBA
IHB1YmxpYzoKIAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CiAKLSAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7Ci0KICAgICBzdGF0
aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsK
ICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxh
eWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLApAQCAtMTYyLDcgKzE2Miw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogICAgIHZvaWQg
ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwg
Y29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgZHJh
d0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgdm9pZCBkcmF3TGF5
ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqLCBDQ1RpbGVDdWxsZXJJbXBsJik7CiAK
ICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9p
ZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwCmluZGV4IDIyNDM2MDdhMzEzMDM4MzI4NWY3MDM2ZDA0NWJlYzY5ZTg0ZjYy
YjQuLmNhNmZjMWY5MjZkZDVhZjA0MDk1Nzg3N2MxMjAzODFjMWQ2MjAzMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgQ0NDYW52YXNMYXll
ckltcGw6On5DQ0NhbnZhc0xheWVySW1wbCgpCiB7CiB9CiAKLXZvaWQgQ0NDYW52YXNMYXllcklt
cGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ0Nh
bnZhc0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IENDVGlsZUN1bGxlckltcGwmKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXll
clJlbmRlcmVyLT5jYW52YXNMYXllclByb2dyYW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVy
SW1wbC5oCmluZGV4IDM4MjY3MDg2ZjRiNDNlNjU3N2M3ZDljNzE1ZGU5ODQ4NjQzZWRhZjguLjgy
Y2UzMmVjYWJhMjVmODgwMDE1YTllYjY2ODBkOTgyM2E2NzcwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4
RmxpcEFscGhhPiBQcm9ncmFtOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiwgQ0NUaWxlQ3VsbGVySW1wbCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAKaW5kZXggZjVhNWExZDFhN2QwODUxOGUzMjljNjhmNGMyOGQyOWY3ODI4ZjMwZi4uZjIw
NWFlYmRkMTcyYTgzMmU0MjNkNjI3YWEwMWExMTBiYTA1NWUyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRE
cmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6
ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKQordm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qLCBDQ1RpbGVDdWxsZXJJbXBsJikKIHsKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDJiODg0MzlkNGZmMDMxYWM1
MTE2MWI0ZTA3MWNmY2MxNmNkMjRmZjIuLmY4Njg2MTFkYTdmMzg1ZDVjMmZkZTM1MTdlNDIzYmU3
ODIyN2Q0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDAsOSArNDAsMTIgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllclNvcnRlcjsKK2NsYXNzIENDVGlsZUN1bGxl
ckltcGw7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
OwogCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CisK
IGNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkK
QEAgLTcwLDcgKzczLDcgQEAgcHVibGljOgogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1
cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIENDVGlsZUN1bGxlckltcGwmKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4
dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOwogCkBAIC0xODMsNiArMTg2LDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2Vk
OyB9CiAgICAgdm9pZCByZXNldExheWVyUHJvcGVydHlDaGFuZ2VkKCkgeyBtX2xheWVyUHJvcGVy
dHlDaGFuZ2VkID0gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBpc1RpbGVkTGF5ZXIoKSB7
IHJldHVybiBmYWxzZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwo
aW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmluZGV4IDZhZmU4MDEy
NGI3OTdkMjE2MTc0ZjdmOGQ0OTNiZDg3N2VmZmVjYzQuLmFjMGI0NTQ0MWI3OWZkMmFiY2I1NmY2
NGYwN2M3YjZhZDc2YzA3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAK
QEAgLTY2LDcgKzY2LDcgQEAgQ0NQbHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgp
CiB7CiB9CiAKLXZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIENDVGlsZUN1bGxlckltcGwmKQogewogICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUGx1Z2luUHJvZ3JhbUJpbmRp
bmcgYmluZGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4IDU2MGUxNzQ3
Y2ExNTRkMGY5NDdlYmIzMTVhYmM0ODE4ZjBlYzU2NTkuLjkwMTU4YTgyMDc3ZThiZDRlMWE5ZmNj
OGVkNTUxYjJhYmY2YzE0ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAt
NDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhT
aGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwogICAgIHR5
cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJH
QkFUZXhGbGlwQWxwaGE+IFByb2dyYW1GbGlwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiwgQ0NUaWxlQ3VsbGVySW1wbCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBM
YXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVD
dWxsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZUN1bGxlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3M2Q4ZDcyMTgxOWM0MzI3MWI0
NTgzYTA4NzFkMWQ3NzNhYmNkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVDdWxsZXJJbXBsLmNwcApAQCAtMCww
ICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDVGlsZUN1bGxlckltcGwuaCIKKwor
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDQ1RpbGVDdWxs
ZXJGdW5jdG9yOjppc0F4aXNBbGlnbmVkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQor
eworICAgIC8vIFdlIGFsbG93IG9ubHkgb25lIG5vbi16ZXJvIGluIHRoZSB1cHBlciAzeDMgbWF0
cml4LCBhbmQgY29weSB0aGUgbG9naWMgZnJvbQorICAgIC8vIGlzU2NhbGVPclRyYW5zbGF0aW9u
IG90aGVyd2lzZS4KKyAgICByZXR1cm4gKCghbS5tMTEoKSAmJiAhbS5tMjEoKSkgfHwgKCFtLm0x
MSgpICYmICFtLm0zMSgpKSB8fCAoIW0ubTIxKCkgJiYgIW0ubTMxKCkpKQorICAgICAgICAgICAm
JiAoKCFtLm0xMigpICYmICFtLm0yMigpKSB8fCAoIW0ubTExKCkgJiYgIW0ubTMyKCkpIHx8ICgh
bS5tMjEoKSAmJiAhbS5tMzIoKSkpCisgICAgICAgICAgICYmICgoIW0ubTEzKCkgJiYgIW0ubTIz
KCkpIHx8ICghbS5tMTEoKSAmJiAhbS5tMzMoKSkgfHwgKCFtLm0yMSgpICYmICFtLm0zMygpKSkK
KyAgICAgICAgICAgJiYgIW0ubTE0KCkgJiYgIW0ubTI0KCkgJiYgIW0ubTQzKCkgJiYgbS5tNDQo
KTsKK30KKworYm9vbCBDQ1RpbGVDdWxsZXJGdW5jdG9yOjpkcmF3c09wYXF1ZShjb25zdCBDQ0xh
eWVySW1wbCogbGF5ZXIpCit7CisgICAgLy8gRklYTUU6IFRoaXMgd2lsbCB3b3JrIGJldHRlciBh
ZnRlciBEYW5hJ3Mgb3BhcXVlIGZsYWcgY29kZSBsYW5kcy4KKyAgICByZXR1cm4gbGF5ZXItPm9w
YXF1ZSgpICYmIGxheWVyLT5vcGFjaXR5KCkgPj0gMC45OTk5ICYmIGxheWVyLT5kcmF3T3BhY2l0
eSgpID49IDAuOTk5OTsKK30KKworLy8gVGhpcyBzaW1wbGUgY3VsbGluZyBjaGVjayByZWplY3Rz
IGEgdGlsZSBvbmx5IGlmIGF0IGxlYXN0IG9uZSBzdWJzZXF1ZW50IG9wYXF1ZSBsYXllcgorLy8g
Y29tcGxldGVseSBvY2NsdWRlcyB0aGUgdGlsZS4gQmV0dGVyIGNoZWNrIGZ1bmN0b3JzIHdpbGwg
cmVqZWN0IGEgdGlsZSBpZiB0aGUKKy8vIHRpbGUgaXMgY29tcGxldGVseSBjb3ZlcmVkIGJ5IGFu
eSBjb21iaW5hdGlvbiBvZiBzdWJzZXF1ZW50IG9wYXF1ZSBsYXllcnMuCitib29sIENDVGlsZUN1
bGxlckZ1bmN0b3I6Om9wZXJhdG9yKCkoY29uc3QgSW50UmVjdCYgcmVjdCwgQ0NMYXllckxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQsIENDTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQp
Cit7CisgICAgQVNTRVJUKGN1cnJlbnQgIT0gZW5kKTsKKyAgICArK2N1cnJlbnQ7IC8vIE9ubHkg
d2FudCB0byBjb21wYXJlIHdpdGggc3Vic2VxdWVudCBsYXllcnMuCisKKyAgICBmb3IgKDsgY3Vy
cmVudCAhPSBlbmQ7ICsrY3VycmVudCkgeworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBj
dXJyZW50LT5nZXQoKTsKKyAgICAgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+ZHJhd2Fi
bGVDb250ZW50UmVjdCgpOworICAgICAgICBpZiAobGF5ZXJSZWN0LmNvbnRhaW5zKHJlY3QpICYm
IGRyYXdzT3BhcXVlKGxheWVyKSAmJiBpc0F4aXNBbGlnbmVkKGxheWVyLT5kcmF3VHJhbnNmb3Jt
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIENDVGlsZUN1bGxlckltcGw6OmNyZWF0ZURyYXdUaWxlTGlzdChjb25zdCBD
Q0xheWVyTGlzdCYgbGF5ZXJMaXN0LCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcmVmaXhNYXRyaXgpCit7CisgICAgZm9yIChDQ0xh
eWVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckxpc3QuYmVnaW4oKTsgaXQgIT0gbGF5
ZXJMaXN0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGl0LT5n
ZXQoKTsKKyAgICAgICAgaWYgKGxheWVyLT5pc1RpbGVkTGF5ZXIoKSkgeworICAgICAgICAgICAg
aWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSB0
YXJnZXRTdXJmYWNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBD
Q1RpbGVkTGF5ZXJJbXBsKiB0aWxlZExheWVyID0gc3RhdGljX2Nhc3Q8Q0NUaWxlZExheWVySW1w
bCo+KGl0LT5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGFy
ZSByZXBsaWNhdGVkIGZyb20gQ0NUaWxlZExheWVySW1wbDo6ZHJhdy9kcmF3VGlsZXMsCisgICAg
ICAgICAgICAvLyBjYW4gd2UgcmVmYWN0b3IgdG8gbWFrZSB0aGlzIGF2YWlsYWJsZSBhcyBhIGZ1
bmN0aW9uIHRvIGF2b2lkIHRoZSBjb2RlIGZyb20gCisgICAgICAgICAgICAvLyBnZXR0aW5nIG91
dCBvZiBzeW5jPworICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHNvIHNldCB0aGUg
bGF5ZXIncyB2aXNpYmxlIHJlY3QgYXQgdGhpcyBzdGFnZT8KKyAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QgY29udGVudFJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3Q8Q0NMYXllckltcGw+KGxheWVyKTsKKworICAgICAgICAgICAgaWYgKHRpbGVk
TGF5ZXItPm1fc2tpcHNEcmF3IHx8IHRpbGVkTGF5ZXItPmlzVGlsZXJFbXB0eSgpIHx8IGNvbnRl
bnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlTWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKHByZWZpeE1hdHJpeCAqIHRpbGVkTGF5ZXItPnRpbGluZ1RyYW5zZm9ybSgpKS50bzJkVHJh
bnNmb3JtKCkpOworICAgICAgICAgICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxlKCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbnN0IEludFJlY3Qg
bGF5ZXJSZWN0ID0gdGlsZWRMYXllci0+bV90aWxlci0+Y29udGVudFJlY3RUb0xheWVyUmVjdChj
b250ZW50UmVjdCk7CisgICAgICAgICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwor
ICAgICAgICAgICAgdGlsZWRMYXllci0+bV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgICAgICAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBE
cmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlZExheWVyLT50aWxlQXQoaSwgaik7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlZExheWVyLT5kcmF3YWJsZVRpbGVUZXh0dXJl
SWQodGlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludCB0aWxlSW5kaWNlcyA9IHRpbGVkTGF5ZXItPmRyYXdhYmxlVGls
ZUluZGljZXModGlsZSk7CisKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IHRpbGVkTGF5ZXItPm1fdGlsZXItPnRpbGVCb3VuZHModGlsZUluZGljZXMueCgpLCB0aWxlSW5k
aWNlcy55KCkpOworICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJS
ZWN0KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgdGls
ZVJlY3QgPSB0aWxlZExheWVyLT5tX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGVS
ZWN0KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaWYgdGhlIGN1cnJlbnQgbGF5
ZXIgaXMgbm9uLW9wYXF1ZSwgZG9lcyBpdCBldmVyIGdldCBjb25zaWRlcmVkIGZvciBjdWxsaW5n
PworICAgICAgICAgICAgICAgICAgICBpZiAobV9jdWxsZXIodGlsZVJlY3QsIGl0LCBsYXllckxp
c3QuZW5kKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9kcmF3VGlsZUxpc3QuYXBwZW5k
KHRpbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9Cisg
ICAgfQorICAgIHJlc2V0Q3VycmVudERyYXdUaWxlKCk7Cit9CisKK3ZvaWQgQ0NUaWxlQ3VsbGVy
SW1wbDo6cmVzZXRDdXJyZW50RHJhd1RpbGUoKQoreworICAgIG1fbmV4dFRpbGVUb0RyYXcgPSBt
X2RyYXdUaWxlTGlzdC5iZWdpbigpOworfQorCitEcmF3YWJsZVRpbGUqIENDVGlsZUN1bGxlcklt
cGw6Om5leHRUaWxlVG9EcmF3KCkKK3sKKyAgICByZXR1cm4gbV9uZXh0VGlsZVRvRHJhdyAhPSBt
X2RyYXdUaWxlTGlzdC5lbmQoKSA/ICptX25leHRUaWxlVG9EcmF3IDogMDsKK30KKwordm9pZCBD
Q1RpbGVDdWxsZXJJbXBsOjphZHZhbmNlTmV4dFRpbGVUb0RyYXcoKQoreworICAgIEFTU0VSVCht
X25leHRUaWxlVG9EcmF3ICE9IG1fZHJhd1RpbGVMaXN0LmVuZCgpKTsKKyAgICArK21fbmV4dFRp
bGVUb0RyYXc7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZUN1bGxlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZUN1bGxlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMDc1Y2QzZDQ2YTEx
YWMyYmI5M2M3N2FhYzRmYjg2MWNiYTk4MzZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVySW1wbC5oCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGlsZUN1bGxlckltcGxfaAorI2RlZmlu
ZSBDQ1RpbGVDdWxsZXJJbXBsX2gKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworCitjbGFzcyBDQ1RpbGVDdWxsZXJGdW5jdG9yIHsK
K3B1YmxpYzoKKyAgICBib29sIGlzQXhpc0FsaWduZWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmKTsKKyAgICBib29sIGRyYXdzT3BhcXVlKGNvbnN0IENDTGF5ZXJJbXBsKik7CisKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbnRSZWN0JiwgQ0NMYXllckxpc3Q6OmNvbnN0
X2l0ZXJhdG9yLCBDQ0xheWVyTGlzdDo6Y29uc3RfaXRlcmF0b3IpOworfTsKKworY2xhc3MgQ0NU
aWxlQ3VsbGVySW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NUaWxlQ3VsbGVySW1wbChD
Q1RpbGVDdWxsZXJGdW5jdG9yIGN1bGxlcikKKyAgICAgICAgICAgICAgICA6IG1fY3VsbGVyKGN1
bGxlcikKKyAgICAgICAgICAgICAgICAsIG1fbmV4dFRpbGVUb0RyYXcobV9kcmF3VGlsZUxpc3Qu
ZW5kKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KKworICAgIHR5cGVk
ZWYgVmVjdG9yPERyYXdhYmxlVGlsZSo+IENDRHJhd2FibGVUaWxlTGlzdDsKKworICAgIHZvaWQg
Y3JlYXRlRHJhd1RpbGVMaXN0KGNvbnN0IENDTGF5ZXJMaXN0JiwgQ0NSZW5kZXJTdXJmYWNlKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKworICAgIENDRHJhd2FibGVUaWxlTGlzdCYg
ZHJhd1RpbGVMaXN0KCkgeyByZXR1cm4gbV9kcmF3VGlsZUxpc3Q7IH0KKworICAgIHZvaWQgcmVz
ZXRDdXJyZW50RHJhd1RpbGUoKTsKKyAgICBEcmF3YWJsZVRpbGUqIG5leHRUaWxlVG9EcmF3KCk7
CisgICAgdm9pZCBhZHZhbmNlTmV4dFRpbGVUb0RyYXcoKTsKKworcHJpdmF0ZToKKyAgICBDQ1Rp
bGVDdWxsZXJGdW5jdG9yIG1fY3VsbGVyOworICAgIENDRHJhd2FibGVUaWxlTGlzdCBtX2RyYXdU
aWxlTGlzdDsKKyAgICBDQ0RyYXdhYmxlVGlsZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1fbmV4dFRp
bGVUb0RyYXc7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ1RpbGVkQ3VsbGVySW1wbF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGYzMDEzMWZhNGJmOTY3Y2RlNjEzM2Zl
OGNiOWNhNzdmYTNmNTg2ZjkuLjJhNGU2MzJlMGY5MzVmOWFiYzI4MTI4NjBkOGYxNzQxNDQ5YjA2
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiY2MvQ0NUaWxl
ZExheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZUN1bGxlckltcGwuaCIKIAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJRdWFkLmgi
CkBAIC05Miw2ICs5MywxOCBAQCBEcmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckltcGw6OmNyZWF0
ZVRpbGUoaW50IGksIGludCBqKQogICAgIHJldHVybiB0aWxlLmdldCgpOwogfQogCitQbGF0Zm9y
bTNET2JqZWN0IENDVGlsZWRMYXllckltcGw6OmRyYXdhYmxlVGlsZVRleHR1cmVJZChEcmF3YWJs
ZVRpbGUqIHRpbGUpCit7CisgICAgQVNTRVJUKHRpbGUpOworICAgIHJldHVybiB0aWxlLT50ZXh0
dXJlSWQoKTsKK30KKworSW50UG9pbnQgQ0NUaWxlZExheWVySW1wbDo6ZHJhd2FibGVUaWxlSW5k
aWNlcyhEcmF3YWJsZVRpbGUqIHRpbGUpCit7CisgICAgQVNTRVJUKHRpbGUpOworICAgIHJldHVy
biBJbnRQb2ludCh0aWxlLT5pKCksIHRpbGUtPmooKSk7Cit9CisKIFRyYW5zZm9ybWF0aW9uTWF0
cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwpAQCAtMTA3LDcg
KzEyMCw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1Ry
YW5zZm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3Zv
aWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIsIENDVGlsZUN1bGxlckltcGwmIHRpbGVDdWxsZXIpCiB7CiAgICAgY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOwogCkBAIC0xNDgsMTkgKzE2MSwxOSBA
QCB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKQogICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0UkdCQToKICAgICAgICAgaWYgKHVzZUFBKSB7CiAgICAgICAgICAgICBjb25zdCBQcm9ncmFt
QUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1BQSgpOwotICAgICAgICAg
ICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRl
dmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFt
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24o
KSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2
aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0s
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpLCB0aWxlQ3VsbGVyKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW0qIHByb2dyYW0gPSBs
YXllclJlbmRlcmVyLT50aWxlclByb2dyYW0oKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhsYXll
clJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmlj
ZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKKyAgICAg
ICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3Jt
LCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJv
Z3JhbSwgLTEsIC0xLCB0aWxlQ3VsbGVyKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE6CiAgICAg
ICAgIGlmICh1c2VBQSkgewogICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVN3aXp6bGVBQSogcHJv
Z3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwotICAgICAgICAg
ICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRl
dmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFt
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24o
KSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2
aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0s
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpLCB0aWxlQ3VsbGVyKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6emxlKiBwcm9n
cmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgICAgICAgICAg
ZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmlj
ZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAt
MSwgLTEpOworICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwg
bGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3
T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEsIHRpbGVDdWxsZXIpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xOTEsNyArMjA0LDcgQEAgdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpzeW5jVGV4dHVyZUlkKGludCBpLCBpbnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlSWQpCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBs
OjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRy
YW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29u
c3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50UXVh
ZCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNm
b3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pCit2b2lkIENDVGlsZWRMYXllckltcGw6OmRy
YXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNm
b3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBD
Q0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmIGNvbnRlbnRRdWFkLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1M
b2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbiwgQ0NUaWxlQ3VsbGVySW1wbCYgdGlsZUN1bGxlcikK
IHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKQEAgLTI1OCw0MyArMjcxLDYgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3
VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnQKIAog
ICAgICAgICAgICAgdGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRp
bGVSZWN0KTsKIAotICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7Ci0g
ICAgICAgICAgICAvLyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5n
IG91dHNpZGUgdGhlIGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRpbGUg
cmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAgICAgICAgIC8vIG1pbnVz
IGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9u
Ci0gICAgICAgICAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5IHRoZSB2ZXJ0
ZXggc2hhZGVyIGFuZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0
ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICAgIC8v
IGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAgICAgICAgY29uc3QgZmxv
YXQgZXBzaWxvbiA9IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBYID0gbWlu
KDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAgICAgICAgIGZs
b2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24p
OwotICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOwotICAgICAgICAgICAg
Y2xhbXBSZWN0LmluZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1w
T2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3Qp
Lm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4T2Zmc2V0ID0g
bV90aWxlci0+dGV4dHVyZU9mZnNldChpLCBqKSArIGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRp
c3BsYXlPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0
aWxlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1
YXJlLgotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3Qu
eCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAg
ICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0Lndp
ZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWln
aHQoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gTWFwIHRvIG5vcm1h
bGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4
VHJhbnNsYXRlWCA9IHRleE9mZnNldC54KCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9h
dCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKLSAg
ICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBSZWN0LndpZHRoKCkgLyB0
aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVj
dC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7Ci0KLSAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGlu
YXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCi0gICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUg
aXMgdG9wLWRvd24sIHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAg
ICAgICAgICAgIGlmIChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRleHR1cmVVcGRhdGVy
OjpUb3BEb3duT3JpZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5z
bGF0ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICAgICAgZnJh
Z21lbnRUZXhTY2FsZVkgKj0gLTEuMDsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgQ0NM
YXllclF1YWQ6OkVkZ2UgZWRnZVggPSBjb250ZW50UXVhZC5yaWdodCgpOwogICAgICAgICAgICAg
aWYgKGkgPCAobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgewogICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwpAQCAtMzE4LDMxICsy
OTQsNzIgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnQKICAgICAgICAgICAgIC8vIE5vcm1hbGl6
ZSB0byB0aWxlUmVjdC4KICAgICAgICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0Lndp
ZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIGlmIChmcmFn
bWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92
ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwot
ICAgICAgICAgICAgICAgIC8vIHRoaXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVz
dWx0cyBhcwotICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24g
c2hvdWxkIGFsd2F5cyBiZSBub24tbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRp
bGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAg
ICAgICAgICAgIC8vIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAg
IHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2
ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVy
dGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2
ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAg
IHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAg
ICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0
ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4
U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYo
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVy
dGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2
ZXJ0ZXhUZXhTY2FsZVkpKTsKLQotICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS0+dGV4dHVy
ZUlkKCkpIHsKKyAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUtPnRleHR1cmVJZCgpICYmIHRp
bGVDdWxsZXIubmV4dFRpbGVUb0RyYXcoKSA9PSB0aWxlKSB7CisKKyAgICAgICAgICAgICAgICB0
aWxlQ3VsbGVyLmFkdmFuY2VOZXh0VGlsZVRvRHJhdygpOworCisgICAgICAgICAgICAgICAgRmxv
YXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7CisgICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGV4
dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgorICAg
ICAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVs
IG9yIGhhbGYgYSB0ZXhlbAorICAgICAgICAgICAgICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9u
ZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCisgICAgICAgICAgICAg
ICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBh
bmQgbWFwcGVkCisgICAgICAgICAgICAgICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUg
Y29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRlcgorICAgICAgICAgICAgICAgIC8vIGFm
dGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgorICAgICAgICAgICAgICAgIGNvbnN0IGZs
b2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICAgICAgICAgICAgICBmbG9hdCBjbGFtcFgg
PSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOworICAgICAgICAg
ICAgICAgIGZsb2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAt
IGVwc2lsb24pOworICAgICAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsK
KyAgICAgICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7CisgICAgICAgICAg
ICAgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkg
LSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7CisKKyAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IHRleE9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQodGlsZS0+aSgp
LCB0aWxlLT5qKCkpICsgY2xhbXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGls
ZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdo
dCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKwor
ICAgICAgICAgICAgICAgIC8vIE1hcCBjbGFtcGluZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUu
CisgICAgICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3Qu
eCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4
VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOworICAgICAg
ICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFt
cFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0
aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKworICAgICAgICAgICAgICAg
IC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAg
ICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0LngoKSAvIHRpbGVXaWR0
aDsKKyAgICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZz
ZXQueSgpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNj
YWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAgICAgIGZs
b2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsK
KworICAgICAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20t
dXAuCisgICAgICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBu
ZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgaWYg
KG1fdGV4dHVyZU9yaWVudGF0aW9uID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25Pcmll
bnRhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSAx
LjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7CisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50
VGV4U2NhbGVZICo9IC0xLjA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gPT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIu
IFdlIGNhbiBkbworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdoaWxlIHN0aWxsIHByb2R1
Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZQorICAgICAg
ICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0
IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICAvLyBzYW1wbGluZyBvdXRzaWRl
IHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9IGZyYWdt
ZW50VGV4U2NhbGVYOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJh
Z21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVgg
Kj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5z
bGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5z
bGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50
VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9u
KCksIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNj
YWxlWCwgdmVydGV4VGV4U2NhbGVZKSk7CisKICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGlsZS0+dGV4dHVyZUlkKCkp
OwogICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZ2xvYmFs
VHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1YWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxv
Y2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCkpOwotICAgICAgICAgICAg
fSBlbHNlIHsKKworICAgICAgICAgICAgfSBlbHNlIGlmICghKHRpbGUgJiYgdGlsZS0+dGV4dHVy
ZUlkKCkpKSB7CiAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5z
Zm9ybSA9IGdsb2JhbFRyYW5zZm9ybTsKICAgICAgICAgICAgICAgICB0aWxlVHJhbnNmb3JtLnRy
YW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55
KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuaAppbmRleCBkZDFjMjkwODdlMjliNDQ2MzNmNzQ5ZGQ0YTRmZTQ1MDJmMTdhZmZiLi44ZmY3
NGJhODY4ZDhhZDY1MGE2NzhmMmM2YzUwNjViZTczM2Q4NTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oCkBAIC0zNywyMyArMzcsMjggQEAgY2xhc3MgRHJhd2FibGVUaWxlOwogCiBj
bGFzcyBDQ1RpbGVkTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKKyAg
ICBmcmllbmQgY2xhc3MgQ0NUaWxlQ3VsbGVySW1wbDsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENDVGlsZWRMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDVGlsZWRMYXllckltcGwoaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+
Q0NUaWxlZExheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiwgQ0NUaWxlQ3VsbGVySW1wbCYpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXll
clByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgdmlydHVh
bCBib29sIGlzVGlsZWRMYXllcigpIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZvaWQgc2V0U2tp
cHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9CiAgICAg
dm9pZCBzZXRUZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRp
b24gdGV4dHVyZU9yaWVudGF0aW9uKSB7IG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZU9y
aWVudGF0aW9uOyB9CiAgICAgdm9pZCBzZXRTYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdCkgeyBtX3NhbXBs
ZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1hdDsgfQogICAgIHZvaWQgc2V0VGlsaW5n
RGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpOwogICAgIHZvaWQgc3luY1RleHR1
cmVJZChpbnQsIGludCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpOwogCisKICAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRl
eEFscGhhPiBQcm9ncmFtOwogICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgc3dhcHMgcmVkIGFu
ZCBibHVlIGNvbXBvbmVudHMgb2YgdGV4dHVyZS4KICAgICAvLyBVc2VkIHdoZW4gdGV4dHVyZSBm
b3JtYXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4KQEAgLTc2LDE1ICs4MSwy
MSBAQCBwcml2YXRlOgogICAgIERyYXdhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsK
ICAgICBEcmF3YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwogCisgICAgLy8gUmV2aWV3
IGNvbW1lbnQ6IHVzZSB0aGVzZSB0byBhdm9pZCBoYXZpbmcgdG8gZXhwb3NlIGFsbCBvZiBEcmF3
YWJsZVRpbGUgZm9yIENDVGlsZUN1bGxlckltcGwuCisgICAgUGxhdGZvcm0zRE9iamVjdCBkcmF3
YWJsZVRpbGVUZXh0dXJlSWQoRHJhd2FibGVUaWxlKik7CisgICAgSW50UG9pbnQgZHJhd2FibGVU
aWxlSW5kaWNlcyhEcmF3YWJsZVRpbGUqKTsKKwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQg
aW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAg
dm9pZCBkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0sIGNvbnN0IENDTGF5ZXJR
dWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgY29udGVudFF1YWQsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9u
LCBpbnQgZWRnZUxvY2F0aW9uKTsKKyAgICB2b2lkIGRyYXdUaWxlcyhMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmlj
ZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJR
dWFkJiBjb250ZW50UXVhZCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZy
YWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24sIENDVGlsZUN1bGxl
ckltcGwmKTsKIAogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CiAgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogCiAgICAgT3du
UHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOworCisgICAgYm9vbCBpc1RpbGVyRW1wdHko
KSB7IHJldHVybiAhbV90aWxlciB8fCBtX3RpbGVyLT5pc0VtcHR5KCk7IH0KIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggMTc0MzY4ZWE3Mjg0M2E2ZTE2M2Qy
M2RkMGZhNjI2MGZlMGYzM2FiZC4uMGFjYWRiMjdkZDcwNTdmYjczOGYwMjY1NWUxZDMzNjViODNi
ZmRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTc3LDcgKzc3LDcg
QEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnMKICAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxl
U2l6ZSA9IHZpc2libGVTaXplOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXcoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgQ0NUaWxlQ3VsbGVy
SW1wbCYpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IGU2YTU0NGQ4ZjU4NmQzODIzYWNkYzNjZTU2MzVl
NDM4NzA0MGM5MTIuLjZmODBiMWVmNDk2MWIxZDJjYWIyNDAwNWUxNWM5YjVlZGU2MTY5ZDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBG
cmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJHQkFQcm9ncmFtOwogICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFk
ZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIENDVGlsZUN1bGxlckltcGwmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114103</attachid>
            <date>2011-11-08 10:08:06 -0800</date>
            <delta_ts>2011-11-17 11:05:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111108130804.patch</filename>
            <type>text/plain</type>
            <size>29136</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1NjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzOGRjMWQzYjIxZTkwM2Ix
YjIzZjdlMzQ4MmU1NTk4MWI1MGRlYzQxLi4wNmM3Yjk0MDNhYWQ1OGEzY2E0ZjhjNzUxYTlhYWIw
OGViNTM2NjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMTEtMDggIFcuIEph
bWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ3VsbCBvY2NsdWRlZCB0aWxlcyBpbiB0aWxlZCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTMzCisKKyAgICAgICAgQWRkIHRpbGUg
Y3VsbGVyIHRvIHJlZHVjZSBvdmVyZHJhdyBpbiBDaHJvbWl1bSBDb21wb3NpdG9yLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
KE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OmlzVGlsZWRMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3YWJsZVRpbGVUZXh0dXJlSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhd2FibGVUaWxlSW5kaWNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmRyYXdUaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExh
eWVySW1wbDo6aXNUaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllcklt
cGw6OmlzVGlsZXJFbXB0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJ
bXBsOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmg6CisKIDIwMTEtMTEtMDggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1t
ZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIFNWR0xlbmd0aENvbnRleHQsIHRv
IGFsbG93IHRvIHJlc29sdmUgcmVsYXRpdmUgdW5pdHMgdG8gYXJiaXRhcnkgdmlld3BvcnRzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNTkzZWQ1OWFiMjI1OTFmODg4MGQ2NzFlMWI3YWE4YmJhYTk4NzE2
Mi4uYTdjNmQ3OTBjZTJhZTU1YmM1YjE5NDc0MDA4NTA4MDQxODFiODM1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzU4OCw2ICszNTg4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGltZVNvdXJjZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmlu
ZGV4IGRmMjU0MzU2YmRiZDYxZjgyZDkyMWU4ZTljMGRjZWVjOWFhNWU4YTIuLjFlYzIzMGE0YzY2
YjFlODU5MzU3NDYxYTk2MGUwOGVhOGQ2ZGQ4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKICNpbmNsdWRl
ICJjYy9DQ1RocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlQ3VsbGVyLmgiCiAjaWYg
VVNFKFNLSUEpCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiR3JDb250ZXh0
LmgiCkBAIC0zMzMsOCArMzM0LDE4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xhCiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKworICAgICAgICAgICAgQ0NUaWxlQ3VsbGVyRnVuY3Rv
ciBmdW5jOworICAgICAgICAgICAgQ0NUaWxlQ3VsbGVyIHRpbGVDdWxsZXIoZnVuYyk7CisgICAg
ICAgICAgICBDQ0RyYXdhYmxlVGlsZUxpc3QgdGlsZUxpc3Q7CisgICAgICAgICAgICB0aWxlQ3Vs
bGVyLmNyZWF0ZURyYXdUaWxlTGlzdChsYXllckxpc3QsIHJlbmRlclN1cmZhY2UsIHdpbmRvd01h
dHJpeCgpICogcHJvamVjdGlvbk1hdHJpeCgpLCB0aWxlTGlzdCk7CisgICAgICAgICAgICBDQ1Rp
bGVEcmF3TGlzdEl0ZXJhdG9yIHRpbGVMaXN0SXRlcmF0b3IodGlsZUxpc3QpOworCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0
LnNpemUoKTsgKytsYXllckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxp
c3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZhY2UpOworICAgICAgICAgICAgICAgIGRy
YXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZhY2UsIHRpbGVM
aXN0SXRlcmF0b3IpOworCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZHJldyBhbGwgdGhl
IHRpbGVzIHdlIHB1dCBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIEFTU0VSVCghKCp0aWxlTGlz
dEl0ZXJhdG9yKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC01NjgsNyArNTc5LDcgQEAgYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRTdXJmYWNlKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgQ0NUaWxl
RHJhd0xpc3RJdGVyYXRvciYgdGlsZUxpc3RJdGVyYXRvcikKIHsKICAgICBpZiAobGF5ZXItPnJl
bmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2Up
IHsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0
RHJhd1JlY3QoKSk7CkBAIC01OTEsNyArNjAyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2UK
ICAgICBpZiAob3BhcXVlKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAKLSAgICBsYXllci0+ZHJhdyh0
aGlzKTsKKyAgICBsYXllci0+ZHJhdyh0aGlzLCB0aWxlTGlzdEl0ZXJhdG9yKTsKIAogICAgIGlm
IChvcGFxdWUpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAppbmRleCA2NDZlYTZlNWM0NDhhNThjNjEyNDEzNDJiMGY5YTZlYWRkYWVmNDQ3Li5mODY2
ZDc1ZTRjZGZhN2VlM2U5MjNjYWE3MTcxZjNjYjk2Y2U2MDBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlZpZGVvTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NIZWFkc1VwRGlzcGxheS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgpAQCAtNjYsNiArNjcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xhc3MgQ0NM
YXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworY2xhc3MgQ0NUaWxlRHJhd0xp
c3RJdGVyYXRvcjsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAtMTQ5LDggKzE1MSw2IEBA
IHB1YmxpYzoKIAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CiAKLSAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7Ci0KICAgICBzdGF0
aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsK
ICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxh
eWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLApAQCAtMTYyLDcgKzE2Miw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogICAgIHZvaWQg
ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwg
Y29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgZHJh
d0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgdm9pZCBkcmF3TGF5
ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqLCBDQ1RpbGVEcmF3TGlzdEl0ZXJhdG9y
Jik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CiAg
ICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuY3BwCmluZGV4IDIyNDM2MDdhMzEzMDM4MzI4NWY3MDM2ZDA0NWJlYzY5
ZTg0ZjYyYjQuLjUzMGU5OWNiYjJlOTkzOTE4MGYxYmE3NGNjN2UzNWU2ZTdjMzAwNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgQ0NDYW52
YXNMYXllckltcGw6On5DQ0NhbnZhc0xheWVySW1wbCgpCiB7CiB9CiAKLXZvaWQgQ0NDYW52YXNM
YXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9p
ZCBDQ0NhbnZhc0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIsIENDVGlsZURyYXdMaXN0SXRlcmF0b3ImKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIHBy
b2dyYW0gPSBsYXllclJlbmRlcmVyLT5jYW52YXNMYXllclByb2dyYW0oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0NhbnZhc0xheWVySW1wbC5oCmluZGV4IDM4MjY3MDg2ZjRiNDNlNjU3N2M3ZDljNzE1ZGU5ODQ4
NjQzZWRhZjguLmM1MzFmOWQzZWI5OWJjYmE2NTc4YzU4YjVjODk3YmZhNDFhNmM3NDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAK
ICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiwgQ0NUaWxlRHJhd0xpc3RJdGVyYXRvciYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggZjVhNWExZDFhN2QwODUxOGUzMjljNjhmNGMy
OGQyOWY3ODI4ZjMwZi4uMzNhOTc0YWU0ZDZjNjMyZjU1MDBiMjQxNzA3OGU2MDRkNDUyOWJhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgQ0NMYXll
ckltcGw6OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKQordm9pZCBDQ0xh
eWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ1RpbGVEcmF3TGlzdEl0ZXJh
dG9yJikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IDJiODg0MzlkNGZmMDMxYWM1MTE2MWI0ZTA3MWNmY2MxNmNkMjRmZjIuLjU1OThkYzhj
YjY3MzM4Mjk0OTVjMjI1ODgxMjk4YjgwNDA1YWJiYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtNDAsOSArNDAsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllclNv
cnRlcjsKK2NsYXNzIENDVGlsZURyYXdMaXN0SXRlcmF0b3I7CiBjbGFzcyBMYXllckNocm9taXVt
OwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CisKIGNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKQEAgLTcwLDcgKzczLDcgQEAgcHVibGljOgog
ICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKIAot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDVGlsZURyYXdMaXN0SXRlcmF0
b3ImKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZpcnR1YWwg
dm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCkBAIC0x
ODMsNiArMTg2LDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBj
b25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOyB9CiAgICAgdm9pZCByZXNldExh
eWVyUHJvcGVydHlDaGFuZ2VkKCkgeyBtX2xheWVyUHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7IH0K
IAorICAgIHZpcnR1YWwgYm9vbCBpc1RpbGVkTGF5ZXIoKSB7IHJldHVybiBmYWxzZTsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5MYXllckltcGwuY3BwCmluZGV4IDZhZmU4MDEyNGI3OTdkMjE2MTc0ZjdmOGQ0OTNi
ZDg3N2VmZmVjYzQuLjIwZWZkMzQxOWQwY2JkZjA2MGYzNjMyNTliYWQ5MGI2ODg2YTE5MmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgQ0NQ
bHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiB7CiB9CiAKLXZvaWQgQ0NQbHVn
aW5MYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQor
dm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIsIENDVGlsZURyYXdMaXN0SXRlcmF0b3ImKQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4IDU2MGUxNzQ3Y2ExNTRkMGY5NDdlYmIz
MTVhYmM0ODE4ZjBlYzU2NTkuLmMyOWM1MmU3NGEwMjgwNGI3YmNmMzVlOGE3MzU5OTkyYzk5NmE4
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZy
YWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+
IFByb2dyYW1GbGlwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgQ0NU
aWxlRHJhd0xpc3RJdGVyYXRvciYpOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuY3BwCmluZGV4IGYzMDEzMWZhNGJmOTY3Y2RlNjEzM2ZlOGNiOWNhNzdmYTNm
NTg2ZjkuLjUzNDgxMmYyY2ZlZjRlMWI2ZmQwMzA5ZDhmOWRkNGM3ZWFiYjVkYTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5o
IgorI2luY2x1ZGUgImNjL0NDVGlsZUN1bGxlci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclF1YWQuaCIKQEAgLTkyLDYgKzkzLDE4
IEBAIERyYXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50
IGopCiAgICAgcmV0dXJuIHRpbGUuZ2V0KCk7CiB9CiAKK1BsYXRmb3JtM0RPYmplY3QgQ0NUaWxl
ZExheWVySW1wbDo6ZHJhd2FibGVUaWxlVGV4dHVyZUlkKERyYXdhYmxlVGlsZSogdGlsZSkKK3sK
KyAgICBBU1NFUlQodGlsZSk7CisgICAgcmV0dXJuIHRpbGUtPnRleHR1cmVJZCgpOworfQorCitJ
bnRQb2ludCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3YWJsZVRpbGVJbmRpY2VzKERyYXdhYmxlVGls
ZSogdGlsZSkKK3sKKyAgICBBU1NFUlQodGlsZSk7CisgICAgcmV0dXJuIEludFBvaW50KHRpbGUt
PmkoKSwgdGlsZS0+aigpKTsKK30KKwogVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVy
SW1wbDo6dGlsaW5nVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CkBAIC0xMDcsNyArMTIwLDcgQEAgVHJhbnNm
b3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6dGlsaW5nVHJhbnNmb3JtKCkgY29uc3QK
ICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQogCi12b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgQ0NUaWxlRHJh
d0xpc3RJdGVyYXRvciYgdGlsZUxpc3RJdGVyYXRvcikKIHsKICAgICBjb25zdCBJbnRSZWN0JiBs
YXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKQEAgLTE0OCwxOSArMTYxLDE5IEBAIHZv
aWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIpCiAgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRS
R0JBOgogICAgICAgICBpZiAodXNlQUEpIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1BQSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCk7Ci0gICAgICAgICAgICBk
cmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNl
TWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGRy
YXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VN
YXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCksIHRpbGVMaXN0SXRlcmF0b3Ip
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29uc3QgUHJvZ3JhbSogcHJvZ3JhbSA9
IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbSgpOwotICAgICAgICAgICAgZHJhd1RpbGVzKGxh
eWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2
aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOworICAg
ICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zv
cm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBw
cm9ncmFtLCAtMSwgLTEsIHRpbGVMaXN0SXRlcmF0b3IpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdS
QToKICAgICAgICAgaWYgKHVzZUFBKSB7CiAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenps
ZUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7Ci0g
ICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5z
Zm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCks
IHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1M
b2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKKyAg
ICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNm
b3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwg
cHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uKCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCksIHRpbGVM
aXN0SXRlcmF0b3IpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29uc3QgUHJvZ3Jh
bVN3aXp6bGUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlKCk7
Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRy
YW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5
KCksIHByb2dyYW0sIC0xLCAtMSk7CisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJl
ciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBs
YXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSwgdGlsZUxpc3RJdGVyYXRv
cik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTE5MSw3ICsy
MDQsNyBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OnN5bmNUZXh0dXJlSWQoaW50IGksIGludCBq
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+Ci12
b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NM
YXllclF1YWQmIGNvbnRlbnRRdWFkLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBp
bnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbikKK3ZvaWQg
Q0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZp
Y2VUcmFuc2Zvcm0sIGNvbnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVy
UXVhZCYgY29udGVudFF1YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uLCBDQ1RpbGVEcmF3
TGlzdEl0ZXJhdG9yJiB0aWxlTGlzdEl0ZXJhdG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwogICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwpAQCAtMjU4LDQzICsyNzEs
NiBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludAogCiAgICAgICAgICAgICB0aWxlUmVjdCA9IG1f
dGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOwogCi0gICAgICAgICAgICBG
bG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgIC8vIENsYW1wIHRleHR1
cmUgY29vcmRpbmF0ZXMgdG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKLSAgICAg
ICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhh
bGYgYSB0ZXhlbAotICAgICAgICAgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxh
eWVycy4gVGhlIHJlc3VsdGluZyBjbGFtcCByZWdpb24KLSAgICAgICAgICAgIC8vIGlzIG1hcHBl
ZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5kIG1hcHBlZAotICAg
ICAgICAgICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhl
IGZyYWdtZW50IHNoYWRlcgotICAgICAgICAgICAgLy8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAw
LTEgcmFuZ2UuCi0gICAgICAgICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7
Ci0gICAgICAgICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAv
IDIuMCAtIGVwc2lsb24pOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xh
bXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxvbik7Ci0gICAgICAgICAgICBjbGFtcFJlY3Qu
aW5mbGF0ZVgoLWNsYW1wWCk7Ci0gICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1w
WSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1p
bllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKLQotICAg
ICAgICAgICAgRmxvYXRQb2ludCB0ZXhPZmZzZXQgPSBtX3RpbGVyLT50ZXh0dXJlT2Zmc2V0KGks
IGopICsgY2xhbXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNldCk7Ci0gICAgICAgICAg
ICBmbG9hdCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlci0+dGlsZVNpemUo
KS53aWR0aCgpKTsKLSAgICAgICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxm
bG9hdD4obV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIE1h
cCBjbGFtcGluZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUuCi0gICAgICAgICAgICBmbG9hdCB2
ZXJ0ZXhUZXhUcmFuc2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsK
LSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAv
IGNsYW1wUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWCA9
IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgIGZsb2F0
IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gY2xhbXBSZWN0LmhlaWdodCgp
OwotCi0gICAgICAgICAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVz
LgotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0Lngo
KSAvIHRpbGVXaWR0aDsKLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWSA9
IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0OwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRU
ZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgICAgIGZs
b2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsK
LQotICAgICAgICAgICAgLy8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11cC4K
LSAgICAgICAgICAgIC8vIElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0byBm
bGlwIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZU9y
aWVudGF0aW9uID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgewot
ICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4VHJhbnNsYXRlWSA9IDEuMCAtIGZyYWdtZW50VGV4
VHJhbnNsYXRlWTsKLSAgICAgICAgICAgICAgICBmcmFnbWVudFRleFNjYWxlWSAqPSAtMS4wOwot
ICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSBlZGdlWCA9IGNv
bnRlbnRRdWFkLnJpZ2h0KCk7CiAgICAgICAgICAgICBpZiAoaSA8IChtX3RpbGVyLT5udW1UaWxl
c1goKSAtIDEpKSB7CiAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMSh0aWxlUmVjdC5tYXhY
KCksIHRpbGVSZWN0LnkoKSk7CkBAIC0zMTgsMzEgKzI5NCw3MiBAQCB2b2lkIENDVGlsZWRMYXll
ckltcGw6OmRyYXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNv
bnN0IEludAogICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRvIHRpbGVSZWN0LgogICAgICAgICAg
ICAgcXVhZC5zY2FsZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVSZWN0Lmhl
aWdodCgpKTsKIAotICAgICAgICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24g
PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBNb3ZlIGZyYWdtZW50IHNoYWRlciB0cmFuc2Zv
cm0gdG8gdmVydGV4IHNoYWRlci4gV2UgY2FuIGRvCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB3
aGlsZSBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzIGFzCi0gICAgICAgICAgICAgICAg
Ly8gZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdh
dGl2ZQotICAgICAgICAgICAgICAgIC8vIHdoZW4gdGlsZXMgYXJlIHRyYW5zZm9ybWVkIGluIGEg
d2F5IHRoYXQgY291bGQgcmVzdWx0IGluCi0gICAgICAgICAgICAgICAgLy8gc2FtcGxpbmcgb3V0
c2lkZSB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9IGZyYWdt
ZW50VGV4U2NhbGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWSAqPSBmcmFnbWVu
dFRleFNjYWxlWTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICo9IGZyYWdt
ZW50VGV4U2NhbGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKj0gZnJh
Z21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCArPSBm
cmFnbWVudFRleFRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRl
WSArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGZyYWdtZW50VGV4VHJhbnNm
b3JtTG9jYXRpb24sIGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZnJhZ21lbnRUZXhUcmFuc2xhdGVZ
LCBmcmFnbWVudFRleFNjYWxlWCwgZnJhZ21lbnRUZXhTY2FsZVkpKTsKLQotICAgICAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52
ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOwotCi0gICAg
ICAgICAgICBpZiAodGlsZSAmJiB0aWxlLT50ZXh0dXJlSWQoKSkgeworICAgICAgICAgICAgaWYg
KHRpbGUgJiYgdGlsZS0+dGV4dHVyZUlkKCkgJiYgKnRpbGVMaXN0SXRlcmF0b3IgPT0gdGlsZSkg
eworCisgICAgICAgICAgICAgICAgKyt0aWxlTGlzdEl0ZXJhdG9yOworCisgICAgICAgICAgICAg
ICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7CisgICAgICAgICAgICAgICAgLy8gQ2xh
bXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXll
cgorICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBh
IHRleGVsIG9yIGhhbGYgYSB0ZXhlbAorICAgICAgICAgICAgICAgIC8vIG1pbnVzIGVwc2lsb24g
Zm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCisgICAgICAg
ICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNo
YWRlciBhbmQgbWFwcGVkCisgICAgICAgICAgICAgICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRl
eHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRlcgorICAgICAgICAgICAgICAg
IC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgorICAgICAgICAgICAgICAgIGNv
bnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICAgICAgICAgICAgICBmbG9hdCBj
bGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOworICAg
ICAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAv
IDIuMCAtIGVwc2lsb24pOworICAgICAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xh
bXBYKTsKKyAgICAgICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7CisgICAg
ICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29y
bmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7CisKKyAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50IHRleE9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQodGls
ZS0+aSgpLCB0aWxlLT5qKCkpICsgY2xhbXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNl
dCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgZmxvYXQgdGls
ZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgp
KTsKKworICAgICAgICAgICAgICAgIC8vIE1hcCBjbGFtcGluZyByZWN0YW5nbGUgdG8gdW5pdCBz
cXVhcmUuCisgICAgICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFt
cFJlY3QueCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdmVy
dGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwor
ICAgICAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkg
LyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2Fs
ZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKworICAgICAgICAg
ICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAg
ICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0LngoKSAvIHRp
bGVXaWR0aDsKKyAgICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0
ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVu
dFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAg
ICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdodCgpIC8gdGlsZUhl
aWdodDsKKworICAgICAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBi
b3R0b20tdXAuCisgICAgICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3du
LCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAg
ICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0aW9uID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERv
d25PcmllbnRhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5zbGF0
ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7CisgICAgICAgICAgICAgICAgICAgIGZy
YWdtZW50VGV4U2NhbGVZICo9IC0xLjA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBz
aGFkZXIuIFdlIGNhbiBkbworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdoaWxlIHN0aWxs
IHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZQor
ICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdh
eSB0aGF0IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICAvLyBzYW1wbGluZyBv
dXRzaWRlIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9
IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkg
Kj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5z
bGF0ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRl
eFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZy
YWdtZW50VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxv
Y2F0aW9uKCksIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRl
eFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZKSk7CisKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGlsZS0+dGV4dHVy
ZUlkKCkpOwogICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQo
Z2xvYmFsVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1
YWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5h
bHBoYUxvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCkpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgfSBlbHNlIGlmICghKHRpbGUgJiYgdGlsZS0+
dGV4dHVyZUlkKCkpKSB7CiAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGls
ZVRyYW5zZm9ybSA9IGdsb2JhbFRyYW5zZm9ybTsKICAgICAgICAgICAgICAgICB0aWxlVHJhbnNm
b3JtLnRyYW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxl
UmVjdC55KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuaAppbmRleCBkZDFjMjkwODdlMjliNDQ2MzNmNzQ5ZGQ0YTRmZTQ1MDJmMTdhZmZi
Li4wMTcyYzA5OGY3ZjA4NTNlZmZmZDc0MjFiOWNmYTI0MjFkZmY2NWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5oCkBAIC0zNywyMyArMzcsMjggQEAgY2xhc3MgRHJhd2FibGVUaWxl
OwogCiBjbGFzcyBDQ1RpbGVkTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1Ymxp
YzoKKyAgICBmcmllbmQgY2xhc3MgQ0NUaWxlQ3VsbGVyOworCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q0NUaWxlZExheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ0NUaWxlZExheWVySW1wbChpZCkpOwogICAgIH0KICAgICB2aXJ0dWFs
IH5DQ1RpbGVkTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qLCBDQ1RpbGVEcmF3TGlzdEl0ZXJhdG9yJik7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250
ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNUaWxlZExheWVyKCkgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdm9p
ZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7
IH0KICAgICB2b2lkIHNldFRleHR1cmVPcmllbnRhdGlvbihMYXllclRleHR1cmVVcGRhdGVyOjpP
cmllbnRhdGlvbiB0ZXh0dXJlT3JpZW50YXRpb24pIHsgbV90ZXh0dXJlT3JpZW50YXRpb24gPSB0
ZXh0dXJlT3JpZW50YXRpb247IH0KICAgICB2b2lkIHNldFNhbXBsZWRUZXhlbEZvcm1hdChMYXll
clRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KSB7
IG1fc2FtcGxlZFRleGVsRm9ybWF0ID0gc2FtcGxlZFRleGVsRm9ybWF0OyB9CiAgICAgdm9pZCBz
ZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcik7CiAgICAgdm9pZCBz
eW5jVGV4dHVyZUlkKGludCwgaW50LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCk7CiAKKwog
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFk
ZXJSR0JBVGV4QWxwaGE+IFByb2dyYW07CiAgICAgLy8gU2hhZGVyIHByb2dyYW0gdGhhdCBzd2Fw
cyByZWQgYW5kIGJsdWUgY29tcG9uZW50cyBvZiB0ZXh0dXJlLgogICAgIC8vIFVzZWQgd2hlbiB0
ZXh0dXJlIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBuYXRpdmUgY29sb3IgZm9ybWF0LgpAQCAtNzYs
MTUgKzgxLDIxIEBAIHByaXZhdGU6CiAgICAgRHJhd2FibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQp
IGNvbnN0OwogICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKKyAgICAv
LyBSZXZpZXcgY29tbWVudDogdXNlIHRoZXNlIHRvIGF2b2lkIGhhdmluZyB0byBleHBvc2UgYWxs
IG9mIERyYXdhYmxlVGlsZSBmb3IgQ0NUaWxlQ3VsbGVyLgorICAgIFBsYXRmb3JtM0RPYmplY3Qg
ZHJhd2FibGVUaWxlVGV4dHVyZUlkKERyYXdhYmxlVGlsZSopOworICAgIEludFBvaW50IGRyYXdh
YmxlVGlsZUluZGljZXMoRHJhd2FibGVUaWxlKik7CisKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0
aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgot
ICAgIHZvaWQgZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3Jt
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xh
eWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmIGNvbnRlbnRRdWFkLCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2Nh
dGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7CisgICAgdm9pZCBkcmF3VGlsZXMoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
ZXZpY2VUcmFuc2Zvcm0sIGNvbnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xh
eWVyUXVhZCYgY29udGVudFF1YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGlu
dCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uLCBDQ1RpbGVE
cmF3TGlzdEl0ZXJhdG9yJik7CiAKICAgICBib29sIG1fc2tpcHNEcmF3OwogICAgIExheWVyVGV4
dHVyZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVy
VGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsK
IAogICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0YT4gbV90aWxlcjsKKworICAgIGJvb2wgaXNU
aWxlckVtcHR5KCkgeyByZXR1cm4gIW1fdGlsZXIgfHwgbV90aWxlci0+aXNFbXB0eSgpOyB9CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDE3NDM2OGVhNzI4
NDNhNmUxNjNkMjNkZDBmYTYyNjBmZTBmMzNhYmQuLjlhOTIxN2I5NTFmY2Q0ZDZmNWEyNTIwYWYw
NmQ0NjhmZDZmZTdkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC03
Nyw3ICs3Nyw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3QgaW5k
ZXgsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zCiAgICAgbV90ZXh0dXJlc1tpbmRl
eF0udmlzaWJsZVNpemUgPSB2aXNpYmxlU2l6ZTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIEND
VGlsZURyYXdMaXN0SXRlcmF0b3ImKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCBlNmE1NDRkOGY1ODZk
MzgyM2FjZGMzY2U1NjM1ZTQzODcwNDBjOTEyLi5lMmZjMGZmZDRiMDMyMTg5YjE2ODZkNjc4MWUx
NDlkZjVjMDc4MGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC00Nyw3ICs0
Nyw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBv
c1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBSR0JBUHJvZ3Jh
bTsKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0
Y2gsIEZyYWdtZW50U2hhZGVyWVVWVmlkZW8+IFlVVlByb2dyYW07CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhM
YXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ1RpbGVEcmF3TGlzdEl0ZXJhdG9yJik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkg
Y29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115622</attachid>
            <date>2011-11-17 11:05:49 -0800</date>
            <delta_ts>2011-12-22 07:27:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111117140548.patch</filename>
            <type>text/plain</type>
            <size>22876</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdhNzJiNTY2Y2Y5MTY0
MGI4MTc0ZmRlNTk2MWZiZmUyMWFkNDFlYi4uMWQ3ZGQwZTVmYTI4NmEyNDI2MGM4MjZkNTFhMWQy
ODdmMzI4ZWE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTExLTE3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZUN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlQ3VsbGVyU2ltcGxlOjpDQ1RpbGVDdWxsZXJTaW1wbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaWxlQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVDdWxsZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZUZpbHRlcjo6Q0NUaWxlRmlsdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisKIDIwMTEtMTEtMTcgIFNp
bW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0g
TGF5ZXIgdmlvbGF0aW9uOiBXZWJDb3JlOjpkbnNQcmVmZXRjaCB1c2VzIFFXZWJTZXR0aW5nczo6
Z2xvYmFsU2V0dGluZ3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZhNDMzYTkyNzcyOWQzMzc5YTI0
YTQ0NWIxMzY1NjQyMjkyZDVhZGUuLmQ0NzFjNWZjNjlhOTIwMmNmY2UyNDlhOGJhZWQ5MTk1OTg1
MjcxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1ODgsNiArMzU4OCw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNr
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZUN1
bGxlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZUN1bGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWVTb3VyY2UuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCBmNmM2MmVlOTE2OWVhYWRlMzFjZWE1NjE5YWNhOGMwYTJj
MGI4YjczLi4wMTYwMmEwMDQ3ODNlYjMzMzkwZmNkZjY3MjhlMTdlMzhmZjQ0ZmIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNs
dWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDVGls
ZUN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpZiBVU0UoU0tJQSkKICNpbmNs
dWRlICJFeHRlbnNpb25zM0QuaCIKQEAgLTMzOSw4ICszNDAsMTEgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGEKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgQ0NMYXllckxpc3Qm
IGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7
ICsrbGF5ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVy
SW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgICAgIGZvciAoQ0NMYXllckxp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGxheWVySXRlcmF0b3IgPSBsYXllckxpc3QuYmVnaW4oKTsKKyAg
ICAgICAgICAgICAgICAgbGF5ZXJJdGVyYXRvciAhPSBsYXllckxpc3QuZW5kKCk7ICsrbGF5ZXJJ
dGVyYXRvcikgeworICAgICAgICAgICAgICAgIENDVGlsZUN1bGxlclNpbXBsZSB0aWxlQ3VsbGVy
KGxheWVySXRlcmF0b3IsIGxheWVyTGlzdC5lbmQoKSk7CisgICAgICAgICAgICAgICAgZHJhd0xh
eWVyKGxheWVySXRlcmF0b3ItPmdldCgpLCByZW5kZXJTdXJmYWNlLCB0aWxlQ3VsbGVyKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNTgxLDcgKzU4NSw3IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSog
dGFyZ2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIENDVGlsZUZp
bHRlciYgdGlsZUZpbHRlcikKIHsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBs
YXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKICAgICAgICAgbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CkBAIC02
MDEsNyArNjA1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xh
eWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2UKICAgICBpZiAob3BhcXVlKQog
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CiAKLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKKyAgICBsYXllci0+
ZHJhdyh0aGlzLCB0aWxlRmlsdGVyKTsKIAogICAgIGlmIChvcGFxdWUpCiAgICAgICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAxOTUxMTdmMGQ1NDg3
MDEwZDlhNTA0MmQ4MmY0MGI1OTc1ZWJhOGZjLi4xMTRmZGYwMDk3YTdlMjk1OWI1N2I4Y2JkYjcw
ODc3ZmJlOTNmNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTYy
LDcgKzE2Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwog
ICAgIHZvaWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERy
YXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAg
IHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgdm9p
ZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqLCBDQ1RpbGVGaWx0ZXIm
KTsKIAogICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAg
ICB2b2lkIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Nh
bnZhc0xheWVySW1wbC5jcHAKaW5kZXggMjI0MzYwN2EzMTMwMzgzMjg1ZjcwMzZkMDQ1YmVjNjll
ODRmNjJiNC4uMDVhZjYyY2Y5ZTE3NzY1MGE0NmYwODNlZGY4OGFiNDNlOGNlNDk4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApAQCAtNDgsNyArNDgsNyBAQCBDQ0NhbnZh
c0xheWVySW1wbDo6fkNDQ2FudmFzTGF5ZXJJbXBsKCkKIHsKIH0KIAotdm9pZCBDQ0NhbnZhc0xh
eWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lk
IENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgQ0NUaWxlRmlsdGVyJikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOwogICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5
ZXJSZW5kZXJlci0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuaAppbmRleCAzODI2NzA4NmY0YjQzZTY1NzdjN2Q5YzcxNWRlOTg0ODY0M2VkYWY4Li42
ZWU3NzRkZTdkYzdmMzRiYTFlYWQxNTNjYTE2Y2NmZjUzYjFiZDMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q2FudmFzTGF5ZXJJbXBsLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRl
ZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRl
eEZsaXBBbHBoYT4gUHJvZ3JhbTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSosIENDVGlsZUZpbHRlciYpOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRp
ZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKaW5kZXggMWFiMmU3ZThlNjc3ODYxMzdhMzlhODcxNTI1Y2JiNThiOWIzMGYyNS4uOWI5MzNj
ZjE5ODQwMDRiNDhhOGQwNDM1MmRhNWI5MzE4MDJjYjRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnREcmF3
c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6ZHJh
dyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKQordm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBDQ1RpbGVGaWx0ZXImKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmY2YjY4ZTFlNzgyMDdjZTFhYzZmY2Yy
NjI1N2ZkOTdkNGJkODI0MS4uMmU2NjNjYzg0ZGFlOTAxNTRjZjM1NWRmZWJlYzljZDc1NzI2OTRl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC00MCw5ICs0MCwxMiBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDQ0xheWVyU29ydGVyOworY2xhc3MgQ0NUaWxlRmlsdGVyOwogY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAordHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OworCiBjbGFzcyBDQ0xh
eWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCkBAIC03MCw3ICs3
Myw3IEBAIHB1YmxpYzoKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdJ
RDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ1Rp
bGVGaWx0ZXImKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVDdWxsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlQ3VsbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWY2Y2MwNDFmY2FiZGM1NTIx
ZmRlYmM2ZjA0NTIwMDc0OWNiMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVyLmNwcApAQCAtMCwwICsx
LDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NUaWxlQ3VsbGVyLmgiCisKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBi
b29sIGlzQXhpc0FsaWduZWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCit7CisgICAg
Ly8gV2UgYWxsb3cgb25seSBvbmUgbm9uLXplcm8gaW4gdGhlIHVwcGVyIDN4MyBtYXRyaXgsIGFu
ZCBjb3B5IHRoZSBsb2dpYyBmcm9tCisgICAgLy8gaXNTY2FsZU9yVHJhbnNsYXRpb24gb3RoZXJ3
aXNlLgorICAgIHJldHVybiAoKCFtLm0xMSgpICYmICFtLm0yMSgpKSB8fCAoIW0ubTExKCkgJiYg
IW0ubTMxKCkpIHx8ICghbS5tMjEoKSAmJiAhbS5tMzEoKSkpCisgICAgICAgICAgICYmICgoIW0u
bTEyKCkgJiYgIW0ubTIyKCkpIHx8ICghbS5tMTEoKSAmJiAhbS5tMzIoKSkgfHwgKCFtLm0yMSgp
ICYmICFtLm0zMigpKSkKKyAgICAgICAgICAgJiYgKCghbS5tMTMoKSAmJiAhbS5tMjMoKSkgfHwg
KCFtLm0xMSgpICYmICFtLm0zMygpKSB8fCAoIW0ubTIxKCkgJiYgIW0ubTMzKCkpKQorICAgICAg
ICAgICAmJiAhbS5tMTQoKSAmJiAhbS5tMjQoKSAmJiAhbS5tNDMoKSAmJiBtLm00NCgpOworfQor
CitzdGF0aWMgYm9vbCBkcmF3c09wYXF1ZShjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgd2lsbCB3b3JrIGJldHRlciBhZnRlciBEYW5hJ3Mgb3BhcXVlIGZs
YWcgY29kZSBsYW5kcy4KKyAgICByZXR1cm4gbGF5ZXItPm9wYXF1ZSgpICYmIGxheWVyLT5vcGFj
aXR5KCkgPj0gMC45OTk5ICYmIGxheWVyLT5kcmF3T3BhY2l0eSgpID49IDAuOTk5OTsKK30KKwor
fQorCitDQ1RpbGVDdWxsZXJTaW1wbGU6OkNDVGlsZUN1bGxlclNpbXBsZShDQ0xheWVyTGlzdDo6
Y29uc3RfaXRlcmF0b3IgY3VycmVudCwgY29uc3QgQ0NMYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCkKKyAgICA6IG1fY3VycmVudChjdXJyZW50KQorICAgICwgbV9lbmQoZW5kKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fY3VycmVudCAhPSBtX2VuZCk7CisgICAgICAgICsrbV9jdXJyZW50
OyAvLyBXZSB3aWxsIG9ubHkgY2hlY2sgc3Vic2VxdWVudCBsYXllcnMuCisgICAgfQorCisvLyBU
aGlzIHNpbXBsZSBjdWxsaW5nIGNoZWNrIHJlamVjdHMgYSB0aWxlIG9ubHkgaWYgYXQgbGVhc3Qg
b25lIHN1YnNlcXVlbnQgb3BhcXVlIGxheWVyCisvLyBjb21wbGV0ZWx5IG9jY2x1ZGVzIHRoZSB0
aWxlLiBCZXR0ZXIgY2hlY2sgZnVuY3RvcnMgd2lsbCByZWplY3QgYSB0aWxlIGlmIHRoZQorLy8g
dGlsZSBpcyBjb21wbGV0ZWx5IGNvdmVyZWQgYnkgYW55IGNvbWJpbmF0aW9uIG9mIHN1YnNlcXVl
bnQgb3BhcXVlIGxheWVycy4KK2Jvb2wgQ0NUaWxlQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIENDTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRv
ciBjdXJyZW50ID0gbV9jdXJyZW50OworCisgICAgZm9yICg7IGN1cnJlbnQgIT0gbV9lbmQ7ICsr
Y3VycmVudCkgeworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBjdXJyZW50LT5nZXQoKTsK
KyAgICAgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgp
OworICAgICAgICBpZiAobGF5ZXJSZWN0LmNvbnRhaW5zKHRpbGVSZWN0KSAmJiBkcmF3c09wYXF1
ZShsYXllcikgJiYgaXNBeGlzQWxpZ25lZChsYXllci0+ZHJhd1RyYW5zZm9ybSgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit9
IC8vIE5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVDdWxsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjk4N2E1MzU3MTYxYWI4NGQ2
M2JjNDZlMzkwNjRhYTk5NjYwMTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlQ3VsbGVyLmgKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ0NUaWxlQ3VsbGVyX2gKKyNkZWZpbmUgQ0NUaWxlQ3VsbGVy
X2gKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NUaWxlRmlsdGVyIHsKK3B1YmxpYzoKKyAgICBDQ1RpbGVGaWx0ZXIoKSB7IH07
CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yKCkoY29uc3QgSW50UmVjdCYpID0gMDsKK307CisK
K2NsYXNzIENDVGlsZUN1bGxlclNpbXBsZSA6IHB1YmxpYyBDQ1RpbGVGaWx0ZXIgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENDVGlsZUN1bGxlclNpbXBsZShDQ0xheWVyTGlzdDo6Y29uc3RfaXRl
cmF0b3IsIGNvbnN0IENDTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRvcik7CisKKyAgICB2aXJ0dWFs
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgQ0NMYXll
ckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1fY3VycmVudDsKKyAgICBjb25zdCBDQ0xheWVyTGlzdDo6
Y29uc3RfaXRlcmF0b3IgbV9lbmQ7Cit9OworCit9CisjZW5kaWYgLy8gQ0NUaWxlZEN1bGxlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IDIyMDljOGE0YjEwNWU3MTBl
OWRmMThkNTA2YjNjOTAzOTUxMjVmYjcuLjQ0NzcyZWZlYWIyODE2ZGMyMDgxY2Q3ZTY1Y2YzZmVk
MDI1YzZkNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyUXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZUN1bGxlci5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTA3LDcg
KzEwOCw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1Ry
YW5zZm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3Zv
aWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIsIENDVGlsZUZpbHRlciYgdGlsZUZpbHRlcikKIHsKICAgICBjb25zdCBJbnRSZWN0JiBs
YXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKQEAgLTE0NiwyOCArMTQ3LDI4IEBAIHZv
aWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIpCiAgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRS
R0JBOgogICAgICAgICBpZiAodXNlQUEpIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1BQSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCk7Ci0gICAgICAgICAgICBk
cmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNl
TWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGRy
YXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VN
YXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCksIHRpbGVGaWx0ZXIpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkg
ewogICAgICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1PcGFxdWUqIHByb2dyYW0gPSBsYXllclJl
bmRlcmVyLT50aWxlclByb2dyYW1PcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMo
bGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBk
ZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Cisg
ICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJU
cmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0
eSgpLCBwcm9ncmFtLCAtMSwgLTEsIHRpbGVGaWx0ZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dGlsZXJQcm9ncmFtKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIs
IGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5
ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOworICAgICAgICAgICAgICAg
IGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZp
Y2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwg
LTEsIC0xLCB0aWxlRmlsdGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJH
UkE6CiAgICAgICAgIGlmICh1c2VBQSkgewogICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVN3aXp6
bGVBQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwot
ICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFu
c2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgp
LCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3Jt
TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7Cisg
ICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5z
Zm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCks
IHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1M
b2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpLCB0aWxl
RmlsdGVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChpc05vbkNvbXBvc2l0
ZWRDb250ZW50KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenpsZU9wYXF1
ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWUoKTsK
LSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXll
clRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFj
aXR5KCksIHByb2dyYW0sIC0xLCAtMSk7CisgICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVy
UmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEsIHRpbGVGaWx0
ZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFt
U3dpenpsZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsK
LSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXll
clRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFj
aXR5KCksIHByb2dyYW0sIC0xLCAtMSk7CisgICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVy
UmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEsIHRpbGVGaWx0
ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTk3LDcg
KzE5OCw3IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50
IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LXZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkZXZpY2VUcmFuc2Zvcm0sIGNvbnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBD
Q0xheWVyUXVhZCYgY29udGVudFF1YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0s
IGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKQordm9p
ZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRl
dmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5
ZXJRdWFkJiBjb250ZW50UXVhZCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50
IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24sIENDVGlsZUZp
bHRlciYgdGlsZUZpbHRlcikKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKQEAgLTI2NCw2ICsyNjUsMjUgQEAgdm9pZCBDQ1Rp
bGVkTGF5ZXJJbXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBjb25zdCBJbnQKIAogICAgICAgICAgICAgdGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJl
Y3RUb0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKIAorICAgICAgICAgICAgLy8gTmVlZCB0byBjb21w
dXRlIGEgZmV3IHRoaW5ncyBiZWZvcmUgd2UgY29uc2lkZXIgdGlsZSBmaWx0ZXJzLgorICAgICAg
ICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgZWRnZVggPSBjb250ZW50UXVhZC5yaWdodCgpOworICAg
ICAgICAgICAgaWYgKGkgPCAobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgeworICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOworICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZ
KCkpOworCisgICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCisg
ICAgICAgICAgICAgICAgcDEgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDEpOworICAgICAg
ICAgICAgICAgIHAyID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAyKTsKKworICAgICAgICAg
ICAgICAgIC8vIENvbXB1dGUgdmVydGljYWwgZWRnZS4KKyAgICAgICAgICAgICAgICBlZGdlWCA9
IENDTGF5ZXJRdWFkOjpFZGdlKHAxLCBwMik7CisgICAgICAgICAgICAgICAgZWRnZVguc2NhbGUo
c2lnbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFVzZSBmaWx0ZXIgdG8gc2Vl
IGlmIHRoaXMgdGlsZSBzaG91bGQgZHJhdy4KKyAgICAgICAgICAgIGlmICghdGlsZUZpbHRlcih0
aWxlUmVjdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgICAgIEZsb2F0
UmVjdCBjbGFtcFJlY3QodGlsZVJlY3QpOwogICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBj
b29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgogICAgICAgICAg
ICAgLy8gYnkgZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBh
IHRleGVsCkBAIC0zMDEsMjAgKzMyMSw2IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhd1Rp
bGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50CiAgICAg
ICAgICAgICAgICAgZnJhZ21lbnRUZXhTY2FsZVkgKj0gLTEuMDsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgZWRnZVggPSBjb250ZW50UXVhZC5yaWdodCgp
OwotICAgICAgICAgICAgaWYgKGkgPCAobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgewotICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkp
OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVj
dC5tYXhZKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3Bh
Y2UuCi0gICAgICAgICAgICAgICAgcDEgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDEpOwot
ICAgICAgICAgICAgICAgIHAyID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAyKTsKLQotICAg
ICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVydGljYWwgZWRnZS4KLSAgICAgICAgICAgICAgICBl
ZGdlWCA9IENDTGF5ZXJRdWFkOjpFZGdlKHAxLCBwMik7Ci0gICAgICAgICAgICAgICAgZWRnZVgu
c2NhbGUoc2lnbik7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZp
Y2Ugc3BhY2UgcXVhZC4KICAgICAgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVk
Z2VYLCBwcmV2RWRnZVksIGVkZ2VYLCBlZGdlWSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuaAppbmRleCA1NmVjYjRkNmFkNDZkM2VjNjVhNWQ4YTllN2MzMTY3ZTQ2OGYzZjA3Li5lNWY4
YzYwZDNjNjMwYzdjZGM3ODdjZTBiYmNiZjFhN2FjMTZjYTEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVh
bCB+Q0NUaWxlZExheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgQ0NUaWxlRmlsdGVyJik7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1
cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVy
UHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CkBAIC04Miw3ICs4Miw3
IEBAIHByaXZhdGU6CiAKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRo
IGNvbnRlbnRSZWN0LgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVz
KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVj
dCwgY29uc3QgQ0NMYXllclF1YWQmIGNvbnRlbnRRdWFkLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBU
KiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2Nh
dGlvbik7CisgICAgdm9pZCBkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxU
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0sIGNv
bnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgY29udGVudFF1
YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5z
Zm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uLCBDQ1RpbGVGaWx0ZXImKTsKIAogICAgIGJv
b2wgbV9za2lwc0RyYXc7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90
ZXh0dXJlT3JpZW50YXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120319</attachid>
            <date>2011-12-22 07:27:57 -0800</date>
            <delta_ts>2011-12-22 07:54:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111222102755.patch</filename>
            <type>text/plain</type>
            <size>20987</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZkNDZkMjE4YWYxNTQz
YTI1MDc1YmYwY2ZjNTU4YzZhZDUzMDIzOC4uOGJkM2YwYzU3NjRlNjNiNDFkZmMxMTcyYTEwOWM2
NGViYWU5YTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTEyLTIyICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0
aW1pemVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlclNpbXBsZTo6Q0NRdWFkQ3VsbGVyU2ltcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlclNpbXBsZTo6b3BlcmF0b3IoKSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NRdWFkQ3VsbGVyOjpDQ1F1YWRDdWxsZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6Om9wdGltaXplUXVhZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorCiAy
MDExLTEyLTIyICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAg
ICAgICBbQ1NTIFNoYWRlcnNdIEZvbGxvdyB1cCBidWcgdG8gZml4IGlzc3VlcyBtZW50aW9uZWQg
aW4gY29tbWVudCAyMyBmcm9tIGJ1ZyA3MzMxNwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBmNDA3MWEyNTcyMTEyOGMwZjNlZDVlOWUyYmRlYjVjNGM2MmQ1NmEzLi5hNzY1NDU5ZDBlZDhj
MmE3Y2U5M2M5YTQ5N2IzOWI5NzNlYTg4YTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDExLTEyLTIyICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMg
aW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdERyYXdRdWFkOjpUZXN0RHJhd1F1YWQp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdERyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0UXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMS0xMi0y
MSAgUGV0ZXIgS290d2ljeiAgPHBrb3R3aWN6QGdvb2dsZS5jb20+CiAKICAgICAgICAgUGx1bWJz
IHJlZnJlc2ggcmF0ZSB0aHJvdWdoIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMTEyMTFmM2FiY2E2NGQwNDU3YzFmNGI1N2ZiNmRkN2YxMmQzY2RmZS4uMmJh
NWM1MmY0MzAzZTIxNDgxOWQzZDc0MWYyMDE3YmYwMGJiOGI4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzYzNyw2ICszNjM3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwOTQ2NWJmOTll
NzlmZTcxZjI0MTc0Njc4NDUyZGFlZjg3NTkxMDc0Li5mMGFjZDkwYmNhOWRkYWI3OWRjM2M3Yzk3
YjcwYmI5YjIyMTMwMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cApAQCAtMTg3LDYgKzE4NywxNCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNw
YWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVy
biBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRp
bWl6ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQor
eworICAgIC8vIEZJWE1FOiBpZiB0aGVyZSBpcyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gc2hhcmUg
YmV0d2VlbiByZW5kZXIgcGFzc2VzIHRvCisgICAgLy8gICAgICAgIGFzc2lzdCBpbiBvcHRpbWl6
YXRpb24sIHBsdW1iIGl0IGhlcmUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhc3Nl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLmdldCgpLT5vcHRpbWl6ZVF1YWRzKCk7
Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZl
Y3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCiB7CiAgICAgQ0NMYXllckxpc3Qg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKQEAgLTI0OSw2ICsyNTcsOCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogICAgIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNz
PiA+IHBhc3NlczsKICAgICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMocGFzc2VzKTsKIAorICAgIG9w
dGltaXplUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2lu
RHJhd2luZ0ZyYW1lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ld
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBlZDM4Yjg2
ZGU0NmZjYjM1NDViODA4OWVmMTZjNmI0NTIxMzg4ZGQxLi41YzY2MWE4YTk1YjUxMDIxNTQ0MDk2
MDc2MDhjYzg5NmYwZDAzODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CkBAIC0xMzQsNiArMTM0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQ
YWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24o
KTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3RE
cmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+
Jik7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRl
clBhc3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJS
ZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNTg1MWZmOGZk
ZDI1OTg4YWIyNDVlOGUwNWE1MzljMWRkNTdhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisK
KyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIHN0ZCB7CisKKy8vIFNwZWNpYWxp
emUgZm9yIE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0b3IgZG9lc24ndCBrbm93IGhvdyB0
byByZXZlcnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBnZW5lcmFsLgordGVtcGxhdGU8PiB2
b2lkIHN3YXAoV1RGOjpPd25QdHI8V2ViQ29yZTo6Q0NEcmF3UXVhZD4mYSwgV1RGOjpPd25QdHI8
V2ViQ29yZTo6Q0NEcmF3UXVhZD4mIGIpIHsgYS5zd2FwKGIpOyB9CisKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCByZWdpb25Db250YWluc1Jl
Y3QoY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVn
aW9uIHJlY3RSZWdpb24ocmVjdCk7CisgICAgUmVnaW9uIGludGVyc2VjdFJlZ2lvbihpbnRlcnNl
Y3QocmVnaW9uLCByZWN0UmVnaW9uKSk7CisKKyAgICBpZiAoaW50ZXJzZWN0UmVnaW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChp
bnRlcnNlY3RSZWdpb24pOworICAgIHJldHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKK30KKwor
fQorCitDQ1F1YWRDdWxsZXJTaW1wbGU6OkNDUXVhZEN1bGxlclNpbXBsZSgpCit7Cit9CisKK3Zv
aWQgQ0NRdWFkQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKENDUXVhZExpc3QmIHF1YWRMaXN0KQor
eworICAgIGlmICghcXVhZExpc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1F1
YWRMaXN0IGN1bGxlZExpc3Q7CisgICAgY3VsbGVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkocXVhZExp
c3Quc2l6ZSgpKTsKKworICAgIFJlZ2lvbiBvcGFxdWVDb3ZlcmFnZVRodXNGYXI7CisKKyAgICBm
b3IgKGludCBpID0gcXVhZExpc3Quc2l6ZSgpIC0xOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdldCgpOworCisgICAgICAgIEludFJl
Y3QgcXVhZFJlY3Q7CisgICAgICAgIC8vIEZJWE1FOiBoYXZlIGFsbCBxdWFkcyB0cmVhdGVkIHRo
ZSBzYW1lIQorICAgICAgICBzd2l0Y2ggKGRyYXdRdWFkLT5tYXRlcmlhbCgpKSB7CisgICAgICAg
IGNhc2UgQ0NEcmF3UXVhZDo6Q3VzdG9tTGF5ZXI6CisgICAgICAgICAgICBxdWFkUmVjdCA9IGRy
YXdRdWFkLT50b0N1c3RvbUxheWVyRHJhd1F1YWQoKS0+bGF5ZXIoKS0+ZHJhd2FibGVDb250ZW50
UmVjdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBxdWFkUmVjdCA9IGRyYXdRdWFkLT5xdWFkVHJhbnNmb3JtKCkubWFwUmVjdChkcmF3UXVhZC0+
cXVhZFJlY3QoKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGtlZXBRdWFkID0gIXJlZ2lv
bkNvbnRhaW5zUmVjdChvcGFxdWVDb3ZlcmFnZVRodXNGYXIsIHF1YWRSZWN0KTsKKworICAgICAg
ICBpZiAoa2VlcFF1YWQgJiYgZHJhd1F1YWQtPmRyYXdzT3BhcXVlKCkgJiYgZHJhd1F1YWQtPmlz
TGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSkKKyAgICAgICAgICAgIG9wYXF1ZUNvdmVyYWdlVGh1
c0Zhci51bml0ZShSZWdpb24ocXVhZFJlY3QpKTsKKworICAgICAgICBpZiAoa2VlcFF1YWQpCisg
ICAgICAgICAgICBjdWxsZWRMaXN0LmFwcGVuZChxdWFkTGlzdFtpXS5yZWxlYXNlKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBxdWFkTGlzdFtpXS5jbGVhcigpOyAvLyBUaGlzIHJlbGVh
c2VzIHRoZSBxdWFkIHBlcm1hbmVudGx5LgorICAgIH0KKyAgICBxdWFkTGlzdC5jbGVhcigpOyAv
LyBBbGwgT3duUHRyJ3MgaW4gbGlzdCBub3cgY29udGFpbiAwLgorCisgICAgLy8gVGhlIGZvbGxv
d2luZyBjb21tZW50ZWQtb3V0IGNvZGUgaXMgcmV0YWluZWQgdGVtcG9yYXJpbHkgaW4gY2FzZSBX
aW5kb3dzCisgICAgLy8gZG9lc24ndCBsaWtlIHRoZSBzd2FwIHNwZWNpYWxpemF0aW9uIGFib3Zl
LgorLy8gICAgY29uc3Qgc2l6ZV90IGN1bGxlZExpc3RTaXplID0gY3VsbGVkTGlzdC5zaXplKCk7
CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1bGxlZExpc3RTaXplIC8gMjsgKytpKQor
Ly8gICAgICAgIGN1bGxlZExpc3RbaV0uc3dhcChjdWxsZWRMaXN0W2N1bGxlZExpc3RTaXplIC0g
MSAtIGldKTsKKyAgICBjdWxsZWRMaXN0LnJldmVyc2UoKTsKKyAgICBxdWFkTGlzdC5zd2FwKGN1
bGxlZExpc3QpOworfQorCit9IC8vIE5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YTI4OWM1NmFhMTkyY2M0ZTRmZTg0OTgxY2M4M2VmMmZhNmQ2MTExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NRdWFkQ3VsbGVyX2gKKyNk
ZWZpbmUgQ0NRdWFkQ3VsbGVyX2gKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAg
Q0NRdWFkQ3VsbGVyKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKENDUXVhZExp
c3QmKSA9IDA7Cit9OworCitjbGFzcyBDQ1F1YWRDdWxsZXJTaW1wbGUgOiBwdWJsaWMgQ0NRdWFk
Q3VsbGVyIHsKK3B1YmxpYzoKKyAgICBDQ1F1YWRDdWxsZXJTaW1wbGUoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBvcGVyYXRvcigpKENDUXVhZExpc3QmKTsKK307CisKK30KKyNlbmRpZiAvLyBDQ1F1
YWRDdWxsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggNzFhZGM0YjNlMDhkMzQy
MDk4MzFhNTcyMTJlNmNiZTAwMGM1YzBiOS4uNTUzNGM5NzgxMTlkYmI1YWZlOThiNzJmMWQyYmRm
NzYwY2NiZjk4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVy
U3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKIApA
QCAtNjMsNCArNjQsMTIgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVy
U3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxp
c3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCit2b2lkIENDUmVuZGVy
UGFzczo6b3B0aW1pemVRdWFkcygpCit7CisgICAgQ0NRdWFkQ3VsbGVyU2ltcGxlIHF1YWRDdWxs
ZXI7CisgICAgcXVhZEN1bGxlcihtX3F1YWRMaXN0KTsKKworICAgIC8vIEZJWE1FOiBBZGQgcXVh
ZCBzcXVpc2hpbmcgaGVyZT8KK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCAxNmUw
NzJlODA4MGIzZGU0OWFmMmZjYzI0MTFhOWNkYzUzYTY0MWEwLi42MTdhM2E5ZmI2NTEzZDAzOGEy
MzcwMWIwNDMwY2E3YjY0NTA5ZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtNDYsNiAr
NDYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBs
Kik7CiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1w
bCopOwogCisgICAgdm9pZCBvcHRpbWl6ZVF1YWRzKCk7CisKICAgICBjb25zdCBDQ1F1YWRMaXN0
JiBxdWFkTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KICAgICBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5
ZDlkNjQ5OTkzZDVkNjJmZTVjZi4uZjUyNDdiYTM3N2FhODhjODRkZDEyNmQxMmZjNjRmMTcxOGU2
NzU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03MCw2ICs3MCw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmVhODk5ZjEyNWJmMDgzMGJlNmExNmE5ZGUxNGZkNTMyOTE5ZmYyMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKQEAg
LTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK307CisKK2NsYXNzIFRlc3REcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKK3B1Ymxp
YzoKKyAgICBUZXN0RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHN0YXRlLCBNYXRl
cmlhbCBtLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIDogQ0NEcmF3UXVhZChzdGF0ZSwgbSwg
cmVjdCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGVzdERyYXdRdWFk
PiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHN0YXRlLCBNYXRlcmlhbCBtLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXN0
RHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpKTsKKyAgICB9Cit9OworCit2b2lkIHNldFF1YWRzKEND
U2hhcmVkUXVhZFN0YXRlKiByb290U3RhdGUsIENDU2hhcmVkUXVhZFN0YXRlKiBjaGlsZFN0YXRl
LCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCkKK3sKKyAgICBxdWFkTGlzdC5jbGVhcigpOworCisgICAg
cXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVh
ZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDApLCBJbnRTaXpl
KDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUo
cm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMjAw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3
UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0
KEludFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFw
cGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29u
dGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOwor
ICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJh
d1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgyMDAsIDEwMCksIEludFNpemUo
MTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShy
b290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAy
MDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdR
dWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3Qo
SW50UG9pbnQoMTAwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENv
bnRlbnQsIEludFJlY3QoSW50UG9pbnQoMjAwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsK
KworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMDAs
IDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxk
U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFk
OjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KElu
dFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVu
ZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRl
bnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKK30K
KworVEVTVF9GKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeVF1YWRzQXJlQ3VsbGVkUHJvcGVybHkp
Cit7CisgICAgQ0NRdWFkQ3VsbGVyU2ltcGxlIHF1YWRDdWxsZXI7CisgICAgQ0NRdWFkTGlzdCBx
dWFkTGlzdDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKworICAg
IEludFNpemUgcm9vdFNpemUgPSBJbnRTaXplKDMwMCwgMzAwKTsKKyAgICBJbnRSZWN0IHJvb3RS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCByb290U2l6ZSk7CisKKyAgICBJbnRTaXplIGNoaWxk
U2l6ZSA9IEludFNpemUoMjAwLCAyMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBjaGlsZFNpemUpOworCisgICAgLy8gVGVzdCBjdWxsaW5nIG9mIGNlbnRy
ZSB0aWxlIGluIHJvb3QgbGF5ZXIuCisgICAgeworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwg
MS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjaGlsZFN0YXRl
ID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisKKyAgICAgICAg
c2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7Cisg
ICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzKTsKKyAgICAgICAgcXVhZEN1bGxl
cihxdWFkTGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDkpOworICAg
IH0KKworICAgIC8vIFRlc3QgY3VsbGluZyB3aGVuIGNoaWxkIGlzIG5vbi1vcGFxdWUuCisgICAg
eworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVk
UXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRy
PENDU2hhcmVkUXVhZFN0YXRlPiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0
ZShjaGlsZFRyYW5zZm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRS
ZWN0KCksIDAuOSwgdHJ1ZSk7CisKKyAgICAgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBj
aGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5z
aXplKCksIDEzKTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAgIEVYUEVD
VF9FUShxdWFkTGlzdC5zaXplKCksIDEzKTsKKyAgICB9CisgICAgeworICAgICAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUo
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3Qs
IEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRl
PiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwg
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEuMCwgZmFsc2Up
OworCisgICAgICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwg
cXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMyk7CisgICAg
ICAgIHF1YWRDdWxsZXIocXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6
ZSgpLCAxMyk7CisgICAgfQorCisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7
CisKKyAgICAvLyBUZXN0IGN1bGxpbmcgd2hlbiBjaGlsZCB0aWxlcyBsaW5lIHVwIHdpdGggcm9v
dCB0aWxlcyAodG9wLWxlZnQpLgorICAgIHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0
YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEu
MCwgdHJ1ZSk7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9
IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgICAgIHNl
dFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAg
ICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMyk7CisgICAgICAgIHF1YWRDdWxsZXIo
cXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMik7CisgICAg
fQorCisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICAvLyBUZXN0
IGN1bGxpbmcgd2hlbiBjaGlsZCB0aWxlcyBsaW5lIHVwIHdpdGggcm9vdCB0aWxlcyAoYm90dG9t
LXJpZ2h0KS4KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0
YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOwor
ICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1
YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBj
aGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290
U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNU
X0VRKHF1YWRMaXN0LnNpemUoKSwgMTMpOworICAgICAgICBxdWFkQ3VsbGVyKHF1YWRMaXN0KTsK
KyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOSk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120322</attachid>
            <date>2011-12-22 07:54:36 -0800</date>
            <delta_ts>2011-12-22 10:28:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111222105433.patch</filename>
            <type>text/plain</type>
            <size>20997</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZkNDZkMjE4YWYxNTQz
YTI1MDc1YmYwY2ZjNTU4YzZhZDUzMDIzOC4uOGJkM2YwYzU3NjRlNjNiNDFkZmMxMTcyYTEwOWM2
NGViYWU5YTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTEyLTIyICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0
aW1pemVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlclNpbXBsZTo6Q0NRdWFkQ3VsbGVyU2ltcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlclNpbXBsZTo6b3BlcmF0b3IoKSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NRdWFkQ3VsbGVyOjpDQ1F1YWRDdWxsZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6Om9wdGltaXplUXVhZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorCiAy
MDExLTEyLTIyICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAg
ICAgICBbQ1NTIFNoYWRlcnNdIEZvbGxvdyB1cCBidWcgdG8gZml4IGlzc3VlcyBtZW50aW9uZWQg
aW4gY29tbWVudCAyMyBmcm9tIGJ1ZyA3MzMxNwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBmNDA3MWEyNTcyMTEyOGMwZjNlZDVlOWUyYmRlYjVjNGM2MmQ1NmEzLi5hNzY1NDU5ZDBlZDhj
MmE3Y2U5M2M5YTQ5N2IzOWI5NzNlYTg4YTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDExLTEyLTIyICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMg
aW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdERyYXdRdWFkOjpUZXN0RHJhd1F1YWQp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdERyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0UXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMS0xMi0y
MSAgUGV0ZXIgS290d2ljeiAgPHBrb3R3aWN6QGdvb2dsZS5jb20+CiAKICAgICAgICAgUGx1bWJz
IHJlZnJlc2ggcmF0ZSB0aHJvdWdoIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMTEyMTFmM2FiY2E2NGQwNDU3YzFmNGI1N2ZiNmRkN2YxMmQzY2RmZS4uMmJh
NWM1MmY0MzAzZTIxNDgxOWQzZDc0MWYyMDE3YmYwMGJiOGI4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzYzNyw2ICszNjM3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwOTQ2NWJmOTll
NzlmZTcxZjI0MTc0Njc4NDUyZGFlZjg3NTkxMDc0Li5mMGFjZDkwYmNhOWRkYWI3OWRjM2M3Yzk3
YjcwYmI5YjIyMTMwMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cApAQCAtMTg3LDYgKzE4NywxNCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNw
YWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVy
biBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRp
bWl6ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQor
eworICAgIC8vIEZJWE1FOiBpZiB0aGVyZSBpcyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gc2hhcmUg
YmV0d2VlbiByZW5kZXIgcGFzc2VzIHRvCisgICAgLy8gICAgICAgIGFzc2lzdCBpbiBvcHRpbWl6
YXRpb24sIHBsdW1iIGl0IGhlcmUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhc3Nl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLmdldCgpLT5vcHRpbWl6ZVF1YWRzKCk7
Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZl
Y3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCiB7CiAgICAgQ0NMYXllckxpc3Qg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKQEAgLTI0OSw2ICsyNTcsOCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogICAgIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNz
PiA+IHBhc3NlczsKICAgICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMocGFzc2VzKTsKIAorICAgIG9w
dGltaXplUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2lu
RHJhd2luZ0ZyYW1lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ld
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBlZDM4Yjg2
ZGU0NmZjYjM1NDViODA4OWVmMTZjNmI0NTIxMzg4ZGQxLi41YzY2MWE4YTk1YjUxMDIxNTQ0MDk2
MDc2MDhjYzg5NmYwZDAzODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CkBAIC0xMzQsNiArMTM0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQ
YWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24o
KTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3RE
cmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+
Jik7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRl
clBhc3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJS
ZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNTg1MWZmOGZk
ZDI1OTg4YWIyNDVlOGUwNWE1MzljMWRkNTdhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisK
KyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIHN0ZCB7CisKKy8vIFNwZWNpYWxp
emUgZm9yIE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0b3IgZG9lc24ndCBrbm93IGhvdyB0
byByZXZlcnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBnZW5lcmFsLgordGVtcGxhdGU8PiB2
b2lkIHN3YXAoV1RGOjpPd25QdHI8V2ViQ29yZTo6Q0NEcmF3UXVhZD4mYSwgV1RGOjpPd25QdHI8
V2ViQ29yZTo6Q0NEcmF3UXVhZD4mIGIpIHsgYS5zd2FwKGIpOyB9CisKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCByZWdpb25Db250YWluc1Jl
Y3QoY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVn
aW9uIHJlY3RSZWdpb24ocmVjdCk7CisgICAgUmVnaW9uIGludGVyc2VjdFJlZ2lvbihpbnRlcnNl
Y3QocmVnaW9uLCByZWN0UmVnaW9uKSk7CisKKyAgICBpZiAoaW50ZXJzZWN0UmVnaW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChp
bnRlcnNlY3RSZWdpb24pOworICAgIHJldHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKK30KKwor
fQorCitDQ1F1YWRDdWxsZXJTaW1wbGU6OkNDUXVhZEN1bGxlclNpbXBsZSgpCit7Cit9CisKK3Zv
aWQgQ0NRdWFkQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKENDUXVhZExpc3QmIHF1YWRMaXN0KQor
eworICAgIGlmICghcXVhZExpc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1F1
YWRMaXN0IGN1bGxlZExpc3Q7CisgICAgY3VsbGVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkocXVhZExp
c3Quc2l6ZSgpKTsKKworICAgIFJlZ2lvbiBvcGFxdWVDb3ZlcmFnZVRodXNGYXI7CisKKyAgICBm
b3IgKGludCBpID0gcXVhZExpc3Quc2l6ZSgpIC0xOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdldCgpOworCisgICAgICAgIEludFJl
Y3QgcXVhZFJlY3Q7CisgICAgICAgIC8vIEZJWE1FOiBoYXZlIGFsbCBxdWFkcyB0cmVhdGVkIHRo
ZSBzYW1lIQorICAgICAgICBzd2l0Y2ggKGRyYXdRdWFkLT5tYXRlcmlhbCgpKSB7CisgICAgICAg
IGNhc2UgQ0NEcmF3UXVhZDo6Q3VzdG9tTGF5ZXI6CisgICAgICAgICAgICBxdWFkUmVjdCA9IGRy
YXdRdWFkLT50b0N1c3RvbUxheWVyRHJhd1F1YWQoKS0+bGF5ZXIoKS0+ZHJhd2FibGVDb250ZW50
UmVjdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBxdWFkUmVjdCA9IGRyYXdRdWFkLT5xdWFkVHJhbnNmb3JtKCkubWFwUmVjdChkcmF3UXVhZC0+
cXVhZFJlY3QoKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGtlZXBRdWFkID0gIXJlZ2lv
bkNvbnRhaW5zUmVjdChvcGFxdWVDb3ZlcmFnZVRodXNGYXIsIHF1YWRSZWN0KTsKKworICAgICAg
ICBpZiAoa2VlcFF1YWQgJiYgZHJhd1F1YWQtPmRyYXdzT3BhcXVlKCkgJiYgZHJhd1F1YWQtPmlz
TGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSkKKyAgICAgICAgICAgIG9wYXF1ZUNvdmVyYWdlVGh1
c0Zhci51bml0ZShSZWdpb24ocXVhZFJlY3QpKTsKKworICAgICAgICBpZiAoa2VlcFF1YWQpCisg
ICAgICAgICAgICBjdWxsZWRMaXN0LmFwcGVuZChxdWFkTGlzdFtpXS5yZWxlYXNlKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBxdWFkTGlzdFtpXS5jbGVhcigpOyAvLyBUaGlzIHJlbGVh
c2VzIHRoZSBxdWFkIHBlcm1hbmVudGx5LgorICAgIH0KKyAgICBxdWFkTGlzdC5jbGVhcigpOyAv
LyBBbGwgT3duUHRyJ3MgaW4gbGlzdCBub3cgY29udGFpbiAwLgorCisgICAgLy8gVGhlIGZvbGxv
d2luZyBjb21tZW50ZWQtb3V0IGNvZGUgaXMgcmV0YWluZWQgdGVtcG9yYXJpbHkgaW4gY2FzZSBX
aW5kb3dzCisgICAgLy8gZG9lc24ndCBsaWtlIHRoZSBzd2FwIHNwZWNpYWxpemF0aW9uIGFib3Zl
LgorLy8gICAgY29uc3Qgc2l6ZV90IGN1bGxlZExpc3RTaXplID0gY3VsbGVkTGlzdC5zaXplKCk7
CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1bGxlZExpc3RTaXplIC8gMjsgKytpKQor
Ly8gICAgICAgIGN1bGxlZExpc3RbaV0uc3dhcChjdWxsZWRMaXN0W2N1bGxlZExpc3RTaXplIC0g
MSAtIGldKTsKKyAgICBjdWxsZWRMaXN0LnJldmVyc2UoKTsKKyAgICBxdWFkTGlzdC5zd2FwKGN1
bGxlZExpc3QpOworfQorCit9IC8vIE5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YTI4OWM1NmFhMTkyY2M0ZTRmZTg0OTgxY2M4M2VmMmZhNmQ2MTExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NRdWFkQ3VsbGVyX2gKKyNk
ZWZpbmUgQ0NRdWFkQ3VsbGVyX2gKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAg
Q0NRdWFkQ3VsbGVyKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKENDUXVhZExp
c3QmKSA9IDA7Cit9OworCitjbGFzcyBDQ1F1YWRDdWxsZXJTaW1wbGUgOiBwdWJsaWMgQ0NRdWFk
Q3VsbGVyIHsKK3B1YmxpYzoKKyAgICBDQ1F1YWRDdWxsZXJTaW1wbGUoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBvcGVyYXRvcigpKENDUXVhZExpc3QmKTsKK307CisKK30KKyNlbmRpZiAvLyBDQ1F1
YWRDdWxsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggNzFhZGM0YjNlMDhkMzQy
MDk4MzFhNTcyMTJlNmNiZTAwMGM1YzBiOS4uNTUzNGM5NzgxMTlkYmI1YWZlOThiNzJmMWQyYmRm
NzYwY2NiZjk4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVy
U3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKIApA
QCAtNjMsNCArNjQsMTIgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVy
U3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxp
c3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCit2b2lkIENDUmVuZGVy
UGFzczo6b3B0aW1pemVRdWFkcygpCit7CisgICAgQ0NRdWFkQ3VsbGVyU2ltcGxlIHF1YWRDdWxs
ZXI7CisgICAgcXVhZEN1bGxlcihtX3F1YWRMaXN0KTsKKworICAgIC8vIEZJWE1FOiBBZGQgcXVh
ZCBzcXVpc2hpbmcgaGVyZT8KK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCAxNmUw
NzJlODA4MGIzZGU0OWFmMmZjYzI0MTFhOWNkYzUzYTY0MWEwLi42MTdhM2E5ZmI2NTEzZDAzOGEy
MzcwMWIwNDMwY2E3YjY0NTA5ZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtNDYsNiAr
NDYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBs
Kik7CiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1w
bCopOwogCisgICAgdm9pZCBvcHRpbWl6ZVF1YWRzKCk7CisKICAgICBjb25zdCBDQ1F1YWRMaXN0
JiBxdWFkTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KICAgICBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5
ZDlkNjQ5OTkzZDVkNjJmZTVjZi4uZjUyNDdiYTM3N2FhODhjODRkZDEyNmQxMmZjNjRmMTcxOGU2
NzU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03MCw2ICs3MCw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTg3ZTAxM2U1ZmNhNTQyNDVhZTc1NTUwZTk4NTU3MDRjNGZiYTRjZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKQEAg
LTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK307CisKK2NsYXNzIFRlc3REcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKK3B1Ymxp
YzoKKyAgICBUZXN0RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHN0YXRlLCBNYXRl
cmlhbCBtLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIDogQ0NEcmF3UXVhZChzdGF0ZSwgbSwg
cmVjdCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGVzdERyYXdRdWFk
PiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHN0YXRlLCBNYXRlcmlhbCBtLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXN0
RHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpKTsKKyAgICB9Cit9OworCit2b2lkIHNldFF1YWRzKEND
U2hhcmVkUXVhZFN0YXRlKiByb290U3RhdGUsIENDU2hhcmVkUXVhZFN0YXRlKiBjaGlsZFN0YXRl
LCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCkKK3sKKyAgICBxdWFkTGlzdC5jbGVhcigpOworCisgICAg
cXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVh
ZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDApLCBJbnRTaXpl
KDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUo
cm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMjAw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3
UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0
KEludFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFw
cGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29u
dGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOwor
ICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJh
d1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgyMDAsIDEwMCksIEludFNpemUo
MTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShy
b290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAy
MDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdR
dWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3Qo
SW50UG9pbnQoMTAwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENv
bnRlbnQsIEludFJlY3QoSW50UG9pbnQoMjAwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsK
KworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMDAs
IDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxk
U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFk
OjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KElu
dFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVu
ZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRl
bnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKK30K
KworVEVTVF9GKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeVF1YWRzQXJlQ3VsbGVkUHJvcGVybHkp
Cit7CisgICAgQ0NRdWFkQ3VsbGVyU2ltcGxlIHF1YWRDdWxsZXI7CisgICAgQ0NRdWFkTGlzdCBx
dWFkTGlzdDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKworICAg
IEludFNpemUgcm9vdFNpemUgPSBJbnRTaXplKDMwMCwgMzAwKTsKKyAgICBJbnRSZWN0IHJvb3RS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCByb290U2l6ZSk7CisKKyAgICBJbnRTaXplIGNoaWxk
U2l6ZSA9IEludFNpemUoMjAwLCAyMDApOworICAgIEludFJlY3QgY2hpbGRSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBjaGlsZFNpemUpOworCisgICAgLy8gVGVzdCBjdWxsaW5nIG9mIGNlbnRy
ZSB0aWxlIGluIHJvb3QgbGF5ZXIuCisgICAgeworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwg
MS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjaGlsZFN0YXRl
ID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisKKyAgICAgICAg
c2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7Cisg
ICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAgIHF1YWRDdWxs
ZXIocXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCA5dSk7Cisg
ICAgfQorCisgICAgLy8gVGVzdCBjdWxsaW5nIHdoZW4gY2hpbGQgaXMgbm9uLW9wYXF1ZS4KKyAg
ICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFy
ZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAgICBPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIElu
dFJlY3QoKSwgMC45LCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCks
IGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0
LnNpemUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAgIEVY
UEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgfQorICAgIHsKKyAgICAgICAgT3du
UHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RS
ZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRT
dGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zv
cm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIGZh
bHNlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0
KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsK
KyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlz
dC5zaXplKCksIDEzdSk7CisgICAgfQorCisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUw
LCA1MCk7CisKKyAgICAvLyBUZXN0IGN1bGxpbmcgd2hlbiBjaGlsZCB0aWxlcyBsaW5lIHVwIHdp
dGggcm9vdCB0aWxlcyAodG9wLWxlZnQpLgorICAgIHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0
KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRT
dGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAg
ICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3Qp
OworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgICAgICBxdWFk
Q3VsbGVyKHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTJ1
KTsKKyAgICB9CisKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKworICAg
IC8vIFRlc3QgY3VsbGluZyB3aGVuIGNoaWxkIHRpbGVzIGxpbmUgdXAgd2l0aCByb290IHRpbGVz
IChib3R0b20tcmlnaHQpLgorICAgIHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRl
PiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwg
dHJ1ZSk7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IEND
U2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgICAgIHNldFF1
YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgICAg
ICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgICAgICBxdWFkQ3VsbGVyKHF1
YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120339</attachid>
            <date>2011-12-22 10:28:58 -0800</date>
            <delta_ts>2011-12-22 12:23:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111222132857.patch</filename>
            <type>text/plain</type>
            <size>20686</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZkNDZkMjE4YWYxNTQz
YTI1MDc1YmYwY2ZjNTU4YzZhZDUzMDIzOC4uOGJkM2YwYzU3NjRlNjNiNDFkZmMxMTcyYTEwOWM2
NGViYWU5YTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTEyLTIyICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0
aW1pemVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlclNpbXBsZTo6Q0NRdWFkQ3VsbGVyU2ltcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlclNpbXBsZTo6b3BlcmF0b3IoKSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NRdWFkQ3VsbGVyOjpDQ1F1YWRDdWxsZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6Om9wdGltaXplUXVhZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOgorCiAy
MDExLTEyLTIyICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAg
ICAgICBbQ1NTIFNoYWRlcnNdIEZvbGxvdyB1cCBidWcgdG8gZml4IGlzc3VlcyBtZW50aW9uZWQg
aW4gY29tbWVudCAyMyBmcm9tIGJ1ZyA3MzMxNwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBmNDA3MWEyNTcyMTEyOGMwZjNlZDVlOWUyYmRlYjVjNGM2MmQ1NmEzLi5hNzY1NDU5ZDBlZDhj
MmE3Y2U5M2M5YTQ5N2IzOWI5NzNlYTg4YTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDExLTEyLTIyICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMg
aW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdERyYXdRdWFkOjpUZXN0RHJhd1F1YWQp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdERyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0UXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMS0xMi0y
MSAgUGV0ZXIgS290d2ljeiAgPHBrb3R3aWN6QGdvb2dsZS5jb20+CiAKICAgICAgICAgUGx1bWJz
IHJlZnJlc2ggcmF0ZSB0aHJvdWdoIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMTEyMTFmM2FiY2E2NGQwNDU3YzFmNGI1N2ZiNmRkN2YxMmQzY2RmZS4uMmJh
NWM1MmY0MzAzZTIxNDgxOWQzZDc0MWYyMDE3YmYwMGJiOGI4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzYzNyw2ICszNjM3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwOTQ2NWJmOTll
NzlmZTcxZjI0MTc0Njc4NDUyZGFlZjg3NTkxMDc0Li5mMGFjZDkwYmNhOWRkYWI3OWRjM2M3Yzk3
YjcwYmI5YjIyMTMwMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cApAQCAtMTg3LDYgKzE4NywxNCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNw
YWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVy
biBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRp
bWl6ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQor
eworICAgIC8vIEZJWE1FOiBpZiB0aGVyZSBpcyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gc2hhcmUg
YmV0d2VlbiByZW5kZXIgcGFzc2VzIHRvCisgICAgLy8gICAgICAgIGFzc2lzdCBpbiBvcHRpbWl6
YXRpb24sIHBsdW1iIGl0IGhlcmUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhc3Nl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLmdldCgpLT5vcHRpbWl6ZVF1YWRzKCk7
Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZl
Y3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCiB7CiAgICAgQ0NMYXllckxpc3Qg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKQEAgLTI0OSw2ICsyNTcsOCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogICAgIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNz
PiA+IHBhc3NlczsKICAgICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMocGFzc2VzKTsKIAorICAgIG9w
dGltaXplUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2lu
RHJhd2luZ0ZyYW1lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ld
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBlZDM4Yjg2
ZGU0NmZjYjM1NDViODA4OWVmMTZjNmI0NTIxMzg4ZGQxLi41YzY2MWE4YTk1YjUxMDIxNTQ0MDk2
MDc2MDhjYzg5NmYwZDAzODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CkBAIC0xMzQsNiArMTM0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQ
YWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24o
KTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3RE
cmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+
Jik7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRl
clBhc3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJS
ZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZjlkNmNkM2Y5
NGMxZDM1ZmFmMzQ0NTUzZjU3YjAxOGExNjVjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBA
IC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisK
KyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIHN0ZCB7CisKKy8vIFNwZWNpYWxp
emUgZm9yIE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0b3IgZG9lc24ndCBrbm93IGhvdyB0
byByZXZlcnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBnZW5lcmFsLgordGVtcGxhdGU8PiB2
b2lkIHN3YXAoV1RGOjpPd25QdHI8V2ViQ29yZTo6Q0NEcmF3UXVhZD4mYSwgV1RGOjpPd25QdHI8
V2ViQ29yZTo6Q0NEcmF3UXVhZD4mIGIpIHsgYS5zd2FwKGIpOyB9CisKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCByZWdpb25Db250YWluc1Jl
Y3QoY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVn
aW9uIHJlY3RSZWdpb24ocmVjdCk7CisgICAgUmVnaW9uIGludGVyc2VjdFJlZ2lvbihpbnRlcnNl
Y3QocmVnaW9uLCByZWN0UmVnaW9uKSk7CisKKyAgICBpZiAoaW50ZXJzZWN0UmVnaW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChp
bnRlcnNlY3RSZWdpb24pOworICAgIHJldHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKK30KKwor
fQorCitDQ1F1YWRDdWxsZXJTaW1wbGU6OkNDUXVhZEN1bGxlclNpbXBsZSgpCit7Cit9CisKK3Zv
aWQgQ0NRdWFkQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKENDUXVhZExpc3QmIHF1YWRMaXN0KQor
eworICAgIGlmICghcXVhZExpc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1F1
YWRMaXN0IGN1bGxlZExpc3Q7CisgICAgY3VsbGVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkocXVhZExp
c3Quc2l6ZSgpKTsKKworICAgIFJlZ2lvbiBvcGFxdWVDb3ZlcmFnZVRodXNGYXI7CisKKyAgICBm
b3IgKGludCBpID0gcXVhZExpc3Quc2l6ZSgpIC0xOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdldCgpOworCisgICAgICAgIEludFJl
Y3QgcXVhZFJlY3Q7CisgICAgICAgIC8vIEZJWE1FOiBoYXZlIGFsbCBxdWFkcyB0cmVhdGVkIHRo
ZSBzYW1lIQorICAgICAgICBzd2l0Y2ggKGRyYXdRdWFkLT5tYXRlcmlhbCgpKSB7CisgICAgICAg
IGNhc2UgQ0NEcmF3UXVhZDo6Q3VzdG9tTGF5ZXI6CisgICAgICAgICAgICBxdWFkUmVjdCA9IGRy
YXdRdWFkLT50b0N1c3RvbUxheWVyRHJhd1F1YWQoKS0+bGF5ZXIoKS0+ZHJhd2FibGVDb250ZW50
UmVjdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBxdWFkUmVjdCA9IGRyYXdRdWFkLT5xdWFkVHJhbnNmb3JtKCkubWFwUmVjdChkcmF3UXVhZC0+
cXVhZFJlY3QoKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGtlZXBRdWFkID0gIXJlZ2lv
bkNvbnRhaW5zUmVjdChvcGFxdWVDb3ZlcmFnZVRodXNGYXIsIHF1YWRSZWN0KTsKKworICAgICAg
ICBpZiAoa2VlcFF1YWQgJiYgZHJhd1F1YWQtPmRyYXdzT3BhcXVlKCkgJiYgZHJhd1F1YWQtPmlz
TGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSkKKyAgICAgICAgICAgIG9wYXF1ZUNvdmVyYWdlVGh1
c0Zhci51bml0ZShSZWdpb24ocXVhZFJlY3QpKTsKKworICAgICAgICBpZiAoa2VlcFF1YWQpCisg
ICAgICAgICAgICBjdWxsZWRMaXN0LmFwcGVuZChxdWFkTGlzdFtpXS5yZWxlYXNlKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBxdWFkTGlzdFtpXS5jbGVhcigpOyAvLyBUaGlzIHJlbGVh
c2VzIHRoZSBxdWFkIHBlcm1hbmVudGx5LgorICAgIH0KKyAgICBxdWFkTGlzdC5jbGVhcigpOyAv
LyBBbGwgT3duUHRyJ3MgaW4gbGlzdCBub3cgY29udGFpbiAwLgorCisgICAgY3VsbGVkTGlzdC5y
ZXZlcnNlKCk7CisgICAgcXVhZExpc3Quc3dhcChjdWxsZWRMaXN0KTsKK30KKworfSAvLyBOYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UXVhZEN1bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NRdWFkQ3VsbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEyODljNTZhYTE5MmNjNGU0ZmU4NDk4MWNj
ODNlZjJmYTZkNjExMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDUXVhZEN1bGxlcl9oCisjZGVmaW5lIENDUXVhZEN1bGxlcl9oCisKKyNp
bmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ1F1YWRDdWxsZXIgeworcHVibGljOgorICAgIENDUXVhZEN1bGxlcigpIHsgfTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShDQ1F1YWRMaXN0JikgPSAwOworfTsKKworY2xhc3MgQ0NR
dWFkQ3VsbGVyU2ltcGxlIDogcHVibGljIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAgQ0NR
dWFkQ3VsbGVyU2ltcGxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShDQ1F1YWRM
aXN0Jik7Cit9OworCit9CisjZW5kaWYgLy8gQ0NRdWFkQ3VsbGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwCmluZGV4IDcxYWRjNGIzZTA4ZDM0MjA5ODMxYTU3MjEyZTZjYmUwMDBjNWMwYjku
LjU1MzRjOTc4MTE5ZGJiNWFmZTk4YjcyZjFkMmJkZjc2MGNjYmY5OGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFz
cy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1F1YWRD
dWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCiAKQEAgLTYzLDQgKzY0LDEyIEBAIHZvaWQgQ0NS
ZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUu
cmVsZWFzZSgpKTsKIH0KIAordm9pZCBDQ1JlbmRlclBhc3M6Om9wdGltaXplUXVhZHMoKQorewor
ICAgIENDUXVhZEN1bGxlclNpbXBsZSBxdWFkQ3VsbGVyOworICAgIHF1YWRDdWxsZXIobV9xdWFk
TGlzdCk7CisKKyAgICAvLyBGSVhNRTogQWRkIHF1YWQgc3F1aXNoaW5nIGhlcmU/Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggMTZlMDcyZTgwODBiM2RlNDlhZjJmY2MyNDExYTlj
ZGM1M2E2NDFhMC4uNjE3YTNhOWZiNjUxM2QwMzhhMjM3MDFiMDQzMGNhN2I2NDUwOWYzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTQ2LDYgKzQ2LDggQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCopOwogICAgIHZvaWQgYXBwZW5kUXVhZHNG
b3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqKTsKIAorICAgIHZvaWQgb3B0aW1pemVR
dWFkcygpOworCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QoKSBjb25zdCB7IHJldHVy
biBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkgY29u
c3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCmluZGV4IGU2NzRiYjZiODViMDg1Y2FiYWNjOWQ5ZDY0OTk5M2Q1ZDYyZmU1Y2YuLmY1MjQ3
YmEzNzdhYTg4Yzg0ZGQxMjZkMTJmYzY0ZjE3MThlNjc1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQpAQCAtNzAsNiArNzAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oJywK
KyAgICAgICAgICAgICd0ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1
bGVyVGVzdENvbW1vbi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UXVhZEN1bGxlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4N2UwMTNlNWZjYTU0MjQ1YWU3NTU1MGU5
ODU1NzA0YzRmYmE0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIK
KworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENDUXVhZEN1
bGxlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Cit9OworCitjbGFzcyBUZXN0RHJhd1F1
YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CitwdWJsaWM6CisgICAgVGVzdERyYXdRdWFkKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzdGF0ZSwgTWF0ZXJpYWwgbSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICA6IENDRHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpCisgICAgeworICAgIH0KKworICAg
IHN0YXRpYyBQYXNzT3duUHRyPFRlc3REcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzdGF0ZSwgTWF0ZXJpYWwgbSwgY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGVzdERyYXdRdWFkKHN0YXRlLCBtLCByZWN0KSk7
CisgICAgfQorfTsKKwordm9pZCBzZXRRdWFkcyhDQ1NoYXJlZFF1YWRTdGF0ZSogcm9vdFN0YXRl
LCBDQ1NoYXJlZFF1YWRTdGF0ZSogY2hpbGRTdGF0ZSwgQ0NRdWFkTGlzdCYgcXVhZExpc3QpCit7
CisgICAgcXVhZExpc3QuY2xlYXIoKTsKKworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1
YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJ
bnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVz
dERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIElu
dFJlY3QoSW50UG9pbnQoMTAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExp
c3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGls
ZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDIwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAxMDApLCBJbnRTaXpl
KDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUo
cm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAw
LCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERy
YXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJl
Y3QoSW50UG9pbnQoMjAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlz
dC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxl
ZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMjAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7
CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NE
cmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMjAwKSwgSW50U2l6
ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRl
KHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDIw
MCwgMjAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVz
dERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJ
bnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFw
cGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENv
bnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7Cisg
ICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJh
d1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAxMDApLCBJbnRTaXplKDEw
MCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUoY2hp
bGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwg
MTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7Cit9CisKK1RFU1RfRihDQ1F1YWRDdWxsZXJUZXN0
LCB2ZXJpZnlRdWFkc0FyZUN1bGxlZFByb3Blcmx5KQoreworICAgIENDUXVhZEN1bGxlclNpbXBs
ZSBxdWFkQ3VsbGVyOworICAgIENDUXVhZExpc3QgcXVhZExpc3Q7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisKKyAgICBJbnRTaXplIHJvb3RTaXplID0gSW50U2l6
ZSgzMDAsIDMwMCk7CisgICAgSW50UmVjdCByb290UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwg
cm9vdFNpemUpOworCisgICAgSW50U2l6ZSBjaGlsZFNpemUgPSBJbnRTaXplKDIwMCwgMjAwKTsK
KyAgICBJbnRSZWN0IGNoaWxkUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY2hpbGRTaXplKTsK
KworICAgIC8vIFRlc3QgY3VsbGluZyBvZiBjZW50cmUgdGlsZSBpbiByb290IGxheWVyLgorICAg
IHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVh
dGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50
UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwg
Y2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Qu
c2l6ZSgpLCAxM3UpOworICAgICAgICBxdWFkQ3VsbGVyKHF1YWRMaXN0KTsKKyAgICAgICAgRVhQ
RUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworICAgIH0KKworICAgIC8vIFRlc3QgY3VsbGlu
ZyB3aGVuIGNoaWxkIGlzIG5vbi1vcGFxdWUuCisgICAgeworICAgICAgICBPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJl
Y3QoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjaGls
ZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDAuOSwgdHJ1ZSk7CisKKyAg
ICAgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlz
dCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAgIHF1
YWRDdWxsZXIocXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAx
M3UpOworICAgIH0KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9v
dFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUp
OworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCBmYWxzZSk7CisKKyAgICAgICAgc2V0UXVhZHMo
cm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgICAgIEVY
UEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAgIHF1YWRDdWxsZXIocXVhZExp
c3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIH0KKwor
ICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgLy8gVGVzdCBjdWxs
aW5nIHdoZW4gY2hpbGQgdGlsZXMgbGluZSB1cCB3aXRoIHJvb3QgdGlsZXMgKHRvcC1sZWZ0KS4K
KyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NT
aGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6
Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3Qs
IEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0
KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRM
aXN0LnNpemUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAg
IEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEydSk7CisgICAgfQorCisgICAgY2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICAvLyBUZXN0IGN1bGxpbmcgd2hlbiBjaGls
ZCB0aWxlcyBsaW5lIHVwIHdpdGggcm9vdCB0aWxlcyAoYm90dG9tLXJpZ2h0KS4KKyAgICB7Cisg
ICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFk
U3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAgICBPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNo
aWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3Qo
KSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxk
U3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUo
KSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAgIEVYUEVDVF9F
UShxdWFkTGlzdC5zaXplKCksIDl1KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120362</attachid>
            <date>2011-12-22 12:23:56 -0800</date>
            <delta_ts>2011-12-28 13:11:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111222152353.patch</filename>
            <type>text/plain</type>
            <size>21202</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZkNDZkMjE4YWYxNTQz
YTI1MDc1YmYwY2ZjNTU4YzZhZDUzMDIzOC4uZWE4NjBiMmM5NGMxZTBkMmFmNzdmYWUzZmRkMDIy
MTc2NjY0NzdiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEyLTIyICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRl
clBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NR
dWFkQ3VsbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChzdGQ6OnN3YXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NRdWFkQ3VsbGVyU2ltcGxlOjpDQ1F1YWRDdWxsZXJTaW1wbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NRdWFkQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgu
CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6b3B0aW1pemVRdWFkcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisKIDIwMTEtMTItMjIg
IEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1Mg
U2hhZGVyc10gRm9sbG93IHVwIGJ1ZyB0byBmaXggaXNzdWVzIG1lbnRpb25lZCBpbiBjb21tZW50
IDIzIGZyb20gYnVnIDczMzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY0MDcxYTI1
NzIxMTI4YzBmM2VkNWU5ZTJiZGViNWM0YzYyZDU2YTMuLmE3NjU0NTlkMGVkOGMyYTdjZTkzYzlh
NDk3YjM5Yjk3M2VhODhhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTEtMTItMjIgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gQ3VsbCBvY2NsdWRlZCB0aWxlcyBpbiB0aWxlZCBs
YXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
NTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXN0RHJhd1F1YWQ6OlRlc3REcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0RHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRR
dWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDExLTEyLTIxICBQZXRlciBL
b3R3aWN6ICA8cGtvdHdpY3pAZ29vZ2xlLmNvbT4KIAogICAgICAgICBQbHVtYnMgcmVmcmVzaCBy
YXRlIHRocm91Z2ggV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAxMTIxMWYzYWJjYTY0ZDA0NTdjMWY0YjU3ZmI2ZGQ3ZjEyZDNjZGZlLi4yYmE1YzUyZjQzMDNl
MjE0ODE5ZDNkNzQxZjIwMTdiZjAwYmI4YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjM3LDYg
KzM2MzcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUXVhZEN1bGxlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKaW5kZXggMDM2NjYwOTJmMjMyYmIwMTM3YjYyMjFmNzY5NmRlZDBlZDNl
NTQ0Yi4uODgwNDM5ZDdiYTNkMTAxODY3OTFjYzBiODA2MmI2ZmMxMDhjZTRkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcApAQCAtMTI5LDggKzEyOSw4IEBAIFBhc3NPd25QdHI8Q0NTaGFyZWRR
dWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogCiB2
b2lkIENDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKLSAgICBJbnRSZWN0IGxheWVy
UmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDQ3VzdG9t
TGF5ZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgbGF5ZXJSZWN0LCB0aGlzKSk7
CisgICAgSW50UmVjdCBxdWFkUmVjdChxdWFkVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFJlY3Qo
ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKENDQ3VzdG9tTGF5
ZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKIH0K
IAogdm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmIHF1
YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwOTQ2NWJmOTllNzlm
ZTcxZjI0MTc0Njc4NDUyZGFlZjg3NTkxMDc0Li43NDU0YzRkY2RhOWFhMTRiMThmYjIyZTJhNTU1
Y2MwZWFjZTc3NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtMTg3LDYgKzE4NywxMiBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNl
KENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVybiBz
dXJmYWNlRGFtYWdlUmVjdDsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6
ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHBhc3Nlc1tpXS5nZXQoKS0+b3B0aW1pemVRdWFkcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFz
cz4gPiYgcGFzc2VzKQogewogICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CkBAIC0yNDksNiArMjU1LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KCkKICAgICBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CiAgICAgY2FsY3Vs
YXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CiAKKyAgICBvcHRpbWl6ZVJlbmRlclBhc3NlcyhwYXNz
ZXMpOworCiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZWQzOGI4NmRlNDZmY2IzNTQ1YjgwODllZjE2YzZi
NDUyMTM4OGRkMS4uNWM2NjFhOGE5NWI1MTAyMTU0NDA5NjA3NjA4Y2M4OTZmMGQwMzg5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTM0LDYgKzEzNCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsK
ICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBh
c3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYpOwogICAgIHZvaWQgY2FsY3VsYXRl
UmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+Jik7CiAKICAgICBPd25Q
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Y2UwMjRkYmRlZmI2NmE2OGVkMDI5OWMzZDgxMDc2M2Vh
MmNhYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5
ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIK
KworbmFtZXNwYWNlIHN0ZCB7CisKKy8vIFNwZWNpYWxpemUgZm9yIE93blB0cjxDQ0RyYXdRdWFk
PiBzaW5jZSBWZWN0b3IgZG9lc24ndCBrbm93IGhvdyB0byByZXZlcnNlIGEgVmVjdG9yIG9mIE93
blB0cjxUPiBpbiBnZW5lcmFsLgordGVtcGxhdGU8PiB2b2lkIHN3YXAoV1RGOjpPd25QdHI8V2Vi
Q29yZTo6Q0NEcmF3UXVhZD4mYSwgV1RGOjpPd25QdHI8V2ViQ29yZTo6Q0NEcmF3UXVhZD4mIGIp
IHsgYS5zd2FwKGIpOyB9CisKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
eworCitzdGF0aWMgYm9vbCByZWdpb25Db250YWluc1JlY3QoY29uc3QgUmVnaW9uJiByZWdpb24s
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVnaW9uIHJlY3RSZWdpb24ocmVjdCk7Cisg
ICAgUmVnaW9uIGludGVyc2VjdFJlZ2lvbihpbnRlcnNlY3QocmVnaW9uLCByZWN0UmVnaW9uKSk7
CisKKyAgICBpZiAoaW50ZXJzZWN0UmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdpb24pOworICAgIHJl
dHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKK30KKworfQorCitDQ1F1YWRDdWxsZXJTaW1wbGU6
OkNDUXVhZEN1bGxlclNpbXBsZSgpCit7Cit9CisKK3ZvaWQgQ0NRdWFkQ3VsbGVyU2ltcGxlOjpv
cGVyYXRvcigpKENDUXVhZExpc3QmIHF1YWRMaXN0KQoreworICAgIGlmICghcXVhZExpc3Quc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1F1YWRMaXN0IGN1bGxlZExpc3Q7CisgICAg
Y3VsbGVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkocXVhZExpc3Quc2l6ZSgpKTsKKworICAgIFJlZ2lv
biBvcGFxdWVDb3ZlcmFnZVRodXNGYXI7CisKKyAgICBmb3IgKGludCBpID0gcXVhZExpc3Quc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NEcmF3UXVhZCogZHJhd1F1YWQgPSBx
dWFkTGlzdFtpXS5nZXQoKTsKKworICAgICAgICBJbnRSZWN0IHF1YWRSZWN0KGRyYXdRdWFkLT5x
dWFkVHJhbnNmb3JtKCkubWFwUmVjdChkcmF3UXVhZC0+cXVhZFJlY3QoKSkpOworCisgICAgICAg
IGJvb2wga2VlcFF1YWQgPSAhcmVnaW9uQ29udGFpbnNSZWN0KG9wYXF1ZUNvdmVyYWdlVGh1c0Zh
ciwgcXVhZFJlY3QpOworCisgICAgICAgIGlmIChrZWVwUXVhZCAmJiBkcmF3UXVhZC0+ZHJhd3NP
cGFxdWUoKSAmJiBkcmF3UXVhZC0+aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpKQorICAgICAg
ICAgICAgb3BhcXVlQ292ZXJhZ2VUaHVzRmFyLnVuaXRlKFJlZ2lvbihxdWFkUmVjdCkpOworCisg
ICAgICAgIGlmIChrZWVwUXVhZCkKKyAgICAgICAgICAgIGN1bGxlZExpc3QuYXBwZW5kKHF1YWRM
aXN0W2ldLnJlbGVhc2UoKSk7CisgICAgfQorICAgIHF1YWRMaXN0LmNsZWFyKCk7IC8vIFJlbGVh
c2UgYW55dGhpbmcgdGhhdCByZW1haW5zLgorCisgICAgY3VsbGVkTGlzdC5yZXZlcnNlKCk7Cisg
ICAgcXVhZExpc3Quc3dhcChjdWxsZWRMaXN0KTsKK30KKworfSAvLyBOYW1lc3BhY2UgV2ViQ29y
ZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWEyODljNTZhYTE5MmNjNGU0ZmU4NDk4MWNjODNlZjJmYTZkNjEx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUXVhZEN1bGxlci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDUXVhZEN1bGxlcl9oCisjZGVmaW5lIENDUXVhZEN1bGxlcl9oCisKKyNpbmNsdWRlICJjYy9D
Q1JlbmRlclBhc3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1F1YWRDdWxs
ZXIgeworcHVibGljOgorICAgIENDUXVhZEN1bGxlcigpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
b3BlcmF0b3IoKShDQ1F1YWRMaXN0JikgPSAwOworfTsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyU2lt
cGxlIDogcHVibGljIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAgQ0NRdWFkQ3VsbGVyU2lt
cGxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShDQ1F1YWRMaXN0Jik7Cit9Owor
Cit9CisjZW5kaWYgLy8gQ0NRdWFkQ3VsbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmlu
ZGV4IDcxYWRjNGIzZTA4ZDM0MjA5ODMxYTU3MjEyZTZjYmUwMDBjNWMwYjkuLmU1ZDY1NGM5M2Fl
ZmE2M2Y5MWJjMDZjNGZlOGM4NGM3OTc4ZmUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNw
cApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDU2hh
cmVkUXVhZFN0YXRlLmgiCiAKQEAgLTYzLDQgKzY0LDEwIEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjph
cHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAg
bV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsK
IH0KIAordm9pZCBDQ1JlbmRlclBhc3M6Om9wdGltaXplUXVhZHMoKQoreworICAgIENDUXVhZEN1
bGxlclNpbXBsZSBxdWFkQ3VsbGVyOworICAgIHF1YWRDdWxsZXIobV9xdWFkTGlzdCk7Cit9CisK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggMTZlMDcyZTgwODBiM2RlNDlhZjJmY2MyNDEx
YTljZGM1M2E2NDFhMC4uNjE3YTNhOWZiNjUxM2QwMzhhMjM3MDFiMDQzMGNhN2I2NDUwOWYzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTQ2LDYgKzQ2LDggQEAgcHVibGljOgogICAgIHZv
aWQgYXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCopOwogICAgIHZvaWQgYXBwZW5kUXVh
ZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqKTsKIAorICAgIHZvaWQgb3B0aW1p
emVRdWFkcygpOworCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QoKSBjb25zdCB7IHJl
dHVybiBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IGU2NzRiYjZiODViMDg1Y2FiYWNjOWQ5ZDY0OTk5M2Q1ZDYyZmU1Y2YuLmY1
MjQ3YmEzNzdhYTg4Yzg0ZGQxMjZkMTJmYzY0ZjE3MThlNjc1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtNzAsNiArNzAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5o
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
U2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyVGVzdENvbW1vbi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDUXVhZEN1bGxlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4N2UwMTNlNWZjYTU0MjQ1YWU3NTU1
MGU5ODU1NzA0YzRmYmE0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIu
aCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENDUXVh
ZEN1bGxlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Cit9OworCitjbGFzcyBUZXN0RHJh
d1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CitwdWJsaWM6CisgICAgVGVzdERyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzdGF0ZSwgTWF0ZXJpYWwgbSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKKyAgICA6IENDRHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpCisgICAgeworICAgIH0KKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFRlc3REcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiBzdGF0ZSwgTWF0ZXJpYWwgbSwgY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGVzdERyYXdRdWFkKHN0YXRlLCBtLCByZWN0
KSk7CisgICAgfQorfTsKKwordm9pZCBzZXRRdWFkcyhDQ1NoYXJlZFF1YWRTdGF0ZSogcm9vdFN0
YXRlLCBDQ1NoYXJlZFF1YWRTdGF0ZSogY2hpbGRTdGF0ZSwgQ0NRdWFkTGlzdCYgcXVhZExpc3Qp
Cit7CisgICAgcXVhZExpc3QuY2xlYXIoKTsKKworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJh
d1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVj
dChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQs
IEludFJlY3QoSW50UG9pbnQoMTAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVh
ZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6
VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDIwMCwgMCksIEludFNpemUoMTAwLCAxMDAp
KSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUs
IENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAxMDApLCBJbnRT
aXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVh
dGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQo
MTAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVz
dERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIElu
dFJlY3QoSW50UG9pbnQoMjAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFk
TGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpU
aWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMjAwKSwgSW50U2l6ZSgxMDAsIDEwMCkp
KSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwg
Q0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMjAwKSwgSW50
U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3Jl
YXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50
KDIwMCwgMjAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50
LCBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0
LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxl
ZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7
CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAxMDApLCBJbnRTaXpl
KDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUo
Y2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEw
MCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7Cit9CisKK1RFU1RfRihDQ1F1YWRDdWxsZXJU
ZXN0LCB2ZXJpZnlRdWFkc0FyZUN1bGxlZFByb3Blcmx5KQoreworICAgIENDUXVhZEN1bGxlclNp
bXBsZSBxdWFkQ3VsbGVyOworICAgIENDUXVhZExpc3QgcXVhZExpc3Q7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisKKyAgICBJbnRTaXplIHJvb3RTaXplID0gSW50
U2l6ZSgzMDAsIDMwMCk7CisgICAgSW50UmVjdCByb290UmVjdCA9IEludFJlY3QoSW50UG9pbnQo
KSwgcm9vdFNpemUpOworCisgICAgSW50U2l6ZSBjaGlsZFNpemUgPSBJbnRTaXplKDIwMCwgMjAw
KTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY2hpbGRTaXpl
KTsKKworICAgIC8vIFRlc3QgY3VsbGluZyBvZiBjZW50cmUgdGlsZSBpbiByb290IGxheWVyLgor
ICAgIHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1No
YXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpj
cmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwg
SW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQo
KSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExp
c3Quc2l6ZSgpLCAxM3UpOworICAgICAgICBxdWFkQ3VsbGVyKHF1YWRMaXN0KTsKKyAgICAgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworICAgIH0KKworICAgIC8vIFRlc3QgY3Vs
bGluZyB3aGVuIGNoaWxkIGlzIG5vbi1vcGFxdWUuCisgICAgeworICAgICAgICBPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIElu
dFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBj
aGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDAuOSwgdHJ1ZSk7CisK
KyAgICAgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFk
TGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAg
IHF1YWRDdWxsZXIocXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgp
LCAxM3UpOworICAgIH0KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
cm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRy
dWUpOworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1No
YXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCBmYWxzZSk7CisKKyAgICAgICAgc2V0UXVh
ZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgICAg
IEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAgIHF1YWRDdWxsZXIocXVh
ZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIH0K
KworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgLy8gVGVzdCBj
dWxsaW5nIHdoZW4gY2hpbGQgdGlsZXMgbGluZSB1cCB3aXRoIHJvb3QgdGlsZXMgKHRvcC1sZWZ0
KS4KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAg
ICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0
ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJl
Y3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUu
Z2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1
YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAg
ICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEydSk7CisgICAgfQorCisgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICAvLyBUZXN0IGN1bGxpbmcgd2hlbiBj
aGlsZCB0aWxlcyBsaW5lIHVwIHdpdGggcm9vdCB0aWxlcyAoYm90dG9tLXJpZ2h0KS4KKyAgICB7
CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJl
Y3QoKSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNo
aWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNp
emUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAgIEVYUEVD
VF9FUShxdWFkTGlzdC5zaXplKCksIDl1KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120696</attachid>
            <date>2011-12-28 13:11:38 -0800</date>
            <delta_ts>2011-12-29 08:11:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111228161136.patch</filename>
            <type>text/plain</type>
            <size>21715</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2MyMzJiYTNkNTU5YmU4
MzRjN2ZkZDY1MDI3ZmZmYjhiNGVhNzcyZi4uZjU5MDM0MDQwY2IzMDAxNTdhY2JlYTE4YjBjNjMw
M2YzNjExYjNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTI4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3Nlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChzdGQ6OnN3YXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NR
dWFkQ3VsbGVyU2ltcGxlOjpDQ1F1YWRDdWxsZXJTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NRdWFkQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmguCisgICAgICAg
IChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6b3B0aW1pemVRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisKIDIwMTEtMTItMjggIFZzZXZvbG9k
IFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
QWRkIGRvbWFpbi5wbmcgdG8gV2ViQ29yZS5neXBpIC8gV2ViS2l0LnFyYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMzIwMjRlYmU4YzM5N2RiODI4ZDk0ODE1MzM2YWQ1YTdhZGNjZjk1
Zi4uNDg0ZGQ4YTdjNmUzMDM0ZjkwOWY4ZmM1ZDkxYTZlYzY1ODVmYTg2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMi0yOCAgVy4gSmFtZXMgTWFj
TGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDdWxs
IG9jY2x1ZGVkIHRpbGVzIGluIHRpbGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0ND
UXVhZEN1bGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVh
ZDo6VGVzdERyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Rf
Rik6CisKIDIwMTEtMTItMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDM3MzQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggYTE2M2E4ZGY1ZDNmZjMzMWFjYTAzZWUyZGJhZmJkNDVmNmQyODA2YS4uYWEy
MTE3MzExYTcyMDQxOWQ1MjE3YmM1OTgxOWQwZDg5YzRjNjFlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzYzMCw2ICszNjMwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDAzNjY2MDkyZjIzMmJiMDEzN2I2MjIxZjc2
OTZkZWQwZWQzZTU0NGIuLjk2MjMzYjFiNjgyOTQwY2M3YTNjNDk4ODdjMTQ2MGQzNmRkMmM2MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEyOSw4ICsxMjksOCBAQCBQYXNzT3duUHRy
PENDU2hhcmVkUXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkg
Y29uc3QKIAogdm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExp
c3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7Ci0gICAgSW50
UmVjdCBsYXllclJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIHF1YWRMaXN0LmFwcGVu
ZChDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGxheWVyUmVj
dCwgdGhpcykpOworICAgIEludFJlY3QgcXVhZFJlY3QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCks
IC0wLjUgKiBib3VuZHMoKS5oZWlnaHQoKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVp
Z2h0KCkpOworICAgIHF1YWRMaXN0LmFwcGVuZChDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmNyZWF0
ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0aGlzKSk7CiB9CiAKIHZvaWQgQ0NMYXllcklt
cGw6OmFwcGVuZERlYnVnQm9yZGVyUXVhZChDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkgY29uc3QKQEAgLTE3Niw3ICsxNzYsMTQg
QEAgY29uc3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogCiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGRyYXdUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdChk
cmF3VHJhbnNmb3JtKCkpOworCisgICAgZmxvYXQgb2Zmc2V0WCA9IChib3VuZHMoKS53aWR0aCgp
ICUgMikgPyAtMC41IDogMDsKKyAgICBmbG9hdCBvZmZzZXRZID0gKGJvdW5kcygpLmhlaWdodCgp
ICUgMikgPyAtMC41IDogMDsKKyAgICBpZiAob2Zmc2V0WCB8fCBvZmZzZXRZKQorICAgICAgICBx
dC50cmFuc2xhdGUob2Zmc2V0WCwgb2Zmc2V0WSk7CisKKyAgICByZXR1cm4gcXQ7CiB9CiAKIHZv
aWQgQ0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwOTQ2NWJmOTllNzlm
ZTcxZjI0MTc0Njc4NDUyZGFlZjg3NTkxMDc0Li43NDU0YzRkY2RhOWFhMTRiMThmYjIyZTJhNTU1
Y2MwZWFjZTc3NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtMTg3LDYgKzE4NywxMiBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNl
KENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVybiBz
dXJmYWNlRGFtYWdlUmVjdDsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6
ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHBhc3Nlc1tpXS5nZXQoKS0+b3B0aW1pemVRdWFkcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFz
cz4gPiYgcGFzc2VzKQogewogICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CkBAIC0yNDksNiArMjU1LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KCkKICAgICBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CiAgICAgY2FsY3Vs
YXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CiAKKyAgICBvcHRpbWl6ZVJlbmRlclBhc3NlcyhwYXNz
ZXMpOworCiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZWQzOGI4NmRlNDZmY2IzNTQ1YjgwODllZjE2YzZi
NDUyMTM4OGRkMS4uNWM2NjFhOGE5NWI1MTAyMTU0NDA5NjA3NjA4Y2M4OTZmMGQwMzg5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTM0LDYgKzEzNCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsK
ICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBh
c3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYpOwogICAgIHZvaWQgY2FsY3VsYXRl
UmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+Jik7CiAKICAgICBPd25Q
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Y2UwMjRkYmRlZmI2NmE2OGVkMDI5OWMzZDgxMDc2M2Vh
MmNhYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5
ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIK
KworbmFtZXNwYWNlIHN0ZCB7CisKKy8vIFNwZWNpYWxpemUgZm9yIE93blB0cjxDQ0RyYXdRdWFk
PiBzaW5jZSBWZWN0b3IgZG9lc24ndCBrbm93IGhvdyB0byByZXZlcnNlIGEgVmVjdG9yIG9mIE93
blB0cjxUPiBpbiBnZW5lcmFsLgordGVtcGxhdGU8PiB2b2lkIHN3YXAoV1RGOjpPd25QdHI8V2Vi
Q29yZTo6Q0NEcmF3UXVhZD4mYSwgV1RGOjpPd25QdHI8V2ViQ29yZTo6Q0NEcmF3UXVhZD4mIGIp
IHsgYS5zd2FwKGIpOyB9CisKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
eworCitzdGF0aWMgYm9vbCByZWdpb25Db250YWluc1JlY3QoY29uc3QgUmVnaW9uJiByZWdpb24s
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVnaW9uIHJlY3RSZWdpb24ocmVjdCk7Cisg
ICAgUmVnaW9uIGludGVyc2VjdFJlZ2lvbihpbnRlcnNlY3QocmVnaW9uLCByZWN0UmVnaW9uKSk7
CisKKyAgICBpZiAoaW50ZXJzZWN0UmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdpb24pOworICAgIHJl
dHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKK30KKworfQorCitDQ1F1YWRDdWxsZXJTaW1wbGU6
OkNDUXVhZEN1bGxlclNpbXBsZSgpCit7Cit9CisKK3ZvaWQgQ0NRdWFkQ3VsbGVyU2ltcGxlOjpv
cGVyYXRvcigpKENDUXVhZExpc3QmIHF1YWRMaXN0KQoreworICAgIGlmICghcXVhZExpc3Quc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1F1YWRMaXN0IGN1bGxlZExpc3Q7CisgICAg
Y3VsbGVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkocXVhZExpc3Quc2l6ZSgpKTsKKworICAgIFJlZ2lv
biBvcGFxdWVDb3ZlcmFnZVRodXNGYXI7CisKKyAgICBmb3IgKGludCBpID0gcXVhZExpc3Quc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NEcmF3UXVhZCogZHJhd1F1YWQgPSBx
dWFkTGlzdFtpXS5nZXQoKTsKKworICAgICAgICBJbnRSZWN0IHF1YWRSZWN0KGRyYXdRdWFkLT5x
dWFkVHJhbnNmb3JtKCkubWFwUmVjdChkcmF3UXVhZC0+cXVhZFJlY3QoKSkpOworCisgICAgICAg
IGJvb2wga2VlcFF1YWQgPSAhcmVnaW9uQ29udGFpbnNSZWN0KG9wYXF1ZUNvdmVyYWdlVGh1c0Zh
ciwgcXVhZFJlY3QpOworCisgICAgICAgIGlmIChrZWVwUXVhZCAmJiBkcmF3UXVhZC0+ZHJhd3NP
cGFxdWUoKSAmJiBkcmF3UXVhZC0+aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpKQorICAgICAg
ICAgICAgb3BhcXVlQ292ZXJhZ2VUaHVzRmFyLnVuaXRlKFJlZ2lvbihxdWFkUmVjdCkpOworCisg
ICAgICAgIGlmIChrZWVwUXVhZCkKKyAgICAgICAgICAgIGN1bGxlZExpc3QuYXBwZW5kKHF1YWRM
aXN0W2ldLnJlbGVhc2UoKSk7CisgICAgfQorICAgIHF1YWRMaXN0LmNsZWFyKCk7IC8vIFJlbGVh
c2UgYW55dGhpbmcgdGhhdCByZW1haW5zLgorCisgICAgY3VsbGVkTGlzdC5yZXZlcnNlKCk7Cisg
ICAgcXVhZExpc3Quc3dhcChjdWxsZWRMaXN0KTsKK30KKworfSAvLyBOYW1lc3BhY2UgV2ViQ29y
ZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWEyODljNTZhYTE5MmNjNGU0ZmU4NDk4MWNjODNlZjJmYTZkNjEx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUXVhZEN1bGxlci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDUXVhZEN1bGxlcl9oCisjZGVmaW5lIENDUXVhZEN1bGxlcl9oCisKKyNpbmNsdWRlICJjYy9D
Q1JlbmRlclBhc3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1F1YWRDdWxs
ZXIgeworcHVibGljOgorICAgIENDUXVhZEN1bGxlcigpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
b3BlcmF0b3IoKShDQ1F1YWRMaXN0JikgPSAwOworfTsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyU2lt
cGxlIDogcHVibGljIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAgQ0NRdWFkQ3VsbGVyU2lt
cGxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShDQ1F1YWRMaXN0Jik7Cit9Owor
Cit9CisjZW5kaWYgLy8gQ0NRdWFkQ3VsbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmlu
ZGV4IDcxYWRjNGIzZTA4ZDM0MjA5ODMxYTU3MjEyZTZjYmUwMDBjNWMwYjkuLmU1ZDY1NGM5M2Fl
ZmE2M2Y5MWJjMDZjNGZlOGM4NGM3OTc4ZmUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNw
cApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDU2hh
cmVkUXVhZFN0YXRlLmgiCiAKQEAgLTYzLDQgKzY0LDEwIEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjph
cHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAg
bV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsK
IH0KIAordm9pZCBDQ1JlbmRlclBhc3M6Om9wdGltaXplUXVhZHMoKQoreworICAgIENDUXVhZEN1
bGxlclNpbXBsZSBxdWFkQ3VsbGVyOworICAgIHF1YWRDdWxsZXIobV9xdWFkTGlzdCk7Cit9CisK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggMTZlMDcyZTgwODBiM2RlNDlhZjJmY2MyNDEx
YTljZGM1M2E2NDFhMC4uNjE3YTNhOWZiNjUxM2QwMzhhMjM3MDFiMDQzMGNhN2I2NDUwOWYzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTQ2LDYgKzQ2LDggQEAgcHVibGljOgogICAgIHZv
aWQgYXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCopOwogICAgIHZvaWQgYXBwZW5kUXVh
ZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqKTsKIAorICAgIHZvaWQgb3B0aW1p
emVRdWFkcygpOworCiAgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QoKSBjb25zdCB7IHJl
dHVybiBtX3F1YWRMaXN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IGU2NzRiYjZiODViMDg1Y2FiYWNjOWQ5ZDY0OTk5M2Q1ZDYyZmU1Y2YuLmY1
MjQ3YmEzNzdhYTg4Yzg0ZGQxMjZkMTJmYzY0ZjE3MThlNjc1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtNzAsNiArNzAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5o
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
U2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyVGVzdENvbW1vbi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDUXVhZEN1bGxlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4N2UwMTNlNWZjYTU0MjQ1YWU3NTU1
MGU5ODU1NzA0YzRmYmE0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIu
aCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENDUXVh
ZEN1bGxlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Cit9OworCitjbGFzcyBUZXN0RHJh
d1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CitwdWJsaWM6CisgICAgVGVzdERyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzdGF0ZSwgTWF0ZXJpYWwgbSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKKyAgICA6IENDRHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpCisgICAgeworICAgIH0KKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFRlc3REcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiBzdGF0ZSwgTWF0ZXJpYWwgbSwgY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGVzdERyYXdRdWFkKHN0YXRlLCBtLCByZWN0
KSk7CisgICAgfQorfTsKKwordm9pZCBzZXRRdWFkcyhDQ1NoYXJlZFF1YWRTdGF0ZSogcm9vdFN0
YXRlLCBDQ1NoYXJlZFF1YWRTdGF0ZSogY2hpbGRTdGF0ZSwgQ0NRdWFkTGlzdCYgcXVhZExpc3Qp
Cit7CisgICAgcXVhZExpc3QuY2xlYXIoKTsKKworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJh
d1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVj
dChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQs
IEludFJlY3QoSW50UG9pbnQoMTAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVh
ZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6
VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDIwMCwgMCksIEludFNpemUoMTAwLCAxMDAp
KSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUs
IENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAxMDApLCBJbnRT
aXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVh
dGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQo
MTAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVz
dERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIElu
dFJlY3QoSW50UG9pbnQoMjAwLCAxMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFk
TGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpU
aWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMjAwKSwgSW50U2l6ZSgxMDAsIDEwMCkp
KSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwg
Q0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMjAwKSwgSW50
U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3Jl
YXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50
KDIwMCwgMjAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50
LCBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0
LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxl
ZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7
CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgwLCAxMDApLCBJbnRTaXpl
KDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUo
Y2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEw
MCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7Cit9CisKK1RFU1RfRihDQ1F1YWRDdWxsZXJU
ZXN0LCB2ZXJpZnlRdWFkc0FyZUN1bGxlZFByb3Blcmx5KQoreworICAgIENDUXVhZEN1bGxlclNp
bXBsZSBxdWFkQ3VsbGVyOworICAgIENDUXVhZExpc3QgcXVhZExpc3Q7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisKKyAgICBJbnRTaXplIHJvb3RTaXplID0gSW50
U2l6ZSgzMDAsIDMwMCk7CisgICAgSW50UmVjdCByb290UmVjdCA9IEludFJlY3QoSW50UG9pbnQo
KSwgcm9vdFNpemUpOworCisgICAgSW50U2l6ZSBjaGlsZFNpemUgPSBJbnRTaXplKDIwMCwgMjAw
KTsKKyAgICBJbnRSZWN0IGNoaWxkUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY2hpbGRTaXpl
KTsKKworICAgIC8vIFRlc3QgY3VsbGluZyBvZiBjZW50cmUgdGlsZSBpbiByb290IGxheWVyLgor
ICAgIHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1No
YXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpj
cmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwg
SW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQo
KSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExp
c3Quc2l6ZSgpLCAxM3UpOworICAgICAgICBxdWFkQ3VsbGVyKHF1YWRMaXN0KTsKKyAgICAgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworICAgIH0KKworICAgIC8vIFRlc3QgY3Vs
bGluZyB3aGVuIGNoaWxkIGlzIG5vbi1vcGFxdWUuCisgICAgeworICAgICAgICBPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIElu
dFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBj
aGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDAuOSwgdHJ1ZSk7CisK
KyAgICAgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFk
TGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAg
IHF1YWRDdWxsZXIocXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgp
LCAxM3UpOworICAgIH0KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
cm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRy
dWUpOworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1No
YXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCBmYWxzZSk7CisKKyAgICAgICAgc2V0UXVh
ZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgICAg
IEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgICAgIHF1YWRDdWxsZXIocXVh
ZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIH0K
KworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgLy8gVGVzdCBj
dWxsaW5nIHdoZW4gY2hpbGQgdGlsZXMgbGluZSB1cCB3aXRoIHJvb3QgdGlsZXMgKHRvcC1sZWZ0
KS4KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAg
ICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0
ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJl
Y3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUu
Z2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1
YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAg
ICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEydSk7CisgICAgfQorCisgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICAvLyBUZXN0IGN1bGxpbmcgd2hlbiBj
aGlsZCB0aWxlcyBsaW5lIHVwIHdpdGggcm9vdCB0aWxlcyAoYm90dG9tLXJpZ2h0KS4KKyAgICB7
CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgICAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJl
Y3QoKSwgMS4wLCB0cnVlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNo
aWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNp
emUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAgICAgIEVYUEVD
VF9FUShxdWFkTGlzdC5zaXplKCksIDl1KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120750</attachid>
            <date>2011-12-29 08:11:39 -0800</date>
            <delta_ts>2012-01-03 11:40:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20111229111138.patch</filename>
            <type>text/plain</type>
            <size>21531</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2MyMzJiYTNkNTU5YmU4
MzRjN2ZkZDY1MDI3ZmZmYjhiNGVhNzcyZi4uYzQ0M2EzOTdhNzhlOTRiMjAxYjc2NDI0YTljNzI1
ZDcxMDdmMjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTI5ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3Nlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChzdGQ6OnN3YXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NR
dWFkQ3VsbGVyU2ltcGxlOjpDQ1F1YWRDdWxsZXJTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NRdWFkQ3VsbGVyU2ltcGxlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1F1YWRDdWxsZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyUGFzczo6b3B0aW1pemVRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisKIDIwMTEtMTItMjggIFZzZXZvbG9kIFZsYXNvdiAg
PHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGRvbWFp
bi5wbmcgdG8gV2ViQ29yZS5neXBpIC8gV2ViS2l0LnFyYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggMzIwMjRlYmU4YzM5N2RiODI4ZDk0ODE1MzM2YWQ1YTdhZGNjZjk1Zi4uMjA2M2U1
YzA4ZDgyNmI2ZjQzOTIxYmMyYWZhYjgzYmI2OGQ1MTFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMi0yOSAgVy4gSmFtZXMgTWFjTGVhbiAgPHdq
bWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDdWxsIG9jY2x1ZGVk
IHRpbGVzIGluIHRpbGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA1MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6VGVzdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisKIDIw
MTEtMTItMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDM3MzQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYTE2M2E4ZGY1ZDNmZjMzMWFjYTAzZWUyZGJhZmJkNDVmNmQyODA2YS4uYWEyMTE3MzExYTcy
MDQxOWQ1MjE3YmM1OTgxOWQwZDg5YzRjNjFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYzMCw2
ICszNjMwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Byb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCmluZGV4IDAzNjY2MDkyZjIzMmJiMDEzN2I2MjIxZjc2OTZkZWQwZWQz
ZTU0NGIuLmQ0NjYxOTA3NmI2ZTEwMDMyNTY2MmEzZjJlNGFiZDlmZWM5ZTcxMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKQEAgLTEyOSw4ICsxMjksOCBAQCBQYXNzT3duUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIAog
dm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7Ci0gICAgSW50UmVjdCBsYXll
clJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIHF1YWRMaXN0LmFwcGVuZChDQ0N1c3Rv
bUxheWVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGxheWVyUmVjdCwgdGhpcykp
OworICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIHF1YWRM
aXN0LmFwcGVuZChDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUs
IHF1YWRSZWN0LCB0aGlzKSk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OmFwcGVuZERlYnVnQm9y
ZGVyUXVhZChDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YXJlZFF1YWRTdGF0ZSkgY29uc3QKQEAgLTE3Niw3ICsxNzYsMTMgQEAgY29uc3QgSW50UmVjdCBD
Q0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRyYXdUcmFu
c2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdCA9IGRyYXdUcmFuc2Zvcm0oKTsK
KworICAgIGZsb2F0IG9mZnNldFggPSAtMC41ICogYm91bmRzKCkud2lkdGgoKTsKKyAgICBmbG9h
dCBvZmZzZXRZID0gLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpOworICAgIHF0LnRyYW5zbGF0ZShv
ZmZzZXRYLCBvZmZzZXRZKTsKKworICAgIHJldHVybiBxdDsKIH0KIAogdm9pZCBDQ0xheWVySW1w
bDo6d3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDA5NDY1YmY5OWU3OWZlNzFmMjQxNzQ2Nzg0
NTJkYWVmODc1OTEwNzQuLjc0NTRjNGRjZGE5YWExNGIxOGZiMjJlMmE1NTVjYzBlYWNlNzc3MTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xODcsNiArMTg3
LDEyIEBAIHN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwq
IHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvCiAgICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VS
ZWN0OwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om9wdGltaXplUmVuZGVyUGFzc2Vz
KFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLmdl
dCgpLT5vcHRpbWl6ZVF1YWRzKCk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fs
Y3VsYXRlUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMp
CiB7CiAgICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKQEAgLTI0OSw2ICsy
NTUsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogICAgIFZlY3Rv
cjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IHBhc3NlczsKICAgICBjYWxjdWxhdGVSZW5kZXJQYXNz
ZXMocGFzc2VzKTsKIAorICAgIG9wdGltaXplUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisKICAgICBt
X2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJh
d1JlbmRlclBhc3MocGFzc2VzW2ldLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAppbmRleCBlZDM4Yjg2ZGU0NmZjYjM1NDViODA4OWVmMTZjNmI0NTIxMzg4ZGQxLi41
YzY2MWE4YTk1YjUxMDIxNTQ0MDk2MDc2MDhjYzg5NmYwZDAzODk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMzQsNiArMTM0LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBk
YXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKFZlY3RvcjxP
d25QdHI8Q0NSZW5kZXJQYXNzPiA+Jik7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
VmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdjZTAyNGRiZGVmYjY2YTY4ZWQwMjk5YzNkODEwNzYzZWEyY2FiNzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJj
Yy9DQ1F1YWRDdWxsZXIuaCIKKworI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3Mu
aCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgorCituYW1lc3BhY2Ug
c3RkIHsKKworLy8gU3BlY2lhbGl6ZSBmb3IgT3duUHRyPENDRHJhd1F1YWQ+IHNpbmNlIFZlY3Rv
ciBkb2Vzbid0IGtub3cgaG93IHRvIHJldmVyc2UgYSBWZWN0b3Igb2YgT3duUHRyPFQ+IGluIGdl
bmVyYWwuCit0ZW1wbGF0ZTw+IHZvaWQgc3dhcChXVEY6Ok93blB0cjxXZWJDb3JlOjpDQ0RyYXdR
dWFkPiZhLCBXVEY6Ok93blB0cjxXZWJDb3JlOjpDQ0RyYXdRdWFkPiYgYikgeyBhLnN3YXAoYik7
IH0KKworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBi
b29sIHJlZ2lvbkNvbnRhaW5zUmVjdChjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBSZWdpb24gcmVjdFJlZ2lvbihyZWN0KTsKKyAgICBSZWdpb24gaW50
ZXJzZWN0UmVnaW9uKGludGVyc2VjdChyZWdpb24sIHJlY3RSZWdpb24pKTsKKworICAgIGlmIChp
bnRlcnNlY3RSZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZWN0UmVnaW9uLnN1YnRyYWN0KGludGVyc2VjdFJlZ2lvbik7CisgICAgcmV0dXJuIHJlY3RSZWdp
b24uaXNFbXB0eSgpOworfQorCit9CisKK0NDUXVhZEN1bGxlclNpbXBsZTo6Q0NRdWFkQ3VsbGVy
U2ltcGxlKCkKK3sKK30KKwordm9pZCBDQ1F1YWRDdWxsZXJTaW1wbGU6Om9wZXJhdG9yKCkoQ0NR
dWFkTGlzdCYgcXVhZExpc3QpCit7CisgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENDUXVhZExpc3QgY3VsbGVkTGlzdDsKKyAgICBjdWxsZWRMaXN0LnJl
c2VydmVDYXBhY2l0eShxdWFkTGlzdC5zaXplKCkpOworCisgICAgUmVnaW9uIG9wYXF1ZUNvdmVy
YWdlVGh1c0ZhcjsKKworICAgIGZvciAoaW50IGkgPSBxdWFkTGlzdC5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICBDQ0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdl
dCgpOworCisgICAgICAgIEludFJlY3QgcXVhZFJlY3QoZHJhd1F1YWQtPnF1YWRUcmFuc2Zvcm0o
KS5tYXBSZWN0KGRyYXdRdWFkLT5xdWFkUmVjdCgpKSk7CisKKyAgICAgICAgYm9vbCBrZWVwUXVh
ZCA9ICFyZWdpb25Db250YWluc1JlY3Qob3BhcXVlQ292ZXJhZ2VUaHVzRmFyLCBxdWFkUmVjdCk7
CisKKyAgICAgICAgaWYgKGtlZXBRdWFkICYmIGRyYXdRdWFkLT5kcmF3c09wYXF1ZSgpICYmIGRy
YXdRdWFkLT5pc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkpCisgICAgICAgICAgICBvcGFxdWVD
b3ZlcmFnZVRodXNGYXIudW5pdGUoUmVnaW9uKHF1YWRSZWN0KSk7CisKKyAgICAgICAgaWYgKGtl
ZXBRdWFkKQorICAgICAgICAgICAgY3VsbGVkTGlzdC5hcHBlbmQocXVhZExpc3RbaV0ucmVsZWFz
ZSgpKTsKKyAgICB9CisgICAgcXVhZExpc3QuY2xlYXIoKTsgLy8gUmVsZWFzZSBhbnl0aGluZyB0
aGF0IHJlbWFpbnMuCisKKyAgICBjdWxsZWRMaXN0LnJldmVyc2UoKTsKKyAgICBxdWFkTGlzdC5z
d2FwKGN1bGxlZExpc3QpOworfQorCit9IC8vIE5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YTI4OWM1NmFhMTkyY2M0ZTRmZTg0OTgxY2M4M2VmMmZhNmQ2MTExCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NR
dWFkQ3VsbGVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NRdWFkQ3VsbGVy
X2gKKyNkZWZpbmUgQ0NRdWFkQ3VsbGVyX2gKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUXVhZEN1bGxlciB7CitwdWJsaWM6
CisgICAgQ0NRdWFkQ3VsbGVyKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKEND
UXVhZExpc3QmKSA9IDA7Cit9OworCitjbGFzcyBDQ1F1YWRDdWxsZXJTaW1wbGUgOiBwdWJsaWMg
Q0NRdWFkQ3VsbGVyIHsKK3B1YmxpYzoKKyAgICBDQ1F1YWRDdWxsZXJTaW1wbGUoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKENDUXVhZExpc3QmKTsKK307CisKK30KKyNlbmRpZiAv
LyBDQ1F1YWRDdWxsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggNzFhZGM0YjNl
MDhkMzQyMDk4MzFhNTcyMTJlNmNiZTAwMGM1YzBiOS4uZTVkNjU0YzkzYWVmYTYzZjkxYmMwNmM0
ZmU4Yzg0Yzc5NzhmZTI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aCIKIApAQCAtNjMsNCArNjQsMTAgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9y
UmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBtX3NoYXJlZFF1YWRT
dGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCit2b2lkIEND
UmVuZGVyUGFzczo6b3B0aW1pemVRdWFkcygpCit7CisgICAgQ0NRdWFkQ3VsbGVyU2ltcGxlIHF1
YWRDdWxsZXI7CisgICAgcXVhZEN1bGxlcihtX3F1YWRMaXN0KTsKK30KKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaAppbmRleCAxNmUwNzJlODA4MGIzZGU0OWFmMmZjYzI0MTFhOWNkYzUzYTY0MWEw
Li42MTdhM2E5ZmI2NTEzZDAzOGEyMzcwMWIwNDMwY2E3YjY0NTA5ZjM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuaApAQCAtNDYsNiArNDYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRRdWFk
c0ZvckxheWVyKENDTGF5ZXJJbXBsKik7CiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1
cmZhY2VMYXllcihDQ0xheWVySW1wbCopOwogCisgICAgdm9pZCBvcHRpbWl6ZVF1YWRzKCk7CisK
ICAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExp
c3Q7IH0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldFN1cmZhY2U7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
ZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5OTkzZDVkNjJmZTVjZi4uZjUyNDdiYTM3N2FhODhj
ODRkZDEyNmQxMmZjNjRmMTcxOGU2NzU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC03MCw2ICs3MCw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAorICAgICAgICAg
ICAgJ3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Jl
bmRlclN1cmZhY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0
ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29t
bW9uLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRD
dWxsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVy
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg3ZTAxM2U1ZmNhNTQyNDVhZTc1NTUwZTk4NTU3MDRjNGZi
YTRjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NR
dWFkQ3VsbGVyVGVzdC5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgorCisjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyVGVzdCA6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK307CisKK2NsYXNzIFRlc3REcmF3UXVhZCA6IHB1Ymxp
YyBDQ0RyYXdRdWFkIHsKK3B1YmxpYzoKKyAgICBUZXN0RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHN0YXRlLCBNYXRlcmlhbCBtLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIDog
Q0NEcmF3UXVhZChzdGF0ZSwgbSwgcmVjdCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFBh
c3NPd25QdHI8VGVzdERyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHN0
YXRlLCBNYXRlcmlhbCBtLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUZXN0RHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpKTsKKyAgICB9Cit9
OworCit2b2lkIHNldFF1YWRzKENDU2hhcmVkUXVhZFN0YXRlKiByb290U3RhdGUsIENDU2hhcmVk
UXVhZFN0YXRlKiBjaGlsZFN0YXRlLCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCkKK3sKKyAgICBxdWFk
TGlzdC5jbGVhcigpOworCisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRl
KHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KCks
IEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6
OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQ
b2ludCgxMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQs
IEludFJlY3QoSW50UG9pbnQoMjAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVh
ZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6
VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDAp
KSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUs
IENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDEwMCksIElu
dFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNy
ZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2lu
dCgyMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChU
ZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwg
SW50UmVjdChJbnRQb2ludCgwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFk
TGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpU
aWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAw
KSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRl
LCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMjAwLCAyMDApLCBJ
bnRTaXplKDEwMCwgMTAwKSkpKTsKKworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6
OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50
UG9pbnQoKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3RE
cmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50
UmVjdChJbnRQb2ludCgxMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlz
dC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGls
ZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAxMDApLCBJbnRT
aXplKDEwMCwgMTAwKSkpKTsKK30KKworVEVTVF9GKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeVF1
YWRzQXJlQ3VsbGVkUHJvcGVybHkpCit7CisgICAgQ0NRdWFkQ3VsbGVyU2ltcGxlIHF1YWRDdWxs
ZXI7CisgICAgQ0NRdWFkTGlzdCBxdWFkTGlzdDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
aGlsZFRyYW5zZm9ybTsKKworICAgIEludFNpemUgcm9vdFNpemUgPSBJbnRTaXplKDMwMCwgMzAw
KTsKKyAgICBJbnRSZWN0IHJvb3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCByb290U2l6ZSk7
CisKKyAgICBJbnRTaXplIGNoaWxkU2l6ZSA9IEludFNpemUoMjAwLCAyMDApOworICAgIEludFJl
Y3QgY2hpbGRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjaGlsZFNpemUpOworCisgICAgLy8g
VGVzdCBjdWxsaW5nIG9mIGNlbnRyZSB0aWxlIGluIHJvb3QgbGF5ZXIuCisgICAgeworICAgICAg
ICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRl
OjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
cm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgT3duUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRy
YW5zZm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEu
MCwgdHJ1ZSk7CisKKyAgICAgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRl
LmdldCgpLCBxdWFkTGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEz
dSk7CisgICAgICAgIHF1YWRDdWxsZXIocXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVh
ZExpc3Quc2l6ZSgpLCA5dSk7CisgICAgfQorCisgICAgLy8gVGVzdCBjdWxsaW5nIHdoZW4gY2hp
bGQgaXMgbm9uLW9wYXF1ZS4KKyAgICB7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0
ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAs
IHRydWUpOworICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMC45LCB0cnVlKTsKKworICAgICAgICBzZXRR
dWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAg
ICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihx
dWFkTGlzdCk7CisgICAgICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAg
fQorICAgIHsKKyAgICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAg
IE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRl
OjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVj
dCwgSW50UmVjdCgpLCAxLjAsIGZhbHNlKTsKKworICAgICAgICBzZXRRdWFkcyhyb290U3RhdGUu
Z2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1
YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICAgICAgcXVhZEN1bGxlcihxdWFkTGlzdCk7CisgICAg
ICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgfQorCisgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICAvLyBUZXN0IGN1bGxpbmcgd2hlbiBj
aGlsZCB0aWxlcyBsaW5lIHVwIHdpdGggcm9vdCB0aWxlcyAodG9wLWxlZnQpLgorICAgIHsKKyAg
ICAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRT
dGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hp
bGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgp
LCAxLjAsIHRydWUpOworCisgICAgICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRT
dGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgp
LCAxM3UpOworICAgICAgICBxdWFkQ3VsbGVyKHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VR
KHF1YWRMaXN0LnNpemUoKSwgMTJ1KTsKKyAgICB9CisKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNTAsIDUwKTsKKworICAgIC8vIFRlc3QgY3VsbGluZyB3aGVuIGNoaWxkIHRpbGVzIGxp
bmUgdXAgd2l0aCByb290IHRpbGVzIChib3R0b20tcmlnaHQpLgorICAgIHsKKyAgICAgICAgT3du
UHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RS
ZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgICAgIE93blB0cjxDQ1NoYXJlZFF1YWRT
dGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zv
cm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRy
dWUpOworCisgICAgICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQo
KSwgcXVhZExpc3QpOworICAgICAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOwor
ICAgICAgICBxdWFkQ3VsbGVyKHF1YWRMaXN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHF1YWRMaXN0
LnNpemUoKSwgOXUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120973</attachid>
            <date>2012-01-03 11:40:27 -0800</date>
            <delta_ts>2012-01-05 14:53:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20120103144025.patch</filename>
            <type>text/plain</type>
            <size>22259</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQxOWUyOGYzZjMyNGI1
NmRmZjUzOWMzODEyMmJlN2VhYTllZDJlYi4uNTFjMDg4ODg1OWFlNDBhYTExMmM2ZmQyMzk0Njg3
MzJjOWRjOGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAxLTAzICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQ
YXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVy
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVh
ZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpvcHRpbWl6ZVF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaDoKKwogMjAxMi0wMS0wMyAgQWxl
eGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBnZXRD
b21wdXRlZFN0eWxlIGZvciBvdXRsaW5lIGlzIG5vdCBpbXBsZW1lbnRlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMGU0ZThjODNiODdkMjNiZjVjNTBiOGU5MzcwNTYyMDlkODM4YWNl
MC4uN2VmMjk0NTI1MjU1MTJiYTIyZDgyZGM4N2ZhNjk2YmVkMmVhYzE0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMS0wMyAgVy4gSmFtZXMgTWFj
TGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDdWxs
IG9jY2x1ZGVkIHRpbGVzIGluIHRpbGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0ND
UXVhZEN1bGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVh
ZDo6VGVzdERyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDExLTEyLTMwICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQWxsb3cgZGlzYWJsaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGluIFdlYk1l
ZGlhUGxheWVyQ2xpZW50IChzbyBhdWRpby1vbmx5IDx2aWRlbz4gaXNuJ3QgYWNjZWxlcmF0ZWQp
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDgzMDVmY2VkOGVhZjYzMDlmN2U2YmM5YmY3NjFiMDIxYWMw
NDQ4ODUuLjQyNDQ0NjBjYjIxNzczZGE0YmYyYjU0MjFmMjRmOWQyMmJjNWJjMGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM2MjcsNiArMzYyNyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAwMzY2NjA5MmYyMzJiYjAx
MzdiNjIyMWY3Njk2ZGVkMGVkM2U1NDRiLi5hNzUyNTJiN2VhZWEyZTc5ZjQ2ZWMwMzcwMTM4OTMx
MmE0YzFkN2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMjksOCArMTI5LDggQEAg
UGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1
YWRTdGF0ZSgpIGNvbnN0CiAKIHZvaWQgQ0NMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExp
c3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQog
ewotICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFk
TGlzdC5hcHBlbmQoQ0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRl
LCBsYXllclJlY3QsIHRoaXMpKTsKKyAgICBJbnRSZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJv
dW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGhpcykpOwogfQogCiB2b2lkIENDTGF5ZXJJ
bXBsOjphcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpIGNvbnN0CkBAIC0xNzYsNyArMTc2LDEz
IEBAIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkgY29uc3QKIAogVHJh
bnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewot
ICAgIHJldHVybiBkcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVh
ZFRyYW5zZm9ybWF0aW9uID0gZHJhd1RyYW5zZm9ybSgpOworCisgICAgZmxvYXQgb2Zmc2V0WCA9
IC0wLjUgKiBib3VuZHMoKS53aWR0aCgpOworICAgIGZsb2F0IG9mZnNldFkgPSAtMC41ICogYm91
bmRzKCkuaGVpZ2h0KCk7CisgICAgcXVhZFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvZmZzZXRY
LCBvZmZzZXRZKTsKKworICAgIHJldHVybiBxdWFkVHJhbnNmb3JtYXRpb247CiB9CiAKIHZvaWQg
Q0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwOTQ2NWJmOTllNzlmZTcx
ZjI0MTc0Njc4NDUyZGFlZjg3NTkxMDc0Li41N2FkYjhiMjZmNWRmZWU5NDNmNjU4YzNhYzMyMDU3
MTdmMjJhZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
MTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvCiAgICAgcmV0dXJuIHN1cmZh
Y2VEYW1hZ2VSZWN0OwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJl
bmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlz
dCYgcGFzc2VzKQogewogICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKCkpOwpAQCAtMjM4LDYg
KzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcAogICAgIH0KIH0KIAordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBw
YXNzZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgcGFzc2VzW2ldLT5vcHRpbWl6ZVF1YWRzKCk7Cit9CisKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKQEAgLTI0Niw5ICsyNTIsMTEgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKICAgICBpZiAoIXJvb3RMYXll
cigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4g
PiBwYXNzZXM7CisgICAgQ0NSZW5kZXJQYXNzTGlzdCBwYXNzZXM7CiAgICAgY2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKHBhc3Nlcyk7CiAKKyAgICBvcHRpbWl6ZVJlbmRlclBhc3NlcyhwYXNzZXMpOwor
CiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKaW5kZXggZWQzOGI4NmRlNDZmY2IzNTQ1YjgwODllZjE2YzZiNDUyMTM4
OGRkMS4uZDJlYWUwMTk0Mzk0OTFlZDYwMjQ5NzRmZGRhNzA5MTY1MjRmNDAzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTM0LDcgKzEzNCw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2
b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFs
bFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
VmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mKTsKKyAgICB2b2lkIGNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CisgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllcklt
cGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzJmZjgyZjE1NTk1MDAz
OTE5MzU4Y2JkM2M5NzRiYzEwMzU2NTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApAQCAtMCww
ICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIHN0ZCB7CisKKy8vIFNwZWNpYWxpemUgZm9y
IE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0b3IgZG9lc24ndCBrbm93IGhvdyB0byByZXZl
cnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBnZW5lcmFsLgordGVtcGxhdGU8Pgordm9pZCBz
d2FwKE93blB0cjxXZWJDb3JlOjpDQ0RyYXdRdWFkPiYgYSwgT3duUHRyPFdlYkNvcmU6OkNDRHJh
d1F1YWQ+JiBiKQoreworICAgIGEuc3dhcChiKTsKK30KKworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVjdChjb25z
dCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZWdpb24gcmVj
dFJlZ2lvbihyZWN0KTsKKyAgICBSZWdpb24gaW50ZXJzZWN0UmVnaW9uKGludGVyc2VjdChyZWdp
b24sIHJlY3RSZWdpb24pKTsKKworICAgIGlmIChpbnRlcnNlY3RSZWdpb24uaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZWN0UmVnaW9uLnN1YnRyYWN0KGludGVyc2Vj
dFJlZ2lvbik7CisgICAgcmV0dXJuIHJlY3RSZWdpb24uaXNFbXB0eSgpOworfQorCit9CisKK3Zv
aWQgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCkK
K3sKKyAgICBpZiAoIXF1YWRMaXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0NR
dWFkTGlzdCBjdWxsZWRMaXN0OworICAgIGN1bGxlZExpc3QucmVzZXJ2ZUNhcGFjaXR5KHF1YWRM
aXN0LnNpemUoKSk7CisKKyAgICBSZWdpb24gb3BhcXVlQ292ZXJhZ2VUaHVzRmFyOworCisgICAg
Zm9yIChpbnQgaSA9IHF1YWRMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
IENDRHJhd1F1YWQqIGRyYXdRdWFkID0gcXVhZExpc3RbaV0uZ2V0KCk7CisKKyAgICAgICAgSW50
UmVjdCBxdWFkUmVjdChkcmF3UXVhZC0+cXVhZFRyYW5zZm9ybSgpLm1hcFJlY3QoZHJhd1F1YWQt
PnF1YWRSZWN0KCkpKTsKKworICAgICAgICBib29sIGtlZXBRdWFkID0gIXJlZ2lvbkNvbnRhaW5z
UmVjdChvcGFxdWVDb3ZlcmFnZVRodXNGYXIsIHF1YWRSZWN0KTsKKworICAgICAgICBpZiAoa2Vl
cFF1YWQgJiYgZHJhd1F1YWQtPmRyYXdzT3BhcXVlKCkgJiYgZHJhd1F1YWQtPmlzTGF5ZXJBeGlz
QWxpZ25lZEludFJlY3QoKSkKKyAgICAgICAgICAgIG9wYXF1ZUNvdmVyYWdlVGh1c0Zhci51bml0
ZShSZWdpb24ocXVhZFJlY3QpKTsKKworICAgICAgICBpZiAoa2VlcFF1YWQpCisgICAgICAgICAg
ICBjdWxsZWRMaXN0LmFwcGVuZChxdWFkTGlzdFtpXS5yZWxlYXNlKCkpOworICAgIH0KKyAgICBx
dWFkTGlzdC5jbGVhcigpOyAvLyBSZWxlYXNlIGFueXRoaW5nIHRoYXQgcmVtYWlucy4KKworICAg
IGN1bGxlZExpc3QucmV2ZXJzZSgpOworICAgIHF1YWRMaXN0LnN3YXAoY3VsbGVkTGlzdCk7Cit9
CisKK30gLy8gTmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhZDQyOTZmZWY5NTEx
OGFiNTYyOGU4MmYwNGU3NmI2NWM4ODIyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1F1YWRDdWxsZXJfaAorI2RlZmluZSBDQ1F1YWRD
dWxsZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1F1YWRDdWxsZXIpOworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGN1bGxPY2NsdWRlZFF1YWRz
KENDUXVhZExpc3QmKTsKK307CisKK30KKyNlbmRpZiAvLyBDQ1F1YWRDdWxsZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggNzFhZGM0YjNlMDhkMzQyMDk4MzFhNTcyMTJlNmNiZTAw
MGM1YzBiOS4uNmY1MWZiY2RlMDVhYzk2MTI4NzQ0MDQ1MTA1NGY0ZWMzZjUxMjhkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NS
ZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNj
L0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKIApAQCAtNjMsNCArNjQsOSBAQCB2
b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVyKQogICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVh
ZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKK3ZvaWQgQ0NSZW5kZXJQYXNzOjpvcHRpbWl6ZVF1YWRz
KCkKK3sKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRzKG1fcXVhZExpc3QpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4IDE2ZTA3MmU4MDgwYjNkZTQ5YWYyZmNj
MjQxMWE5Y2RjNTNhNjQxYTAuLjlmYjc3MTY2YzRjZDA0NzY0N2U4ZDFhZTAzMmZlNDZiZDlhODYx
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC00Niw2ICs0Niw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwqKTsKICAgICB2b2lkIGFwcGVu
ZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKik7CiAKKyAgICB2b2lkIG9w
dGltaXplUXVhZHMoKTsKKwogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQogCkBAIC02MSw2ICs2Myw4IEBA
IHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJlY3Q7CiB9OwogCit0eXBl
ZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IENDUmVuZGVyUGFzc0xpc3Q7CisKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlNjc0YmI2Yjg1YjA4
NWNhYmFjYzlkOWQ2NDk5OTNkNWQ2MmZlNWNmLi5mNTI0N2JhMzc3YWE4OGM4NGRkMTI2ZDEyZmM2
NGYxNzE4ZTY3NTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTcwLDYgKzcw
LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NR
dWFkQ3VsbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMzk4Mjg4N2I0M2I2YjBkMTdjMjRkYzlmZmM4YzYzMDZiODFkZDkzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0
LmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9j
ay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgeworCitjbGFzcyBDQ1F1YWRDdWxsZXJUZXN0IDogcHVibGljIHRlc3Rp
bmc6OlRlc3QgeworfTsKKworY2xhc3MgVGVzdERyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQg
eworcHVibGljOgorICAgIFRlc3REcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc3Rh
dGUsIE1hdGVyaWFsIG0sIGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBDQ0RyYXdRdWFkKHN0
YXRlLCBtLCByZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXN0
RHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFs
IG0sIGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFRlc3REcmF3UXVhZChzdGF0ZSwgbSwgcmVjdCkpOworICAgIH0KK307CisKK3ZvaWQgc2V0
UXVhZHMoQ0NTaGFyZWRRdWFkU3RhdGUqIHJvb3RTdGF0ZSwgQ0NTaGFyZWRRdWFkU3RhdGUqIGNo
aWxkU3RhdGUsIENDUXVhZExpc3QmIHF1YWRMaXN0KQoreworICAgIHF1YWRMaXN0LmNsZWFyKCk7
CisKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMDAs
IDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RT
dGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMCks
IEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6
OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQ
b2ludCgyMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQs
IEludFJlY3QoSW50UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVh
ZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6
VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEw
MCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0
ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDIwMCwgMTAwKSwg
SW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6
Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBv
aW50KDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChU
ZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwg
SW50UmVjdChJbnRQb2ludCgxMDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1
YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6
OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgyMDAsIDIwMCksIEludFNpemUoMTAwLCAx
MDApKSkpOworCisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxk
U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgpLCBJbnRT
aXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVh
dGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50
KDEwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0
RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIElu
dFJlY3QoSW50UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExp
c3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRp
bGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDAp
KSkpOworfQorCisjZGVmaW5lIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFEUyAgICAg
ICAgICAgICAgIFwKKyAgICBDQ1F1YWRMaXN0IHF1YWRMaXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOyAg
ICAgICAgICAgICAgICBcCisgICAgSW50U2l6ZSByb290U2l6ZSA9IEludFNpemUoMzAwLCAzMDAp
OyAgICAgICAgICAgICAgIFwKKyAgICBJbnRSZWN0IHJvb3RSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCgpLCByb290U2l6ZSk7ICAgXAorICAgIEludFNpemUgY2hpbGRTaXplID0gSW50U2l6ZSgyMDAs
IDIwMCk7ICAgICAgICAgICAgICBcCisgICAgSW50UmVjdCBjaGlsZFJlY3QgPSBJbnRSZWN0KElu
dFBvaW50KCksIGNoaWxkU2l6ZSk7CisKK1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3Vs
bENoaWxkTGluZXNVcFRvcExlZnQpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9URVNU
X1FVQURTCisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hh
cmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJl
Y3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRT
dGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEz
dSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRl
c3QsIHZlcmlmeUN1bGxXaGVuQ2hpbGRPcGFjaXR5Tm90T25lKQoreworICAgIERFQ0xBUkVfQU5E
X0lOSVRJQUxJWkVfVEVTVF9RVUFEUworCisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBy
b290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1
ZSk7CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
Y2hpbGRSZWN0LCBJbnRSZWN0KCksIDAuOSwgdHJ1ZSk7CisKKyAgICBzZXRRdWFkcyhyb290U3Rh
dGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVh
ZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMo
cXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7Cit9CisKK1RF
U1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3VsbFdoZW5DaGlsZE9wYXF1ZUZsYWdGYWxzZSkK
K3sKKyAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIE93blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwg
SW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hp
bGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIGZhbHNlKTsKKwor
ICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3Qp
OworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVy
OjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNp
emUoKSwgMTN1KTsKK30KKworVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVy
VGlsZU9ubHkpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCisKKyAg
ICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIE93blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVj
dCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0
ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgc2V0
UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxP
Y2NsdWRlZFF1YWRzKHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAx
MnUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeUN1bGxDaGlsZExpbmVzVXBC
b3R0b21SaWdodCkKK3sKKyAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKwor
ICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgxMDAsIDEwMCk7CisKKyAgICBPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIElu
dFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxk
U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAg
IHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOwor
ICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpj
dWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUo
KSwgOXUpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121336</attachid>
            <date>2012-01-05 14:53:10 -0800</date>
            <delta_ts>2012-01-06 06:49:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20120105175309.patch</filename>
            <type>text/plain</type>
            <size>22406</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM2ZTc3NjYyZTI3ZTA4
ZTAyMmVkYWU2YmU4NjI1NTZjZWM5ZTM1NS4uMWJlNDY0ZGEzNGNkODg1YWI4ZjBmMzJlODQ1OGEy
NTJiNzU1MDM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTA1ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQ
YXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVy
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVh
ZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlZ2lvbkNvbnRhaW5zUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6
OmN1bGxPY2NsdWRlZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmguCisgICAgICAgIChXZWJDb3JlOjpD
Q1F1YWRDdWxsZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
UGFzczo6b3B0aW1pemVRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisKIDIwMTItMDEtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRE9NIEF0dHJpYnV0ZSB0ZXN0cyBvbiBEcm9tYWVvIHNw
ZW5kcyAyLjclIG9mIHRpbWUgaW4gaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggZDJjMzY4NzMzYjgzZTY5MDY2MDdmMGQ3OGQxNzIxN2MzZWVhZjhh
NS4uMzkzNTdmMTk3NDQ5ZTRlMjY3MDJiNjk4Y2MyNDhjOGFhZjBiNTZkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMS0wNSAgVy4gSmFtZXMgTWFj
TGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDdWxs
IG9jY2x1ZGVkIHRpbGVzIGluIHRpbGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0ND
UXVhZEN1bGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVh
ZDo6VGVzdERyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDEyLTAxLTA1ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgV2ViU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkRHJh
d2luZ0VuYWJsZWQgZnJvbSBwdWJsaWMgQVBJLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE2YjYyOTdl
ZTU4YzEwOTlkNmY2NmJiODRjM2I3NTY5YTQ4YzNlNTMuLmQxNTljZmFiM2JhZTU2MTk2M2ZmOTMw
OGY5ZTAxYTZlZTMxM2RiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MzEsNiArMzYzMSw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NR
dWFkQ3VsbGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NRdWFkQ3VsbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAppbmRleCAyMWZlNjg0Mzg3MDA2MGVjZDVmYTM3OGRiMTM2Njc5MzZjOTNjZTJmLi4yOWMz
MDYwNjhiZDQ2YTc1YjljZGFiZjgyYWRmMGViZGRiZmM0OTUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwCkBAIC0xMjksOCArMTI5LDggQEAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
Q0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiAKIHZvaWQgQ0NMYXll
ckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQogewotICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBv
aW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21MYXllckRyYXdR
dWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIHRoaXMpKTsKKyAgICBJbnRS
ZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
Q0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
dGhpcykpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjphcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NR
dWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUpIGNvbnN0CkBAIC0xNzYsNyArMTc2LDEzIEBAIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6
OmdldERyYXdSZWN0KCkgY29uc3QKIAogVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6
OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIHJldHVybiBkcmF3VHJhbnNmb3JtKCk7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybWF0aW9uID0gZHJhd1RyYW5zZm9y
bSgpOworCisgICAgZmxvYXQgb2Zmc2V0WCA9IC0wLjUgKiBib3VuZHMoKS53aWR0aCgpOworICAg
IGZsb2F0IG9mZnNldFkgPSAtMC41ICogYm91bmRzKCkuaGVpZ2h0KCk7CisgICAgcXVhZFRyYW5z
Zm9ybWF0aW9uLnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTsKKworICAgIHJldHVybiBxdWFk
VHJhbnNmb3JtYXRpb247CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcAppbmRleCBmNmNmYWE1NGZiYmRmMjAwM2FiNWUzMzRhZmM3MTA5Y2U2YmYzOTdlLi5iNWI3
NzZhNWU1ZmIxNjMzMTBiOGI5MDg1M2U1MzZjMGRiNTJmMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBGbG9hdFJl
Y3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwg
Y29uc3QgRmxvCiAgICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0OwogfQogCi12b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVu
ZGVyUGFzcz4gPiYgcGFzc2VzKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogewogICAgIENDTGF5ZXJMaXN0
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocm9vdExheWVyKCkpOwpAQCAtMjM4LDYgKzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4g
PiYgcAogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRl
clBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLT5vcHRpbWl6
ZVF1YWRzKCk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7
CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlz
LCAwKTsKQEAgLTI0Niw5ICsyNTIsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3
TGF5ZXJzKCkKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CisgICAgQ0NSZW5kZXJQYXNzTGlz
dCBwYXNzZXM7CiAgICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CiAKKyAgICBvcHRp
bWl6ZVJlbmRlclBhc3NlcyhwYXNzZXMpOworCiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRy
YXdpbmdGcmFtZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsg
KytpKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZmU3NzRlZTAw
NzFmYjM0M2FlNmI5YTQ1YzU4ZDM3ZmYxY2M2ZDdjYi4uNDg5N2U4ZWQxYWM3NDA3YTkxMDIxZTA3
NGVhY2EwMWM0Yjg3YzIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApA
QCAtMTMzLDcgKzEzMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFn
ZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7
CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJh
d0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAg
dm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4m
KTsKKyAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7Cisg
ICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAKICAgICBP
d25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40YThiODUxMzBlMWVkNGVlYWMzNjYzNWVmZDdjMDI5NTg1MGRiODQzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NRdWFkQ3VsbGVyLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
Y2MvQ0NRdWFkQ3VsbGVyLmgiCisKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNz
LmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNl
IHN0ZCB7CisKKy8vIFNwZWNpYWxpemUgZm9yIE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0
b3IgZG9lc24ndCBrbm93IGhvdyB0byByZXZlcnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBn
ZW5lcmFsLgordGVtcGxhdGU8Pgordm9pZCBzd2FwKE93blB0cjxXZWJDb3JlOjpDQ0RyYXdRdWFk
PiYgYSwgT3duUHRyPFdlYkNvcmU6OkNDRHJhd1F1YWQ+JiBiKQoreworICAgIGEuc3dhcChiKTsK
K30KKworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHJlZ2lvbkNvbnRh
aW5zUmVjdChjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBSZWdpb24gcmVjdFJlZ2lvbihyZWN0KTsKKyAgICBSZWdpb24gaW50ZXJzZWN0UmVnaW9uKGlu
dGVyc2VjdChyZWdpb24sIHJlY3RSZWdpb24pKTsKKworICAgIGlmIChpbnRlcnNlY3RSZWdpb24u
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZWN0UmVnaW9uLnN1YnRy
YWN0KGludGVyc2VjdFJlZ2lvbik7CisgICAgcmV0dXJuIHJlY3RSZWdpb24uaXNFbXB0eSgpOwor
fQorCit2b2lkIENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVh
ZExpc3QpCit7CisgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENDUXVhZExpc3QgY3VsbGVkTGlzdDsKKyAgICBjdWxsZWRMaXN0LnJlc2VydmVDYXBhY2l0
eShxdWFkTGlzdC5zaXplKCkpOworCisgICAgUmVnaW9uIG9wYXF1ZUNvdmVyYWdlVGh1c0ZhcjsK
KworICAgIGZvciAoaW50IGkgPSBxdWFkTGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBDQ0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdldCgpOworCisgICAg
ICAgIEludFJlY3QgcXVhZFJlY3QoZHJhd1F1YWQtPnF1YWRUcmFuc2Zvcm0oKS5tYXBSZWN0KGRy
YXdRdWFkLT5xdWFkUmVjdCgpKSk7CisKKyAgICAgICAgYm9vbCBrZWVwUXVhZCA9ICFyZWdpb25D
b250YWluc1JlY3Qob3BhcXVlQ292ZXJhZ2VUaHVzRmFyLCBxdWFkUmVjdCk7CisKKyAgICAgICAg
aWYgKGtlZXBRdWFkICYmIGRyYXdRdWFkLT5kcmF3c09wYXF1ZSgpICYmIGRyYXdRdWFkLT5pc0xh
eWVyQXhpc0FsaWduZWRJbnRSZWN0KCkpCisgICAgICAgICAgICBvcGFxdWVDb3ZlcmFnZVRodXNG
YXIudW5pdGUoUmVnaW9uKHF1YWRSZWN0KSk7CisKKyAgICAgICAgaWYgKGtlZXBRdWFkKQorICAg
ICAgICAgICAgY3VsbGVkTGlzdC5hcHBlbmQocXVhZExpc3RbaV0ucmVsZWFzZSgpKTsKKyAgICB9
CisgICAgcXVhZExpc3QuY2xlYXIoKTsgLy8gUmVsZWFzZSBhbnl0aGluZyB0aGF0IHJlbWFpbnMu
CisKKyAgICBjdWxsZWRMaXN0LnJldmVyc2UoKTsKKyAgICBxdWFkTGlzdC5zd2FwKGN1bGxlZExp
c3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTc5Mjg1
YWM0ODVkMGRhMzU5YjE2NjFkZmE4Y2M2YmI2MmFiZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NRdWFkQ3VsbGVyX2gKKyNkZWZpbmUg
Q0NRdWFkQ3VsbGVyX2gKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IHZvaWQgY3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYpOworCitwcml2YXRlOgorICAgIC8v
IE1ha2Ugbm9uLWluc3RhbnRpYWJsZS4KKyAgICBDQ1F1YWRDdWxsZXIoKSB7IH0KK307CisKK30K
KyNlbmRpZiAvLyBDQ1F1YWRDdWxsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXgg
NzFhZGM0YjNlMDhkMzQyMDk4MzFhNTcyMTJlNmNiZTAwMGM1YzBiOS4uNmY1MWZiY2RlMDVhYzk2
MTI4NzQ0MDQ1MTA1NGY0ZWMzZjUxMjhkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1
ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuaCIKIApAQCAtNjMsNCArNjQsOSBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5k
UXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgIG1fc2hh
cmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAK
K3ZvaWQgQ0NSZW5kZXJQYXNzOjpvcHRpbWl6ZVF1YWRzKCkKK3sKKyAgICBDQ1F1YWRDdWxsZXI6
OmN1bGxPY2NsdWRlZFF1YWRzKG1fcXVhZExpc3QpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5oCmluZGV4IDE2ZTA3MmU4MDgwYjNkZTQ5YWYyZmNjMjQxMWE5Y2RjNTNhNjQxYTAuLjlmYjc3
MTY2YzRjZDA0NzY0N2U4ZDFhZTAzMmZlNDZiZDlhODYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5oCkBAIC00Niw2ICs0Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5
ZXIoQ0NMYXllckltcGwqKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxh
eWVyKENDTGF5ZXJJbXBsKik7CiAKKyAgICB2b2lkIG9wdGltaXplUXVhZHMoKTsKKwogICAgIGNv
bnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQog
ICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0U3VyZmFjZTsgfQogCkBAIC02MSw2ICs2Myw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0
IG1fc3VyZmFjZURhbWFnZVJlY3Q7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5k
ZXJQYXNzPiA+IENDUmVuZGVyUGFzc0xpc3Q7CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCBlNjc0YmI2Yjg1YjA4NWNhYmFjYzlkOWQ2NDk5OTNkNWQ2MmZl
NWNmLi5mNTI0N2JhMzc3YWE4OGM4NGRkMTI2ZDEyZmM2NGYxNzE4ZTY3NTg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTcwLDYgKzcwLDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RD
b21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzk4Mjg4N2I0M2I2YjBk
MTdjMjRkYzlmZmM4YzYzMDZiODFkZDkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApAQCAtMCwwICsxLDE0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NRdWFk
Q3VsbGVyLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFz
cyBDQ1F1YWRDdWxsZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworfTsKKworY2xhc3Mg
VGVzdERyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgeworcHVibGljOgorICAgIFRlc3REcmF3
UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFsIG0sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCisgICAgOiBDQ0RyYXdRdWFkKHN0YXRlLCBtLCByZWN0KQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXN0RHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFsIG0sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRlc3REcmF3UXVhZChzdGF0ZSwg
bSwgcmVjdCkpOworICAgIH0KK307CisKK3ZvaWQgc2V0UXVhZHMoQ0NTaGFyZWRRdWFkU3RhdGUq
IHJvb3RTdGF0ZSwgQ0NTaGFyZWRRdWFkU3RhdGUqIGNoaWxkU3RhdGUsIENDUXVhZExpc3QmIHF1
YWRMaXN0KQoreworICAgIHF1YWRMaXN0LmNsZWFyKCk7CisKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQs
IEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3Qu
YXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRD
b250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkpOwor
ICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJh
d1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgyMDAsIDApLCBJbnRTaXplKDEw
MCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9v
dFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMTAw
KSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVh
ZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KElu
dFBvaW50KDEwMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBw
ZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250
ZW50LCBJbnRSZWN0KEludFBvaW50KDIwMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7Cisg
ICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3
UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDIwMCksIEludFNpemUoMTAw
LCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290
U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDIw
MCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1
YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJ
bnRQb2ludCgyMDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworCisgICAgcXVhZExpc3Qu
YXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVk
Q29udGVudCwgSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBx
dWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVh
ZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMCksIEludFNpemUoMTAwLCAx
MDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0
YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMTAwKSwg
SW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6
Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQ
b2ludCgxMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworfQorCisjZGVmaW5lIERFQ0xB
UkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFEUyAgICAgICAgICAgICAgIFwKKyAgICBDQ1F1YWRM
aXN0IHF1YWRMaXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOyAgICAgICAgICAgICAgICBcCisgICAgSW50
U2l6ZSByb290U2l6ZSA9IEludFNpemUoMzAwLCAzMDApOyAgICAgICAgICAgICAgIFwKKyAgICBJ
bnRSZWN0IHJvb3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCByb290U2l6ZSk7ICAgXAorICAg
IEludFNpemUgY2hpbGRTaXplID0gSW50U2l6ZSgyMDAsIDIwMCk7ICAgICAgICAgICAgICBcCisg
ICAgSW50UmVjdCBjaGlsZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNoaWxkU2l6ZSk7CisK
K1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3VsbENoaWxkTGluZXNVcFRvcExlZnQpCit7
CisgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCisKKyAgICBPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIElu
dFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxk
U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAg
IHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOwor
ICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpj
dWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUo
KSwgOXUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeUN1bGxXaGVuQ2hpbGRP
cGFjaXR5Tm90T25lKQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFEUwor
CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRT
dGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgT3duUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRy
YW5zZm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDAu
OSwgdHJ1ZSk7CisKKyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0
KCksIHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAg
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9F
UShxdWFkTGlzdC5zaXplKCksIDEzdSk7Cit9CisKK1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVy
aWZ5Q3VsbFdoZW5DaGlsZE9wYXF1ZUZsYWdGYWxzZSkKK3sKKyAgICBERUNMQVJFX0FORF9JTklU
SUFMSVpFX1RFU1RfUVVBRFMKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0
YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOwor
ICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0
YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxk
UmVjdCwgSW50UmVjdCgpLCAxLjAsIGZhbHNlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5n
ZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlz
dC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFk
TGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKK30KKworVEVTVChD
Q1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVyVGlsZU9ubHkpCit7CisgICAgREVDTEFS
RV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCisKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xh
dGUoNTAsIDUwKTsKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpj
cmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwg
SW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBj
aGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUo
KSwgMTN1KTsKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRzKHF1YWRMaXN0KTsK
KyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMnUpOworfQorCitURVNUKENDUXVhZEN1
bGxlclRlc3QsIHZlcmlmeUN1bGxDaGlsZExpbmVzVXBCb3R0b21SaWdodCkKK3sKKyAgICBERUNM
QVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5z
bGF0ZSgxMDAsIDEwMCk7CisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0
ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAg
ICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0
ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJl
Y3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQo
KSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5z
aXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlz
dCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworfQorCit9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121429</attachid>
            <date>2012-01-06 06:49:10 -0800</date>
            <delta_ts>2012-01-06 06:50:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20120106094909.patch</filename>
            <type>text/plain</type>
            <size>24202</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM2ZTc3NjYyZTI3ZTA4
ZTAyMmVkYWU2YmU4NjI1NTZjZWM5ZTM1NS4uODBkNjY2YjRjNzVkMzc1ZDQwMGVmMzZjYWIwYTA2
N2Q3MTU0YzdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTA1ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQ
YXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVy
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVh
ZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlZ2lvbkNvbnRhaW5zUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6
OmN1bGxPY2NsdWRlZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxs
ZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6b3B0
aW1pemVRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmg6CisKIDIwMTItMDEtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRE9NIEF0dHJpYnV0ZSB0ZXN0cyBvbiBEcm9tYWVvIHNwZW5kcyAyLjcl
IG9mIHRpbWUgaW4gaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggZDJjMzY4NzMzYjgzZTY5MDY2MDdmMGQ3OGQxNzIxN2MzZWVhZjhhNS4uMzkzNTdm
MTk3NDQ5ZTRlMjY3MDJiNjk4Y2MyNDhjOGFhZjBiNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMS0wNSAgVy4gSmFtZXMgTWFjTGVhbiAgPHdq
bWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDdWxsIG9jY2x1ZGVk
IHRpbGVzIGluIHRpbGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA1MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6VGVzdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEy
LTAxLTA1ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W0Nocm9taXVtXSBSZW1vdmUgV2ViU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQgZnJvbSBwdWJsaWMgQVBJLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE2YjYyOTdlZTU4YzEwOTlk
NmY2NmJiODRjM2I3NTY5YTQ4YzNlNTMuLmQxNTljZmFiM2JhZTU2MTk2M2ZmOTMwOGY5ZTAxYTZl
ZTMxM2RiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MzEsNiArMzYzMSw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCAyMWZlNjg0Mzg3MDA2MGVjZDVmYTM3OGRiMTM2Njc5MzZjOTNjZTJmLi4yOWMzMDYwNjhiZDQ2
YTc1YjljZGFiZjgyYWRmMGViZGRiZmM0OTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0xMjksOCArMTI5LDggQEAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllcklt
cGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiAKIHZvaWQgQ0NMYXllckltcGw6OmFw
cGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlKQogewotICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJv
dW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIHRoaXMpKTsKKyAgICBJbnRSZWN0IHF1YWRS
ZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21M
YXllckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGhpcykpOwog
fQogCiB2b2lkIENDTGF5ZXJJbXBsOjphcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NRdWFkTGlzdCYg
cXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpIGNvbnN0
CkBAIC0xNzYsNyArMTc2LDEzIEBAIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdS
ZWN0KCkgY29uc3QKIAogVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFu
c2Zvcm0oKSBjb25zdAogewotICAgIHJldHVybiBkcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybWF0aW9uID0gZHJhd1RyYW5zZm9ybSgpOworCisg
ICAgZmxvYXQgb2Zmc2V0WCA9IC0wLjUgKiBib3VuZHMoKS53aWR0aCgpOworICAgIGZsb2F0IG9m
ZnNldFkgPSAtMC41ICogYm91bmRzKCkuaGVpZ2h0KCk7CisgICAgcXVhZFRyYW5zZm9ybWF0aW9u
LnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTsKKworICAgIHJldHVybiBxdWFkVHJhbnNmb3Jt
YXRpb247CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRz
LCBpbnQgaW5kZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRl
eCBmNmNmYWE1NGZiYmRmMjAwM2FiNWUzMzRhZmM3MTA5Y2U2YmYzOTdlLi5iNWI3NzZhNWU1ZmIx
NjMzMTBiOGI5MDg1M2U1MzZjMGRiNTJmMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcApAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBGbG9hdFJlY3QgZGFtYWdl
SW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxv
CiAgICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0OwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4g
PiYgcGFzc2VzKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNz
ZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogewogICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExh
eWVyKCkpOwpAQCAtMjM4LDYgKzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcAogICAg
IH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBhc3Nlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLT5vcHRpbWl6ZVF1YWRzKCk7
Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKQEAg
LTI0Niw5ICsyNTIsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkK
ICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8T3du
UHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CisgICAgQ0NSZW5kZXJQYXNzTGlzdCBwYXNzZXM7
CiAgICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CiAKKyAgICBvcHRpbWl6ZVJlbmRl
clBhc3NlcyhwYXNzZXMpOworCiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFt
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQogICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZmU3NzRlZTAwNzFmYjM0M2Fl
NmI5YTQ1YzU4ZDM3ZmYxY2M2ZDdjYi4uNDg5N2U4ZWQxYWM3NDA3YTkxMDIxZTA3NGVhY2EwMWM0
Yjg3YzIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTMzLDcg
KzEzMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hh
bmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9p
ZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBjYWxj
dWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mKTsKKyAgICB2
b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CisgICAgdm9pZCBv
cHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAKICAgICBPd25QdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBtX3Jvb3RMYXllckltcGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40YThiODUxMzBlMWVkNGVlYWMzNjYzNWVmZDdjMDI5NTg1MGRiODQzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NRdWFk
Q3VsbGVyLmgiCisKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIHN0ZCB7CisK
Ky8vIFNwZWNpYWxpemUgZm9yIE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0b3IgZG9lc24n
dCBrbm93IGhvdyB0byByZXZlcnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBnZW5lcmFsLgor
dGVtcGxhdGU8Pgordm9pZCBzd2FwKE93blB0cjxXZWJDb3JlOjpDQ0RyYXdRdWFkPiYgYSwgT3du
UHRyPFdlYkNvcmU6OkNDRHJhd1F1YWQ+JiBiKQoreworICAgIGEuc3dhcChiKTsKK30KKworfQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVjdChj
b25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZWdpb24g
cmVjdFJlZ2lvbihyZWN0KTsKKyAgICBSZWdpb24gaW50ZXJzZWN0UmVnaW9uKGludGVyc2VjdChy
ZWdpb24sIHJlY3RSZWdpb24pKTsKKworICAgIGlmIChpbnRlcnNlY3RSZWdpb24uaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZWN0UmVnaW9uLnN1YnRyYWN0KGludGVy
c2VjdFJlZ2lvbik7CisgICAgcmV0dXJuIHJlY3RSZWdpb24uaXNFbXB0eSgpOworfQorCit2b2lk
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QpCit7
CisgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENDUXVh
ZExpc3QgY3VsbGVkTGlzdDsKKyAgICBjdWxsZWRMaXN0LnJlc2VydmVDYXBhY2l0eShxdWFkTGlz
dC5zaXplKCkpOworCisgICAgUmVnaW9uIG9wYXF1ZUNvdmVyYWdlVGh1c0ZhcjsKKworICAgIGZv
ciAoaW50IGkgPSBxdWFkTGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdldCgpOworCisgICAgICAgIEludFJl
Y3QgcXVhZFJlY3QoZHJhd1F1YWQtPnF1YWRUcmFuc2Zvcm0oKS5tYXBSZWN0KGRyYXdRdWFkLT5x
dWFkUmVjdCgpKSk7CisKKyAgICAgICAgYm9vbCBrZWVwUXVhZCA9ICFyZWdpb25Db250YWluc1Jl
Y3Qob3BhcXVlQ292ZXJhZ2VUaHVzRmFyLCBxdWFkUmVjdCk7CisKKyAgICAgICAgaWYgKGtlZXBR
dWFkICYmIGRyYXdRdWFkLT5kcmF3c09wYXF1ZSgpICYmIGRyYXdRdWFkLT5pc0xheWVyQXhpc0Fs
aWduZWRJbnRSZWN0KCkpCisgICAgICAgICAgICBvcGFxdWVDb3ZlcmFnZVRodXNGYXIudW5pdGUo
UmVnaW9uKHF1YWRSZWN0KSk7CisKKyAgICAgICAgaWYgKGtlZXBRdWFkKQorICAgICAgICAgICAg
Y3VsbGVkTGlzdC5hcHBlbmQocXVhZExpc3RbaV0ucmVsZWFzZSgpKTsKKyAgICB9CisgICAgcXVh
ZExpc3QuY2xlYXIoKTsgLy8gUmVsZWFzZSBhbnl0aGluZyB0aGF0IHJlbWFpbnMuCisKKyAgICBj
dWxsZWRMaXN0LnJldmVyc2UoKTsKKyAgICBxdWFkTGlzdC5zd2FwKGN1bGxlZExpc3QpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTc5Mjg1YWM0ODVkMGRh
MzU5YjE2NjFkZmE4Y2M2YmI2MmFiZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NRdWFkQ3VsbGVyX2gKKyNkZWZpbmUgQ0NRdWFkQ3Vs
bGVyX2gKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3Vs
bE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYpOworCitwcml2YXRlOgorICAgIC8vIE1ha2Ugbm9u
LWluc3RhbnRpYWJsZS4KKyAgICBDQ1F1YWRDdWxsZXIoKSB7IH0KK307CisKK30KKyNlbmRpZiAv
LyBDQ1F1YWRDdWxsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggNzFhZGM0YjNl
MDhkMzQyMDk4MzFhNTcyMTJlNmNiZTAwMGM1YzBiOS4uNmY1MWZiY2RlMDVhYzk2MTI4NzQ0MDQ1
MTA1NGY0ZWMzZjUxMjhkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aCIKIApAQCAtNjMsNCArNjQsOSBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JS
ZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgIG1fc2hhcmVkUXVhZFN0
YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKK3ZvaWQgQ0NS
ZW5kZXJQYXNzOjpvcHRpbWl6ZVF1YWRzKCkKK3sKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2Ns
dWRlZFF1YWRzKG1fcXVhZExpc3QpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4
IDE2ZTA3MmU4MDgwYjNkZTQ5YWYyZmNjMjQxMWE5Y2RjNTNhNjQxYTAuLjlmYjc3MTY2YzRjZDA0
NzY0N2U4ZDFhZTAzMmZlNDZiZDlhODYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC00
Niw2ICs0Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXll
ckltcGwqKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5
ZXJJbXBsKik7CiAKKyAgICB2b2lkIG9wdGltaXplUXVhZHMoKTsKKwogICAgIGNvbnN0IENDUXVh
ZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVu
ZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFj
ZTsgfQogCkBAIC02MSw2ICs2Myw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fc3VyZmFj
ZURhbWFnZVJlY3Q7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+
IENDUmVuZGVyUGFzc0xpc3Q7CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQppbmRleCBlNjc0YmI2Yjg1YjA4NWNhYmFjYzlkOWQ2NDk5OTNkNWQ2MmZlNWNmLi5mNTI0
N2JhMzc3YWE4OGM4NGRkMTI2ZDEyZmM2NGYxNzE4ZTY3NTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTcwLDYgKzcwLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcs
CisgICAgICAgICAgICAndGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Nj
aGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVk
dWxlclRlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1F1YWRDdWxsZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTI5NGEwYzc0OTU1MjE2MzI2ZWQxYmY1
NDE2ZDI5MWE0Y2ZlNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgi
CisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBDQ1F1YWRD
dWxsZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworfTsKKworY2xhc3MgVGVzdERyYXdR
dWFkIDogcHVibGljIENDRHJhd1F1YWQgeworcHVibGljOgorICAgIFRlc3REcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFsIG0sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCisgICAgOiBDQ0RyYXdRdWFkKHN0YXRlLCBtLCByZWN0KQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxUZXN0RHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFsIG0sIGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRlc3REcmF3UXVhZChzdGF0ZSwgbSwgcmVjdCkp
OworICAgIH0KK307CisKK3ZvaWQgc2V0UXVhZHMoQ0NTaGFyZWRRdWFkU3RhdGUqIHJvb3RTdGF0
ZSwgQ0NTaGFyZWRRdWFkU3RhdGUqIGNoaWxkU3RhdGUsIENDUXVhZExpc3QmIHF1YWRMaXN0KQor
eworICAgIHF1YWRMaXN0LmNsZWFyKCk7CisKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdR
dWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3Qo
SW50UG9pbnQoKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRl
c3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJ
bnRSZWN0KEludFBvaW50KDEwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRM
aXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRp
bGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgyMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkp
KTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMTAwKSwgSW50U2l6
ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRl
KHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEw
MCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3RE
cmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRS
ZWN0KEludFBvaW50KDIwMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExp
c3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGls
ZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDIwMCksIEludFNp
emUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0
ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgy
MDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworCisgICAgcXVhZExpc3QuYXBwZW5kKFRl
c3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwg
SW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRD
b250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkpOwor
ICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0Ry
YXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgx
MDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNo
aWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAs
IDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworfQorCisjZGVmaW5lIERFQ0xBUkVfQU5EX0lO
SVRJQUxJWkVfVEVTVF9RVUFEUyAgICAgICAgICAgICAgIFwKKyAgICBDQ1F1YWRMaXN0IHF1YWRM
aXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGNoaWxkVHJhbnNmb3JtOyAgICAgICAgICAgICAgICBcCisgICAgSW50U2l6ZSByb290
U2l6ZSA9IEludFNpemUoMzAwLCAzMDApOyAgICAgICAgICAgICAgIFwKKyAgICBJbnRSZWN0IHJv
b3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCByb290U2l6ZSk7ICAgXAorICAgIEludFNpemUg
Y2hpbGRTaXplID0gSW50U2l6ZSgyMDAsIDIwMCk7ICAgICAgICAgICAgICBcCisgICAgSW50UmVj
dCBjaGlsZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNoaWxkU2l6ZSk7CisKK1RFU1QoQ0NR
dWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3VsbENoaWxkTGluZXNVcFRvcExlZnQpCit7CisgICAgREVD
TEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwg
MS4wLCB0cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRz
KHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVD
VF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVk
ZWRRdWFkcyhxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOwor
fQorCitURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeUN1bGxXaGVuQ2hpbGRPcGFjaXR5Tm90
T25lKQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFEUworCisgICAgT3du
UHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RS
ZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRl
PiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwg
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDAuOSwgdHJ1ZSk7
CisKKyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRM
aXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIENDUXVhZEN1
bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlz
dC5zaXplKCksIDEzdSk7Cit9CisKK1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3VsbFdo
ZW5DaGlsZE9wYXF1ZUZsYWdGYWxzZSkKK3sKKyAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RF
U1RfUVVBRFMKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NT
aGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgIE93blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVh
dGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50
UmVjdCgpLCAxLjAsIGZhbHNlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hp
bGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCks
IDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7Cisg
ICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKK30KKworVEVTVChDQ1F1YWRDdWxs
ZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVyVGlsZU9ubHkpCit7CisgICAgREVDTEFSRV9BTkRfSU5J
VElBTElaRV9URVNUX1FVQURTCisKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUw
KTsKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hp
bGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgp
LCAxLjAsIHRydWUpOworCisgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRl
LmdldCgpLCBxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsK
KyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRzKHF1YWRMaXN0KTsKKyAgICBFWFBF
Q1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMnUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRlc3Qs
IHZlcmlmeUN1bGxDaGlsZExpbmVzVXBCb3R0b21SaWdodCkKK3sKKyAgICBERUNMQVJFX0FORF9J
TklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgxMDAs
IDEwMCk7CisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hh
cmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJl
Y3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRT
dGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEz
dSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRl
c3QsIHZlcmlmeU5vbkF4aXNBbGlnbmVkUXVhZHNEb250T2NjbHVkZSkKK3sKKyAgICBERUNMQVJF
X0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIC8vIFVzZSBhIHNtYWxsIHJvdGF0aW9u
IHNvIGFzIHRvIG5vdCBkaXN0dXJiIHRoZSBnZW9tZXRyeSBzaWduaWZpY2FudGx5LgorICAgIGNo
aWxkVHJhbnNmb3JtLnJvdGF0ZSgxKTsKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
cm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRy
dWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVk
UXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgc2V0UXVhZHMocm9vdFN0
YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1
YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRz
KHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworfQorCisv
LyBUaGlzIHRlc3QgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbjogaGVyZSB3ZSBhcmUgcm90YXRp
bmcgdGhlIHF1YWRzIHRvIGJlIGN1bGxlZC4KKy8vIFRoZSAyeDIgdGlsZSBjaGlsZCBsYXllciBy
ZW1haW5zIGluIHRoZSB0b3AtbGVmdCBjb3JuZXIsIHVucm90YXRlZCwgYnV0IHRoZSAzeDMKKy8v
IHRpbGUgcGFyZW50IGxheWVyIGlzIHJvdGF0ZWQgYnkgMSBkZWdyZWUuIE9mIHRoZSBmb3VyIHRp
bGVzIHRoZSBjaGlsZCB3b3VsZAorLy8gbm9ybWFsbHkgb2NjbHVkZSwgdGhyZWUgd2lsbCBtb3Zl
IChzbGlnaHRseSkgb3V0IGZyb20gdW5kZXIgdGhlIGNoaWxkIGxheWVyLCBhbmQKKy8vIG9uZSBt
b3ZlcyBmdXJ0aGVyIHVuZGVyIHRoZSBjaGlsZC4gT25seSB0aGlzIGxhc3QgdGlsZSBzaG91bGQg
YmUgY3VsbGVkLgorVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlOb25BeGlzQWxpZ25lZFF1
YWRzU2FmZWx5Q3VsbGVkKQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFE
UworCisgICAgLy8gVXNlIGEgc21hbGwgcm90YXRpb24gc28gYXMgdG8gbm90IGRpc3R1cmIgdGhl
IGdlb21ldHJ5IHNpZ25pZmljYW50bHkuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50
VHJhbnNmb3JtOworICAgIHBhcmVudFRyYW5zZm9ybS5yb3RhdGUoMSk7CisKKyAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUo
cGFyZW50VHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVj
dCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0
ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisK
KyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0
KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIENDUXVhZEN1bGxl
cjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5z
aXplKCksIDEydSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121430</attachid>
            <date>2012-01-06 06:51:56 -0800</date>
            <delta_ts>2012-01-06 13:49:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70533-20120106095155.patch</filename>
            <type>text/plain</type>
            <size>24202</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM2ZTc3NjYyZTI3ZTA4
ZTAyMmVkYWU2YmU4NjI1NTZjZWM5ZTM1NS4uODBkNjY2YjRjNzVkMzc1ZDQwMGVmMzZjYWIwYTA2
N2Q3MTU0YzdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTA1ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQ
YXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVy
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVh
ZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlZ2lvbkNvbnRhaW5zUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6
OmN1bGxPY2NsdWRlZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxs
ZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6b3B0
aW1pemVRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmg6CisKIDIwMTItMDEtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRE9NIEF0dHJpYnV0ZSB0ZXN0cyBvbiBEcm9tYWVvIHNwZW5kcyAyLjcl
IG9mIHRpbWUgaW4gaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggZDJjMzY4NzMzYjgzZTY5MDY2MDdmMGQ3OGQxNzIxN2MzZWVhZjhhNS4uMzkzNTdm
MTk3NDQ5ZTRlMjY3MDJiNjk4Y2MyNDhjOGFhZjBiNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMS0wNSAgVy4gSmFtZXMgTWFjTGVhbiAgPHdq
bWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDdWxsIG9jY2x1ZGVk
IHRpbGVzIGluIHRpbGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA1MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6VGVzdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEy
LTAxLTA1ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W0Nocm9taXVtXSBSZW1vdmUgV2ViU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQgZnJvbSBwdWJsaWMgQVBJLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE2YjYyOTdlZTU4YzEwOTlk
NmY2NmJiODRjM2I3NTY5YTQ4YzNlNTMuLmQxNTljZmFiM2JhZTU2MTk2M2ZmOTMwOGY5ZTAxYTZl
ZTMxM2RiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MzEsNiArMzYzMSw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCAyMWZlNjg0Mzg3MDA2MGVjZDVmYTM3OGRiMTM2Njc5MzZjOTNjZTJmLi4yOWMzMDYwNjhiZDQ2
YTc1YjljZGFiZjgyYWRmMGViZGRiZmM0OTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0xMjksOCArMTI5LDggQEAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllcklt
cGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiAKIHZvaWQgQ0NMYXllckltcGw6OmFw
cGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlKQogewotICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJv
dW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIHRoaXMpKTsKKyAgICBJbnRSZWN0IHF1YWRS
ZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21M
YXllckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGhpcykpOwog
fQogCiB2b2lkIENDTGF5ZXJJbXBsOjphcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NRdWFkTGlzdCYg
cXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpIGNvbnN0
CkBAIC0xNzYsNyArMTc2LDEzIEBAIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdS
ZWN0KCkgY29uc3QKIAogVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFu
c2Zvcm0oKSBjb25zdAogewotICAgIHJldHVybiBkcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybWF0aW9uID0gZHJhd1RyYW5zZm9ybSgpOworCisg
ICAgZmxvYXQgb2Zmc2V0WCA9IC0wLjUgKiBib3VuZHMoKS53aWR0aCgpOworICAgIGZsb2F0IG9m
ZnNldFkgPSAtMC41ICogYm91bmRzKCkuaGVpZ2h0KCk7CisgICAgcXVhZFRyYW5zZm9ybWF0aW9u
LnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTsKKworICAgIHJldHVybiBxdWFkVHJhbnNmb3Jt
YXRpb247CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRz
LCBpbnQgaW5kZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRl
eCBmNmNmYWE1NGZiYmRmMjAwM2FiNWUzMzRhZmM3MTA5Y2U2YmYzOTdlLi5iNWI3NzZhNWU1ZmIx
NjMzMTBiOGI5MDg1M2U1MzZjMGRiNTJmMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcApAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBGbG9hdFJlY3QgZGFtYWdl
SW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxv
CiAgICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0OwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4g
PiYgcGFzc2VzKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNz
ZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogewogICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExh
eWVyKCkpOwpAQCAtMjM4LDYgKzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcAogICAg
IH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBhc3Nlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzW2ldLT5vcHRpbWl6ZVF1YWRzKCk7
Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKQEAg
LTI0Niw5ICsyNTIsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkK
ICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8T3du
UHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CisgICAgQ0NSZW5kZXJQYXNzTGlzdCBwYXNzZXM7
CiAgICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CiAKKyAgICBvcHRpbWl6ZVJlbmRl
clBhc3NlcyhwYXNzZXMpOworCiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFt
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQogICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZmU3NzRlZTAwNzFmYjM0M2Fl
NmI5YTQ1YzU4ZDM3ZmYxY2M2ZDdjYi4uNDg5N2U4ZWQxYWM3NDA3YTkxMDIxZTA3NGVhY2EwMWM0
Yjg3YzIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTMzLDcg
KzEzMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hh
bmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9p
ZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBjYWxj
dWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mKTsKKyAgICB2
b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CisgICAgdm9pZCBv
cHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAKICAgICBPd25QdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBtX3Jvb3RMYXllckltcGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40YThiODUxMzBlMWVkNGVlYWMzNjYzNWVmZDdjMDI5NTg1MGRiODQzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NRdWFk
Q3VsbGVyLmgiCisKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIHN0ZCB7CisK
Ky8vIFNwZWNpYWxpemUgZm9yIE93blB0cjxDQ0RyYXdRdWFkPiBzaW5jZSBWZWN0b3IgZG9lc24n
dCBrbm93IGhvdyB0byByZXZlcnNlIGEgVmVjdG9yIG9mIE93blB0cjxUPiBpbiBnZW5lcmFsLgor
dGVtcGxhdGU8Pgordm9pZCBzd2FwKE93blB0cjxXZWJDb3JlOjpDQ0RyYXdRdWFkPiYgYSwgT3du
UHRyPFdlYkNvcmU6OkNDRHJhd1F1YWQ+JiBiKQoreworICAgIGEuc3dhcChiKTsKK30KKworfQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVjdChj
b25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZWdpb24g
cmVjdFJlZ2lvbihyZWN0KTsKKyAgICBSZWdpb24gaW50ZXJzZWN0UmVnaW9uKGludGVyc2VjdChy
ZWdpb24sIHJlY3RSZWdpb24pKTsKKworICAgIGlmIChpbnRlcnNlY3RSZWdpb24uaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZWN0UmVnaW9uLnN1YnRyYWN0KGludGVy
c2VjdFJlZ2lvbik7CisgICAgcmV0dXJuIHJlY3RSZWdpb24uaXNFbXB0eSgpOworfQorCit2b2lk
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QpCit7
CisgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENDUXVh
ZExpc3QgY3VsbGVkTGlzdDsKKyAgICBjdWxsZWRMaXN0LnJlc2VydmVDYXBhY2l0eShxdWFkTGlz
dC5zaXplKCkpOworCisgICAgUmVnaW9uIG9wYXF1ZUNvdmVyYWdlVGh1c0ZhcjsKKworICAgIGZv
ciAoaW50IGkgPSBxdWFkTGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBD
Q0RyYXdRdWFkKiBkcmF3UXVhZCA9IHF1YWRMaXN0W2ldLmdldCgpOworCisgICAgICAgIEludFJl
Y3QgcXVhZFJlY3QoZHJhd1F1YWQtPnF1YWRUcmFuc2Zvcm0oKS5tYXBSZWN0KGRyYXdRdWFkLT5x
dWFkUmVjdCgpKSk7CisKKyAgICAgICAgYm9vbCBrZWVwUXVhZCA9ICFyZWdpb25Db250YWluc1Jl
Y3Qob3BhcXVlQ292ZXJhZ2VUaHVzRmFyLCBxdWFkUmVjdCk7CisKKyAgICAgICAgaWYgKGtlZXBR
dWFkICYmIGRyYXdRdWFkLT5kcmF3c09wYXF1ZSgpICYmIGRyYXdRdWFkLT5pc0xheWVyQXhpc0Fs
aWduZWRJbnRSZWN0KCkpCisgICAgICAgICAgICBvcGFxdWVDb3ZlcmFnZVRodXNGYXIudW5pdGUo
UmVnaW9uKHF1YWRSZWN0KSk7CisKKyAgICAgICAgaWYgKGtlZXBRdWFkKQorICAgICAgICAgICAg
Y3VsbGVkTGlzdC5hcHBlbmQocXVhZExpc3RbaV0ucmVsZWFzZSgpKTsKKyAgICB9CisgICAgcXVh
ZExpc3QuY2xlYXIoKTsgLy8gUmVsZWFzZSBhbnl0aGluZyB0aGF0IHJlbWFpbnMuCisKKyAgICBj
dWxsZWRMaXN0LnJldmVyc2UoKTsKKyAgICBxdWFkTGlzdC5zd2FwKGN1bGxlZExpc3QpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTc5Mjg1YWM0ODVkMGRh
MzU5YjE2NjFkZmE4Y2M2YmI2MmFiZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NRdWFkQ3VsbGVyX2gKKyNkZWZpbmUgQ0NRdWFkQ3Vs
bGVyX2gKKworI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENDUXVhZEN1bGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3Vs
bE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYpOworCitwcml2YXRlOgorICAgIC8vIE1ha2Ugbm9u
LWluc3RhbnRpYWJsZS4KKyAgICBDQ1F1YWRDdWxsZXIoKSB7IH0KK307CisKK30KKyNlbmRpZiAv
LyBDQ1F1YWRDdWxsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggNzFhZGM0YjNl
MDhkMzQyMDk4MzFhNTcyMTJlNmNiZTAwMGM1YzBiOS4uNmY1MWZiY2RlMDVhYzk2MTI4NzQ0MDQ1
MTA1NGY0ZWMzZjUxMjhkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aCIKIApAQCAtNjMsNCArNjQsOSBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JS
ZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgIG1fc2hhcmVkUXVhZFN0
YXRlTGlzdC5hcHBlbmQoc2hhcmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKK3ZvaWQgQ0NS
ZW5kZXJQYXNzOjpvcHRpbWl6ZVF1YWRzKCkKK3sKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2Ns
dWRlZFF1YWRzKG1fcXVhZExpc3QpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4
IDE2ZTA3MmU4MDgwYjNkZTQ5YWYyZmNjMjQxMWE5Y2RjNTNhNjQxYTAuLjlmYjc3MTY2YzRjZDA0
NzY0N2U4ZDFhZTAzMmZlNDZiZDlhODYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC00
Niw2ICs0Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXll
ckltcGwqKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5
ZXJJbXBsKik7CiAKKyAgICB2b2lkIG9wdGltaXplUXVhZHMoKTsKKwogICAgIGNvbnN0IENDUXVh
ZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQogICAgIENDUmVu
ZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFj
ZTsgfQogCkBAIC02MSw2ICs2Myw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fc3VyZmFj
ZURhbWFnZVJlY3Q7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+
IENDUmVuZGVyUGFzc0xpc3Q7CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQppbmRleCBlNjc0YmI2Yjg1YjA4NWNhYmFjYzlkOWQ2NDk5OTNkNWQ2MmZlNWNmLi5mNTI0
N2JhMzc3YWE4OGM4NGRkMTI2ZDEyZmM2NGYxNzE4ZTY3NTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTcwLDYgKzcwLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcs
CisgICAgICAgICAgICAndGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Nj
aGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVk
dWxlclRlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1F1YWRDdWxsZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDE1ZTZjMTBlMWZlNDYyYzk0OTY4NTZk
YjM5MzQ1NjlmYWI4ODFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgi
CisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBDQ1F1YWRD
dWxsZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworfTsKKworY2xhc3MgVGVzdERyYXdR
dWFkIDogcHVibGljIENDRHJhd1F1YWQgeworcHVibGljOgorICAgIFRlc3REcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFsIG0sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCisgICAgOiBDQ0RyYXdRdWFkKHN0YXRlLCBtLCByZWN0KQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxUZXN0RHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc3RhdGUsIE1hdGVyaWFsIG0sIGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRlc3REcmF3UXVhZChzdGF0ZSwgbSwgcmVjdCkp
OworICAgIH0KK307CisKK3ZvaWQgc2V0UXVhZHMoQ0NTaGFyZWRRdWFkU3RhdGUqIHJvb3RTdGF0
ZSwgQ0NTaGFyZWRRdWFkU3RhdGUqIGNoaWxkU3RhdGUsIENDUXVhZExpc3QmIHF1YWRMaXN0KQor
eworICAgIHF1YWRMaXN0LmNsZWFyKCk7CisKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdR
dWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3Qo
SW50UG9pbnQoKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRl
c3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJ
bnRSZWN0KEludFBvaW50KDEwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRM
aXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRp
bGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgyMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkp
KTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMTAwKSwgSW50U2l6
ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRl
KHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDEw
MCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3RE
cmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRS
ZWN0KEludFBvaW50KDIwMCwgMTAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExp
c3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGls
ZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDIwMCksIEludFNp
emUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0
ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgy
MDAsIDIwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworCisgICAgcXVhZExpc3QuYXBwZW5kKFRl
c3REcmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwg
SW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRD
b250ZW50LCBJbnRSZWN0KEludFBvaW50KDEwMCwgMCksIEludFNpemUoMTAwLCAxMDApKSkpOwor
ICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0Ry
YXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgx
MDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKGNo
aWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAs
IDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworfQorCisjZGVmaW5lIERFQ0xBUkVfQU5EX0lO
SVRJQUxJWkVfVEVTVF9RVUFEUyAgICAgICAgICAgICAgIFwKKyAgICBDQ1F1YWRMaXN0IHF1YWRM
aXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGNoaWxkVHJhbnNmb3JtOyAgICAgICAgICAgICAgICBcCisgICAgSW50U2l6ZSByb290
U2l6ZSA9IEludFNpemUoMzAwLCAzMDApOyAgICAgICAgICAgICAgIFwKKyAgICBJbnRSZWN0IHJv
b3RSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCByb290U2l6ZSk7ICAgXAorICAgIEludFNpemUg
Y2hpbGRTaXplID0gSW50U2l6ZSgyMDAsIDIwMCk7ICAgICAgICAgICAgICBcCisgICAgSW50UmVj
dCBjaGlsZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNoaWxkU2l6ZSk7CisKK1RFU1QoQ0NR
dWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3VsbENoaWxkTGluZXNVcFRvcExlZnQpCit7CisgICAgREVD
TEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwg
MS4wLCB0cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRz
KHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVD
VF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVk
ZWRRdWFkcyhxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOwor
fQorCitURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeUN1bGxXaGVuQ2hpbGRPcGFjaXR5Tm90
T25lKQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFEUworCisgICAgT3du
UHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RS
ZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRl
PiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwg
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDAuOSwgdHJ1ZSk7
CisKKyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRM
aXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIENDUXVhZEN1
bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlz
dC5zaXplKCksIDEzdSk7Cit9CisKK1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Q3VsbFdo
ZW5DaGlsZE9wYXF1ZUZsYWdGYWxzZSkKK3sKKyAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RF
U1RfUVVBRFMKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NT
aGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgIE93blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVh
dGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50
UmVjdCgpLCAxLjAsIGZhbHNlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hp
bGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCks
IDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7Cisg
ICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKK30KKworVEVTVChDQ1F1YWRDdWxs
ZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVyVGlsZU9ubHkpCit7CisgICAgREVDTEFSRV9BTkRfSU5J
VElBTElaRV9URVNUX1FVQURTCisKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUw
KTsKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRR
dWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hp
bGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgp
LCAxLjAsIHRydWUpOworCisgICAgc2V0UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRl
LmdldCgpLCBxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsK
KyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRzKHF1YWRMaXN0KTsKKyAgICBFWFBF
Q1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMnUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRlc3Qs
IHZlcmlmeUN1bGxDaGlsZExpbmVzVXBCb3R0b21SaWdodCkKK3sKKyAgICBERUNMQVJFX0FORF9J
TklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgxMDAs
IDEwMCk7CisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hh
cmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRl
KGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJl
Y3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRT
dGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEz
dSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgOXUpOworfQorCitURVNUKENDUXVhZEN1bGxlclRl
c3QsIHZlcmlmeU5vbkF4aXNBbGlnbmVkUXVhZHNEb250T2NjbHVkZSkKK3sKKyAgICBERUNMQVJF
X0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIC8vIFVzZSBhIHNtYWxsIHJvdGF0aW9u
IHNvIGFzIHRvIG5vdCBkaXN0dXJiIHRoZSBnZW9tZXRyeSBzaWduaWZpY2FudGx5LgorICAgIGNo
aWxkVHJhbnNmb3JtLnJvdGF0ZSgxKTsKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
cm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVjdCgpLCAxLjAsIHRy
dWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0ZSA9IENDU2hhcmVk
UXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgc2V0UXVhZHMocm9vdFN0
YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1
YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRz
KHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworfQorCisv
LyBUaGlzIHRlc3QgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbjogaGVyZSB3ZSBhcmUgcm90YXRp
bmcgdGhlIHF1YWRzIHRvIGJlIGN1bGxlZC4KKy8vIFRoZSAyeDIgdGlsZSBjaGlsZCBsYXllciBy
ZW1haW5zIGluIHRoZSB0b3AtbGVmdCBjb3JuZXIsIHVucm90YXRlZCwgYnV0IHRoZSAzeDMKKy8v
IHRpbGUgcGFyZW50IGxheWVyIGlzIHJvdGF0ZWQgYnkgMSBkZWdyZWUuIE9mIHRoZSBmb3VyIHRp
bGVzIHRoZSBjaGlsZCB3b3VsZAorLy8gbm9ybWFsbHkgb2NjbHVkZSwgdGhyZWUgd2lsbCBtb3Zl
IChzbGlnaHRseSkgb3V0IGZyb20gdW5kZXIgdGhlIGNoaWxkIGxheWVyLCBhbmQKKy8vIG9uZSBt
b3ZlcyBmdXJ0aGVyIHVuZGVyIHRoZSBjaGlsZC4gT25seSB0aGlzIGxhc3QgdGlsZSBzaG91bGQg
YmUgY3VsbGVkLgorVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlOb25BeGlzQWxpZ25lZFF1
YWRzU2FmZWx5Q3VsbGVkKQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVTVF9RVUFE
UworCisgICAgLy8gVXNlIGEgc21hbGwgcm90YXRpb24gc28gYXMgdG8gbm90IGRpc3R1cmIgdGhl
IGdlb21ldHJ5IHNpZ25pZmljYW50bHkuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50
VHJhbnNmb3JtOworICAgIHBhcmVudFRyYW5zZm9ybS5yb3RhdGUoMSk7CisKKyAgICBPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUo
cGFyZW50VHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVj
dCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0
ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisK
KyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0
KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIENDUXVhZEN1bGxl
cjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5z
aXplKCksIDEydSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121486</attachid>
            <date>2012-01-06 13:49:19 -0800</date>
            <delta_ts>2012-01-06 18:39:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-70533-20120106164917.patch</filename>
            <type>text/plain</type>
            <size>24248</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1ZTRiYzQ3MGFkZTNl
NWY5ZDk4ZDYzZWY0MzI1NjczMjg2YjYwNy4uNGZiNWFiZTgzN2FmN2JkZjgwOTQzMGMxYTkwZTIy
Mzc2NDU0Yzk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTA1ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIEN1bGwgb2NjbHVkZWQgdGlsZXMgaW4gdGlsZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFVuaXQgdGVzdCBwcm92aWRlZCwgbXVzdCBw
YXNzIGFsbCBleGlzdGluZyBHUFUgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQ
YXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVy
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVh
ZEN1bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoc3RkOjpzd2FwKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlZ2lvbkNvbnRhaW5zUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6
OmN1bGxPY2NsdWRlZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxs
ZXI6OkNDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6b3B0
aW1pemVRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmg6CisKIDIwMTItMDEtMDUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDQwNjApOiBmYXN0L2Zvcm1zL3RleHRhcmVh
LW1ldHJpY3MuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM1
OGFhMGM3ZDViMmJlMDNlYmVhNmY3OWMxNGU5NDUzYjczMDdiNTEuLmJmYjQ2OWUwNTVkYzcwNTVl
NTdhN2Y2NDA5NmZkZTdlNTNjZDY4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTItMDEtMDUgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gQ3VsbCBvY2NsdWRlZCB0aWxlcyBpbiB0
aWxlZCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcwNTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXN0RHJhd1F1YWQ6OlRlc3REcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0RHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wMS0wNSAgSm9j
aGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDaGVjayB3aGV0
aGVyIGEgV2ViVmlldyBleGlzdHMgYmVmb3JlIGFjY2Vzc2luZyBpdCBpbiBTdG9yYWdlQXJlYVBy
b3h5LiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSwgZS5nLiBmb3IgZGV0YWNoZWQg
aWZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmMzU1ODY4ZDU4OTlmYWY4NWNlNzU5NjBiMjVl
ZmQ3ZWFiZGNjNzhiLi43MWM4YWNjMzFmNTM1ZjE0MzA4MmY0MWNmODEwYTllNjRlOWY5ZjRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNjMyLDYgKzM2MzIsOCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMjFmZTY4NDM4
NzAwNjBlY2Q1ZmEzNzhkYjEzNjY3OTM2YzkzY2UyZi4uMjljMzA2MDY4YmQ0NmE3NWI5Y2RhYmY4
MmFkZjBlYmRkYmZjNDk1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTI5LDggKzEy
OSw4IEBAIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpjcmVhdGVT
aGFyZWRRdWFkU3RhdGUoKSBjb25zdAogCiB2b2lkIENDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhD
Q1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRT
dGF0ZSkKIHsKLSAgICBJbnRSZWN0IGxheWVyUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7Ci0g
ICAgcXVhZExpc3QuYXBwZW5kKENDQ3VzdG9tTGF5ZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgbGF5ZXJSZWN0LCB0aGlzKSk7CisgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2lu
dCgpLCBib3VuZHMoKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKENDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKIH0KIAogdm9pZCBD
Q0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmIHF1YWRMaXN0LCBj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKSBjb25zdApAQCAtMTc2LDcg
KzE3NiwxMyBAQCBjb25zdCBJbnRSZWN0IENDTGF5ZXJJbXBsOjpnZXREcmF3UmVjdCgpIGNvbnN0
CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IENDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZHJhd1RyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHF1YWRUcmFuc2Zvcm1hdGlvbiA9IGRyYXdUcmFuc2Zvcm0oKTsKKworICAgIGZsb2F0IG9m
ZnNldFggPSAtMC41ICogYm91bmRzKCkud2lkdGgoKTsKKyAgICBmbG9hdCBvZmZzZXRZID0gLTAu
NSAqIGJvdW5kcygpLmhlaWdodCgpOworICAgIHF1YWRUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUo
b2Zmc2V0WCwgb2Zmc2V0WSk7CisKKyAgICByZXR1cm4gcXVhZFRyYW5zZm9ybWF0aW9uOwogfQog
CiB2b2lkIENDTGF5ZXJJbXBsOjp3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZjZjZmFhNTRm
YmJkZjIwMDNhYjVlMzM0YWZjNzEwOWNlNmJmMzk3ZS4uYjViNzc2YTVlNWZiMTYzMzEwYjhiOTA4
NTNlNTM2YzBkYjUyZjM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNw
YWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVy
biBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxj
dWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mIHBhc3NlcykK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVy
UGFzc0xpc3QmIHBhc3NlcykKIHsKICAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcigpKTsKQEAg
LTIzOCw2ICsyMzgsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mIHAKICAgICB9CiB9CiAKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNz
TGlzdCYgcGFzc2VzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXNzZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIHBhc3Nlc1tpXS0+b3B0aW1pemVRdWFkcygpOworfQorCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogewogICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CkBAIC0yNDYsOSArMjUy
LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiAgICAgaWYgKCFy
b290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPE93blB0cjxDQ1JlbmRl
clBhc3M+ID4gcGFzc2VzOworICAgIENDUmVuZGVyUGFzc0xpc3QgcGFzc2VzOwogICAgIGNhbGN1
bGF0ZVJlbmRlclBhc3NlcyhwYXNzZXMpOwogCisgICAgb3B0aW1pemVSZW5kZXJQYXNzZXMocGFz
c2VzKTsKKwogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhwYXNzZXNbaV0uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGZlNzc0ZWUwMDcxZmIzNDNhZTZiOWE0NWM1OGQz
N2ZmMWNjNmQ3Y2IuLjQ4OTdlOGVkMWFjNzQwN2E5MTAyMWUwNzRlYWNhMDFjNGI4N2MyMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEzMyw3ICsxMzMsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCk7
CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1h
Z2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVy
UGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+Jik7CisgICAgdm9pZCBjYWxjdWxh
dGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIHZvaWQgb3B0aW1pemVSZW5k
ZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290
TGF5ZXJJbXBsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE4Yjg1MTMw
ZTFlZDRlZWFjMzY2MzVlZmQ3YzAyOTU4NTBkYjg0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAK
QEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgor
CisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KyNpbmNsdWRlICJjYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBzdGQgeworCisvLyBTcGVjaWFs
aXplIGZvciBPd25QdHI8Q0NEcmF3UXVhZD4gc2luY2UgVmVjdG9yIGRvZXNuJ3Qga25vdyBob3cg
dG8gcmV2ZXJzZSBhIFZlY3RvciBvZiBPd25QdHI8VD4gaW4gZ2VuZXJhbC4KK3RlbXBsYXRlPD4K
K3ZvaWQgc3dhcChPd25QdHI8V2ViQ29yZTo6Q0NEcmF3UXVhZD4mIGEsIE93blB0cjxXZWJDb3Jl
OjpDQ0RyYXdRdWFkPiYgYikKK3sKKyAgICBhLnN3YXAoYik7Cit9CisKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCByZWdpb25Db250YWluc1JlY3QoY29uc3QgUmVnaW9u
JiByZWdpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVnaW9uIHJlY3RSZWdpb24o
cmVjdCk7CisgICAgUmVnaW9uIGludGVyc2VjdFJlZ2lvbihpbnRlcnNlY3QocmVnaW9uLCByZWN0
UmVnaW9uKSk7CisKKyAgICBpZiAoaW50ZXJzZWN0UmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdpb24p
OworICAgIHJldHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKK30KKwordm9pZCBDQ1F1YWRDdWxs
ZXI6OmN1bGxPY2NsdWRlZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0KQoreworICAgIGlmICgh
cXVhZExpc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1F1YWRMaXN0IGN1bGxl
ZExpc3Q7CisgICAgY3VsbGVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkocXVhZExpc3Quc2l6ZSgpKTsK
KworICAgIFJlZ2lvbiBvcGFxdWVDb3ZlcmFnZVRodXNGYXI7CisKKyAgICBmb3IgKGludCBpID0g
cXVhZExpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NEcmF3UXVhZCog
ZHJhd1F1YWQgPSBxdWFkTGlzdFtpXS5nZXQoKTsKKworICAgICAgICBJbnRSZWN0IHF1YWRSZWN0
KGRyYXdRdWFkLT5xdWFkVHJhbnNmb3JtKCkubWFwUmVjdChkcmF3UXVhZC0+cXVhZFJlY3QoKSkp
OworCisgICAgICAgIGJvb2wga2VlcFF1YWQgPSAhcmVnaW9uQ29udGFpbnNSZWN0KG9wYXF1ZUNv
dmVyYWdlVGh1c0ZhciwgcXVhZFJlY3QpOworCisgICAgICAgIGlmIChrZWVwUXVhZCAmJiBkcmF3
UXVhZC0+ZHJhd3NPcGFxdWUoKSAmJiBkcmF3UXVhZC0+aXNMYXllckF4aXNBbGlnbmVkSW50UmVj
dCgpKQorICAgICAgICAgICAgb3BhcXVlQ292ZXJhZ2VUaHVzRmFyLnVuaXRlKFJlZ2lvbihxdWFk
UmVjdCkpOworCisgICAgICAgIGlmIChrZWVwUXVhZCkKKyAgICAgICAgICAgIGN1bGxlZExpc3Qu
YXBwZW5kKHF1YWRMaXN0W2ldLnJlbGVhc2UoKSk7CisgICAgfQorICAgIHF1YWRMaXN0LmNsZWFy
KCk7IC8vIFJlbGVhc2UgYW55dGhpbmcgdGhhdCByZW1haW5zLgorCisgICAgY3VsbGVkTGlzdC5y
ZXZlcnNlKCk7CisgICAgcXVhZExpc3Quc3dhcChjdWxsZWRMaXN0KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UXVhZEN1bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NRdWFkQ3VsbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE3OTI4NWFjNDg1ZDBkYTM1OWIxNjYxZGZh
OGNjNmJiNjJhYmYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDUXVhZEN1bGxlcl9oCisjZGVmaW5lIENDUXVhZEN1bGxlcl9oCisKKyNp
bmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ1F1YWRDdWxsZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGN1bGxPY2NsdWRlZFF1
YWRzKENDUXVhZExpc3QmKTsKKworcHJpdmF0ZToKKyAgICAvLyBNYWtlIG5vbi1pbnN0YW50aWFi
bGUuCisgICAgQ0NRdWFkQ3VsbGVyKCkgeyB9Cit9OworCit9CisjZW5kaWYgLy8gQ0NRdWFkQ3Vs
bGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IDcxYWRjNGIzZTA4ZDM0MjA5ODMx
YTU3MjEyZTZjYmUwMDBjNWMwYjkuLjZmNTFmYmNkZTA1YWM5NjEyODc0NDA0NTEwNTRmNGVjM2Y1
MTI4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
KyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCiAKQEAgLTYz
LDQgKzY0LDkgQEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFj
ZUxheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBw
ZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCit2b2lkIENDUmVuZGVyUGFzczo6
b3B0aW1pemVRdWFkcygpCit7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyht
X3F1YWRMaXN0KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCAxNmUwNzJlODA4
MGIzZGU0OWFmMmZjYzI0MTFhOWNkYzUzYTY0MWEwLi45ZmI3NzE2NmM0Y2QwNDc2NDdlOGQxYWUw
MzJmZTQ2YmQ5YTg2MWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtNDYsNiArNDYsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKik7CiAg
ICAgdm9pZCBhcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCopOwog
CisgICAgdm9pZCBvcHRpbWl6ZVF1YWRzKCk7CisKICAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFk
TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KICAgICBDQ1JlbmRlclN1cmZhY2Uq
IHRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0KIApAQCAt
NjEsNiArNjMsOCBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0
OwogfTsKIAordHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBDQ1JlbmRlclBh
c3NMaXN0OworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
OGU4ZDQyZTRmN2Q1ZjkwN2VhMmRkY2EyYTliMWRlNjA3ODQ0NWY1MC4uY2Y5YzQxZWUzZDE3MTM2
NjgyYzE1ODVjMjdmN2IwY2M4OGFkZWE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC03MCw2ICs3MCw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAorICAgICAgICAg
ICAgJ3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Jl
bmRlclN1cmZhY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0
ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29t
bW9uLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRD
dWxsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVy
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQxNWU2YzEwZTFmZTQ2MmM5NDk2ODU2ZGIzOTM0NTY5ZmFi
ODgxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NR
dWFkQ3VsbGVyVGVzdC5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgorCisjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ0NRdWFkQ3VsbGVyVGVzdCA6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK307CisKK2NsYXNzIFRlc3REcmF3UXVhZCA6IHB1Ymxp
YyBDQ0RyYXdRdWFkIHsKK3B1YmxpYzoKKyAgICBUZXN0RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHN0YXRlLCBNYXRlcmlhbCBtLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIDog
Q0NEcmF3UXVhZChzdGF0ZSwgbSwgcmVjdCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFBh
c3NPd25QdHI8VGVzdERyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHN0
YXRlLCBNYXRlcmlhbCBtLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUZXN0RHJhd1F1YWQoc3RhdGUsIG0sIHJlY3QpKTsKKyAgICB9Cit9
OworCit2b2lkIHNldFF1YWRzKENDU2hhcmVkUXVhZFN0YXRlKiByb290U3RhdGUsIENDU2hhcmVk
UXVhZFN0YXRlKiBjaGlsZFN0YXRlLCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCkKK3sKKyAgICBxdWFk
TGlzdC5jbGVhcigpOworCisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRl
KHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KCks
IEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6
OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQ
b2ludCgxMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
VGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQs
IEludFJlY3QoSW50UG9pbnQoMjAwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVh
ZExpc3QuYXBwZW5kKFRlc3REcmF3UXVhZDo6Y3JlYXRlKHJvb3RTdGF0ZSwgQ0NEcmF3UXVhZDo6
VGlsZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDAp
KSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUs
IENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2ludCgxMDAsIDEwMCksIElu
dFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNy
ZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50UmVjdChJbnRQb2lu
dCgyMDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkpOworICAgIHF1YWRMaXN0LmFwcGVuZChU
ZXN0RHJhd1F1YWQ6OmNyZWF0ZShyb290U3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwg
SW50UmVjdChJbnRQb2ludCgwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFk
TGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRlLCBDQ0RyYXdRdWFkOjpU
aWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAyMDApLCBJbnRTaXplKDEwMCwgMTAw
KSkpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUocm9vdFN0YXRl
LCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMjAwLCAyMDApLCBJ
bnRTaXplKDEwMCwgMTAwKSkpKTsKKworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6
OmNyZWF0ZShjaGlsZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50
UG9pbnQoKSwgSW50U2l6ZSgxMDAsIDEwMCkpKSk7CisgICAgcXVhZExpc3QuYXBwZW5kKFRlc3RE
cmF3UXVhZDo6Y3JlYXRlKGNoaWxkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgSW50
UmVjdChJbnRQb2ludCgxMDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSkpKTsKKyAgICBxdWFkTGlz
dC5hcHBlbmQoVGVzdERyYXdRdWFkOjpjcmVhdGUoY2hpbGRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGls
ZWRDb250ZW50LCBJbnRSZWN0KEludFBvaW50KDAsIDEwMCksIEludFNpemUoMTAwLCAxMDApKSkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChUZXN0RHJhd1F1YWQ6OmNyZWF0ZShjaGlsZFN0YXRlLCBD
Q0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIEludFJlY3QoSW50UG9pbnQoMTAwLCAxMDApLCBJbnRT
aXplKDEwMCwgMTAwKSkpKTsKK30KKworI2RlZmluZSBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RF
U1RfUVVBRFMgICAgICAgICAgICAgICBcCisgICAgQ0NRdWFkTGlzdCBxdWFkTGlzdDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGls
ZFRyYW5zZm9ybTsgICAgICAgICAgICAgICAgXAorICAgIEludFNpemUgcm9vdFNpemUgPSBJbnRT
aXplKDMwMCwgMzAwKTsgICAgICAgICAgICAgICBcCisgICAgSW50UmVjdCByb290UmVjdCA9IElu
dFJlY3QoSW50UG9pbnQoKSwgcm9vdFNpemUpOyAgIFwKKyAgICBJbnRTaXplIGNoaWxkU2l6ZSA9
IEludFNpemUoMjAwLCAyMDApOyAgICAgICAgICAgICAgXAorICAgIEludFJlY3QgY2hpbGRSZWN0
ID0gSW50UmVjdChJbnRQb2ludCgpLCBjaGlsZFNpemUpOworCitURVNUKENDUXVhZEN1bGxlclRl
c3QsIHZlcmlmeUN1bGxDaGlsZExpbmVzVXBUb3BMZWZ0KQoreworICAgIERFQ0xBUkVfQU5EX0lO
SVRJQUxJWkVfVEVTVF9RVUFEUworCisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290
U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7
CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFk
U3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5zZm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hp
bGRSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisKKyAgICBzZXRRdWFkcyhyb290U3RhdGUu
Z2V0KCksIGNoaWxkU3RhdGUuZ2V0KCksIHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExp
c3Quc2l6ZSgpLCAxM3UpOworICAgIENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVh
ZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDl1KTsKK30KKworVEVTVChD
Q1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsV2hlbkNoaWxkT3BhY2l0eU5vdE9uZSkKK3sKKyAg
ICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIE93blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gcm9vdFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgSW50UmVj
dCgpLCAxLjAsIHRydWUpOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY2hpbGRTdGF0
ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY2hpbGRUcmFuc2Zvcm0sIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAwLjksIHRydWUpOworCisgICAgc2V0
UXVhZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxP
Y2NsdWRlZFF1YWRzKHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAx
M3UpOworfQorCitURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeUN1bGxXaGVuQ2hpbGRPcGFx
dWVGbGFnRmFsc2UpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCisK
KyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0
YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRR
dWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJh
bnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4w
LCBmYWxzZSk7CisKKyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0
KCksIHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAg
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9F
UShxdWFkTGlzdC5zaXplKCksIDEzdSk7Cit9CisKK1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVy
aWZ5Q3VsbENlbnRlclRpbGVPbmx5KQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRJQUxJWkVfVEVT
VF9RVUFEUworCisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpj
cmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9v
dFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNoaWxkVHJhbnNmb3Jt
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVl
KTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwgY2hpbGRTdGF0ZS5nZXQoKSwgcXVh
ZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXplKCksIDEzdSk7CisgICAgQ0NRdWFk
Q3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7CisgICAgRVhQRUNUX0VRKHF1YWRM
aXN0LnNpemUoKSwgMTJ1KTsKK30KKworVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxs
Q2hpbGRMaW5lc1VwQm90dG9tUmlnaHQpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9U
RVNUX1FVQURTCisKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMTAwLCAxMDApOworCisg
ICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0
ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IHJvb3RSZWN0LCBJbnRSZWN0KCksIDEuMCwgdHJ1ZSk7CisgICAgT3duUHRyPENDU2hhcmVkUXVh
ZFN0YXRlPiBjaGlsZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjaGlsZFRyYW5z
Zm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCBJbnRSZWN0KCksIDEuMCwg
dHJ1ZSk7CisKKyAgICBzZXRRdWFkcyhyb290U3RhdGUuZ2V0KCksIGNoaWxkU3RhdGUuZ2V0KCks
IHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxM3UpOworICAgIEND
UXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMocXVhZExpc3QpOworICAgIEVYUEVDVF9FUShx
dWFkTGlzdC5zaXplKCksIDl1KTsKK30KKworVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlO
b25BeGlzQWxpZ25lZFF1YWRzRG9udE9jY2x1ZGUpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVElB
TElaRV9URVNUX1FVQURTCisKKyAgICAvLyBVc2UgYSBzbWFsbCByb3RhdGlvbiBzbyBhcyB0byBu
b3QgZGlzdHVyYiB0aGUgZ2VvbWV0cnkgc2lnbmlmaWNhbnRseS4KKyAgICBjaGlsZFRyYW5zZm9y
bS5yb3RhdGUoMSk7CisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJvb3RTdGF0ZSA9
IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKyAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6
Y3JlYXRlKGNoaWxkVHJhbnNmb3JtLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3Qs
IEludFJlY3QoKSwgMS4wLCB0cnVlKTsKKworICAgIHNldFF1YWRzKHJvb3RTdGF0ZS5nZXQoKSwg
Y2hpbGRTdGF0ZS5nZXQoKSwgcXVhZExpc3QpOworICAgIEVYUEVDVF9FUShxdWFkTGlzdC5zaXpl
KCksIDEzdSk7CisgICAgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhxdWFkTGlzdCk7
CisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKK30KKworLy8gVGhpcyB0ZXN0
IHJlcXVpcmVzIHNvbWUgZXhwbGFuYXRpb246IGhlcmUgd2UgYXJlIHJvdGF0aW5nIHRoZSBxdWFk
cyB0byBiZSBjdWxsZWQuCisvLyBUaGUgMngyIHRpbGUgY2hpbGQgbGF5ZXIgcmVtYWlucyBpbiB0
aGUgdG9wLWxlZnQgY29ybmVyLCB1bnJvdGF0ZWQsIGJ1dCB0aGUgM3gzCisvLyB0aWxlIHBhcmVu
dCBsYXllciBpcyByb3RhdGVkIGJ5IDEgZGVncmVlLiBPZiB0aGUgZm91ciB0aWxlcyB0aGUgY2hp
bGQgd291bGQKKy8vIG5vcm1hbGx5IG9jY2x1ZGUsIHRocmVlIHdpbGwgbW92ZSAoc2xpZ2h0bHkp
IG91dCBmcm9tIHVuZGVyIHRoZSBjaGlsZCBsYXllciwgYW5kCisvLyBvbmUgbW92ZXMgZnVydGhl
ciB1bmRlciB0aGUgY2hpbGQuIE9ubHkgdGhpcyBsYXN0IHRpbGUgc2hvdWxkIGJlIGN1bGxlZC4K
K1RFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5Tm9uQXhpc0FsaWduZWRRdWFkc1NhZmVseUN1
bGxlZCkKK3sKKyAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKKworICAgIC8v
IFVzZSBhIHNtYWxsIHJvdGF0aW9uIHNvIGFzIHRvIG5vdCBkaXN0dXJiIHRoZSBnZW9tZXRyeSBz
aWduaWZpY2FudGx5LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zZm9ybTsK
KyAgICBwYXJlbnRUcmFuc2Zvcm0ucm90YXRlKDEpOworCisgICAgT3duUHRyPENDU2hhcmVkUXVh
ZFN0YXRlPiByb290U3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHBhcmVudFRyYW5z
Zm9ybSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIEludFJlY3QoKSwgMS4wLCB0
cnVlKTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNoaWxkU3RhdGUgPSBDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y3JlYXRlKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIGNoaWxkUmVjdCwgSW50UmVjdCgpLCAxLjAsIHRydWUpOworCisgICAgc2V0UXVh
ZHMocm9vdFN0YXRlLmdldCgpLCBjaGlsZFN0YXRlLmdldCgpLCBxdWFkTGlzdCk7CisgICAgRVhQ
RUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTN1KTsKKyAgICBDQ1F1YWRDdWxsZXI6OmN1bGxPY2Ns
dWRlZFF1YWRzKHF1YWRMaXN0KTsKKyAgICBFWFBFQ1RfRVEocXVhZExpc3Quc2l6ZSgpLCAxMnUp
OworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>