<?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>71972</bug_id>
          
          <creation_ts>2011-11-09 17:02:51 -0800</creation_ts>
          <short_desc>Consider all RenderObjects in a GraphicsLayer when marking opaque</short_desc>
          <delta_ts>2011-12-09 13:28:47 -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>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>backer</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>499494</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-09 17:02:51 -0800</bug_when>
    <thetext>New bug to consider next steps on bug #70634</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499498</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-09 17:06:52 -0800</bug_when>
    <thetext>(Comment stolen from bug #70634)
&gt; (From update of attachment 114066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114066&amp;action=review
&gt; 
&gt; I don&apos;t like that this patch is getting more and more complex. I think you should start by getting the easy cases working first (e.g. the layer&apos;s RenderObject is known to be opaque), and then progress to doing RenderObject walks in later patches. The IntRectEdge code is a large amount of new code. It should be tested on all platforms, not just Chromium, but I&apos;d prefer that it just not be included in the initial patch.

I was starting to feel the same way, and I&apos;ll be happy to do so. I feel I should clarify what the patch will lose though in the process.

The IntRectEdge code was used to determine if the RenderLayers in a backing together would make it opaque.  Removing that will revert the check to this back to &quot;is there a single opaque RenderLayer that fills the backing?&quot;

I think the inconsistency I wanted to pointed here is that the IntRectEdge code has less to do with walking the RenderObject tree, and more to do with considering all the layers in a backing together (eventually all the RenderObjects in a backing).

Regarding testing: The IntRectEdge code will be tested by LayoutTests across all platforms. But I wanted a unit test also for the unionOfRectsCoverARect logic, especially while I was writing it. I would write unit tests for all platforms if such a general mechanism existed, but to my knowledge it does not?

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:2693
&gt; &gt; +    const LayoutRect&amp; bounds = borderBoundingBox();
&gt; &gt; +
&gt; &gt; +    // We do not consider overflow bounds here, and if we get a query rect on the overflow area for the
&gt; &gt; +    // render object (i.e. outside the border bounds), then we just return false. This does not mean the area
&gt; &gt; +    // in the rect is neccessarily non-opaque, and may be a false negative.
&gt; &gt; +    // NOTE: Because of this, we don&apos;t need to look for style()-&gt;boxShadow(), since that is always outside of the border
&gt; &gt; +    // bounds.
&gt; &gt; +    if (!bounds.contains(rect))
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    // FIXME: Check border-image. With &apos;fill&apos; it can be drawn behind the contents area and could be opaque.
&gt; &gt; +    // Currently we check background color only, but border-image could make the rect opaque even though the
&gt; &gt; +    // background color is not.
&gt; &gt; +
&gt; &gt; +    const Color color = style()-&gt;visitedDependentColor(CSSPropertyBackgroundColor);
&gt; &gt; +    if (!color.isValid() || color.hasAlpha())
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    return true;
&gt; 
&gt; This is contrary to the direction I expressed a preference for. I think the methods should default to returning false, and return true only in cases they know they can give the correct answer for.

Understood, I will change how these are written.

&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:2740
&gt; &gt; +    return true;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderImage.cpp:432
&gt; &gt; +    return true;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.h:794
&gt; &gt; +    // This is a mapping from RenderObject* to IntRect, which is the opaque rect for each RenderObject
&gt; &gt; +    // belonging to this RenderLayer.
&gt; &gt; +    HashMap&lt;const RenderObject*, IntRect&gt; m_opaqueRectForRenderObject;
&gt; &gt; +
&gt; &gt; +    // This list contains bounding box rectangles of opaque RenderObjects in the layer.
&gt; &gt; +    OwnPtr&lt;Vector&lt;IntRectEdge&gt; &gt; m_opaqueRectsList;
&gt; 
&gt; It seems wrong to be adding these members to RenderLayer, when there&apos;s no contract about who updates them. A caller has no way to know if opaqueRects() will be return a stale list. There&apos;s just an implicit contract that RenderLayerBacking will update the rects at the right time.

- The set of opaque rects is contained in the RenderLayer, since we already walk RenderLayers for any given backing, and it is easier to tell which Layer a RO belongs to, than which backing.
- The /set/ of opaque rects in a RenderLayer is updated by each RenderObject. When the RenderObject makes a change to its opaque rect, the list is marked dirty (by being deleted).
- The list of opaque rects is rebuilt by RenderLayer whenever the list is requested, and the previous list was dirtied. Thus, the backing does not actually update the list explicitly, it just queries on the RenderLayer, who builds the list if required and returns it. And a dirty list is never returned.

I don&apos;t particularly like this approach though, either. Is there another RO tree walk that could be considered? The previous patch was a lot cleaner.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:474
&gt; &gt; +    LayoutPoint ancestorRelOffset;
&gt; &gt; +    layer-&gt;convertToLayerCoords(ancestorLayer, ancestorRelOffset);
&gt; 
&gt; Have you tested composited layers that contain 2d-transformed layers? It seems like this convertToLayerCoords() could cross a transform boundary, which is bad.

Will look at this, thank you.

&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:2703
&gt; &gt; +void RenderObject::updateOpaqueRect()
&gt; 
&gt; I don&apos;t know why this has to be on RenderObject, since it&apos;s a layer thing.

Each RO has an opaque Rect (its entire area or an empty rect at the moment).  This function mostly was added to not interact with the RenderLayer class in the .h file as that would need another include.  It&apos;s purpose is to determine if &quot;this&quot; is opaque and update its opaque rect in the RenderLayer&apos;s set.

&gt; &gt; Source/WebCore/rendering/RenderObject.h:1004
&gt; &gt; +        updateOpaqueRect();
&gt; 
&gt; This is going to be way too expensive. This is a hot function (hence the inline).

I had the impression that the function is especially hot when b==true (marking as needing layout). Is that incorrect? With b==false, the function is called once per layout(). And if the updating is to be done in the layout() tree walk, then it needs to be done exactly this many times.

As above, is there a better tree walk to consider than layout()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502372</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-14 15:20:32 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; As above, is there a better tree walk to consider than layout()?

So I&apos;d really like to know where you think this should be going next.  Things I have explored so far:

1. Walk the ROs associated with a RL when the RL is visited in RenderLayerCompositor::calculateCompositedBounds.

I liked this one most as it was modular and clean, and didn&apos;t touch any other code.  However it requires 1 new visit to each RenderObject during the computation.

I also have the intuition that calculateCompositedBounds() is not called very frequently, so the computation of the opaque flag will be done more or less when it is necessary, and the extra overhead will not have too much impact.

2. Save the opaque rect for each RO whenever it finishes a layout().  Collect them rects in the RL, so they can be grabbed from each RL that is visited in RenderLayerCompositor::calculateCompositedBounds.

This doesn&apos;t require another trip through the ROs.  But it does require looking at something for each opaque RO belonging to the RL.  If everything is opaque, it ends up having the same cost as option 1.**

This code was much more complex and invasive, the layout() function can be called quite frequently, and can be called for arbitrary positions in the RenderObject tree, requiring extra walks up to find its position relative to the RenderLayer.

We could build a Region in the RL, which would save us the cost of **, however this would require visiting the entire RO subtree for a RL whenever something in the subtree was changed.

Thus this option seems to have a cost &gt;= the cost of option 1.

3. You mentioned the painting tree-walk, but that is too late I believe, as we want these opaque flags set before painting to make decisions during the painting process.  Painting is done bottom to top, and the opaque flag depends on the entire RL/RO subtree of a backing, which would require an extra visit to each RO during the painting tree walk.

4. Is there another walk you&apos;d like to consider? I am only familiar with the code as far as I&apos;ve been touching it in these CLs.

Where do you think this should go?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507770</commentid>
    <comment_count>3</comment_count>
      <attachid>116265</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-22 12:50:46 -0800</bug_when>
    <thetext>Created attachment 116265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507773</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-22 12:58:06 -0800</bug_when>
    <thetext>Here&apos;s how I think we could approach considering all RenderObjects in a RLBacking.  The key ideas behind the code are:

1) RO::layout() is problematic to hop on, since it does partial tree walks. To build the full Region requires walking through a Rect for each RO anyway.

2) The RL&apos;s opaque region should depend on its scroll offset, and change when a scroll happens.

