<?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>95858</bug_id>
          
          <creation_ts>2012-09-05 08:26:47 -0700</creation_ts>
          <short_desc>Move updateHoverActiveState to Document</short_desc>
          <delta_ts>2012-09-13 08:25:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>420+</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>712079</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-05 08:26:47 -0700</bug_when>
    <thetext>RenderLayer::updateHoverActiveState contains the logic that updates hover and active states during hit-tests, but hover and active states are document states, and does have any relation to layers other than documents having at least one layer.

By moving the function it will be in the same place as other active/hover state maintainace, plus we can avoid excessive updates of the states when some paths like RenderFlowThread::nodeAtPoint starts new hit-tests on a layer-level.

This patch/bug is the first step of an effort to move the side-effects of hover/active update out of hit-testing, so hit-testing ends up only doing hit-testing and does not cause side-effects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712082</commentid>
    <comment_count>1</comment_count>
      <attachid>162256</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-05 08:29:17 -0700</bug_when>
    <thetext>Created attachment 162256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712093</commentid>
    <comment_count>2</comment_count>
      <attachid>162256</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-05 08:45:19 -0700</bug_when>
    <thetext>Comment on attachment 162256
Patch

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

&gt; Source/WebCore/dom/Document.cpp:6124
&gt; +static RenderObject* commonAncestor(RenderObject* obj1, RenderObject* obj2)

nearestCommonAncestor? or ? closestCommon?

&gt; Source/WebCore/dom/Document.cpp:6132
&gt; +    for (RenderObject* currObj1 = obj1; currObj1; currObj1 = currObj1-&gt;hoverAncestor())
&gt; +        for (RenderObject* currObj2 = obj2; currObj2; currObj2 = currObj2-&gt;hoverAncestor())
&gt; +            if (currObj1 == currObj2)
&gt; +                return currObj1;

style guide says this needs braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712111</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-05 09:06:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 162256 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162256&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:6124
&gt; &gt; +static RenderObject* commonAncestor(RenderObject* obj1, RenderObject* obj2)
&gt; 
&gt; nearestCommonAncestor? or ? closestCommon?
&gt; 
Good point. I think nearest common ancestor (NCA) is the standard term in algorithmics.

&gt; &gt; Source/WebCore/dom/Document.cpp:6132
&gt; &gt; +    for (RenderObject* currObj1 = obj1; currObj1; currObj1 = currObj1-&gt;hoverAncestor())
&gt; &gt; +        for (RenderObject* currObj2 = obj2; currObj2; currObj2 = currObj2-&gt;hoverAncestor())
&gt; &gt; +            if (currObj1 == currObj2)
&gt; &gt; +                return currObj1;
&gt; 
&gt; style guide says this needs braces.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712126</commentid>
    <comment_count>4</comment_count>
      <attachid>162264</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-05 09:21:51 -0700</bug_when>
    <thetext>Created attachment 162264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713279</commentid>
    <comment_count>5</comment_count>
      <attachid>162264</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-09-06 07:41:10 -0700</bug_when>
    <thetext>Comment on attachment 162264
Patch

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

Looks good overall.

One question:

&gt; Source/WebCore/rendering/RenderView.cpp:98
&gt; +bool RenderView::hitTest(const HitTestRequest&amp; request, const HitTestLocation&amp; location, HitTestResult&amp; result)
&gt; +{
&gt; +    bool inside = layer()-&gt;hitTest(request, location, result);
&gt; +
&gt; +    // Next set up the correct :hover/:active state along the new chain.
&gt; +    document()-&gt;updateHoverActiveState(request, result);

whoever does not go through this new API won&apos;t get hover/active states updated? Is that safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713286</commentid>
    <comment_count>6</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-06 08:00:52 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 162264 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162264&amp;action=review
&gt; 
&gt; Looks good overall.
&gt; 
&gt; One question:
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderView.cpp:98
&gt; &gt; +bool RenderView::hitTest(const HitTestRequest&amp; request, const HitTestLocation&amp; location, HitTestResult&amp; result)
&gt; &gt; +{
&gt; &gt; +    bool inside = layer()-&gt;hitTest(request, location, result);
&gt; &gt; +
&gt; &gt; +    // Next set up the correct :hover/:active state along the new chain.
&gt; &gt; +    document()-&gt;updateHoverActiveState(request, result);
&gt; 
&gt; whoever does not go through this new API won&apos;t get hover/active states updated? Is that safe?

It is intentional. The point is that some code-paths like RenderFlowThread::nodeAtPoint calls RenderLayer::hitTest, but does not need to make that update. The actual update will be handled again later by the layer that originally triggered the hit-test that ended up in RenderFlowThread::nodeAtPoint.

I did check all places that calls the hitTest functions, and the only place the layer hitTest was called directly instead of going over RenderLayer, was something I had written myself for RenderFrameBase, and that was only written that way because I needed to call hitTest with a hitTestPoint that was not the same as the point in hitTestResult. Which is why the API for RenderView hit-test was expanded in this patch to make that possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713292</commentid>
    <comment_count>7</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-06 08:04:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I did check all places that calls the hitTest functions, and the only place the layer hitTest was called directly instead of going over RenderLayer

make that: instead of going over RenderView ..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713299</commentid>
    <comment_count>8</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-09-06 08:13:23 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 162264 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162264&amp;action=review
&gt; &gt; 
&gt; &gt; Looks good overall.
&gt; &gt; 
&gt; &gt; One question:
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderView.cpp:98
&gt; &gt; &gt; +bool RenderView::hitTest(const HitTestRequest&amp; request, const HitTestLocation&amp; location, HitTestResult&amp; result)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    bool inside = layer()-&gt;hitTest(request, location, result);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // Next set up the correct :hover/:active state along the new chain.
&gt; &gt; &gt; +    document()-&gt;updateHoverActiveState(request, result);
&gt; &gt; 
&gt; &gt; whoever does not go through this new API won&apos;t get hover/active states updated? Is that safe?
&gt; 
&gt; It is intentional. The point is that some code-paths like RenderFlowThread::nodeAtPoint calls RenderLayer::hitTest, but does not need to make that update. The actual update will be handled again later by the layer that originally triggered the hit-test that ended up in RenderFlowThread::nodeAtPoint.
&gt; 
&gt; I did check all places that calls the hitTest functions, and the only place the layer hitTest was called directly instead of going over RenderLayer, was something I had written myself for RenderFrameBase, and that was only written that way because I needed to call hitTest with a hitTestPoint that was not the same as the point in hitTestResult. Which is why the API for RenderView hit-test was expanded in this patch to make that possible.

Ok.

Adding Simon, in order to give him some time to comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719497</commentid>
    <comment_count>9</comment_count>
      <attachid>162264</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-13 08:08:32 -0700</bug_when>
    <thetext>Comment on attachment 162264
Patch

Seems to have trouble applying cleanly. Will land manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719519</commentid>
    <comment_count>10</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-13 08:22:16 -0700</bug_when>
    <thetext>Committed r128468: &lt;http://trac.webkit.org/changeset/128468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719523</commentid>
    <comment_count>11</comment_count>
      <attachid>162264</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-13 08:25:20 -0700</bug_when>
    <thetext>Comment on attachment 162264
Patch

Clearing flags after landing</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162256</attachid>
            <date>2012-09-05 08:29:17 -0700</date>
            <delta_ts>2012-09-05 09:21:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95858-20120905172849.patch</filename>
            <type>text/plain</type>
            <size>17376</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjMxZTRmN2YzZjY5MWRm
YzJjZTIyMTg4YjlmNDU3ODEwZGMzMmY2MS4uM2Y4OTc3ODIxYTFlMjEzNmI1OGM0NzIzNDI3Mzg0
MTJkNDcwYzU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA5LTA1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIE1v
dmUgdXBkYXRlSG92ZXJBY3RpdmVTdGF0ZSB0byBEb2N1bWVudC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuZGVyTGF5ZXI6OnVwZGF0ZUhvdmVyQWN0
aXZlU3RhdGUgY29udGFpbnMgdGhlIGxvZ2ljIHRoYXQgdXBkYXRlcyBob3ZlciBhbmQgYWN0aXZl
IHN0YXRlcyBiYXNlZCBvbgorICAgICAgICBoaXQtdGVzdHMsIGJ1dCBob3ZlciBhbmQgYWN0aXZl
IHN0YXRlcyBhcmUgZG9jdW1lbnQgc3RhdGVzLCBhbmQgZG9lcyBoYXZlIGFueSByZWxhdGlvbiB0
byBsYXllcnMgb3RoZXIKKyAgICAgICAgdGhhbiBkb2N1bWVudHMgaGF2aW5nIGF0bGVhc3Qgb25l
IGxheWVyLgorCisgICAgICAgIEJ5IG1vdmluZyB0aGUgZnVuY3Rpb24gaXQgd2lsbCBiZSBpbiB0
aGUgc2FtZSBwbGFjZSBhcyBvdGhlciBhY3RpdmUvaG92ZXIgc3RhdGUgbWFpbnRhaW5hY2UsIGFu
ZCB3ZSBhdm9pZAorICAgICAgICBleGNlc3NpdmUgdXBkYXRlcyBvZiB0aGUgc3RhdGUgZnJvbSBo
aXQtdGVzdGluZyBmbG93IHRocmVhZHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tbW9uQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JL
ZXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhbWVCYXNlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpoaXRU
ZXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoUmVuZGVy
Vmlldyk6CisKIDIwMTItMDktMDUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogZXh0cmFjdCBvdmVybG9hZGVkIGlu
c3RydW1lbnRhdGlvbiBtZW1iZXJzIGZvciBXZWJDb3JlIGNsYXNzZXMgZnJvbSBjb3JlIE5NSSBj
b2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNDQ2NTc1MTM3MTRkODJjYjlhMjlhOTA1
OWYzMDUwNjVmNDk1ZDc1Zi4uNjc4YTJjOTFmZDE0NjQ5ZGI2MTRlZWI4MmYxZTk0N2FkODlmYzEx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02MTIxLDYgKzYxMjEsMTE5IEBAIHZvaWQg
RG9jdW1lbnQ6OnNldENvbnRleHRGZWF0dXJlcyhQYXNzUmVmUHRyPENvbnRleHRGZWF0dXJlcz4g
ZmVhdHVyZXMpCiAgICAgbV9jb250ZXh0RmVhdHVyZXMgPSBmZWF0dXJlczsKIH0KIAorc3RhdGlj
IFJlbmRlck9iamVjdCogY29tbW9uQW5jZXN0b3IoUmVuZGVyT2JqZWN0KiBvYmoxLCBSZW5kZXJP
YmplY3QqIG9iajIpCit7CisgICAgaWYgKCFvYmoxIHx8ICFvYmoyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyT2JqMSA9IG9iajE7IGN1cnJPYmoxOyBj
dXJyT2JqMSA9IGN1cnJPYmoxLT5ob3ZlckFuY2VzdG9yKCkpCisgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyT2JqMiA9IG9iajI7IGN1cnJPYmoyOyBjdXJyT2JqMiA9IGN1cnJPYmoyLT5o
b3ZlckFuY2VzdG9yKCkpCisgICAgICAgICAgICBpZiAoY3Vyck9iajEgPT0gY3Vyck9iajIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJPYmoxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICAvLyBXZSBkb24ndCB1cGRh
dGUgOmhvdmVyLzphY3RpdmUgc3RhdGUgd2hlbiB0aGUgcmVzdWx0IGlzIG1hcmtlZCBhcyByZWFk
T25seS4KKyAgICBpZiAocmVxdWVzdC5yZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOb2RlKiBpbm5lck5vZGVJbkRvY3VtZW50ID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIHdo
aWxlIChpbm5lck5vZGVJbkRvY3VtZW50ICYmIGlubmVyTm9kZUluRG9jdW1lbnQtPmRvY3VtZW50
KCkgIT0gdGhpcykKKyAgICAgICAgaW5uZXJOb2RlSW5Eb2N1bWVudCA9IGlubmVyTm9kZUluRG9j
dW1lbnQtPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpOworCisgICAgTm9kZSogb2xkQWN0aXZl
Tm9kZSA9IGFjdGl2ZU5vZGUoKTsKKyAgICBpZiAob2xkQWN0aXZlTm9kZSAmJiAhcmVxdWVzdC5h
Y3RpdmUoKSkgeworICAgICAgICAvLyBXZSBhcmUgY2xlYXJpbmcgdGhlIDphY3RpdmUgY2hhaW4g
YmVjYXVzZSB0aGUgbW91c2UgaGFzIGJlZW4gcmVsZWFzZWQuCisgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyID0gb2xkQWN0aXZlTm9kZS0+cmVuZGVyZXIoKTsgY3VycjsgY3VyciA9IGN1
cnItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5p
c1RleHQoKSkgeworICAgICAgICAgICAgICAgIGN1cnItPm5vZGUoKS0+c2V0QWN0aXZlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBjdXJyLT5ub2RlKCktPmNsZWFySW5BY3RpdmVDaGFpbigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNldEFjdGl2ZU5vZGUoMCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgTm9kZSogbmV3QWN0aXZlTm9kZSA9IGlubmVyTm9kZUluRG9jdW1l
bnQ7CisgICAgICAgIGlmICghb2xkQWN0aXZlTm9kZSAmJiBuZXdBY3RpdmVOb2RlICYmIHJlcXVl
c3QuYWN0aXZlKCkgJiYgIXJlcXVlc3QudG91Y2hNb3ZlKCkpIHsKKyAgICAgICAgICAgIC8vIFdl
IGFyZSBzZXR0aW5nIHRoZSA6YWN0aXZlIGNoYWluIGFuZCBmcmVlemluZyBpdC4gSWYgZnV0dXJl
IG1vdmVzIGhhcHBlbiwgdGhleQorICAgICAgICAgICAgLy8gd2lsbCBuZWVkIHRvIHJlZmVyZW5j
ZSB0aGlzIGNoYWluLgorICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBuZXdB
Y3RpdmVOb2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY3Vyci0+bm9kZSgpLT5zZXRJbkFjdGl2ZUNoYWluKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG5ld0FjdGl2ZU5vZGUpOworICAgICAg
ICB9CisgICAgfQorICAgIC8vIElmIHRoZSBtb3VzZSBoYXMganVzdCBiZWVuIHByZXNzZWQsIHNl
dCA6YWN0aXZlIG9uIHRoZSBjaGFpbi4gVGhvc2UgKGFuZCBvbmx5IHRob3NlKQorICAgIC8vIG5v
ZGVzIHNob3VsZCByZW1haW4gOmFjdGl2ZSB1bnRpbCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCisg
ICAgYm9vbCBhbGxvd0FjdGl2ZUNoYW5nZXMgPSAhb2xkQWN0aXZlTm9kZSAmJiBhY3RpdmVOb2Rl
KCk7CisKKyAgICAvLyBJZiB0aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNl
IG1vdmUgZXZlbnQsIHdlIHdhbnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbgorICAgIC8vIDpob3Zl
ci86YWN0aXZlIHRvIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3Rp
dmUgY2hhaW4gdGhhdCB3ZSBmcm96ZQorICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50
IGRvd24uCisgICAgYm9vbCBtdXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAm
JiByZXF1ZXN0Lm1vdmUoKTsKKworICAgIFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBob3Zl
ck5vZGUoKTsKKyAgICAvLyBDbGVhciB0aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdl
c3R1cmUgaXMgb3Zlci4KKyAgICBpZiAocmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgeworICAgICAg
ICBpZiAob2xkSG92ZXJOb2RlKSB7CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
ciA9IG9sZEhvdmVyTm9kZS0+cmVuZGVyZXIoKTsgY3VycjsgY3VyciA9IGN1cnItPmhvdmVyQW5j
ZXN0b3IoKSkgeworICAgICAgICAgICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlz
VGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBjdXJyLT5ub2RlKCktPnNldEhvdmVyZWQoZmFs
c2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0SG92ZXJOb2RlKDApOworICAgICAg
ICB9CisgICAgICAgIC8vIEEgdG91Y2ggcmVsZWFzZSBjYW4gbm90IHNldCBuZXcgaG92ZXIgb3Ig
YWN0aXZlIHRhcmdldC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENoZWNrIHRv
IHNlZSBpZiB0aGUgaG92ZXJlZCBub2RlIGhhcyBjaGFuZ2VkLgorICAgIC8vIElmIGl0IGhhc24n
dCwgd2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgTm9kZSogbmV3SG92ZXJOb2Rl
ID0gaW5uZXJOb2RlSW5Eb2N1bWVudDsKKyAgICB3aGlsZSAobmV3SG92ZXJOb2RlICYmICFuZXdI
b3Zlck5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIG5ld0hvdmVyTm9kZSA9IG5ld0hvdmVyTm9k
ZS0+cGFyZW50T3JIb3N0Tm9kZSgpOworCisgICAgLy8gVXBkYXRlIG91ciBjdXJyZW50IGhvdmVy
IG5vZGUuCisgICAgc2V0SG92ZXJOb2RlKG5ld0hvdmVyTm9kZSk7CisKKyAgICAvLyBXZSBoYXZl
IHR3byBkaWZmZXJlbnQgb2JqZWN0cy4gRmV0Y2ggdGhlaXIgcmVuZGVyZXJzLgorICAgIFJlbmRl
ck9iamVjdCogb2xkSG92ZXJPYmogPSBvbGRIb3Zlck5vZGUgPyBvbGRIb3Zlck5vZGUtPnJlbmRl
cmVyKCkgOiAwOworICAgIFJlbmRlck9iamVjdCogbmV3SG92ZXJPYmogPSBuZXdIb3Zlck5vZGUg
PyBuZXdIb3Zlck5vZGUtPnJlbmRlcmVyKCkgOiAwOworCisgICAgLy8gTG9jYXRlIHRoZSBjb21t
b24gYW5jZXN0b3IgcmVuZGVyIG9iamVjdCBmb3IgdGhlIHR3byByZW5kZXJlcnMuCisgICAgUmVu
ZGVyT2JqZWN0KiBhbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yKG9sZEhvdmVyT2JqLCBuZXdIb3Zl
ck9iaik7CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+LCAzMj4gbm9kZXNUb1JlbW92ZUZyb21D
aGFpbjsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+LCAzMj4gbm9kZXNUb0FkZFRvQ2hhaW47CisK
KyAgICBpZiAob2xkSG92ZXJPYmogIT0gbmV3SG92ZXJPYmopIHsKKyAgICAgICAgLy8gVGhlIG9s
ZCBob3ZlciBwYXRoIG9ubHkgbmVlZHMgdG8gYmUgY2xlYXJlZCB1cCB0byAoYW5kIG5vdCBpbmNs
dWRpbmcpIHRoZSBjb21tb24gYW5jZXN0b3I7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyID0gb2xkSG92ZXJPYmo7IGN1cnIgJiYgY3VyciAhPSBhbmNlc3RvcjsgY3VyciA9IGN1cnIt
PmhvdmVyQW5jZXN0b3IoKSkgeworICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vy
ci0+aXNUZXh0KCkgJiYgKCFtdXN0QmVJbkFjdGl2ZUNoYWluIHx8IGN1cnItPm5vZGUoKS0+aW5B
Y3RpdmVDaGFpbigpKSkKKyAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlRnJvbUNoYWluLmFw
cGVuZChjdXJyLT5ub2RlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHNldCB0
aGUgaG92ZXIgc3RhdGUgZm9yIG91ciBuZXcgb2JqZWN0IHVwIHRvIHRoZSByb290LgorICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gbmV3SG92ZXJPYmo7IGN1cnI7IGN1cnIgPSBjdXJyLT5o
b3ZlckFuY2VzdG9yKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNU
ZXh0KCkgJiYgKCFtdXN0QmVJbkFjdGl2ZUNoYWluIHx8IGN1cnItPm5vZGUoKS0+aW5BY3RpdmVD
aGFpbigpKSkKKyAgICAgICAgICAgIG5vZGVzVG9BZGRUb0NoYWluLmFwcGVuZChjdXJyLT5ub2Rl
KCkpOworICAgIH0KKworICAgIHNpemVfdCByZW1vdmVDb3VudCA9IG5vZGVzVG9SZW1vdmVGcm9t
Q2hhaW4uc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVtb3ZlQ291bnQ7ICsr
aSkKKyAgICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbltpXS0+c2V0SG92ZXJlZChmYWxzZSk7
CisKKyAgICBzaXplX3QgYWRkQ291bnQgPSBub2Rlc1RvQWRkVG9DaGFpbi5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhZGRDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhbGxv
d0FjdGl2ZUNoYW5nZXMpCisgICAgICAgICAgICBub2Rlc1RvQWRkVG9DaGFpbltpXS0+c2V0QWN0
aXZlKHRydWUpOworICAgICAgICBub2Rlc1RvQWRkVG9DaGFpbltpXS0+c2V0SG92ZXJlZCh0cnVl
KTsKKyAgICB9Cit9CisKIHZvaWQgRG9jdW1lbnQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZv
IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpET00p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAyODcyZTVjMmFhOWIzNjI5YTU0NjBjMTZiMjhhNGRj
ZmE0ZmZmZDk4Li5hNjBlNDc3NWQ0YTA0ZjExYWU1MmM4MDJjMmY0YzY3N2RkNmU5Y2FjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaApAQCAtNzQ2LDYgKzc0Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGhv
dmVyZWROb2RlRGV0YWNoZWQoTm9kZSopOwogICAgIHZvaWQgYWN0aXZlQ2hhaW5Ob2RlRGV0YWNo
ZWQoTm9kZSopOwogCisgICAgdm9pZCB1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOworCiAgICAgLy8gVXBkYXRlcyBmb3IgOnRhcmdl
dCAoQ1NTMyBzZWxlY3RvcikuCiAgICAgdm9pZCBzZXRDU1NUYXJnZXQoRWxlbWVudCopOwogICAg
IEVsZW1lbnQqIGNzc1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzVGFyZ2V0OyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMDAxZmQ2ZDllOWUxMTYyOTVkMjBjNTA5
MjMwMTkyN2EwNWQ3ZGY5MC4uZjEwMmU4NTZkYzI5NTQyZTQzNDhhY2JjNzcxYTE0MDFkYmZlNjNl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjYyNCw3ICsyNjI0LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdChwb3NpdGlvbik7CiAgICAgcmVzdWx0LnNldElubmVyTm9kZSh0
YXJnZXROb2RlKTsKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpB
Y3RpdmUpOwotICAgIGRvYy0+cmVuZGVyVmlldygpLT5sYXllcigpLT51cGRhdGVIb3ZlckFjdGl2
ZVN0YXRlKHJlcXVlc3QsIHJlc3VsdCk7CisgICAgZG9jLT51cGRhdGVIb3ZlckFjdGl2ZVN0YXRl
KHJlcXVlc3QsIHJlc3VsdCk7CiAgICAgZG9jLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAK
ICAgICAvLyBUaGUgY29udGV4dG1lbnUgZXZlbnQgaXMgYSBtb3VzZSBldmVudCBldmVuIHdoZW4g
aW52b2tlZCB1c2luZyB0aGUga2V5Ym9hcmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZUJhc2UuY3BwCmluZGV4IGJlOTJjMGZhODVmNzlkZTc2ZGNjMTdjNzQxNzhiY2Iz
NWZlMWM2ODAuLjQwYjczNTVjNDEwMGUyNDFhYmFhNzUzMWI5MzNhNjRiOGJlZjhjNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCkBAIC0xMTcsNyAr
MTE3LDcgQEAgYm9vbCBSZW5kZXJGcmFtZUJhc2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgICAgICAgICAgSGl0VGVzdExvY2F0
aW9uIG5ld0hpdFRlc3RMb2NhdGlvbihsb2NhdGlvbkluQ29udGFpbmVyLCAtdG9MYXlvdXRTaXpl
KGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgIEhpdFRlc3RSZXF1ZXN0IG5ld0hpdFRl
c3RSZXF1ZXN0KHJlcXVlc3QudHlwZSgpIHwgSGl0VGVzdFJlcXVlc3Q6OkNoaWxkRnJhbWVIaXRU
ZXN0KTsKIAotICAgICAgICAgICAgYm9vbCBpc0luc2lkZUNoaWxkRnJhbWUgPSBjaGlsZFJvb3Qt
PmxheWVyKCktPmhpdFRlc3QobmV3SGl0VGVzdFJlcXVlc3QsIG5ld0hpdFRlc3RMb2NhdGlvbiwg
cmVzdWx0KTsKKyAgICAgICAgICAgIGJvb2wgaXNJbnNpZGVDaGlsZEZyYW1lID0gY2hpbGRSb290
LT5oaXRUZXN0KG5ld0hpdFRlc3RSZXF1ZXN0LCBuZXdIaXRUZXN0TG9jYXRpb24sIHJlc3VsdCk7
CiAgICAgICAgICAgICBpZiAoaXNJbnNpZGVDaGlsZEZyYW1lKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRl
eCBkYTcwZDc1OTM0NjYxNWE4ODQ4N2QxOTg1ZTFkODhjZmI0MWVjZTQ1Li5iOWQ4MTEyMzE4OWQ3
ZjY3ZDdkYTAwZjk0ZjA4MTk3ZTcyNmQ0N2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTM0NzAsOSArMzQ3MCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYKICAgICBpZiAobm9kZSAmJiAhcmVzdWx0LlVSTEVsZW1lbnQoKSkKICAgICAgICAgcmVzdWx0
LnNldFVSTEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUtPmVuY2xvc2luZ0xpbmtF
dmVudFBhcmVudE9yU2VsZigpKSk7CiAKLSAgICAvLyBOZXh0IHNldCB1cCB0aGUgY29ycmVjdCA6
aG92ZXIvOmFjdGl2ZSBzdGF0ZSBhbG9uZyB0aGUgbmV3IGNoYWluLgotICAgIHVwZGF0ZUhvdmVy
QWN0aXZlU3RhdGUocmVxdWVzdCwgcmVzdWx0KTsKLSAgICAKICAgICAvLyBOb3cgcmV0dXJuIHdo
ZXRoZXIgd2Ugd2VyZSBpbnNpZGUgdGhpcyBsYXllciAodGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVl
IGZvciB0aGUgcm9vdAogICAgIC8vIGxheWVyKS4KICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7CkBA
IC00NTA0LDExOCArNDUwMSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNldFBhcmVudChSZW5kZXJM
YXllciogcGFyZW50KQogI2VuZGlmCiB9CiAKLXN0YXRpYyBSZW5kZXJPYmplY3QqIGNvbW1vbkFu
Y2VzdG9yKFJlbmRlck9iamVjdCogb2JqMSwgUmVuZGVyT2JqZWN0KiBvYmoyKQotewotICAgIGlm
ICghb2JqMSB8fCAhb2JqMikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKFJlbmRlck9i
amVjdCogY3Vyck9iajEgPSBvYmoxOyBjdXJyT2JqMTsgY3Vyck9iajEgPSBjdXJyT2JqMS0+aG92
ZXJBbmNlc3RvcigpKQotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vyck9iajIgPSBvYmoy
OyBjdXJyT2JqMjsgY3Vyck9iajIgPSBjdXJyT2JqMi0+aG92ZXJBbmNlc3RvcigpKQotICAgICAg
ICAgICAgaWYgKGN1cnJPYmoxID09IGN1cnJPYmoyKQotICAgICAgICAgICAgICAgIHJldHVybiBj
dXJyT2JqMTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVI
b3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQpCi17Ci0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIDpob3Zlci86YWN0aXZlIHN0
YXRlIHdoZW4gdGhlIHJlc3VsdCBpcyBtYXJrZWQgYXMgcmVhZE9ubHkuCi0gICAgaWYgKHJlcXVl
c3QucmVhZE9ubHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvYyA9IHJl
bmRlcmVyKCktPmRvY3VtZW50KCk7Ci0KLSAgICBOb2RlKiBhY3RpdmVOb2RlID0gZG9jLT5hY3Rp
dmVOb2RlKCk7Ci0gICAgaWYgKGFjdGl2ZU5vZGUgJiYgIXJlcXVlc3QuYWN0aXZlKCkpIHsKLSAg
ICAgICAgLy8gV2UgYXJlIGNsZWFyaW5nIHRoZSA6YWN0aXZlIGNoYWluIGJlY2F1c2UgdGhlIG1v
dXNlIGhhcyBiZWVuIHJlbGVhc2VkLgotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IGFjdGl2ZU5vZGUtPnJlbmRlcmVyKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewot
ICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpIHsKLSAgICAg
ICAgICAgICAgICBjdXJyLT5ub2RlKCktPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgY3Vyci0+bm9kZSgpLT5jbGVhckluQWN0aXZlQ2hhaW4oKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBkb2MtPnNldEFjdGl2ZU5vZGUoMCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgTm9kZSogbmV3QWN0aXZlTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICAgICAg
aWYgKCFhY3RpdmVOb2RlICYmIG5ld0FjdGl2ZU5vZGUgJiYgcmVxdWVzdC5hY3RpdmUoKSAmJiAh
cmVxdWVzdC50b3VjaE1vdmUoKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIHNldHRpbmcgdGhl
IDphY3RpdmUgY2hhaW4gYW5kIGZyZWV6aW5nIGl0LiBJZiBmdXR1cmUgbW92ZXMgaGFwcGVuLCB0
aGV5Ci0gICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gcmVmZXJlbmNlIHRoaXMgY2hhaW4uCi0g
ICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5ld0FjdGl2ZU5vZGUtPnJlbmRl
cmVyKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIGlm
IChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBj
dXJyLT5ub2RlKCktPnNldEluQWN0aXZlQ2hhaW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGRvYy0+c2V0QWN0aXZlTm9kZShuZXdBY3RpdmVOb2RlKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAvLyBJZiB0aGUgbW91c2UgaGFzIGp1c3QgYmVlbiBwcmVzc2VkLCBzZXQgOmFjdGl2ZSBv
biB0aGUgY2hhaW4uIFRob3NlIChhbmQgb25seSB0aG9zZSkKLSAgICAvLyBub2RlcyBzaG91bGQg
cmVtYWluIDphY3RpdmUgdW50aWwgdGhlIG1vdXNlIGlzIHJlbGVhc2VkLgotICAgIGJvb2wgYWxs
b3dBY3RpdmVDaGFuZ2VzID0gIWFjdGl2ZU5vZGUgJiYgZG9jLT5hY3RpdmVOb2RlKCk7Ci0KLSAg
ICAvLyBJZiB0aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNlIG1vdmUgZXZl
bnQsIHdlIHdhbnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbiAKLSAgICAvLyA6aG92ZXIvOmFjdGl2
ZSB0byBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIHRoYXQgYXJlIGluIHRoZSA6YWN0aXZlIGNoYWlu
IHRoYXQgd2UgZnJvemUKLSAgICAvLyBhdCB0aGUgdGltZSB0aGUgbW91c2Ugd2VudCBkb3duLgot
ICAgIGJvb2wgbXVzdEJlSW5BY3RpdmVDaGFpbiA9IHJlcXVlc3QuYWN0aXZlKCkgJiYgcmVxdWVz
dC5tb3ZlKCk7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gb2xkSG92ZXJOb2RlID0gZG9jLT5ob3Zlck5v
ZGUoKTsKLSAgICAvLyBDbGVhciB0aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdlc3R1
cmUgaXMgb3Zlci4KLSAgICBpZiAocmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgewotICAgICAgICBp
ZiAob2xkSG92ZXJOb2RlKSB7Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IG9sZEhvdmVyTm9kZS0+cmVuZGVyZXIoKTsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCi0g
ICAgICAgICAgICAgICAgICAgIGN1cnItPm5vZGUoKS0+c2V0SG92ZXJlZChmYWxzZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkb2MtPnNldEhvdmVyTm9kZSgwKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBBIHRvdWNoIHJlbGVhc2UgY2FuIG5vdCBzZXQgbmV3IGhvdmVyIG9yIGFjdGl2
ZSB0YXJnZXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0byBzZWUg
aWYgdGhlIGhvdmVyZWQgbm9kZSBoYXMgY2hhbmdlZC4KLSAgICAvLyBJZiBpdCBoYXNuJ3QsIHdl
IGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgIE5vZGUqIG5ld0hvdmVyTm9kZSA9IHJl
c3VsdC5pbm5lck5vZGUoKTsKLSAgICBpZiAobmV3SG92ZXJOb2RlICYmICFuZXdIb3Zlck5vZGUt
PnJlbmRlcmVyKCkpCi0gICAgICAgIG5ld0hvdmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKTsKLQotICAgIC8vIFVwZGF0ZSBvdXIgY3VycmVudCBob3ZlciBub2RlLgotICAgIGRv
Yy0+c2V0SG92ZXJOb2RlKG5ld0hvdmVyTm9kZSk7Ci0KLSAgICAvLyBXZSBoYXZlIHR3byBkaWZm
ZXJlbnQgb2JqZWN0cy4gIEZldGNoIHRoZWlyIHJlbmRlcmVycy4KLSAgICBSZW5kZXJPYmplY3Qq
IG9sZEhvdmVyT2JqID0gb2xkSG92ZXJOb2RlID8gb2xkSG92ZXJOb2RlLT5yZW5kZXJlcigpIDog
MDsKLSAgICBSZW5kZXJPYmplY3QqIG5ld0hvdmVyT2JqID0gbmV3SG92ZXJOb2RlID8gbmV3SG92
ZXJOb2RlLT5yZW5kZXJlcigpIDogMDsKLSAgICAKLSAgICAvLyBMb2NhdGUgdGhlIGNvbW1vbiBh
bmNlc3RvciByZW5kZXIgb2JqZWN0IGZvciB0aGUgdHdvIHJlbmRlcmVycy4KLSAgICBSZW5kZXJP
YmplY3QqIGFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3Iob2xkSG92ZXJPYmosIG5ld0hvdmVyT2Jq
KTsKLQotICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4sIDMyPiBub2Rlc1RvUmVtb3ZlRnJvbUNoYWlu
OwotICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4sIDMyPiBub2Rlc1RvQWRkVG9DaGFpbjsKLQotICAg
IGlmIChvbGRIb3Zlck9iaiAhPSBuZXdIb3Zlck9iaikgewotICAgICAgICAvLyBUaGUgb2xkIGhv
dmVyIHBhdGggb25seSBuZWVkcyB0byBiZSBjbGVhcmVkIHVwIHRvIChhbmQgbm90IGluY2x1ZGlu
ZykgdGhlIGNvbW1vbiBhbmNlc3RvcjsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBvbGRIb3Zlck9iajsgY3VyciAmJiBjdXJyICE9IGFuY2VzdG9yOyBjdXJyID0gY3Vyci0+aG92
ZXJBbmNlc3RvcigpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5p
c1RleHQoKSAmJiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2
ZUNoYWluKCkpKQotICAgICAgICAgICAgICAgIG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW4uYXBwZW5k
KGN1cnItPm5vZGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgc2V0IHRoZSBo
b3ZlciBzdGF0ZSBmb3Igb3VyIG5ldyBvYmplY3QgdXAgdG8gdGhlIHJvb3QuCi0gICAgZm9yIChS
ZW5kZXJPYmplY3QqIGN1cnIgPSBuZXdIb3Zlck9iajsgY3VycjsgY3VyciA9IGN1cnItPmhvdmVy
QW5jZXN0b3IoKSkgewotICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQo
KSAmJiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNoYWlu
KCkpKQotICAgICAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW4uYXBwZW5kKGN1cnItPm5vZGUoKSk7
Ci0gICAgfQotCi0gICAgc2l6ZV90IHJlbW92ZUNvdW50ID0gbm9kZXNUb1JlbW92ZUZyb21DaGFp
bi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVDb3VudDsgKytpKSB7
Ci0gICAgICAgIG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW5baV0tPnNldEhvdmVyZWQoZmFsc2UpOwot
ICAgIH0KLQotICAgIHNpemVfdCBhZGRDb3VudCA9IG5vZGVzVG9BZGRUb0NoYWluLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFkZENvdW50OyArK2kpIHsKLSAgICAgICAgaWYg
KGFsbG93QWN0aXZlQ2hhbmdlcykKLSAgICAgICAgICAgIG5vZGVzVG9BZGRUb0NoYWluW2ldLT5z
ZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIG5vZGVzVG9BZGRUb0NoYWluW2ldLT5zZXRIb3ZlcmVk
KHRydWUpOwotICAgIH0KLX0KLQogLy8gSGVscGVyIGZvciB0aGUgc29ydGluZyBvZiBsYXllcnMg
Ynkgei1pbmRleC4KIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlWkluZGV4KFJlbmRlckxheWVy
KiBmaXJzdCwgUmVuZGVyTGF5ZXIqIHNlY29uZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKaW5kZXggMzJkNDFlM2JhOWFmOWIzMzU1YzVkYzk3MTRmZjNjNTA1YWNhZWNi
ZC4uMGQxNDZjYWZjNmM0ZWQ0NmFhYTAyNTcyMDIxYjJjNmVkMmUyMTNlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTU2Myw4ICs1NjMsNiBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiB1bnNpZ25lZCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzOwogICAgIHN0YXRp
YyBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiwgY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBE
ZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyk7CiAgICAgCi0gICAgdm9pZCB1cGRhdGVI
b3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwot
CiAgICAgLy8gV0FSTklORzogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgb2Zmc2V0IGZvciB0aGUg
cGFyZW50IGFzIHRoaXMgaXMgd2hhdCB1cGRhdGVMYXllclBvc2l0aW9ucyBleHBlY3RzLgogICAg
IExheW91dFBvaW50IGNvbXB1dGVPZmZzZXRGcm9tUm9vdChib29sJiBoYXNMYXllck9mZnNldCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA1M2Ex
YjY0OGI4NWIyYWMwNmJhYTljOWRmMDcwMDhmOTczZWZlYWJlLi5lZWVkYzMwMzc0YzFjNTAzNjc2
N2M2YjkyNjk0M2U3YTkxMDI2NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCkBAIC04Nyw3ICs4NywxNyBAQCBSZW5kZXJWaWV3Ojp+UmVuZGVyVmlldygpCiAKIGJv
b2wgUmVuZGVyVmlldzo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0KQogewotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0KHJlcXVl
c3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIGhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LmhpdFRlc3RM
b2NhdGlvbigpLCByZXN1bHQpOworfQorCitib29sIFJlbmRlclZpZXc6OmhpdFRlc3QoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb24s
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBib29sIGluc2lkZSA9IGxheWVyKCktPmhp
dFRlc3QocmVxdWVzdCwgbG9jYXRpb24sIHJlc3VsdCk7CisKKyAgICAvLyBOZXh0IHNldCB1cCB0
aGUgY29ycmVjdCA6aG92ZXIvOmFjdGl2ZSBzdGF0ZSBhbG9uZyB0aGUgbmV3IGNoYWluLgorICAg
IGRvY3VtZW50KCktPnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUocmVxdWVzdCwgcmVzdWx0KTsKKwor
ICAgIHJldHVybiBpbnNpZGU7CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggZjg0ZjBkYWFm
ZGM0M2EyYWUyM2E2OWJjYjFmOTBhYjBhYjgyODliYS4uNTQyODZmYzNmZTk0N2UwNzlmOGU1MWQ2
MDYxZjgxZWZmYmRlYWVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBA
IC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJWaWV3KCk7CiAKICAg
ICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7Cisg
ICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclZpZXciOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162264</attachid>
            <date>2012-09-05 09:21:51 -0700</date>
            <delta_ts>2012-09-13 08:25:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95858-20120905182123.patch</filename>
            <type>text/plain</type>
            <size>17372</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2E3YWNiMzZhNGFhY2Ew
MzE5YTk5ZDc0YTMzMjAzZTM3NzI4OGM5Yi4uMjEwMzQ2MGM0NDJjNzE1ZjVkZmMwODljMDMzMDkz
ZjI2NzczMGUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA5LTA1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIE1v
dmUgdXBkYXRlSG92ZXJBY3RpdmVTdGF0ZSB0byBEb2N1bWVudC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuZGVyTGF5ZXI6OnVwZGF0ZUhvdmVyQWN0
aXZlU3RhdGUgY29udGFpbnMgdGhlIGxvZ2ljIHRoYXQgdXBkYXRlcyBob3ZlciBhbmQgYWN0aXZl
IHN0YXRlcyBiYXNlZCBvbgorICAgICAgICBoaXQtdGVzdHMsIGJ1dCBob3ZlciBhbmQgYWN0aXZl
IHN0YXRlcyBhcmUgZG9jdW1lbnQgc3RhdGVzLCBhbmQgZG9lcyBoYXZlIGFueSByZWxhdGlvbiB0
byBsYXllcnMgb3RoZXIKKyAgICAgICAgdGhhbiBkb2N1bWVudHMgaGF2aW5nIGF0bGVhc3Qgb25l
IGxheWVyLgorCisgICAgICAgIEJ5IG1vdmluZyB0aGUgZnVuY3Rpb24gaXQgd2lsbCBiZSBpbiB0
aGUgc2FtZSBwbGFjZSBhcyBvdGhlciBhY3RpdmUvaG92ZXIgc3RhdGUgbWFpbnRhaW5hY2UsIGFu
ZCB3ZSBhdm9pZAorICAgICAgICBleGNlc3NpdmUgdXBkYXRlcyBvZiB0aGUgc3RhdGUgZnJvbSBo
aXQtdGVzdGluZyBmbG93IHRocmVhZHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tbW9uQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JL
ZXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhbWVCYXNlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpoaXRU
ZXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoUmVuZGVy
Vmlldyk6CisKIDIwMTItMDktMDUgIEtldmluIEVsbGlzICA8a2V2ZXJzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIFVuaWZ5IHNpemUgb2YgcG9wdXAgbWVudSBmb3IgdG91Y2gg
YW5kIG5vbi10b3VjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDFkYTFjODE2MzIyNjVk
NWYxMTJmZWVhZDcyNTM0YTRlNzRkMTkzOTcuLjMzZGY4NjU4MjQ2Mjc4ZTA0OWM4OGU1OThkNWZm
ZGI3MTY0ZjBjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjEyMSw2ICs2MTIxLDEy
MSBAQCB2b2lkIERvY3VtZW50OjpzZXRDb250ZXh0RmVhdHVyZXMoUGFzc1JlZlB0cjxDb250ZXh0
RmVhdHVyZXM+IGZlYXR1cmVzKQogICAgIG1fY29udGV4dEZlYXR1cmVzID0gZmVhdHVyZXM7CiB9
CiAKK3N0YXRpYyBSZW5kZXJPYmplY3QqIG5lYXJlc3RDb21tb25Ib3ZlckFuY2VzdG9yKFJlbmRl
ck9iamVjdCogb2JqMSwgUmVuZGVyT2JqZWN0KiBvYmoyKQoreworICAgIGlmICghb2JqMSB8fCAh
b2JqMikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vyck9i
ajEgPSBvYmoxOyBjdXJyT2JqMTsgY3Vyck9iajEgPSBjdXJyT2JqMS0+aG92ZXJBbmNlc3Rvcigp
KSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyT2JqMiA9IG9iajI7IGN1cnJPYmoy
OyBjdXJyT2JqMiA9IGN1cnJPYmoyLT5ob3ZlckFuY2VzdG9yKCkpIHsKKyAgICAgICAgICAgIGlm
IChjdXJyT2JqMSA9PSBjdXJyT2JqMikKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Vyck9iajE7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBEb2N1bWVudDo6
dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0KQoreworICAgIC8vIFdlIGRvbid0IHVwZGF0ZSA6aG92ZXIvOmFj
dGl2ZSBzdGF0ZSB3aGVuIHRoZSByZXN1bHQgaXMgbWFya2VkIGFzIHJlYWRPbmx5LgorICAgIGlm
IChyZXF1ZXN0LnJlYWRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIGlubmVy
Tm9kZUluRG9jdW1lbnQgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgd2hpbGUgKGlubmVyTm9k
ZUluRG9jdW1lbnQgJiYgaW5uZXJOb2RlSW5Eb2N1bWVudC0+ZG9jdW1lbnQoKSAhPSB0aGlzKQor
ICAgICAgICBpbm5lck5vZGVJbkRvY3VtZW50ID0gaW5uZXJOb2RlSW5Eb2N1bWVudC0+ZG9jdW1l
bnQoKS0+b3duZXJFbGVtZW50KCk7CisKKyAgICBOb2RlKiBvbGRBY3RpdmVOb2RlID0gYWN0aXZl
Tm9kZSgpOworICAgIGlmIChvbGRBY3RpdmVOb2RlICYmICFyZXF1ZXN0LmFjdGl2ZSgpKSB7Cisg
ICAgICAgIC8vIFdlIGFyZSBjbGVhcmluZyB0aGUgOmFjdGl2ZSBjaGFpbiBiZWNhdXNlIHRoZSBt
b3VzZSBoYXMgYmVlbiByZWxlYXNlZC4KKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBvbGRBY3RpdmVOb2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpKSB7Cisg
ICAgICAgICAgICAgICAgY3Vyci0+bm9kZSgpLT5zZXRBY3RpdmUoZmFsc2UpOworICAgICAgICAg
ICAgICAgIGN1cnItPm5vZGUoKS0+Y2xlYXJJbkFjdGl2ZUNoYWluKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgc2V0QWN0aXZlTm9kZSgwKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBOb2RlKiBuZXdBY3RpdmVOb2RlID0gaW5uZXJOb2RlSW5Eb2N1bWVudDsKKyAgICAgICAg
aWYgKCFvbGRBY3RpdmVOb2RlICYmIG5ld0FjdGl2ZU5vZGUgJiYgcmVxdWVzdC5hY3RpdmUoKSAm
JiAhcmVxdWVzdC50b3VjaE1vdmUoKSkgeworICAgICAgICAgICAgLy8gV2UgYXJlIHNldHRpbmcg
dGhlIDphY3RpdmUgY2hhaW4gYW5kIGZyZWV6aW5nIGl0LiBJZiBmdXR1cmUgbW92ZXMgaGFwcGVu
LCB0aGV5CisgICAgICAgICAgICAvLyB3aWxsIG5lZWQgdG8gcmVmZXJlbmNlIHRoaXMgY2hhaW4u
CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5ld0FjdGl2ZU5vZGUtPnJl
bmRlcmVyKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgeworICAgICAgICAgICAgICAg
IGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpKQorICAgICAgICAgICAgICAgICAg
ICBjdXJyLT5ub2RlKCktPnNldEluQWN0aXZlQ2hhaW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNldEFjdGl2ZU5vZGUobmV3QWN0aXZlTm9kZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgLy8gSWYgdGhlIG1vdXNlIGhhcyBqdXN0IGJlZW4gcHJlc3NlZCwgc2V0IDphY3RpdmUgb24g
dGhlIGNoYWluLiBUaG9zZSAoYW5kIG9ubHkgdGhvc2UpCisgICAgLy8gbm9kZXMgc2hvdWxkIHJl
bWFpbiA6YWN0aXZlIHVudGlsIHRoZSBtb3VzZSBpcyByZWxlYXNlZC4KKyAgICBib29sIGFsbG93
QWN0aXZlQ2hhbmdlcyA9ICFvbGRBY3RpdmVOb2RlICYmIGFjdGl2ZU5vZGUoKTsKKworICAgIC8v
IElmIHRoZSBtb3VzZSBpcyBkb3duIGFuZCBpZiB0aGlzIGlzIGEgbW91c2UgbW92ZSBldmVudCwg
d2Ugd2FudCB0byByZXN0cmljdCBjaGFuZ2VzIGluCisgICAgLy8gOmhvdmVyLzphY3RpdmUgdG8g
b25seSBhcHBseSB0byBlbGVtZW50cyB0aGF0IGFyZSBpbiB0aGUgOmFjdGl2ZSBjaGFpbiB0aGF0
IHdlIGZyb3plCisgICAgLy8gYXQgdGhlIHRpbWUgdGhlIG1vdXNlIHdlbnQgZG93bi4KKyAgICBi
b29sIG11c3RCZUluQWN0aXZlQ2hhaW4gPSByZXF1ZXN0LmFjdGl2ZSgpICYmIHJlcXVlc3QubW92
ZSgpOworCisgICAgUmVmUHRyPE5vZGU+IG9sZEhvdmVyTm9kZSA9IGhvdmVyTm9kZSgpOworICAg
IC8vIENsZWFyIHRoZSA6aG92ZXIgY2hhaW4gd2hlbiB0aGUgdG91Y2ggZ2VzdHVyZSBpcyBvdmVy
LgorICAgIGlmIChyZXF1ZXN0LnRvdWNoUmVsZWFzZSgpKSB7CisgICAgICAgIGlmIChvbGRIb3Zl
ck5vZGUpIHsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gb2xkSG92ZXJO
b2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCisgICAg
ICAgICAgICAgICAgICAgIGN1cnItPm5vZGUoKS0+c2V0SG92ZXJlZChmYWxzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzZXRIb3Zlck5vZGUoMCk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQSB0b3VjaCByZWxlYXNlIGNhbiBub3Qgc2V0IG5ldyBob3ZlciBvciBhY3RpdmUgdGFyZ2V0
LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBo
b3ZlcmVkIG5vZGUgaGFzIGNoYW5nZWQuCisgICAgLy8gSWYgaXQgaGFzbid0LCB3ZSBkbyBub3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBOb2RlKiBuZXdIb3Zlck5vZGUgPSBpbm5lck5vZGVJ
bkRvY3VtZW50OworICAgIHdoaWxlIChuZXdIb3Zlck5vZGUgJiYgIW5ld0hvdmVyTm9kZS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgbmV3SG92ZXJOb2RlID0gbmV3SG92ZXJOb2RlLT5wYXJlbnRPckhv
c3ROb2RlKCk7CisKKyAgICAvLyBVcGRhdGUgb3VyIGN1cnJlbnQgaG92ZXIgbm9kZS4KKyAgICBz
ZXRIb3Zlck5vZGUobmV3SG92ZXJOb2RlKTsKKworICAgIC8vIFdlIGhhdmUgdHdvIGRpZmZlcmVu
dCBvYmplY3RzLiBGZXRjaCB0aGVpciByZW5kZXJlcnMuCisgICAgUmVuZGVyT2JqZWN0KiBvbGRI
b3Zlck9iaiA9IG9sZEhvdmVyTm9kZSA/IG9sZEhvdmVyTm9kZS0+cmVuZGVyZXIoKSA6IDA7Cisg
ICAgUmVuZGVyT2JqZWN0KiBuZXdIb3Zlck9iaiA9IG5ld0hvdmVyTm9kZSA/IG5ld0hvdmVyTm9k
ZS0+cmVuZGVyZXIoKSA6IDA7CisKKyAgICAvLyBMb2NhdGUgdGhlIGNvbW1vbiBhbmNlc3RvciBy
ZW5kZXIgb2JqZWN0IGZvciB0aGUgdHdvIHJlbmRlcmVycy4KKyAgICBSZW5kZXJPYmplY3QqIGFu
Y2VzdG9yID0gbmVhcmVzdENvbW1vbkhvdmVyQW5jZXN0b3Iob2xkSG92ZXJPYmosIG5ld0hvdmVy
T2JqKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4sIDMyPiBub2Rlc1RvUmVtb3ZlRnJvbUNo
YWluOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4sIDMyPiBub2Rlc1RvQWRkVG9DaGFpbjsKKwor
ICAgIGlmIChvbGRIb3Zlck9iaiAhPSBuZXdIb3Zlck9iaikgeworICAgICAgICAvLyBUaGUgb2xk
IGhvdmVyIHBhdGggb25seSBuZWVkcyB0byBiZSBjbGVhcmVkIHVwIHRvIChhbmQgbm90IGluY2x1
ZGluZykgdGhlIGNvbW1vbiBhbmNlc3RvcjsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSBvbGRIb3Zlck9iajsgY3VyciAmJiBjdXJyICE9IGFuY2VzdG9yOyBjdXJyID0gY3Vyci0+
aG92ZXJBbmNlc3RvcigpKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJy
LT5pc1RleHQoKSAmJiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFj
dGl2ZUNoYWluKCkpKQorICAgICAgICAgICAgICAgIG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW4uYXBw
ZW5kKGN1cnItPm5vZGUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgc2V0IHRo
ZSBob3ZlciBzdGF0ZSBmb3Igb3VyIG5ldyBvYmplY3QgdXAgdG8gdGhlIHJvb3QuCisgICAgZm9y
IChSZW5kZXJPYmplY3QqIGN1cnIgPSBuZXdIb3Zlck9iajsgY3VycjsgY3VyciA9IGN1cnItPmhv
dmVyQW5jZXN0b3IoKSkgeworICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1Rl
eHQoKSAmJiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNo
YWluKCkpKQorICAgICAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW4uYXBwZW5kKGN1cnItPm5vZGUo
KSk7CisgICAgfQorCisgICAgc2l6ZV90IHJlbW92ZUNvdW50ID0gbm9kZXNUb1JlbW92ZUZyb21D
aGFpbi5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVDb3VudDsgKytp
KQorICAgICAgICBub2Rlc1RvUmVtb3ZlRnJvbUNoYWluW2ldLT5zZXRIb3ZlcmVkKGZhbHNlKTsK
KworICAgIHNpemVfdCBhZGRDb3VudCA9IG5vZGVzVG9BZGRUb0NoYWluLnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFkZENvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKGFsbG93
QWN0aXZlQ2hhbmdlcykKKyAgICAgICAgICAgIG5vZGVzVG9BZGRUb0NoYWluW2ldLT5zZXRBY3Rp
dmUodHJ1ZSk7CisgICAgICAgIG5vZGVzVG9BZGRUb0NoYWluW2ldLT5zZXRIb3ZlcmVkKHRydWUp
OworICAgIH0KK30KKwogdm9pZCBEb2N1bWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCmluZGV4IDI4NzJlNWMyYWE5YjM2MjlhNTQ2MGMxNmIyOGE0ZGNmYTRm
ZmZkOTguLmE2MGU0Nzc1ZDRhMDRmMTFhZTUyYzgwMmMyZjRjNjc3ZGQ2ZTljYWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCkBAIC03NDYsNiArNzQ2LDggQEAgcHVibGljOgogICAgIHZvaWQgaG92ZXJl
ZE5vZGVEZXRhY2hlZChOb2RlKik7CiAgICAgdm9pZCBhY3RpdmVDaGFpbk5vZGVEZXRhY2hlZChO
b2RlKik7CiAKKyAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7CisKICAgICAvLyBVcGRhdGVzIGZvciA6dGFyZ2V0IChD
U1MzIHNlbGVjdG9yKS4KICAgICB2b2lkIHNldENTU1RhcmdldChFbGVtZW50Kik7CiAgICAgRWxl
bWVudCogY3NzVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jc3NUYXJnZXQ7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAwMDFmZDZkOWU5ZTExNjI5NWQyMGM1MDkyMzAx
OTI3YTA1ZDdkZjkwLi5mMTAyZTg1NmRjMjk1NDJlNDM0OGFjYmM3NzFhMTQwMWRiZmU2M2UzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yNjI0LDcgKzI2MjQsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0KHBvc2l0aW9uKTsKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKHRhcmdl
dE5vZGUpOwogICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OkFjdGl2
ZSk7Ci0gICAgZG9jLT5yZW5kZXJWaWV3KCktPmxheWVyKCktPnVwZGF0ZUhvdmVyQWN0aXZlU3Rh
dGUocmVxdWVzdCwgcmVzdWx0KTsKKyAgICBkb2MtPnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUocmVx
dWVzdCwgcmVzdWx0KTsKICAgICBkb2MtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgIAogICAg
IC8vIFRoZSBjb250ZXh0bWVudSBldmVudCBpcyBhIG1vdXNlIGV2ZW50IGV2ZW4gd2hlbiBpbnZv
a2VkIHVzaW5nIHRoZSBrZXlib2FyZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lQmFzZS5jcHAKaW5kZXggYmU5MmMwZmE4NWY3OWRlNzZkY2MxN2M3NDE3OGJjYjM1ZmUx
YzY4MC4uNDBiNzM1NWM0MTAwZTI0MWFiYWE3NTMxYjkzM2E2NGI4YmVmOGM1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAKQEAgLTExNyw3ICsxMTcs
NyBAQCBib29sIFJlbmRlckZyYW1lQmFzZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmCiAgICAgICAgICAgICBIaXRUZXN0TG9jYXRpb24g
bmV3SGl0VGVzdExvY2F0aW9uKGxvY2F0aW9uSW5Db250YWluZXIsIC10b0xheW91dFNpemUoYWRq
dXN0ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3SGl0VGVzdFJl
cXVlc3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6Q2hpbGRGcmFtZUhpdFRlc3Qp
OwogCi0gICAgICAgICAgICBib29sIGlzSW5zaWRlQ2hpbGRGcmFtZSA9IGNoaWxkUm9vdC0+bGF5
ZXIoKS0+aGl0VGVzdChuZXdIaXRUZXN0UmVxdWVzdCwgbmV3SGl0VGVzdExvY2F0aW9uLCByZXN1
bHQpOworICAgICAgICAgICAgYm9vbCBpc0luc2lkZUNoaWxkRnJhbWUgPSBjaGlsZFJvb3QtPmhp
dFRlc3QobmV3SGl0VGVzdFJlcXVlc3QsIG5ld0hpdFRlc3RMb2NhdGlvbiwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGlmIChpc0luc2lkZUNoaWxkRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGRh
NzBkNzU5MzQ2NjE1YTg4NDg3ZDE5ODVlMWQ4OGNmYjQxZWNlNDUuLmI5ZDgxMTIzMTg5ZDdmNjdk
N2RhMDBmOTRmMDgxOTdlNzI2ZDQ3YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMzQ3MCw5ICszNDcwLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVz
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJgog
ICAgIGlmIChub2RlICYmICFyZXN1bHQuVVJMRWxlbWVudCgpKQogICAgICAgICByZXN1bHQuc2V0
VVJMRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZS0+ZW5jbG9zaW5nTGlua0V2ZW50
UGFyZW50T3JTZWxmKCkpKTsKIAotICAgIC8vIE5leHQgc2V0IHVwIHRoZSBjb3JyZWN0IDpob3Zl
ci86YWN0aXZlIHN0YXRlIGFsb25nIHRoZSBuZXcgY2hhaW4uCi0gICAgdXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZShyZXF1ZXN0LCByZXN1bHQpOwotICAgIAogICAgIC8vIE5vdyByZXR1cm4gd2hldGhl
ciB3ZSB3ZXJlIGluc2lkZSB0aGlzIGxheWVyICh0aGlzIHdpbGwgYWx3YXlzIGJlIHRydWUgZm9y
IHRoZSByb290CiAgICAgLy8gbGF5ZXIpLgogICAgIHJldHVybiBpbnNpZGVMYXllcjsKQEAgLTQ1
MDQsMTE4ICs0NTAxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0UGFyZW50KFJlbmRlckxheWVy
KiBwYXJlbnQpCiAjZW5kaWYKIH0KIAotc3RhdGljIFJlbmRlck9iamVjdCogY29tbW9uQW5jZXN0
b3IoUmVuZGVyT2JqZWN0KiBvYmoxLCBSZW5kZXJPYmplY3QqIG9iajIpCi17Ci0gICAgaWYgKCFv
YmoxIHx8ICFvYmoyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyT2JqMSA9IG9iajE7IGN1cnJPYmoxOyBjdXJyT2JqMSA9IGN1cnJPYmoxLT5ob3ZlckFu
Y2VzdG9yKCkpCi0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyT2JqMiA9IG9iajI7IGN1
cnJPYmoyOyBjdXJyT2JqMiA9IGN1cnJPYmoyLT5ob3ZlckFuY2VzdG9yKCkpCi0gICAgICAgICAg
ICBpZiAoY3Vyck9iajEgPT0gY3Vyck9iajIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJP
YmoxOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUhvdmVy
QWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCkKLXsKLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgOmhvdmVyLzphY3RpdmUgc3RhdGUg
d2hlbiB0aGUgcmVzdWx0IGlzIG1hcmtlZCBhcyByZWFkT25seS4KLSAgICBpZiAocmVxdWVzdC5y
ZWFkT25seSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jID0gcmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKTsKLQotICAgIE5vZGUqIGFjdGl2ZU5vZGUgPSBkb2MtPmFjdGl2ZU5v
ZGUoKTsKLSAgICBpZiAoYWN0aXZlTm9kZSAmJiAhcmVxdWVzdC5hY3RpdmUoKSkgewotICAgICAg
ICAvLyBXZSBhcmUgY2xlYXJpbmcgdGhlIDphY3RpdmUgY2hhaW4gYmVjYXVzZSB0aGUgbW91c2Ug
aGFzIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gYWN0
aXZlTm9kZS0+cmVuZGVyZXIoKTsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSkgewotICAgICAgICAg
ICAgICAgIGN1cnItPm5vZGUoKS0+c2V0QWN0aXZlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBj
dXJyLT5ub2RlKCktPmNsZWFySW5BY3RpdmVDaGFpbigpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGRvYy0+c2V0QWN0aXZlTm9kZSgwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBOb2RlKiBuZXdBY3RpdmVOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgICAgICBpZiAo
IWFjdGl2ZU5vZGUgJiYgbmV3QWN0aXZlTm9kZSAmJiByZXF1ZXN0LmFjdGl2ZSgpICYmICFyZXF1
ZXN0LnRvdWNoTW92ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgc2V0dGluZyB0aGUgOmFj
dGl2ZSBjaGFpbiBhbmQgZnJlZXppbmcgaXQuIElmIGZ1dHVyZSBtb3ZlcyBoYXBwZW4sIHRoZXkK
LSAgICAgICAgICAgIC8vIHdpbGwgbmVlZCB0byByZWZlcmVuY2UgdGhpcyBjaGFpbi4KLSAgICAg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gbmV3QWN0aXZlTm9kZS0+cmVuZGVyZXIo
KTsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1
cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIGN1cnIt
Pm5vZGUoKS0+c2V0SW5BY3RpdmVDaGFpbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZG9jLT5zZXRBY3RpdmVOb2RlKG5ld0FjdGl2ZU5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAg
IC8vIElmIHRoZSBtb3VzZSBoYXMganVzdCBiZWVuIHByZXNzZWQsIHNldCA6YWN0aXZlIG9uIHRo
ZSBjaGFpbi4gVGhvc2UgKGFuZCBvbmx5IHRob3NlKQotICAgIC8vIG5vZGVzIHNob3VsZCByZW1h
aW4gOmFjdGl2ZSB1bnRpbCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCi0gICAgYm9vbCBhbGxvd0Fj
dGl2ZUNoYW5nZXMgPSAhYWN0aXZlTm9kZSAmJiBkb2MtPmFjdGl2ZU5vZGUoKTsKLQotICAgIC8v
IElmIHRoZSBtb3VzZSBpcyBkb3duIGFuZCBpZiB0aGlzIGlzIGEgbW91c2UgbW92ZSBldmVudCwg
d2Ugd2FudCB0byByZXN0cmljdCBjaGFuZ2VzIGluIAotICAgIC8vIDpob3Zlci86YWN0aXZlIHRv
IG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3RpdmUgY2hhaW4gdGhh
dCB3ZSBmcm96ZQotICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50IGRvd24uCi0gICAg
Ym9vbCBtdXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAmJiByZXF1ZXN0Lm1v
dmUoKTsKLQotICAgIFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBkb2MtPmhvdmVyTm9kZSgp
OwotICAgIC8vIENsZWFyIHRoZSA6aG92ZXIgY2hhaW4gd2hlbiB0aGUgdG91Y2ggZ2VzdHVyZSBp
cyBvdmVyLgotICAgIGlmIChyZXF1ZXN0LnRvdWNoUmVsZWFzZSgpKSB7Ci0gICAgICAgIGlmIChv
bGRIb3Zlck5vZGUpIHsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gb2xk
SG92ZXJOb2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY3Vyci0+bm9kZSgpLT5zZXRIb3ZlcmVkKGZhbHNlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRvYy0+c2V0SG92ZXJOb2RlKDApOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIEEgdG91Y2ggcmVsZWFzZSBjYW4gbm90IHNldCBuZXcgaG92ZXIgb3IgYWN0aXZlIHRh
cmdldC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgaG92ZXJlZCBub2RlIGhhcyBjaGFuZ2VkLgotICAgIC8vIElmIGl0IGhhc24ndCwgd2UgZG8g
bm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgTm9kZSogbmV3SG92ZXJOb2RlID0gcmVzdWx0
LmlubmVyTm9kZSgpOwotICAgIGlmIChuZXdIb3Zlck5vZGUgJiYgIW5ld0hvdmVyTm9kZS0+cmVu
ZGVyZXIoKSkKLSAgICAgICAgbmV3SG92ZXJOb2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpOwotCi0gICAgLy8gVXBkYXRlIG91ciBjdXJyZW50IGhvdmVyIG5vZGUuCi0gICAgZG9jLT5z
ZXRIb3Zlck5vZGUobmV3SG92ZXJOb2RlKTsKLQotICAgIC8vIFdlIGhhdmUgdHdvIGRpZmZlcmVu
dCBvYmplY3RzLiAgRmV0Y2ggdGhlaXIgcmVuZGVyZXJzLgotICAgIFJlbmRlck9iamVjdCogb2xk
SG92ZXJPYmogPSBvbGRIb3Zlck5vZGUgPyBvbGRIb3Zlck5vZGUtPnJlbmRlcmVyKCkgOiAwOwot
ICAgIFJlbmRlck9iamVjdCogbmV3SG92ZXJPYmogPSBuZXdIb3Zlck5vZGUgPyBuZXdIb3Zlck5v
ZGUtPnJlbmRlcmVyKCkgOiAwOwotICAgIAotICAgIC8vIExvY2F0ZSB0aGUgY29tbW9uIGFuY2Vz
dG9yIHJlbmRlciBvYmplY3QgZm9yIHRoZSB0d28gcmVuZGVyZXJzLgotICAgIFJlbmRlck9iamVj
dCogYW5jZXN0b3IgPSBjb21tb25BbmNlc3RvcihvbGRIb3Zlck9iaiwgbmV3SG92ZXJPYmopOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiwgMzI+IG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW47Ci0g
ICAgVmVjdG9yPFJlZlB0cjxOb2RlPiwgMzI+IG5vZGVzVG9BZGRUb0NoYWluOwotCi0gICAgaWYg
KG9sZEhvdmVyT2JqICE9IG5ld0hvdmVyT2JqKSB7Ci0gICAgICAgIC8vIFRoZSBvbGQgaG92ZXIg
cGF0aCBvbmx5IG5lZWRzIHRvIGJlIGNsZWFyZWQgdXAgdG8gKGFuZCBub3QgaW5jbHVkaW5nKSB0
aGUgY29tbW9uIGFuY2VzdG9yOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG9s
ZEhvdmVyT2JqOyBjdXJyICYmIGN1cnIgIT0gYW5jZXN0b3I7IGN1cnIgPSBjdXJyLT5ob3ZlckFu
Y2VzdG9yKCkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4
dCgpICYmICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBjdXJyLT5ub2RlKCktPmluQWN0aXZlQ2hh
aW4oKSkpCi0gICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbi5hcHBlbmQoY3Vy
ci0+bm9kZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyBzZXQgdGhlIGhvdmVy
IHN0YXRlIGZvciBvdXIgbmV3IG9iamVjdCB1cCB0byB0aGUgcm9vdC4KLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VyciA9IG5ld0hvdmVyT2JqOyBjdXJyOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNl
c3RvcigpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpICYm
ICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBjdXJyLT5ub2RlKCktPmluQWN0aXZlQ2hhaW4oKSkp
Ci0gICAgICAgICAgICBub2Rlc1RvQWRkVG9DaGFpbi5hcHBlbmQoY3Vyci0+bm9kZSgpKTsKLSAg
ICB9Ci0KLSAgICBzaXplX3QgcmVtb3ZlQ291bnQgPSBub2Rlc1RvUmVtb3ZlRnJvbUNoYWluLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbW92ZUNvdW50OyArK2kpIHsKLSAg
ICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbltpXS0+c2V0SG92ZXJlZChmYWxzZSk7Ci0gICAg
fQotCi0gICAgc2l6ZV90IGFkZENvdW50ID0gbm9kZXNUb0FkZFRvQ2hhaW4uc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWRkQ291bnQ7ICsraSkgewotICAgICAgICBpZiAoYWxs
b3dBY3RpdmVDaGFuZ2VzKQotICAgICAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW5baV0tPnNldEFj
dGl2ZSh0cnVlKTsKLSAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW5baV0tPnNldEhvdmVyZWQodHJ1
ZSk7Ci0gICAgfQotfQotCiAvLyBIZWxwZXIgZm9yIHRoZSBzb3J0aW5nIG9mIGxheWVycyBieSB6
LWluZGV4Lgogc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVaSW5kZXgoUmVuZGVyTGF5ZXIqIGZp
cnN0LCBSZW5kZXJMYXllciogc2Vjb25kKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAppbmRleCAzMmQ0MWUzYmE5YWY5YjMzNTVjNWRjOTcxNGZmM2M1MDVhY2FlY2JkLi4w
ZDE0NmNhZmM2YzRlZDQ2YWFhMDI1NzIwMjFiMmM2ZWQyZTIxM2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNTYzLDggKzU2Myw2IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAgICAgc3RhdGljIElu
dFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqLCBjb25zdCBSZW5k
ZXJMYXllciogYW5jZXN0b3JMYXllciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1
bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKTsKICAgICAKLSAgICB2b2lkIHVwZGF0ZUhvdmVy
QWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7Ci0KICAg
ICAvLyBXQVJOSU5HOiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRoZSBwYXJl
bnQgYXMgdGhpcyBpcyB3aGF0IHVwZGF0ZUxheWVyUG9zaXRpb25zIGV4cGVjdHMuCiAgICAgTGF5
b3V0UG9pbnQgY29tcHV0ZU9mZnNldEZyb21Sb290KGJvb2wmIGhhc0xheWVyT2Zmc2V0KSBjb25z
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDUzYTFiNjQ4
Yjg1YjJhYzA2YmFhOWM5ZGYwNzAwOGY5NzNlZmVhYmUuLmVlZWRjMzAzNzRjMWM1MDM2NzY3YzZi
OTI2OTQzZTdhOTEwMjY3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAKQEAgLTg3LDcgKzg3LDE3IEBAIFJlbmRlclZpZXc6On5SZW5kZXJWaWV3KCkKIAogYm9vbCBS
ZW5kZXJWaWV3OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwg
cmVzdWx0KTsKKyAgICByZXR1cm4gaGl0VGVzdChyZXF1ZXN0LCByZXN1bHQuaGl0VGVzdExvY2F0
aW9uKCksIHJlc3VsdCk7Cit9CisKK2Jvb2wgUmVuZGVyVmlldzo6aGl0VGVzdChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbiwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0KQoreworICAgIGJvb2wgaW5zaWRlID0gbGF5ZXIoKS0+aGl0VGVz
dChyZXF1ZXN0LCBsb2NhdGlvbiwgcmVzdWx0KTsKKworICAgIC8vIE5leHQgc2V0IHVwIHRoZSBj
b3JyZWN0IDpob3Zlci86YWN0aXZlIHN0YXRlIGFsb25nIHRoZSBuZXcgY2hhaW4uCisgICAgZG9j
dW1lbnQoKS0+dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShyZXF1ZXN0LCByZXN1bHQpOworCisgICAg
cmV0dXJuIGluc2lkZTsKIH0KIAogdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlTG9naWNhbEhlaWdo
dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBmODRmMGRhYWZkYzQz
YTJhZTIzYTY5YmNiMWY5MGFiMGFiODI4OWJhLi41NDI4NmZjM2ZlOTQ3ZTA3OWY4ZTUxZDYwNjFm
ODFlZmZiZGVhZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTQ4
LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlbmRlclZpZXcoKTsKIAogICAgIGJv
b2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKKyAgICBi
b29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LCBIaXRUZXN0UmVzdWx0Jik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyVmlldyI7IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>