3) I chose RL::computeRepaintRects() to compute the opaque region since it is executed after scrolling, and recomputes various other painting bounds.

4) It walks the tree of ROs for a single RL.  Considers only ROs that are visible after scrolling.  Constructs a Region from the opaque ones.  If the box decorations area is opaque but contents area is not, it also checks if ROs in its subtree fill its contents area.

Includes a LayoutTest with scrolling to verify the code is working, and tests for RO children which are divs or images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508364</commentid>
    <comment_count>5</comment_count>
      <attachid>116416</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-23 13:47:11 -0800</bug_when>
    <thetext>Created attachment 116416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518452</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-09 13:28:47 -0800</bug_when>
    <thetext>Dropping this as bug as we&apos;re opting for a more simple approach to marking layers opaque.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116265</attachid>
            <date>2011-11-22 12:50:46 -0800</date>
            <delta_ts>2011-11-23 13:47:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71972-20111122155045.patch</filename>
            <type>text/plain</type>
            <size>15837</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uNWYzMzIyYTBmMmJhMjgxYmUwNDRkNjNjY2RmYzIz
OTljZmNlZWRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTIyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENvbnNpZGVyIGFsbCBS
ZW5kZXJPYmplY3RzIGluIGEgR3JhcGhpY3NMYXllciB3aGVuIG1hcmtpbmcgb3BhcXVlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTk3MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBjb21wb3Np
dGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBvc2l0
aW5nL29wYXF1ZS9jaGlsZHJlbi5odG1sCisgICAgICAgICAgICAgICBjb21wb3NpdGluZy9vcGFx
dWUvc2Nyb2xsLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFpbnRSZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVZpc2libGVPcGFxdWVSZWdpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVWaXNpYmxlT3BhcXVlUmVnaW9u
Rm9yUmVuZGVyT2JqZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3BhcXVlUmVnaW9uKToKKwogMjAxMS0xMS0x
NiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBJbXByb3ZlbWVudHMgZm9yIHBhZ2Ugc2NhbGUgZGVsdGEgZHVyaW5nIGNvbW1pdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYTk5ZGVhNzE1MzUxNGVk
MTAzZDdjYmFjYzAwMWViNDBkNGJjZTU3Mi4uYzU1YzAzMzEyNmM4MzkyZDNmYjk3YTQ5ZGYwYjU5
N2VmODkyYzc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC00MjAsNiArNDIwLDcxIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50UmVjdHMo
SW50UG9pbnQqIG9mZnNldEZyb21Sb290KQogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgpOwogICAgIG1f
cmVwYWludFJlY3QgPSByZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyKTsKICAgICBtX291dGxpbmVCb3ggPSByZW5kZXJlcigpLT5vdXRsaW5l
Qm91bmRzRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBvZmZzZXRGcm9tUm9vdCk7CisgICAg
Y29tcHV0ZVZpc2libGVPcGFxdWVSZWdpb24oKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6Y29t
cHV0ZVZpc2libGVPcGFxdWVSZWdpb24oKQoreworICAgIG1fdmlzaWJsZU9wYXF1ZVJlZ2lvbiA9
IFJlZ2lvbigpOworICAgIGNvbXB1dGVWaXNpYmxlT3BhcXVlUmVnaW9uRm9yUmVuZGVyT2JqZWN0
cyhyZW5kZXJlcigpLCBMYXlvdXRTaXplKCksIHRydWUpOworfQorCit2b2lkIFJlbmRlckxheWVy
Ojpjb21wdXRlVmlzaWJsZU9wYXF1ZVJlZ2lvbkZvclJlbmRlck9iamVjdHMoUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIExheW91dFNpemUgb2Zmc2V0RnJvbVJlbmRlckxheWVyLCBib29sIGFs
bG93UmVjdXJzaW9uV2l0aExheWVyKQoreworICAgIGlmIChyZW5kZXJPYmplY3QtPm5leHRTaWJs
aW5nKCkpCisgICAgICAgIGNvbXB1dGVWaXNpYmxlT3BhcXVlUmVnaW9uRm9yUmVuZGVyT2JqZWN0
cyhyZW5kZXJPYmplY3QtPm5leHRTaWJsaW5nKCksIG9mZnNldEZyb21SZW5kZXJMYXllciwgZmFs
c2UpOworCisgICAgaWYgKCFhbGxvd1JlY3Vyc2lvbldpdGhMYXllciAmJiByZW5kZXJPYmplY3Qt
Pmhhc0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBubyBjb25zaWRl
cmF0aW9uIG9mIHRyYW5zZm9ybXMgaGVyZT8KKworICAgIHJlbmRlck9iamVjdC0+YWRqdXN0Rm9y
Q29sdW1ucyhvZmZzZXRGcm9tUmVuZGVyTGF5ZXIsIExheW91dFBvaW50KCkpOworCisgICAgaWYg
KHJlbmRlck9iamVjdC0+aXNCb3goKSkgeworICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVu
ZGVyQm94KHJlbmRlck9iamVjdCk7CisKKyAgICAgICAgYm9vbCBpc1Jvb3RGb3JSZW5kZXJMYXll
ciA9IGJveC0+aGFzTGF5ZXIoKTsKKyAgICAgICAgaWYgKCFpc1Jvb3RGb3JSZW5kZXJMYXllcikg
eworICAgICAgICAgICAgb2Zmc2V0RnJvbVJlbmRlckxheWVyLmV4cGFuZChib3gtPmxvY2F0aW9u
KCkueCgpLCBib3gtPmxvY2F0aW9uKCkueSgpKTsKKworICAgICAgICAgICAgTGF5b3V0U2l6ZSBz
Y3JvbGxPZmZzZXQ7CisgICAgICAgICAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQb3NpdGlvbmVk
KCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsZWRDb250ZW50T2Zmc2V0
KCk7CisgICAgICAgICAgICBvZmZzZXRGcm9tUmVuZGVyTGF5ZXIuZXhwYW5kKC1zY3JvbGxPZmZz
ZXQud2lkdGgoKSwgLXNjcm9sbE9mZnNldC5oZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBMYXlvdXRSZWN0IG9wYXF1ZVRlc3RSZWN0ID0gYm94LT5ib3JkZXJCb3VuZGluZ0JveCgpOwor
ICAgICAgICBvcGFxdWVUZXN0UmVjdC5tb3ZlKG9mZnNldEZyb21SZW5kZXJMYXllcik7CisgICAg
ICAgIG9wYXF1ZVRlc3RSZWN0LmludGVyc2VjdChMYXlvdXRSZWN0KExheW91dFBvaW50KCksIHNp
emUoKSkpOyAvLyBDbGlwIHRvIHRoZSB2aXNpYmxlIHNjcm9sbCByZWdpb24KKworICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlck9iamVjdC0+Zmlyc3RDaGlsZCgpKQorICAg
ICAgICAgICAgY29tcHV0ZVZpc2libGVPcGFxdWVSZWdpb25Gb3JSZW5kZXJPYmplY3RzKGNoaWxk
LCBvZmZzZXRGcm9tUmVuZGVyTGF5ZXIsIGZhbHNlKTsKKworICAgICAgICBpZiAoIW9wYXF1ZVRl
c3RSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbE9wYXF1ZVRl
c3RSZWN0ID0gb3BhcXVlVGVzdFJlY3Q7CisgICAgICAgICAgICBsb2NhbE9wYXF1ZVRlc3RSZWN0
Lm1vdmUoLW9mZnNldEZyb21SZW5kZXJMYXllcik7CisKKyAgICAgICAgICAgIGJvb2wgb3BhcXVl
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYm94LT5ib3hEZWNvcmF0aW9uQXJlYUlzT3BhcXVl
SW5SZWN0KGxvY2FsT3BhcXVlVGVzdFJlY3QpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJveC0+
YmFja2dyb3VuZENvbnRlbnRzQXJlYUlzT3BhcXVlSW5SZWN0KGxvY2FsT3BhcXVlVGVzdFJlY3Qp
KQorICAgICAgICAgICAgICAgICAgICBvcGFxdWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGJveC0+Zm9yZWdyb3VuZENvbnRlbnRzQXJlYUlzT3BhcXVlSW5SZWN0KGxvY2FsT3Bh
cXVlVGVzdFJlY3QpKQorICAgICAgICAgICAgICAgICAgICBvcGFxdWUgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGNvbnRlbnRz
KGJveC0+Y29udGVudEJveFJlY3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLm1v
dmUob2Zmc2V0RnJvbVJlbmRlckxheWVyKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDaGls
ZHJlbiBvciBwcmV2aW91cyBzaWJsaW5ncyBtYXkgb2NjbHVkZSB0aGUgY29udGVudHMgYXJlYS4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmlzaWJsZU9wYXF1ZVJlZ2lvbi5jb250YWlucyhj
b250ZW50cykpCisgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWUgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG9wYXF1ZSkKKyAg
ICAgICAgICAgICAgICBtX3Zpc2libGVPcGFxdWVSZWdpb24udW5pdGUob3BhcXVlVGVzdFJlY3Qp
OworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjbGVhclJlcGFpbnRS
ZWN0cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGY5NDFlOWU0
NmY5MmMzNjIyYjhmZDBjNDRlZmFiNjUxODk1MzgwOTguLmFhM2FmOWU0ZWM2ZmU0MzJkNjJlMGI3
M2YxNTE0YTFjYjhkNWE5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CkBAIC00NjcsNyArNDY3LDcgQEAgcHVibGljOgogICAgIC8vIEJvdW5kaW5nIGJveCByZWxhdGl2
ZSB0byB0aGUgcm9vdC4KICAgICBMYXlvdXRSZWN0IGFic29sdXRlQm91bmRpbmdCb3goKSBjb25z
dDsKIAotICAgIFJlZ2lvbiBvcGFxdWVSZWdpb24oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
LT5pc09wYXF1ZUluUmVjdChyZW5kZXJlcigpLT5ib3JkZXJCb3VuZGluZ0JveCgpKSA/IHJlbmRl
cmVyKCktPmJvcmRlckJvdW5kaW5nQm94KCkgOiBSZWdpb24oKTsgfQorICAgIFJlZ2lvbiBvcGFx
dWVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVPcGFxdWVSZWdpb247IH0KIAogICAg
IHZvaWQgdXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmKTsKIApAQCAtNTUwLDYgKzU1MCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21w
dXRlUmVwYWludFJlY3RzKEludFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDApOwogICAgIHZvaWQg
Y2xlYXJSZXBhaW50UmVjdHMoKTsKIAorICAgIHZvaWQgY29tcHV0ZVZpc2libGVPcGFxdWVSZWdp
b24oKTsKKyAgICB2b2lkIGNvbXB1dGVWaXNpYmxlT3BhcXVlUmVnaW9uRm9yUmVuZGVyT2JqZWN0
cyhSZW5kZXJPYmplY3QqLCBMYXlvdXRTaXplIG9mZnNldEZyb21SZW5kZXJMYXllciwgYm9vbCBh
bGxvd1JlY3Vyc2lvbldpdGhMYXllcik7CisKICAgICB2b2lkIGNsaXBUb1JlY3QoUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRE
aXJ0eVJlY3QsIGNvbnN0IENsaXBSZWN0JiwKICAgICAgICAgICAgICAgICAgICAgQm9yZGVyUmFk
aXVzQ2xpcHBpbmdSdWxlID0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMpOwogICAgIHZvaWQg
cmVzdG9yZUNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0
eVJlY3QsIGNvbnN0IENsaXBSZWN0Jik7CkBAIC04MTEsNiArODE0LDggQEAgcHJvdGVjdGVkOgog
ICAgIC8vIG92ZXJmbG93IGxheWVycywgYnV0IHRoYXQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJl
LgogICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBtX25vcm1hbEZsb3dMaXN0OwogCisgICAgUmVn
aW9uIG1fdmlzaWJsZU9wYXF1ZVJlZ2lvbjsKKwogICAgIENsaXBSZWN0cyogbV9jbGlwUmVjdHM7
ICAgICAgLy8gQ2FjaGVkIGNsaXAgcmVjdHMgdXNlZCB3aGVuIHBhaW50aW5nIGFuZCBoaXQgdGVz
dGluZy4KICNpZm5kZWYgTkRFQlVHCiAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIG1fY2xpcFJlY3Rz
Um9vdDsgICAvLyBSb290IGxheWVyIHVzZWQgdG8gY29tcHV0ZSBjbGlwIHJlY3RzLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGEwZmU5NWYyODZkZTA0NDg3MzY2MjEyMzhjMzdiNjRjZjg3MWViZjkuLmJmNWVjZGIyYjEwZDJm
NmQ5MmNmMjA2ZDAzMjBkMmJiMzg0YWM3NjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0x
MS0yMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb25z
aWRlciBhbGwgUmVuZGVyT2JqZWN0cyBpbiBhIEdyYXBoaWNzTGF5ZXIgd2hlbiBtYXJraW5nIG9w
YXF1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5
NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNv
bXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGNvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi1pbWFnZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBjb21wb3NpdGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBjb21wb3NpdGluZy9vcGFxdWUvc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogY29tcG9zaXRpbmcvb3BhcXVlL3Njcm9sbC5odG1sOiBBZGRlZC4KKwogMjAxMS0x
MS0xNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2No
cm9taXVtXSBBdHRlbXB0IHRvIHJlYmFzZWxpbmUgYSB0ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Mjg1YmQ2NmYwNjZlMGRlMzk3NmQ1YjdkZmE2OTA4MWEzYzAyN2NmNwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyOSBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGJvdW5kcyA3ODUuMDAgODMxLjAw
KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAoYm91bmRzIDc4NS4w
MCA4MzEuMDApCisgICAgICAoY2hpbGRyZW4gMworICAgICAgICAoR3JhcGhpY3NMYXllcgorICAg
ICAgICAgIChwb3NpdGlvbiA4LjAwIDguMDApCisgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAw
LjAwKQorICAgICAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAgICAgIChkcmF3c0NvbnRl
bnQgMSkKKyAgICAgICAgKQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3Np
dGlvbiA4LjAwIDIwOC4wMCkKKyAgICAgICAgICAoYm91bmRzIDIxMC4wMCAyMTAuMDApCisgICAg
ICAgICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAg
ICAgICApCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAg
NDE4LjAwKQorICAgICAgICAgIChib3VuZHMgMjAwLjAwIDQwMC4wMCkKKyAgICAgICAgICAoY29u
dGVudHNPcGFxdWUgMSkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAg
ICAgICkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcvb3BhcXVlL2NoaWxkcmVuLWltYWdlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
Njg5NzlhZjA5N2E5ZTI1NmRjNmQwMTc1MGJiYzI4NTMzN2M3Yjg5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLWltYWdlcy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw2MiBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGJvdW5kcyA4MDAuMDAg
NjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAoYm91bmRz
IDgwMC4wMCA2MDAuMDApCisgICAgICAoY2hpbGRyZW4gOAorICAgICAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDEzLjAwKQorICAgICAgICAgIChib3VuZHMgNTAu
MDAgNTAuMDApCisgICAgICAgICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAgICAgKGRyYXdz
Q29udGVudCAxKQorICAgICAgICApCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAg
KHBvc2l0aW9uIDguMDAgNjMuMDApCisgICAgICAgICAgKGJvdW5kcyA2MC4wMCA2MC4wMCkKKyAg
ICAgICAgICAoY29udGVudHNPcGFxdWUgMSkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisg
ICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4w
MCAxMjMuMDApCisgICAgICAgICAgKGJvdW5kcyA1MC4wMCA1MC4wMCkKKyAgICAgICAgICAoZHJh
d3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAg
ICAocG9zaXRpb24gOC4wMCAxNzMuMDApCisgICAgICAgICAgKGJvdW5kcyA2MC4wMCA2MC4wMCkK
KyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCAyMzMuMDApCisgICAgICAgICAgKGJvdW5k
cyA1MC4wMCA1MC4wMCkKKyAgICAgICAgICAoY29udGVudHNPcGFxdWUgMSkKKyAgICAgICAgICAo
ZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAg
ICAgICAocG9zaXRpb24gOC4wMCAyODMuMDApCisgICAgICAgICAgKGJvdW5kcyA2MC4wMCA2MC4w
MCkKKyAgICAgICAgICAoY29udGVudHNPcGFxdWUgMSkKKyAgICAgICAgICAoZHJhd3NDb250ZW50
IDEpCisgICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRp
b24gOC4wMCAzNDMuMDApCisgICAgICAgICAgKGJvdW5kcyA1MC4wMCA1MC4wMCkKKyAgICAgICAg
ICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAg
ICAgICAgICAocG9zaXRpb24gOC4wMCAzOTMuMDApCisgICAgICAgICAgKGJvdW5kcyA2MC4wMCA2
MC4wMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICkKKyAg
ICApCisgICkKKykKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQzN2NhNTAxMmRk
NDY5YzUxYTRlOGRlZTZiOTgzNzdjNjRlMDlkYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi1pbWFnZXMuaHRtbApAQCAtMCwwICsxLDY0
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgLmNvbXBvc2l0ZWQgeworICAgICAgLXdlYmtpdC10
cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CisgICAgfQorICAgIC5jbGVhciB7CisgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICB9CisgICAgLmJvcmRlcmNsZWFyIHsKKyAg
ICAgIGJvcmRlcjogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIH0KKyAgICAub3BhcXVlYiB7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgIH0KKyAgICAub3BhcXVlciB7Cisg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgfQorICAgIC50ZXN0IHsKKyAgICAgIGhl
aWdodDogNTBweDsKKyAgICAgIHdpZHRoOiA1MHB4OworICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsK
KyAgICB9CisgICAgLnRlc3Rib3JkZXIgeworICAgICAgaGVpZ2h0OiA2MHB4OworICAgICAgd2lk
dGg6IDYwcHg7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIH0KKyAgICAuYm9yZGVyIHsK
KyAgICAgIGJvcmRlcjogNXB4IHNvbGlkIGJsYWNrOworICAgIH0KKyAgICAucGFkZGluZyB7Cisg
ICAgICBwYWRkaW5nLXRvcDogMXB4OworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdsYXllcnMnKS5pbm5lclRleHQgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgfQorICAgIH0KKworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0
LCBmYWxzZSk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgc3R5bGU9ImJhY2tncm91bmQt
Y29sb3I6IHJlZCI+CisgIDxwcmUgaWQ9ImxheWVycyI+PC9wcmU+CisgIDxkaXYgY2xhc3M9ImNv
bXBvc2l0ZWQgdGVzdCBjbGVhciI+PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9hcHBsZS5qcGciIGNs
YXNzPSJ0ZXN0Ii8+PC9kaXY+CisgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgdGVzdGJvcmRlciBj
bGVhciI+PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9hcHBsZS5qcGciIGNsYXNzPSJ0ZXN0IGJvcmRl
ciI+PCEtLW9wYXF1ZS0tPjwvaW1nPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJjb21wb3NpdGVkIHRl
c3QgY2xlYXIiPjxpbWcgc3JjPSIuLi9yZXNvdXJjZXMvYWxwaGEtZ3JhZGllbnQucG5nIiBjbGFz
cz0idGVzdCI+PCEtLW5vdC0tPjwvaW1nPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJjb21wb3NpdGVk
IHRlc3Rib3JkZXIgY2xlYXIiPjxpbWcgc3JjPSIuLi9yZXNvdXJjZXMvYWxwaGEtZ3JhZGllbnQu
cG5nIiBjbGFzcz0idGVzdCBib3JkZXIiPjwhLS1ub3QtLT48L2ltZz48L2Rpdj4KKyAgPGRpdiBj
bGFzcz0iY29tcG9zaXRlZCB0ZXN0IGNsZWFyIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL2FwcGxl
LmpwZyIgY2xhc3M9InRlc3QgY2xlYXIiPjwhLS1vcGFxdWUtLT48L2ltZz48L2Rpdj4KKyAgPGRp
diBjbGFzcz0iY29tcG9zaXRlZCB0ZXN0Ym9yZGVyIGNsZWFyIj48aW1nIHNyYz0iLi4vcmVzb3Vy
Y2VzL2FwcGxlLmpwZyIgY2xhc3M9InRlc3QgYm9yZGVyIGNsZWFyIj48IS0tb3BhcXVlLS0+PC9p
bWc+PC9kaXY+CisgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgdGVzdCBjbGVhciI+PGltZyBzcmM9
Ii4uL3Jlc291cmNlcy9hcHBsZS5qcGciIGNsYXNzPSJ0ZXN0IGNsZWFyIHBhZGRpbmciPjwhLS1u
b3QtLT48L2ltZz48L2Rpdj4KKyAgPGRpdiBjbGFzcz0iY29tcG9zaXRlZCB0ZXN0Ym9yZGVyIGNs
ZWFyIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL2FwcGxlLmpwZyIgY2xhc3M9InRlc3QgYm9yZGVy
Y2xlYXIgY2xlYXIiPjwhLS1ub3QtLT48L2ltZz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi5odG1sIGIv
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDlhZGY4ZjJmMTE4NDNhMTg2NzUxNGQzZTllN2VlZDAwMmQyZGU5ZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi5odG1sCkBAIC0wLDAg
KzEsNTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlIHR5cGU9
InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAuY29tcG9zaXRlZCB7CisgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAgLnRlc3QgeworICAgICAg
aGVpZ2h0OiAyMDBweDsKKyAgICAgIHdpZHRoOiAyMDBweDsKKyAgICB9CisgICAgLmNsZWFyIHsK
KyAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICAgIH0KKyAgICAub3BhcXVl
YiB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgIH0KKyAgICAuYm9yZGVyIHsK
KyAgICAgIGJvcmRlcjogNXB4IHNvbGlkIGJsYWNrOworICAgIH0KKyAgPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5PgorICA8ZGl2IGNsYXNzPSJ0ZXN0IGNvbXBvc2l0ZWQgY2xlYXIiPgorICAgIDxk
aXYgY2xhc3M9InRlc3Qgb3BhcXVlYiI+PCEtLW9wYXF1ZS0tPjwvZGl2PgorICA8L2Rpdj4KKyAg
PGRpdiBjbGFzcz0idGVzdCBjb21wb3NpdGVkIGJvcmRlciBjbGVhciI+CisgICAgPGRpdiBjbGFz
cz0idGVzdCBvcGFxdWViIj48IS0tb3BhcXVlLS0+PC9kaXY+CisgIDwvZGl2PgorICA8ZGl2IGNs
YXNzPSJ0ZXN0IGNvbXBvc2l0ZWQgY2xlYXIiIHN0eWxlPSJoZWlnaHQ6NDAwcHgiPgorICAgIDxk
aXYgY2xhc3M9InRlc3Qgb3BhcXVlYiI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0idGVzdCBvcGFx
dWViIj48L2Rpdj4KKyAgICA8IS0tb3BhcXVlLS0+CisgIDwvZGl2PgorCisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgeworICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbGF5ZXJzJykuaW5uZXJUZXh0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVl
QXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVz
dCwgZmFsc2UpOworCisgIDwvc2NyaXB0PgorICA8cHJlIGlkPSJsYXllcnMiPjwvcHJlPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3BhcXVl
L3Njcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvc2Ny
b2xsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjUxMzFmZmViODFmYzE4ZWFkNGIxNjY1OGQ3
OWM1YjQzZjhhNDIxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
b3BhcXVlL3Njcm9sbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorKEdyYXBoaWNzTGF5
ZXIKKyAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGlj
c0xheWVyCisgICAgICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgICAgICAoY2hpbGRyZW4gMQor
ICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDguMDApCisg
ICAgICAgICAgKGJvdW5kcyAxMDAuMDAgMTcwLjAwKQorICAgICAgICAgIChjb250ZW50c09wYXF1
ZSAxKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgKQorICAg
ICkKKyAgKQorKQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUv
c2Nyb2xsLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvc2Nyb2xsLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmEzM2JmMzI4YTg1NmQxODliNmRkM2U1ZTFmZDI5MWNhODM5MGM5ZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9zY3JvbGwuaHRt
bApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgLmNvbXBvc2l0ZWQgewor
ICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CisgICAgfQorICAgIC50ZXN0
IHsKKyAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICB3aWR0aDogMTAwcHg7CisgICAgfQorICAg
IC5jbGVhciB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICB9Cisg
ICAgLmJsdWUgeworICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICB9CisgICAgLnJl
ZCB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgfQorICAgIC5zY3JvbGxlciB7
CisgICAgICBoZWlnaHQ6IDE3MHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgICB9CisgICAgLmJvcmRlciB7CisgICAgICBib3JkZXI6IDJweCBzb2xp
ZCBibGFjazsKKyAgICB9CisgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPGRpdiBpZD0i
c2Nyb2xsZXIiIGNsYXNzPSJzY3JvbGxlciBjb21wb3NpdGVkIGNsZWFyIj4KKyAgICA8ZGl2IGNs
YXNzPSJ0ZXN0IGNsZWFyIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0IGJsdWUiIHN0eWxl
PSJoZWlnaHQ6ODBweCI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0idGVzdCByZWQiIHN0eWxlPSJo
ZWlnaHQ6OTBweCI+PC9kaXY+CisgIDwvZGl2PgorCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGRvVGVzdCgpCisgICAgeworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJykuaW5uZXJUZXh0
ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnc2Nyb2xsZXInKS5zY3JvbGxUb3AgPSAxMDA7CisgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKworICA8L3Njcmlw
dD4KKyAgPHByZSBpZD0ibGF5ZXJzIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116416</attachid>
            <date>2011-11-23 13:47:11 -0800</date>
            <delta_ts>2011-11-23 13:47:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71972-20111123164709.patch</filename>
            <type>text/plain</type>
            <size>19910</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uOTNjYjg1MGYwNjhkNGUxODAyZTRiMDRhOWVmNjg5
NDE1MTVlZDM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTExLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENvbnNpZGVyIGFsbCBS
ZW5kZXJPYmplY3RzIGluIGEgR3JhcGhpY3NMYXllciB3aGVuIG1hcmtpbmcgb3BhcXVlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTk3MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBjb21wb3Np
dGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBvc2l0
aW5nL29wYXF1ZS9jaGlsZHJlbi5odG1sCisgICAgICAgICAgICAgICBjb21wb3NpdGluZy9vcGFx
dWUvbXVsdGlwbGUtbGF5ZXJzLWNoaWxkcmVuLmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBvc2l0
aW5nL29wYXF1ZS9zY3JvbGwuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlVmlzaWJsZU9wYXF1ZVJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVZpc2libGVPcGFx
dWVSZWdpb25Gb3JSZW5kZXJPYmplY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvcGFxdWVSZWdpb24pOgorCiAy
MDExLTExLTE2ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBbY2hyb21pdW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBkZWx0YSBkdXJpbmcgY29t
bWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBhOTlkZWE3
MTUzNTE0ZWQxMDNkN2NiYWNjMDAxZWI0MGQ0YmNlNTcyLi5jNTVjMDMzMTI2YzgzOTJkM2ZiOTdh
NDlkZjBiNTk3ZWY4OTJjNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKQEAgLTQyMCw2ICs0MjAsNzEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFp
bnRSZWN0cyhJbnRQb2ludCogb2Zmc2V0RnJvbVJvb3QpCiAgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50KCk7
CiAgICAgbV9yZXBhaW50UmVjdCA9IHJlbmRlcmVyKCktPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwogICAgIG1fb3V0bGluZUJveCA9IHJlbmRlcmVyKCkt
Pm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIG9mZnNldEZyb21Sb290
KTsKKyAgICBjb21wdXRlVmlzaWJsZU9wYXF1ZVJlZ2lvbigpOworfQorCit2b2lkIFJlbmRlckxh
eWVyOjpjb21wdXRlVmlzaWJsZU9wYXF1ZVJlZ2lvbigpCit7CisgICAgbV92aXNpYmxlT3BhcXVl
UmVnaW9uID0gUmVnaW9uKCk7CisgICAgY29tcHV0ZVZpc2libGVPcGFxdWVSZWdpb25Gb3JSZW5k
ZXJPYmplY3RzKHJlbmRlcmVyKCksIExheW91dFNpemUoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbXB1dGVWaXNpYmxlT3BhcXVlUmVnaW9uRm9yUmVuZGVyT2JqZWN0cyhSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUmVuZGVyTGF5ZXIs
IGJvb2wgYWxsb3dSZWN1cnNpb25XaXRoTGF5ZXIpCit7CisgICAgaWYgKHJlbmRlck9iamVjdC0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY29tcHV0ZVZpc2libGVPcGFxdWVSZWdpb25Gb3JSZW5k
ZXJPYmplY3RzKHJlbmRlck9iamVjdC0+bmV4dFNpYmxpbmcoKSwgb2Zmc2V0RnJvbVJlbmRlckxh
eWVyLCBmYWxzZSk7CisKKyAgICBpZiAoIWFsbG93UmVjdXJzaW9uV2l0aExheWVyICYmIHJlbmRl
ck9iamVjdC0+aGFzTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IG5v
IGNvbnNpZGVyYXRpb24gb2YgdHJhbnNmb3JtcyBoZXJlPworCisgICAgcmVuZGVyT2JqZWN0LT5h
ZGp1c3RGb3JDb2x1bW5zKG9mZnNldEZyb21SZW5kZXJMYXllciwgTGF5b3V0UG9pbnQoKSk7CisK
KyAgICBpZiAocmVuZGVyT2JqZWN0LT5pc0JveCgpKSB7CisgICAgICAgIFJlbmRlckJveCogYm94
ID0gdG9SZW5kZXJCb3gocmVuZGVyT2JqZWN0KTsKKworICAgICAgICBib29sIGlzUm9vdEZvclJl
bmRlckxheWVyID0gYm94LT5oYXNMYXllcigpOworICAgICAgICBpZiAoIWlzUm9vdEZvclJlbmRl
ckxheWVyKSB7CisgICAgICAgICAgICBvZmZzZXRGcm9tUmVuZGVyTGF5ZXIuZXhwYW5kKGJveC0+
bG9jYXRpb24oKS54KCksIGJveC0+bG9jYXRpb24oKS55KCkpOworCisgICAgICAgICAgICBMYXlv
dXRTaXplIHNjcm9sbE9mZnNldDsKKyAgICAgICAgICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc1Bv
c2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxlZENvbnRl
bnRPZmZzZXQoKTsKKyAgICAgICAgICAgIG9mZnNldEZyb21SZW5kZXJMYXllci5leHBhbmQoLXNj
cm9sbE9mZnNldC53aWR0aCgpLCAtc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIExheW91dFJlY3Qgb3BhcXVlVGVzdFJlY3QgPSBib3gtPmJvcmRlckJvdW5kaW5n
Qm94KCk7CisgICAgICAgIG9wYXF1ZVRlc3RSZWN0Lm1vdmUob2Zmc2V0RnJvbVJlbmRlckxheWVy
KTsKKyAgICAgICAgb3BhcXVlVGVzdFJlY3QuaW50ZXJzZWN0KExheW91dFJlY3QoTGF5b3V0UG9p
bnQoKSwgc2l6ZSgpKSk7IC8vIENsaXAgdG8gdGhlIHZpc2libGUgc2Nyb2xsIHJlZ2lvbgorCisg
ICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyT2JqZWN0LT5maXJzdENoaWxk
KCkpCisgICAgICAgICAgICBjb21wdXRlVmlzaWJsZU9wYXF1ZVJlZ2lvbkZvclJlbmRlck9iamVj
dHMoY2hpbGQsIG9mZnNldEZyb21SZW5kZXJMYXllciwgZmFsc2UpOworCisgICAgICAgIGlmICgh
b3BhcXVlVGVzdFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2Fs
T3BhcXVlVGVzdFJlY3QgPSBvcGFxdWVUZXN0UmVjdDsKKyAgICAgICAgICAgIGxvY2FsT3BhcXVl
VGVzdFJlY3QubW92ZSgtb2Zmc2V0RnJvbVJlbmRlckxheWVyKTsKKworICAgICAgICAgICAgYm9v
bCBvcGFxdWUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChib3gtPmJveERlY29yYXRpb25BcmVh
SXNPcGFxdWVJblJlY3QobG9jYWxPcGFxdWVUZXN0UmVjdCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYm94LT5iYWNrZ3JvdW5kQ29udGVudHNBcmVhSXNPcGFxdWVJblJlY3QobG9jYWxPcGFxdWVU
ZXN0UmVjdCkpCisgICAgICAgICAgICAgICAgICAgIG9wYXF1ZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoYm94LT5mb3JlZ3JvdW5kQ29udGVudHNBcmVhSXNPcGFxdWVJblJlY3Qo
bG9jYWxPcGFxdWVUZXN0UmVjdCkpCisgICAgICAgICAgICAgICAgICAgIG9wYXF1ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3Qg
Y29udGVudHMoYm94LT5jb250ZW50Qm94UmVjdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGVudHMubW92ZShvZmZzZXRGcm9tUmVuZGVyTGF5ZXIpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIENoaWxkcmVuIG9yIHByZXZpb3VzIHNpYmxpbmdzIG1heSBvY2NsdWRlIHRoZSBjb250ZW50
cyBhcmVhLgorICAgICAgICAgICAgICAgICAgICBpZiAobV92aXNpYmxlT3BhcXVlUmVnaW9uLmNv
bnRhaW5zKGNvbnRlbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wYXF1ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAob3Bh
cXVlKQorICAgICAgICAgICAgICAgIG1fdmlzaWJsZU9wYXF1ZVJlZ2lvbi51bml0ZShvcGFxdWVU
ZXN0UmVjdCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
UmVwYWludFJlY3RzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXgg
Zjk0MWU5ZTQ2ZjkyYzM2MjJiOGZkMGM0NGVmYWI2NTE4OTUzODA5OC4uYWEzYWY5ZTRlYzZmZTQz
MmQ2MmUwYjczZjE1MTRhMWNiOGQ1YTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBwdWJsaWM6CiAgICAgLy8gQm91bmRpbmcgYm94
IHJlbGF0aXZlIHRvIHRoZSByb290LgogICAgIExheW91dFJlY3QgYWJzb2x1dGVCb3VuZGluZ0Jv
eCgpIGNvbnN0OwogCi0gICAgUmVnaW9uIG9wYXF1ZVJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIHJl
bmRlcmVyKCktPmlzT3BhcXVlSW5SZWN0KHJlbmRlcmVyKCktPmJvcmRlckJvdW5kaW5nQm94KCkp
ID8gcmVuZGVyZXIoKS0+Ym9yZGVyQm91bmRpbmdCb3goKSA6IFJlZ2lvbigpOyB9CisgICAgUmVn
aW9uIG9wYXF1ZVJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZU9wYXF1ZVJlZ2lvbjsg
fQogCiAgICAgdm9pZCB1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYpOwogCkBAIC01NTAsNiArNTUwLDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbXB1dGVSZXBhaW50UmVjdHMoSW50UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCk7CiAg
ICAgdm9pZCBjbGVhclJlcGFpbnRSZWN0cygpOwogCisgICAgdm9pZCBjb21wdXRlVmlzaWJsZU9w
YXF1ZVJlZ2lvbigpOworICAgIHZvaWQgY29tcHV0ZVZpc2libGVPcGFxdWVSZWdpb25Gb3JSZW5k
ZXJPYmplY3RzKFJlbmRlck9iamVjdCosIExheW91dFNpemUgb2Zmc2V0RnJvbVJlbmRlckxheWVy
LCBib29sIGFsbG93UmVjdXJzaW9uV2l0aExheWVyKTsKKwogICAgIHZvaWQgY2xpcFRvUmVjdChS
ZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0
JiBwYWludERpcnR5UmVjdCwgY29uc3QgQ2xpcFJlY3QmLAogICAgICAgICAgICAgICAgICAgICBC
b3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgPSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7CiAg
ICAgdm9pZCByZXN0b3JlQ2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBw
YWludERpcnR5UmVjdCwgY29uc3QgQ2xpcFJlY3QmKTsKQEAgLTgxMSw2ICs4MTQsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgLy8gb3ZlcmZsb3cgbGF5ZXJzLCBidXQgdGhhdCBtYXkgY2hhbmdlIGluIHRo
ZSBmdXR1cmUuCiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG1fbm9ybWFsRmxvd0xpc3Q7CiAK
KyAgICBSZWdpb24gbV92aXNpYmxlT3BhcXVlUmVnaW9uOworCiAgICAgQ2xpcFJlY3RzKiBtX2Ns
aXBSZWN0czsgICAgICAvLyBDYWNoZWQgY2xpcCByZWN0cyB1c2VkIHdoZW4gcGFpbnRpbmcgYW5k
IGhpdCB0ZXN0aW5nLgogI2lmbmRlZiBOREVCVUcKICAgICBjb25zdCBSZW5kZXJMYXllciogbV9j
bGlwUmVjdHNSb290OyAgIC8vIFJvb3QgbGF5ZXIgdXNlZCB0byBjb21wdXRlIGNsaXAgcmVjdHMu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggYTBmZTk1ZjI4NmRlMDQ0ODczNjYyMTIzOGMzN2I2NGNmODcxZWJmOS4uNWI5ZmRk
OTYzNjNiMTE2NWJmMTJhMzk0NTA2YTllMzg2YWNiOGM2MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDExLTExLTIzICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIENvbnNpZGVyIGFsbCBSZW5kZXJPYmplY3RzIGluIGEgR3JhcGhpY3NMYXllciB3aGVuIG1h
cmtpbmcgb3BhcXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTk3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLWltYWdlcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJlbi1pbWFnZXMuaHRt
bDogQWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5nL29wYXF1ZS9tdWx0aXBsZS1sYXllcnMtY2hpbGRy
ZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9vcGFxdWUvbXVs
dGlwbGUtbGF5ZXJzLWNoaWxkcmVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5n
L29wYXF1ZS9zY3JvbGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGlu
Zy9vcGFxdWUvc2Nyb2xsLmh0bWw6IEFkZGVkLgorCiAyMDExLTExLTE2ICBQZXRlciBLYXN0aW5n
ICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEF0dGVtcHQgdG8g
cmViYXNlbGluZSBhIHRlc3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9v
cGFxdWUvY2hpbGRyZW4tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3Bh
cXVlL2NoaWxkcmVuLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODViZDY2ZjA2NmUwZGUzOTc2
ZDViN2RmYTY5MDgxYTNjMDI3Y2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACiso
R3JhcGhpY3NMYXllcgorICAoYm91bmRzIDc4NS4wMCA4MzEuMDApCisgIChjaGlsZHJlbiAxCisg
ICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMgNzg1LjAwIDgzMS4wMCkKKyAgICAgIChj
aGlsZHJlbiAzCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDgu
MDAgOC4wMCkKKyAgICAgICAgICAoYm91bmRzIDIwMC4wMCAyMDAuMDApCisgICAgICAgICAgKGNv
bnRlbnRzT3BhcXVlIDEpCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICApCisg
ICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgMjA4LjAwKQor
ICAgICAgICAgIChib3VuZHMgMjEwLjAwIDIxMC4wMCkKKyAgICAgICAgICAoY29udGVudHNPcGFx
dWUgMSkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICAgKEdy
YXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA0MTguMDApCisgICAgICAgICAg
KGJvdW5kcyAyMDAuMDAgNDAwLjAwKQorICAgICAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAg
ICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQor
KQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvY2hpbGRyZW4t
aW1hZ2VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGls
ZHJlbi1pbWFnZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2ODk3OWFmMDk3YTllMjU2ZGM2
ZDAxNzUwYmJjMjg1MzM3YzdiODkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9vcGFxdWUvY2hpbGRyZW4taW1hZ2VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYy
IEBACisoR3JhcGhpY3NMYXllcgorICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgIChjaGlsZHJl
biAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMgODAwLjAwIDYwMC4wMCkKKyAg
ICAgIChjaGlsZHJlbiA4CisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0
aW9uIDguMDAgMTMuMDApCisgICAgICAgICAgKGJvdW5kcyA1MC4wMCA1MC4wMCkKKyAgICAgICAg
ICAoY29udGVudHNPcGFxdWUgMSkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAg
ICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA2My4w
MCkKKyAgICAgICAgICAoYm91bmRzIDYwLjAwIDYwLjAwKQorICAgICAgICAgIChjb250ZW50c09w
YXF1ZSAxKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgICAo
R3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDEyMy4wMCkKKyAgICAgICAg
ICAoYm91bmRzIDUwLjAwIDUwLjAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAg
ICAgKQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDE3
My4wMCkKKyAgICAgICAgICAoYm91bmRzIDYwLjAwIDYwLjAwKQorICAgICAgICAgIChkcmF3c0Nv
bnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChw
b3NpdGlvbiA4LjAwIDIzMy4wMCkKKyAgICAgICAgICAoYm91bmRzIDUwLjAwIDUwLjAwKQorICAg
ICAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAg
ICAgICAgKQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAw
IDI4My4wMCkKKyAgICAgICAgICAoYm91bmRzIDYwLjAwIDYwLjAwKQorICAgICAgICAgIChjb250
ZW50c09wYXF1ZSAxKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgKQorICAg
ICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDM0My4wMCkKKyAg
ICAgICAgICAoYm91bmRzIDUwLjAwIDUwLjAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkK
KyAgICAgICAgKQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4
LjAwIDM5My4wMCkKKyAgICAgICAgICAoYm91bmRzIDYwLjAwIDYwLjAwKQorICAgICAgICAgIChk
cmF3c0NvbnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisKKwor
CisKKworCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGls
ZHJlbi1pbWFnZXMuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9jaGlsZHJl
bi1pbWFnZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDM3Y2E1MDEyZGQ0NjljNTFhNGU4ZGVlNmI5ODM3
N2M2NGUwOWRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3Bh
cXVlL2NoaWxkcmVuLWltYWdlcy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVu
Ij4KKyAgICAuY29tcG9zaXRlZCB7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRl
WigwKTsKKyAgICB9CisgICAgLmNsZWFyIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5z
cGFyZW50OworICAgIH0KKyAgICAuYm9yZGVyY2xlYXIgeworICAgICAgYm9yZGVyOiA1cHggc29s
aWQgdHJhbnNwYXJlbnQ7CisgICAgfQorICAgIC5vcGFxdWViIHsKKyAgICAgIGJhY2tncm91bmQt
Y29sb3I6IGJsdWU7CisgICAgfQorICAgIC5vcGFxdWVyIHsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IHJlZDsKKyAgICB9CisgICAgLnRlc3QgeworICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAg
d2lkdGg6IDUwcHg7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIH0KKyAgICAudGVzdGJv
cmRlciB7CisgICAgICBoZWlnaHQ6IDYwcHg7CisgICAgICB3aWR0aDogNjBweDsKKyAgICAgIG92
ZXJmbG93OiBoaWRkZW47CisgICAgfQorICAgIC5ib3JkZXIgeworICAgICAgYm9yZGVyOiA1cHgg
c29saWQgYmxhY2s7CisgICAgfQorICAgIC5wYWRkaW5nIHsKKyAgICAgIHBhZGRpbmctdG9wOiAx
cHg7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
Y2hhcnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBkb1Rlc3QoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVy
VGV4dCA9IGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICB9CisgICAgfQorCisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmVkIj4KKyAgPHBy
ZSBpZD0ibGF5ZXJzIj48L3ByZT4KKyAgPGRpdiBjbGFzcz0iY29tcG9zaXRlZCB0ZXN0IGNsZWFy
Ij48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL2FwcGxlLmpwZyIgY2xhc3M9InRlc3QiLz48L2Rpdj4K
KyAgPGRpdiBjbGFzcz0iY29tcG9zaXRlZCB0ZXN0Ym9yZGVyIGNsZWFyIj48aW1nIHNyYz0iLi4v
cmVzb3VyY2VzL2FwcGxlLmpwZyIgY2xhc3M9InRlc3QgYm9yZGVyIj48IS0tb3BhcXVlLS0+PC9p
bWc+PC9kaXY+CisgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgdGVzdCBjbGVhciI+PGltZyBzcmM9
Ii4uL3Jlc291cmNlcy9hbHBoYS1ncmFkaWVudC5wbmciIGNsYXNzPSJ0ZXN0Ij48IS0tbm90LS0+
PC9pbWc+PC9kaXY+CisgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgdGVzdGJvcmRlciBjbGVhciI+
PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9hbHBoYS1ncmFkaWVudC5wbmciIGNsYXNzPSJ0ZXN0IGJv
cmRlciI+PCEtLW5vdC0tPjwvaW1nPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJjb21wb3NpdGVkIHRl
c3QgY2xlYXIiPjxpbWcgc3JjPSIuLi9yZXNvdXJjZXMvYXBwbGUuanBnIiBjbGFzcz0idGVzdCBj
bGVhciI+PCEtLW9wYXF1ZS0tPjwvaW1nPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJjb21wb3NpdGVk
IHRlc3Rib3JkZXIgY2xlYXIiPjxpbWcgc3JjPSIuLi9yZXNvdXJjZXMvYXBwbGUuanBnIiBjbGFz
cz0idGVzdCBib3JkZXIgY2xlYXIiPjwhLS1vcGFxdWUtLT48L2ltZz48L2Rpdj4KKyAgPGRpdiBj
bGFzcz0iY29tcG9zaXRlZCB0ZXN0IGNsZWFyIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL2FwcGxl
LmpwZyIgY2xhc3M9InRlc3QgY2xlYXIgcGFkZGluZyI+PCEtLW5vdC0tPjwvaW1nPjwvZGl2Pgor
ICA8ZGl2IGNsYXNzPSJjb21wb3NpdGVkIHRlc3Rib3JkZXIgY2xlYXIiPjxpbWcgc3JjPSIuLi9y
ZXNvdXJjZXMvYXBwbGUuanBnIiBjbGFzcz0idGVzdCBib3JkZXJjbGVhciBjbGVhciI+PCEtLW5v
dC0tPjwvaW1nPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9vcGFxdWUvY2hpbGRyZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWFkZjhmMmYxMTg0M2ExODY3
NTE0ZDNlOWU3ZWVkMDAyZDJkZTlmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvb3BhcXVlL2NoaWxkcmVuLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
Y3JlZW4iPgorICAgIC5jb21wb3NpdGVkIHsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFu
c2xhdGVaKDApOworICAgIH0KKyAgICAudGVzdCB7CisgICAgICBoZWlnaHQ6IDIwMHB4OworICAg
ICAgd2lkdGg6IDIwMHB4OworICAgIH0KKyAgICAuY2xlYXIgeworICAgICAgYmFja2dyb3VuZC1j
b2xvcjogdHJhbnNwYXJlbnQ7CisgICAgfQorICAgIC5vcGFxdWViIHsKKyAgICAgIGJhY2tncm91
bmQtY29sb3I6IGJsdWU7CisgICAgfQorICAgIC5ib3JkZXIgeworICAgICAgYm9yZGVyOiA1cHgg
c29saWQgYmxhY2s7CisgICAgfQorICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgIDxkaXYg
Y2xhc3M9InRlc3QgY29tcG9zaXRlZCBjbGVhciI+CisgICAgPGRpdiBjbGFzcz0idGVzdCBvcGFx
dWViIj48IS0tb3BhcXVlLS0+PC9kaXY+CisgIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJ0ZXN0IGNv
bXBvc2l0ZWQgYm9yZGVyIGNsZWFyIj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0IG9wYXF1ZWIiPjwh
LS1vcGFxdWUtLT48L2Rpdj4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9InRlc3QgY29tcG9zaXRl
ZCBjbGVhciIgc3R5bGU9ImhlaWdodDo0MDBweCI+CisgICAgPGRpdiBjbGFzcz0idGVzdCBvcGFx
dWViIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0IG9wYXF1ZWIiPjwvZGl2PgorICAgIDwh
LS1vcGFxdWUtLT4KKyAgPC9kaXY+CisKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5l
clRleHQgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgfQorICAgIH0KKworICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisKKyAgPC9z
Y3JpcHQ+CisgIDxwcmUgaWQ9ImxheWVycyI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvbXVsdGlwbGUtbGF5ZXJzLWNo
aWxkcmVuLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9tdWx0
aXBsZS1sYXllcnMtY2hpbGRyZW4tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYzExNzA2ZmFj
OTgxMmEyYWI0MTRjMGQ4MTY1NTc0YzI1YjlmODUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvbXVsdGlwbGUtbGF5ZXJzLWNoaWxkcmVuLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDM4IEBACisoR3JhcGhpY3NMYXllcgorICAoYm91bmRzIDgwMC4wMCA2
MDAuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMg
ODAwLjAwIDYwMC4wMCkKKyAgICAgIChjaGlsZHJlbiA1CisgICAgICAgIChHcmFwaGljc0xheWVy
CisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgOC4wMCkKKyAgICAgICAgICAoYm91bmRzIDIwLjAw
IDIwLjAwKQorICAgICAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAgICAgIChkcmF3c0Nv
bnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChw
b3NpdGlvbiA4LjAwIDI4LjAwKQorICAgICAgICAgIChib3VuZHMgMjAuMDAgMjAuMDApCisgICAg
ICAgICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAg
ICAgICApCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAg
NDguMDApCisgICAgICAgICAgKGJvdW5kcyAyMC4wMCAyMC4wMCkKKyAgICAgICAgICAoZHJhd3ND
b250ZW50IDEpCisgICAgICAgICkKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAo
cG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAgICAoYm91bmRzIDIwLjAwIDIwLjAwKQorICAg
ICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDg4LjAwKQorICAgICAgICAgIChib3VuZHMgMjAu
MDAgMjAuMDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICApCisgICAgICAp
CisgICAgKQorICApCispCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL29w
YXF1ZS9tdWx0aXBsZS1sYXllcnMtY2hpbGRyZW4uaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0
aW5nL29wYXF1ZS9tdWx0aXBsZS1sYXllcnMtY2hpbGRyZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDZi
MTA5NzYwOWMwZTE2MTY2ZGI3OWU4OGRhYjg3NzlkNjFiNmVmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3BhcXVlL211bHRpcGxlLWxheWVycy1jaGlsZHJlbi5o
dG1sCkBAIC0wLDAgKzEsODMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAuY29tcG9zaXRlZCB7
CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgIH0KKyAgICAu
dGVzdCB7CisgICAgICBoZWlnaHQ6IDIwcHg7CisgICAgICB3aWR0aDogMjBweDsKKyAgICB9Cisg
ICAgLmhhbGYgeworICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgd2lkdGg6IDIwcHg7CisgICAg
fQorICAgIC5jbGVhciB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAg
ICB9CisgICAgLm9wYXF1ZWIgeworICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICB9
CisgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPGRpdiBjbGFzcz0idGVzdCBjbGVhciBj
b21wb3NpdGVkIj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0IGNsZWFyIiBzdHlsZT0ib3ZlcmZsb3c6
aGlkZGVuIj4KKyAgICAgIDxkaXYgY2xhc3M9Im9wYXF1ZWIiIHN0eWxlPSJ3aWR0aDoxMDBweDsg
aGVpZ2h0OjEwMHB4Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8IS0tb3BhcXVlLS0+CisgIDwv
ZGl2PgorICA8ZGl2IGNsYXNzPSJ0ZXN0IGNsZWFyIGNvbXBvc2l0ZWQiPgorICAgIDxkaXYgY2xh
c3M9ImhhbGYgY2xlYXIiIHN0eWxlPSJvdmVyZmxvdzpoaWRkZW4iPgorICAgICAgPGRpdiBjbGFz
cz0ib3BhcXVlYiIgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHgiPjwvZGl2PgorICAg
IDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImhhbGYgY2xlYXIiIHN0eWxlPSJvdmVyZmxvdzpoaWRk
ZW4iPgorICAgICAgPGRpdiBjbGFzcz0ib3BhcXVlYiIgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWln
aHQ6MTAwcHgiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDwhLS1vcGFxdWUtLT4KKyAgPC9kaXY+
CisgIDxkaXYgY2xhc3M9InRlc3QgY2xlYXIgY29tcG9zaXRlZCI+CisgICAgPGRpdiBjbGFzcz0i
dGVzdCBjbGVhciIgc3R5bGU9Im92ZXJmbG93OmhpZGRlbiI+CisgICAgICA8ZGl2IGNsYXNzPSJj
bGVhciIgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHgiPjwvZGl2PgorICAgIDwvZGl2
PgorICAgIDwhLS1ub3QtLT4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9InRlc3QgY2xlYXIgY29t
cG9zaXRlZCI+CisgICAgPGRpdiBjbGFzcz0iaGFsZiBjbGVhciIgc3R5bGU9Im92ZXJmbG93Omhp
ZGRlbiI+CisgICAgICA8ZGl2IGNsYXNzPSJvcGFxdWViIiBzdHlsZT0id2lkdGg6MTAwcHg7IGhl
aWdodDoxMDBweCI+PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iaGFsZiBjbGVh
ciIgc3R5bGU9Im92ZXJmbG93OmhpZGRlbiI+CisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgc3R5
bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHgiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDwh
LS1ub3QtLT4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9InRlc3QgY2xlYXIgY29tcG9zaXRlZCI+
CisgICAgPGRpdiBjbGFzcz0iaGFsZiBjbGVhciIgc3R5bGU9Im92ZXJmbG93OmhpZGRlbiI+Cisg
ICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHgi
PjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImhhbGYgY2xlYXIiIHN0eWxlPSJv
dmVyZmxvdzpoaWRkZW4iPgorICAgICAgPGRpdiBjbGFzcz0ib3BhcXVlYiIgc3R5bGU9IndpZHRo
OjEwMHB4OyBoZWlnaHQ6MTAwcHgiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDwhLS1ub3QtLT4K
KyAgPC9kaXY+CisKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0
Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9U
ZXN0KCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lclRleHQgPSBsYXlv
dXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgfQorICAgIH0KKworICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisKKyAgPC9zY3JpcHQ+CisgIDxw
cmUgaWQ9ImxheWVycyI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvc2Nyb2xsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9zY3JvbGwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2
NTEzMWZmZWI4MWZjMThlYWQ0YjE2NjU4ZDc5YzViNDNmOGE0MjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vcGFxdWUvc2Nyb2xsLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE3IEBACisoR3JhcGhpY3NMYXllcgorICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisg
IChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMgODAwLjAwIDYw
MC4wMCkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAg
ICAgKHBvc2l0aW9uIDguMDAgOC4wMCkKKyAgICAgICAgICAoYm91bmRzIDEwMC4wMCAxNzAuMDAp
CisgICAgICAgICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAgICAgKGRyYXdzQ29udGVudCAx
KQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2NvbXBvc2l0aW5nL29wYXF1ZS9zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBv
c2l0aW5nL29wYXF1ZS9zY3JvbGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTMzYmYzMjhhODU2ZDE4OWI2
ZGQzZTVlMWZkMjkxY2E4MzkwYzllCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvb3BhcXVlL3Njcm9sbC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKyAgICAuY29tcG9zaXRlZCB7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNs
YXRlWigwKTsKKyAgICB9CisgICAgLnRlc3QgeworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAg
IHdpZHRoOiAxMDBweDsKKyAgICB9CisgICAgLmNsZWFyIHsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IHRyYW5zcGFyZW50OworICAgIH0KKyAgICAuYmx1ZSB7CisgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBibHVlOworICAgIH0KKyAgICAucmVkIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHJl
ZDsKKyAgICB9CisgICAgLnNjcm9sbGVyIHsKKyAgICAgIGhlaWdodDogMTcwcHg7CisgICAgICB3
aWR0aDogMTAwcHg7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIH0KKyAgICAuYm9yZGVy
IHsKKyAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOworICAgIH0KKyAgPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorICA8ZGl2IGlkPSJzY3JvbGxlciIgY2xhc3M9InNjcm9sbGVyIGNvbXBv
c2l0ZWQgY2xlYXIiPgorICAgIDxkaXYgY2xhc3M9InRlc3QgY2xlYXIiPjwvZGl2PgorICAgIDxk
aXYgY2xhc3M9InRlc3QgYmx1ZSIgc3R5bGU9ImhlaWdodDo4MHB4Ij48L2Rpdj4KKyAgICA8ZGl2
IGNsYXNzPSJ0ZXN0IHJlZCIgc3R5bGU9ImhlaWdodDo5MHB4Ij48L2Rpdj4KKyAgPC9kaXY+CisK
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdsYXllcnMnKS5pbm5lclRleHQgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRy
ZWVBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgfQorICAgIH0KKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY3JvbGxlcicp
LnNjcm9sbFRvcCA9IDEwMDsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRv
VGVzdCwgZmFsc2UpOworCisgIDwvc2NyaXB0PgorICA8cHJlIGlkPSJsYXllcnMiPjwvcHJlPgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>