<?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>199514</bug_id>
          
          <creation_ts>2019-07-05 06:02:53 -0700</creation_ts>
          <short_desc>Clean up ScrollingTreeFixedNode::applyLayerPositions</short_desc>
          <delta_ts>2019-09-10 22:28:51 -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>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1550337</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-07-05 06:02:53 -0700</bug_when>
    <thetext>Avoid is&lt;FooNode&gt; tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550339</commentid>
    <comment_count>1</comment_count>
      <attachid>373490</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-07-05 06:16:04 -0700</bug_when>
    <thetext>Created attachment 373490
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550340</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-05 06:18:53 -0700</bug_when>
    <thetext>Attachment 373490 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h:60:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550341</commentid>
    <comment_count>3</comment_count>
      <attachid>373491</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-07-05 06:18:55 -0700</bug_when>
    <thetext>Created attachment 373491
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550342</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-05 06:21:48 -0700</bug_when>
    <thetext>Attachment 373491 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h:60:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550372</commentid>
    <comment_count>5</comment_count>
      <attachid>373491</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-05 08:49:44 -0700</bug_when>
    <thetext>Comment on attachment 373491
patch

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

Isn&apos;t it a bit late to be making refactoring changes like this?

&gt; Source/WebCore/page/scrolling/cocoa/ScrollingTreePositionedNode.mm:74
&gt; +        if (!children() || children()-&gt;size() != 1)
&gt; +            return true;

I don&apos;t understand this test. Why does the number of children affect behavior; can&apos;t a positioned node have any number of descendant fixed or sticky or scrolling nodes?

&gt; Source/WebCore/page/scrolling/cocoa/ScrollingTreePositionedNode.mm:76
&gt; +        // In there is a child node for the same layer then this node exits for scroll propagationg

&quot;If there&quot;. propagationg -&gt; propagation?

&gt; Source/WebCore/page/scrolling/cocoa/ScrollingTreePositionedNode.mm:83
&gt; +        if (is&lt;ScrollingTreeStickyNode&gt;(child))
&gt; +            return downcast&lt;ScrollingTreeStickyNode&gt;(child).layer() != m_layer;
&gt; +        if (is&lt;ScrollingTreeFixedNode&gt;(child))
&gt; +            return downcast&lt;ScrollingTreeFixedNode&gt;(child).layer() != m_layer;

Whether it&apos;s the same layer seems like implementation detail. I might make more layers in RenderLayerBacking and break this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550428</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-07-05 10:39:34 -0700</bug_when>
    <thetext>
&gt; I don&apos;t understand this test. Why does the number of children affect
&gt; behavior; can&apos;t a positioned node have any number of descendant fixed or
&gt; sticky or scrolling nodes?

This check...

&gt; &gt; Source/WebCore/page/scrolling/cocoa/ScrollingTreePositionedNode.mm:83
&gt; &gt; +        if (is&lt;ScrollingTreeStickyNode&gt;(child))
&gt; &gt; +            return downcast&lt;ScrollingTreeStickyNode&gt;(child).layer() != m_layer;
&gt; &gt; +        if (is&lt;ScrollingTreeFixedNode&gt;(child))
&gt; &gt; +            return downcast&lt;ScrollingTreeFixedNode&gt;(child).layer() != m_layer;
&gt; 
&gt; Whether it&apos;s the same layer seems like implementation detail. I might make
&gt; more layers in RenderLayerBacking and break this.

...along with these matches the tower build in RenderLayerCompositor::updateScrollCoordinationForLayer where we can have multiple scrolling tree nodes for the same layer. In this case the PositionedNode doesn&apos;t do any positioning, the sticky/fixed child node does. However it is still needed so that the scroll updates propagate correctly and that we can establish scrolling relations in UI process.

This is obviously not a good way to do things. I think we should combine Fixed/Sticky/Absolute into a single class and never have more than one node per layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550441</commentid>
    <comment_count>7</comment_count>
      <attachid>373491</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-07-05 11:06:53 -0700</bug_when>
    <thetext>Comment on attachment 373491
patch

Lets do this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569515</commentid>
    <comment_count>8</comment_count>
      <attachid>373491</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-10 06:26:36 -0700</bug_when>
    <thetext>Comment on attachment 373491
patch

How about now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569730</commentid>
    <comment_count>9</comment_count>
      <attachid>373491</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-10 16:39:36 -0700</bug_when>
    <thetext>Comment on attachment 373491
patch

My previous comments are still relevant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569839</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-10 22:28:51 -0700</bug_when>
    <thetext>&gt; My previous comments are still relevant.

I thought I answered it. Which part is still unclear?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373490</attachid>
            <date>2019-07-05 06:16:04 -0700</date>
            <delta_ts>2019-07-05 06:18:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fixed-delta-cleanup-2.patch</filename>
            <type>text/plain</type>
            <size>14652</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzE1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE5LTA3LTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBTY3JvbGxpbmdU
cmVlRml4ZWROb2RlOjphcHBseUxheWVyUG9zaXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1MTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBpczxGb29Ob2RlPiB0ZXN0cywgc2ltcGxp
ZnkgY29kZSwgYW5kIG1vdmUgdG93YXJkcyBjb21wdXRpbmcgZXZlcnl0aGluZyBkdXJpbmcgdHJl
ZSB3YWxrCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHBhcmVudCB0cmF2ZXJzYWwuCisKKyAg
ICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2Rl
OjpmaXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxhc3RDb21taXQgY29uc3QpOgorCisgICAgICAgIE1h
a2UgdmlydHVhbC4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6
bGF5ZXIpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVGaXhl
ZE5vZGUubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjphcHBs
eUxheWVyUG9zaXRpb25zKToKKworICAgICAgICBDYWxsIHZpcnR1YWwgZml4ZWRQb3NpdGlvbkRl
bHRhU2luY2VMYXN0Q29tbWl0IGluc3RlYWQgb2YgZG9pbmcgaXM8Rm9vTm9kZT4gdGVzdHMuCisg
ICAgICAgIFJldmVyc2UgdGhlIGRvdWJsZS1uZWdhdGl2ZSBzaWducy4KKworICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZS5o
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbFByb3h5Tm9kZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbFByb3h5Tm9kZTo6Zml4ZWRQb3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZTo6c2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQgY29uc3QpOiBEZWxldGVkLgorCisgICAgICAg
IFJlbmFtZSB0byBpbmRpY2F0ZSB0aGlzIGlzIHNwZWNpZmljYWxseSBhYm91dCBmaXhlZCBwb3Np
dGlvbmluZyAoYWZmZWN0cyBzaWducykuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jb2Nv
YS9TY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9jb2NvYS9TY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUubW06CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OmZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFz
dENvbW1pdCBjb25zdCk6CisKKyAgICAgICAgTm8gZGVsdGEgaWYgbGF5ZXIgcG9zaXRpb25pbmcg
aXMgaGFuZGxlZCBieSBhIGNoaWxkLgorICAgICAgICBUaGlzIGxvZ2ljIG1vdmVzIGhlcmUgZnJv
bSBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjphcHBseUxheWVyUG9zaXRpb25zLgorCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OmFwcGx5TGF5ZXJQb3NpdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlOjpzY3Jv
bGxEZWx0YVNpbmNlTGFzdENvbW1pdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaDoKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpmaXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxh
c3RDb21taXQgY29uc3QpOgorCisgICAgICAgIFJldmVyc2UgdGhlIHNpZ24gdG8gYmUgY29uc2lz
dGVudCB3aXRoIHRoZSByZXN0LgorCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6c2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQgY29uc3QpOiBEZWxldGVkLgorCiAy
MDE5LTA3LTA1ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0FUS10gRG8gbm90IHVzZSBDIGxpbmthZ2UgZm9yIGZ1bmN0aW9ucyB1c2luZyBD
KysgZmVhdHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZU5vZGUuaAkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAs
NiArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRQb2ludCBwYXJlbnRUb0xvY2Fs
UG9pbnQoTGF5b3V0UG9pbnQgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIHBvaW50OyB9CiAgICAgdmly
dHVhbCBMYXlvdXRQb2ludCBsb2NhbFRvQ29udGVudHNQb2ludChMYXlvdXRQb2ludCBwb2ludCkg
Y29uc3QgeyByZXR1cm4gcG9pbnQ7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlKiBzY3JvbGxpbmdOb2RlRm9yUG9pbnQoTGF5b3V0UG9pbnQpIGNvbnN0OworICAgIHZp
cnR1YWwgRmxvYXRTaXplIGZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0
IHsgcmV0dXJuIHsgfTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nVHJlZU5vZGUoU2Ny
b2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAyNDcwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IGN1cnJlbnRTY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFNjcm9sbFBvc2l0aW9uOyB9CiAgICAg
RmxvYXRQb2ludCBjdXJyZW50U2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX2N1cnJlbnRTY3JvbGxQb3NpdGlvbiwg
dG9GbG9hdFNpemUobV9zY3JvbGxPcmlnaW4pKTsgfQogICAgIEZsb2F0UG9pbnQgbGFzdENvbW1p
dHRlZFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q29tbWl0dGVkU2Nyb2xs
UG9zaXRpb247IH0KLSAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRTY3JvbGxQb3NpdGlvbiAtIG1fbGFzdENvbW1pdHRlZFNj
cm9sbFBvc2l0aW9uOyB9CisgICAgRmxvYXRTaXplIGZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFz
dENvbW1pdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY3VycmVudFNjcm9sbFBvc2l0aW9u
IC0gbV9sYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb247IH0KIAogICAgIC8vIFRoZXNlIGFyZSBp
bXBlcmF0aXZlOyB0aGV5IGFkanVzdCB0aGUgc2Nyb2xsaW5nIGxheWVycy4KICAgICB2b2lkIHNj
cm9sbFRvKGNvbnN0IEZsb2F0UG9pbnQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwg
U2Nyb2xsUG9zaXRpb25DbGFtcCA9IFNjcm9sbFBvc2l0aW9uQ2xhbXA6OlRvQ29udGVudEVkZ2Vz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9jb2NvYS9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgJKHJldmlzaW9uIDI0NzA5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IH5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCk7CiAKKyAgICBDQUxheWVyICpsYXllcigpIHsgcmV0
dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUubW0JKHJldmlzaW9uIDI0NzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTcxLDUyICs3MSwyMSBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNvbW1pdFN0
YXRlCiB2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmFwcGx5TGF5ZXJQb3NpdGlvbnMoKQog
ewogICAgIGF1dG8gY29tcHV0ZUxheWVyUG9zaXRpb24gPSBbJl0gewotICAgICAgICBGbG9hdFNp
emUgb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAgICAgICAgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUq
IGxhc3RTdGlja3lOb2RlID0gbnVsbHB0cjsKKyAgICAgICAgRmxvYXRTaXplIGRlbHRhOwogICAg
ICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gcGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGU+KCphbmNlc3RvcikpIHsKICAgICAgICAgICAgICAgICAvLyBGaXhl
ZCBub2RlcyBhcmUgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGUgY29udGFpbmluZyBmcmFtZSBz
Y3JvbGxpbmcgbm9kZS4KICAgICAgICAgICAgICAgICAvLyBXZSBiYWlsIG91dCBhZnRlciBmaW5k
aW5nIG9uZS4KICAgICAgICAgICAgICAgICBhdXRvIGxheW91dFZpZXdwb3J0ID0gZG93bmNhc3Q8
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKmFuY2VzdG9yKS5sYXlvdXRWaWV3cG9y
dCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25G
b3JWaWV3cG9ydFJlY3QobGF5b3V0Vmlld3BvcnQpIC0gb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU+KCphbmNlc3RvcikpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBrZWVwIHRo
ZSBsYXllciBzdGlsbCBkdXJpbmcgYXN5bmMgc2Nyb2xsaW5nIHdlIGFkanVzdCBieSBob3cgbXVj
aCB0aGUgcG9zaXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGF5b3V0LgotICAgICAgICAgICAgICAg
IGF1dG8mIG92ZXJmbG93Tm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGU+KCphbmNlc3Rvcik7Ci0gICAgICAgICAgICAgICAgb3ZlcmZsb3dTY3JvbGxEZWx0
YSAtPSBvdmVyZmxvd05vZGUuc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzPFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZT4oKmFuY2VzdG9yKSkgewotICAgICAg
ICAgICAgICAgIC8vIFRvIGtlZXAgdGhlIGxheWVyIHN0aWxsIGR1cmluZyBhc3luYyBzY3JvbGxp
bmcgd2UgYWRqdXN0IGJ5IGhvdyBtdWNoIHRoZSBwb3NpdGlvbiBoYXMgY2hhbmdlZCBzaW5jZSBs
YXlvdXQuCi0gICAgICAgICAgICAgICAgYXV0byYgb3ZlcmZsb3dOb2RlID0gZG93bmNhc3Q8U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlPigqYW5jZXN0b3IpOwotICAgICAgICAg
ICAgICAgIG92ZXJmbG93U2Nyb2xsRGVsdGEgLT0gb3ZlcmZsb3dOb2RlLnNjcm9sbERlbHRhU2lu
Y2VMYXN0Q29tbWl0KCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChpczxTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU+KCphbmNl
c3RvcikpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBwb3NpdGlvbmluZ0FuY2VzdG9yID0gZG93
bmNhc3Q8U2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlPigqYW5jZXN0b3IpOwotICAgICAgICAg
ICAgICAgIC8vIFNlZSBpZiBzdGlja3kgbm9kZSBhbHJlYWR5IGhhbmRsZWQgdGhpcyBwb3NpdGlv
bmluZyBub2RlLgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNsdWRlIHBvc2l0aW9uaW5n
IG5vZGUgaW5mb3JtYXRpb24gdG8gc3RpY2t5L2ZpeGVkIG5vZGUgdG8gYXZvaWQgdGhlc2UgdGVz
dHMuCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RTdGlja3lOb2RlICYmIGxhc3RTdGlja3lOb2Rl
LT5sYXllcigpID09IHBvc2l0aW9uaW5nQW5jZXN0b3IubGF5ZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uaW5nQW5jZXN0b3Iu
bGF5ZXIoKSAhPSBtX2xheWVyKQotICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1Njcm9sbERl
bHRhIC09IHBvc2l0aW9uaW5nQW5jZXN0b3Iuc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGlzPFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlPigqYW5jZXN0b3IpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgc3RpY2t5Tm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1RyZWVTdGlja3lOb2Rl
PigqYW5jZXN0b3IpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93U2Nyb2xsRGVsdGEgKz0gc3Rp
Y2t5Tm9kZS5zY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgpOwotICAgICAgICAgICAgICAgIGxh
c3RTdGlja3lOb2RlID0gJnN0aWNreU5vZGU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkZvclZpZXdw
b3J0UmVjdChsYXlvdXRWaWV3cG9ydCkgKyBkZWx0YTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU+KCphbmNlc3RvcikpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgYW5jZXN0b3IgZml4ZWQgbm9kZSBoYXMgYWxyZWFkeSBhcHBsaWVk
IHRoZSBuZWVkZWQgY29ycmVjdGlvbnMgdG8gc2F5IHB1dC4KLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkgLSBvdmVyZmxvd1Nj
cm9sbERlbHRhOworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25BdExhc3RMYXlvdXQoKSArIGRlbHRhOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZWx0YSArPSBhbmNlc3Rvci0+Zml4ZWRQb3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0KCk7
CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biBGbG9hdFBvaW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2Nv
YS9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxQcm94eU5vZGUuaAkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgQ0FMYXllciAq
bGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9CiAKLSAgICBGbG9hdFNpemUg
c2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKSBjb25zdDsKKyAgICBGbG9hdFNpemUgZml4ZWRQ
b3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0KCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3Rl
ZDoKICAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxQcm94eU5v
ZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxQcm94eU5v
ZGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2Ev
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlLm1tCShyZXZpc2lvbiAyNDcwOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxQcm94eU5vZGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDExICs2NywxMSBA
QCB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kCiAgICAgfQogfQogCi1G
bG9hdFNpemUgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlOjpzY3JvbGxEZWx0
YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0CitGbG9hdFNpemUgU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsUHJveHlOb2RlOjpmaXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxhc3RDb21taXQoKSBjb25z
dAogewogICAgIGlmIChhdXRvKiBub2RlID0gc2Nyb2xsaW5nVHJlZSgpLm5vZGVGb3JJRChtX292
ZXJmbG93U2Nyb2xsaW5nTm9kZUlEKSkgewogICAgICAgICBpZiAoaXM8U2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZT4obm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oKm5vZGUpLnNjcm9sbERlbHRhU2lu
Y2VMYXN0Q29tbWl0KCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8U2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oKm5vZGUpLmZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFz
dENvbW1pdCgpOwogICAgIH0KIAogICAgIHJldHVybiB7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdU
cmVlUG9zaXRpb25lZE5vZGUuaAkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgVmVjdG9yPFNj
cm9sbGluZ05vZGVJRD4mIHJlbGF0ZWRPdmVyZmxvd1Njcm9sbGluZ05vZGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWxhdGVkT3ZlcmZsb3dTY3JvbGxpbmdOb2RlczsgfQogCi0gICAgRmxvYXRTaXpl
IHNjcm9sbERlbHRhU2luY2VMYXN0Q29tbWl0KCkgY29uc3Q7CisgICAgRmxvYXRTaXplIGZpeGVk
UG9zaXRpb25EZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRl
OgogICAgIFNjcm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xs
aW5nTm9kZUlEKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Nj
cm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUubW0JKHJl
dmlzaW9uIDI0NzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Nj
cm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3
LDMzIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlOjpjb21taXQKICAgICAgICAg
c2Nyb2xsaW5nVHJlZSgpLmFjdGl2ZVBvc2l0aW9uZWROb2RlcygpLmFkZCgqdGhpcyk7CiB9CiAK
LUZsb2F0U2l6ZSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OnNjcm9sbERlbHRhU2luY2VM
YXN0Q29tbWl0KCkgY29uc3QKK0Zsb2F0U2l6ZSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6
OmZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0CiB7CisgICAgYXV0byBz
aG91bGRQb3NpdGlvbkxheWVyID0gWyZdIHsKKyAgICAgICAgaWYgKCFjaGlsZHJlbigpIHx8IGNo
aWxkcmVuKCktPnNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgLy8gSW4gdGhlcmUgaXMgYSBjaGlsZCBub2RlIGZvciB0aGUgc2FtZSBsYXllciB0aGVuIHRo
aXMgbm9kZSBleGl0cyBmb3Igc2Nyb2xsIHByb3BhZ2F0aW9uZworICAgICAgICAvLyBhbmQgY29u
dGFpbmVyIGZpbmRpbmcgcHVycG9zZXMgb25seS4gVGhlIGNoaWxkIG5vZGUgaXMgcmVzcG9uc2li
bGUgZm9yIGxheWVyIHBvc2l0aW9uaW5nLgorICAgICAgICAvLyBGSVhNRTogQ29tYmluZSBwb3Np
dGlvbmluZyBub2RlIHR5cGVzIHRvIGF2b2lkIHRoaXMuCisgICAgICAgIGF1dG8mIGNoaWxkID0g
KmNoaWxkcmVuKCktPmF0KDApOworICAgICAgICBpZiAoaXM8U2Nyb2xsaW5nVHJlZVN0aWNreU5v
ZGU+KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZT4oY2hpbGQpLmxheWVyKCkgIT0gbV9sYXllcjsKKyAgICAgICAgaWYgKGlzPFNjcm9s
bGluZ1RyZWVGaXhlZE5vZGU+KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxT
Y3JvbGxpbmdUcmVlRml4ZWROb2RlPihjaGlsZCkubGF5ZXIoKSAhPSBtX2xheWVyOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBpZiAoIXNob3VsZFBvc2l0aW9uTGF5ZXIo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIEZsb2F0U2l6ZSBkZWx0YTsKICAgICBmb3Ig
KGF1dG8gbm9kZUlEIDogbV9yZWxhdGVkT3ZlcmZsb3dTY3JvbGxpbmdOb2RlcykgewogICAgICAg
ICBpZiAoYXV0byogbm9kZSA9IHNjcm9sbGluZ1RyZWUoKS5ub2RlRm9ySUQobm9kZUlEKSkgewog
ICAgICAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KG5v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgb3ZlcmZsb3dOb2RlID0gZG93bmNhc3Q8U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oKm5vZGUpOwotICAgICAgICAgICAgICAg
IGRlbHRhICs9IG92ZXJmbG93Tm9kZS5zY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgpOworICAg
ICAgICAgICAgICAgIGRlbHRhICs9IG92ZXJmbG93Tm9kZS5maXhlZFBvc2l0aW9uRGVsdGFTaW5j
ZUxhc3RDb21taXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTg1LDcg
KzEwNCw3IEBAIEZsb2F0U2l6ZSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OnMKIAogdm9p
ZCBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OmFwcGx5TGF5ZXJQb3NpdGlvbnMoKQogewot
ICAgIGF1dG8gZGVsdGEgPSBzY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgpOworICAgIGF1dG8g
ZGVsdGEgPSBmaXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxhc3RDb21taXQoKTsKICAgICBhdXRvIGxh
eWVyUG9zaXRpb24gPSBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKSAt
IGRlbHRhOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3Jv
bGxpbmdUcmVlUG9zaXRpb25lZE5vZGUgIiA8PCBzY3JvbGxpbmdOb2RlSUQoKSA8PCAiIGFwcGx5
TGF5ZXJQb3NpdGlvbnM6IG92ZXJmbG93IGRlbHRhICIgPDwgZGVsdGEgPDwgIiBtb3ZpbmcgbGF5
ZXIgdG8gIiA8PCBsYXllclBvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUu
aAkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29j
b2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSgpOwog
Ci0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhU2luY2VMYXN0Q29tbWl0KCkgY29uc3Q7CisgICAg
RmxvYXRTaXplIGZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgQ0FMYXllciAqbGF5ZXIoKSB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVT
dGlja3lOb2RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2NvY29hL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLm1tCShyZXZpc2lvbiAyNDcwOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9k
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEwICsxMTIsMTMgQEAgdm9pZCBTY3JvbGxpbmdU
cmVlU3RpY2t5Tm9kZTo6YXBwbHlMYXllcgogICAgIFttX2xheWVyIF93ZWJfc2V0TGF5ZXJUb3BM
ZWZ0UG9zaXRpb246bGF5ZXJQb3NpdGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0
KCldOwogfQogCi1GbG9hdFNpemUgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnNjcm9sbERlbHRh
U2luY2VMYXN0Q29tbWl0KCkgY29uc3QKK0Zsb2F0U2l6ZSBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9k
ZTo6Zml4ZWRQb3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0KCkgY29uc3QKIHsKICAgICBhdXRv
IGxheWVyUG9zaXRpb24gPSBjb21wdXRlTGF5ZXJQb3NpdGlvbigpOwotICAgIHJldHVybiBsYXll
clBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCk7Cisg
ICAgYXV0byBkZWx0YSA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRp
b25BdExhc3RMYXlvdXQoKTsKKworICAgIC8vIFN0aWNreSBub2RlcyBjb21wZW5zYXRlIGZvciBz
Y3JvbGxpbmcsIHNvIG5lZ2F0ZSB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIHJldHVybiAtZGVsdGE7
CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OmR1bXBQcm9wZXJ0aWVzKFRleHRT
dHJlYW0mIHRzLCBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikgY29u
c3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373491</attachid>
            <date>2019-07-05 06:18:55 -0700</date>
            <delta_ts>2019-09-10 06:26:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fixed-delta-cleanup-3.patch</filename>
            <type>text/plain</type>
            <size>14752</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzE1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE5LTA3LTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBTY3JvbGxpbmdU
cmVlRml4ZWROb2RlOjphcHBseUxheWVyUG9zaXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1MTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBpczxGb29Ob2RlPiB0ZXN0cywgc2ltcGxp
ZnkgY29kZSwgYW5kIG1vdmUgdG93YXJkcyBjb21wdXRpbmcgZXZlcnl0aGluZyBkdXJpbmcgdHJl
ZSB3YWxrCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHBhcmVudCB0cmF2ZXJzYWwuCisKKyAg
ICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2Rl
OjpmaXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxhc3RDb21taXQgY29uc3QpOgorCisgICAgICAgIE1h
a2UgdmlydHVhbC4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6
bGF5ZXIpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVGaXhl
ZE5vZGUubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjphcHBs
eUxheWVyUG9zaXRpb25zKToKKworICAgICAgICBDYWxsIHZpcnR1YWwgZml4ZWRQb3NpdGlvbkRl
bHRhU2luY2VMYXN0Q29tbWl0IGluc3RlYWQgb2YgZG9pbmcgaXM8Rm9vTm9kZT4gdGVzdHMuCisg
ICAgICAgIFJldmVyc2UgdGhlIGRvdWJsZS1uZWdhdGl2ZSBzaWducy4KKworICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZS5o
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbFByb3h5Tm9kZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbFByb3h5Tm9kZTo6Zml4ZWRQb3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZTo6c2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQgY29uc3QpOiBEZWxldGVkLgorCisgICAgICAg
IFJlbmFtZSB0byBpbmRpY2F0ZSB0aGlzIGlzIHNwZWNpZmljYWxseSBhYm91dCBmaXhlZCBwb3Np
dGlvbmluZyAoYWZmZWN0cyBzaWducykuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jb2Nv
YS9TY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9jb2NvYS9TY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUubW06CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OmZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFz
dENvbW1pdCBjb25zdCk6CisKKyAgICAgICAgTm8gZGVsdGEgaWYgbGF5ZXIgcG9zaXRpb25pbmcg
aXMgaGFuZGxlZCBieSBhIGNoaWxkLgorICAgICAgICBUaGlzIGxvZ2ljIG1vdmVzIGhlcmUgZnJv
bSBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjphcHBseUxheWVyUG9zaXRpb25zLgorCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU6OmFwcGx5TGF5ZXJQb3NpdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlOjpzY3Jv
bGxEZWx0YVNpbmNlTGFzdENvbW1pdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaDoKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpmaXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxh
c3RDb21taXQgY29uc3QpOgorCisgICAgICAgIFJldmVyc2UgdGhlIHNpZ24gdG8gYmUgY29uc2lz
dGVudCB3aXRoIHRoZSByZXN0LgorCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6c2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQgY29uc3QpOiBEZWxldGVkLgorCiAy
MDE5LTA3LTA1ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0FUS10gRG8gbm90IHVzZSBDIGxpbmthZ2UgZm9yIGZ1bmN0aW9ucyB1c2luZyBD
KysgZmVhdHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZU5vZGUuaAkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAs
NiArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRQb2ludCBwYXJlbnRUb0xvY2Fs
UG9pbnQoTGF5b3V0UG9pbnQgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIHBvaW50OyB9CiAgICAgdmly
dHVhbCBMYXlvdXRQb2ludCBsb2NhbFRvQ29udGVudHNQb2ludChMYXlvdXRQb2ludCBwb2ludCkg
Y29uc3QgeyByZXR1cm4gcG9pbnQ7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlKiBzY3JvbGxpbmdOb2RlRm9yUG9pbnQoTGF5b3V0UG9pbnQpIGNvbnN0OworICAgIHZp
cnR1YWwgRmxvYXRTaXplIGZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0
IHsgcmV0dXJuIHsgfTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nVHJlZU5vZGUoU2Ny
b2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAyNDcwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IGN1cnJlbnRTY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFNjcm9sbFBvc2l0aW9uOyB9CiAgICAg
RmxvYXRQb2ludCBjdXJyZW50U2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX2N1cnJlbnRTY3JvbGxQb3NpdGlvbiwg
dG9GbG9hdFNpemUobV9zY3JvbGxPcmlnaW4pKTsgfQogICAgIEZsb2F0UG9pbnQgbGFzdENvbW1p
dHRlZFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q29tbWl0dGVkU2Nyb2xs
UG9zaXRpb247IH0KLSAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRTY3JvbGxQb3NpdGlvbiAtIG1fbGFzdENvbW1pdHRlZFNj
cm9sbFBvc2l0aW9uOyB9CisgICAgRmxvYXRTaXplIGZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFz
dENvbW1pdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY3VycmVudFNjcm9sbFBvc2l0aW9u
IC0gbV9sYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb247IH0KIAogICAgIC8vIFRoZXNlIGFyZSBp
bXBlcmF0aXZlOyB0aGV5IGFkanVzdCB0aGUgc2Nyb2xsaW5nIGxheWVycy4KICAgICB2b2lkIHNj
cm9sbFRvKGNvbnN0IEZsb2F0UG9pbnQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwg
U2Nyb2xsUG9zaXRpb25DbGFtcCA9IFNjcm9sbFBvc2l0aW9uQ2xhbXA6OlRvQ29udGVudEVkZ2Vz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9jb2NvYS9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgJKHJldmlzaW9uIDI0NzA5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IH5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCk7CiAKKyAgICBDQUxheWVyICpsYXllcigpIHsgcmV0
dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUubW0JKHJldmlzaW9uIDI0NzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTcxLDUyICs3MSwyMSBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNvbW1pdFN0
YXRlCiB2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmFwcGx5TGF5ZXJQb3NpdGlvbnMoKQog
ewogICAgIGF1dG8gY29tcHV0ZUxheWVyUG9zaXRpb24gPSBbJl0gewotICAgICAgICBGbG9hdFNp
emUgb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAgICAgICAgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUq
IGxhc3RTdGlja3lOb2RlID0gbnVsbHB0cjsKKyAgICAgICAgRmxvYXRTaXplIGRlbHRhOwogICAg
ICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gcGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGU+KCphbmNlc3RvcikpIHsKICAgICAgICAgICAgICAgICAvLyBGaXhl
ZCBub2RlcyBhcmUgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGUgY29udGFpbmluZyBmcmFtZSBz
Y3JvbGxpbmcgbm9kZS4KICAgICAgICAgICAgICAgICAvLyBXZSBiYWlsIG91dCBhZnRlciBmaW5k
aW5nIG9uZS4KICAgICAgICAgICAgICAgICBhdXRvIGxheW91dFZpZXdwb3J0ID0gZG93bmNhc3Q8
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKmFuY2VzdG9yKS5sYXlvdXRWaWV3cG9y
dCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25G
b3JWaWV3cG9ydFJlY3QobGF5b3V0Vmlld3BvcnQpIC0gb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU+KCphbmNlc3RvcikpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBrZWVwIHRo
ZSBsYXllciBzdGlsbCBkdXJpbmcgYXN5bmMgc2Nyb2xsaW5nIHdlIGFkanVzdCBieSBob3cgbXVj
aCB0aGUgcG9zaXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGF5b3V0LgotICAgICAgICAgICAgICAg
IGF1dG8mIG92ZXJmbG93Tm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGU+KCphbmNlc3Rvcik7Ci0gICAgICAgICAgICAgICAgb3ZlcmZsb3dTY3JvbGxEZWx0
YSAtPSBvdmVyZmxvd05vZGUuc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzPFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZT4oKmFuY2VzdG9yKSkgewotICAgICAg
ICAgICAgICAgIC8vIFRvIGtlZXAgdGhlIGxheWVyIHN0aWxsIGR1cmluZyBhc3luYyBzY3JvbGxp
bmcgd2UgYWRqdXN0IGJ5IGhvdyBtdWNoIHRoZSBwb3NpdGlvbiBoYXMgY2hhbmdlZCBzaW5jZSBs
YXlvdXQuCi0gICAgICAgICAgICAgICAgYXV0byYgb3ZlcmZsb3dOb2RlID0gZG93bmNhc3Q8U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlPigqYW5jZXN0b3IpOwotICAgICAgICAg
ICAgICAgIG92ZXJmbG93U2Nyb2xsRGVsdGEgLT0gb3ZlcmZsb3dOb2RlLnNjcm9sbERlbHRhU2lu
Y2VMYXN0Q29tbWl0KCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChpczxTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGU+KCphbmNl
c3RvcikpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBwb3NpdGlvbmluZ0FuY2VzdG9yID0gZG93
bmNhc3Q8U2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlPigqYW5jZXN0b3IpOwotICAgICAgICAg
ICAgICAgIC8vIFNlZSBpZiBzdGlja3kgbm9kZSBhbHJlYWR5IGhhbmRsZWQgdGhpcyBwb3NpdGlv
bmluZyBub2RlLgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNsdWRlIHBvc2l0aW9uaW5n
IG5vZGUgaW5mb3JtYXRpb24gdG8gc3RpY2t5L2ZpeGVkIG5vZGUgdG8gYXZvaWQgdGhlc2UgdGVz
dHMuCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RTdGlja3lOb2RlICYmIGxhc3RTdGlja3lOb2Rl
LT5sYXllcigpID09IHBvc2l0aW9uaW5nQW5jZXN0b3IubGF5ZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uaW5nQW5jZXN0b3Iu
bGF5ZXIoKSAhPSBtX2xheWVyKQotICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1Njcm9sbERl
bHRhIC09IHBvc2l0aW9uaW5nQW5jZXN0b3Iuc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGlzPFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlPigqYW5jZXN0b3IpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgc3RpY2t5Tm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1RyZWVTdGlja3lOb2Rl
PigqYW5jZXN0b3IpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93U2Nyb2xsRGVsdGEgKz0gc3Rp
Y2t5Tm9kZS5zY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgpOwotICAgICAgICAgICAgICAgIGxh
c3RTdGlja3lOb2RlID0gJnN0aWNreU5vZGU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkZvclZpZXdw
b3J0UmVjdChsYXlvdXRWaWV3cG9ydCkgKyBkZWx0YTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU+KCphbmNlc3RvcikpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgYW5jZXN0b3IgZml4ZWQgbm9kZSBoYXMgYWxyZWFkeSBhcHBsaWVk
IHRoZSBuZWVkZWQgY29ycmVjdGlvbnMgdG8gc2F5IHB1dC4KLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkgLSBvdmVyZmxvd1Nj
cm9sbERlbHRhOworICAgICAgICAgICAgICAgIC8vIFRoZSBhbmNlc3RvciBmaXhlZCBub2RlIGhh
cyBhbHJlYWR5IGFwcGxpZWQgdGhlIG5lZWRlZCBjb3JyZWN0aW9ucyB0byBzdGF5IHB1dC4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5
b3V0KCkgKyBkZWx0YTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsdGEgKz0gYW5j
ZXN0b3ItPmZpeGVkUG9zaXRpb25EZWx0YVNpbmNlTGFzdENvbW1pdCgpOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2Rl
LmgJKHJldmlzaW9uIDI0NzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nv
Y29hL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIAogICAgIENBTGF5ZXIgKmxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQogCi0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhU2lu
Y2VMYXN0Q29tbWl0KCkgY29uc3Q7CisgICAgRmxvYXRTaXplIGZpeGVkUG9zaXRpb25EZWx0YVNp
bmNlTGFzdENvbW1pdCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09S
RV9FWFBPUlQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlKFNjcm9sbGluZ1Ry
ZWUmLCBTY3JvbGxpbmdOb2RlSUQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY29jb2EvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJveHlOb2RlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbFByb3h5Tm9kZS5tbQkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsUHJv
eHlOb2RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMSArNjcsMTEgQEAgdm9pZCBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZAogICAgIH0KIH0KIAotRmxvYXRTaXplIFNjcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZTo6c2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21t
aXQoKSBjb25zdAorRmxvYXRTaXplIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZTo6Zml4ZWRQb3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0KCkgY29uc3QKIHsKICAgICBpZiAo
YXV0byogbm9kZSA9IHNjcm9sbGluZ1RyZWUoKS5ub2RlRm9ySUQobV9vdmVyZmxvd1Njcm9sbGlu
Z05vZGVJRCkpIHsKICAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGU+KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGU+KCpub2RlKS5zY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgp
OworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGU+KCpub2RlKS5maXhlZFBvc2l0aW9uRGVsdGFTaW5jZUxhc3RDb21taXQoKTsKICAg
ICB9CiAKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY29jb2EvU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWRO
b2RlLmgJKHJldmlzaW9uIDI0NzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2NvY29hL1Njcm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxpbmdOb2RlSUQ+
JiByZWxhdGVkT3ZlcmZsb3dTY3JvbGxpbmdOb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRl
ZE92ZXJmbG93U2Nyb2xsaW5nTm9kZXM7IH0KIAotICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YVNp
bmNlTGFzdENvbW1pdCgpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBmaXhlZFBvc2l0aW9uRGVsdGFT
aW5jZUxhc3RDb21taXQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBTY3JvbGxp
bmdUcmVlUG9zaXRpb25lZE5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlUG9z
aXRpb25lZE5vZGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY29jb2EvU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlLm1tCShyZXZpc2lvbiAyNDcwOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlUG9z
aXRpb25lZE5vZGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDE0ICs2NywzMyBAQCB2b2lkIFNj
cm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZTo6Y29tbWl0CiAgICAgICAgIHNjcm9sbGluZ1RyZWUo
KS5hY3RpdmVQb3NpdGlvbmVkTm9kZXMoKS5hZGQoKnRoaXMpOwogfQogCi1GbG9hdFNpemUgU2Ny
b2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlOjpzY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNv
bnN0CitGbG9hdFNpemUgU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlOjpmaXhlZFBvc2l0aW9u
RGVsdGFTaW5jZUxhc3RDb21taXQoKSBjb25zdAogeworICAgIGF1dG8gc2hvdWxkUG9zaXRpb25M
YXllciA9IFsmXSB7CisgICAgICAgIGlmICghY2hpbGRyZW4oKSB8fCBjaGlsZHJlbigpLT5zaXpl
KCkgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIEluIHRoZXJl
IGlzIGEgY2hpbGQgbm9kZSBmb3IgdGhlIHNhbWUgbGF5ZXIgdGhlbiB0aGlzIG5vZGUgZXhpdHMg
Zm9yIHNjcm9sbCBwcm9wYWdhdGlvbmcKKyAgICAgICAgLy8gYW5kIGNvbnRhaW5lciBmaW5kaW5n
IHB1cnBvc2VzIG9ubHkuIFRoZSBjaGlsZCBub2RlIGlzIHJlc3BvbnNpYmxlIGZvciBsYXllciBw
b3NpdGlvbmluZy4KKyAgICAgICAgLy8gRklYTUU6IENvbWJpbmUgcG9zaXRpb25pbmcgbm9kZSB0
eXBlcyB0byBhdm9pZCB0aGlzLgorICAgICAgICBhdXRvJiBjaGlsZCA9ICpjaGlsZHJlbigpLT5h
dCgwKTsKKyAgICAgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlPihjaGlsZCkpCisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU+KGNoaWxk
KS5sYXllcigpICE9IG1fbGF5ZXI7CisgICAgICAgIGlmIChpczxTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlPihjaGlsZCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8U2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZT4oY2hpbGQpLmxheWVyKCkgIT0gbV9sYXllcjsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworCisgICAgaWYgKCFzaG91bGRQb3NpdGlvbkxheWVyKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisKICAgICBGbG9hdFNpemUgZGVsdGE7CiAgICAgZm9yIChhdXRvIG5vZGVJRCA6
IG1fcmVsYXRlZE92ZXJmbG93U2Nyb2xsaW5nTm9kZXMpIHsKICAgICAgICAgaWYgKGF1dG8qIG5v
ZGUgPSBzY3JvbGxpbmdUcmVlKCkubm9kZUZvcklEKG5vZGVJRCkpIHsKICAgICAgICAgICAgIGlm
IChpczxTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihub2RlKSkgewogICAgICAg
ICAgICAgICAgIGF1dG8mIG92ZXJmbG93Tm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGU+KCpub2RlKTsKLSAgICAgICAgICAgICAgICBkZWx0YSArPSBvdmVy
Zmxvd05vZGUuc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKTsKKyAgICAgICAgICAgICAgICBk
ZWx0YSArPSBvdmVyZmxvd05vZGUuZml4ZWRQb3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0KCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04NSw3ICsxMDQsNyBAQCBGbG9h
dFNpemUgU2Nyb2xsaW5nVHJlZVBvc2l0aW9uZWROb2RlOjpzCiAKIHZvaWQgU2Nyb2xsaW5nVHJl
ZVBvc2l0aW9uZWROb2RlOjphcHBseUxheWVyUG9zaXRpb25zKCkKIHsKLSAgICBhdXRvIGRlbHRh
ID0gc2Nyb2xsRGVsdGFTaW5jZUxhc3RDb21taXQoKTsKKyAgICBhdXRvIGRlbHRhID0gZml4ZWRQ
b3NpdGlvbkRlbHRhU2luY2VMYXN0Q29tbWl0KCk7CiAgICAgYXV0byBsYXllclBvc2l0aW9uID0g
bV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkgLSBkZWx0YTsKIAogICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nVHJlZVBvc2l0
aW9uZWROb2RlICIgPDwgc2Nyb2xsaW5nTm9kZUlEKCkgPDwgIiBhcHBseUxheWVyUG9zaXRpb25z
OiBvdmVyZmxvdyBkZWx0YSAiIDw8IGRlbHRhIDw8ICIgbW92aW5nIGxheWVyIHRvICIgPDwgbGF5
ZXJQb3NpdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgJKHJldmlzaW9uIDI0
NzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVTdGlja3lOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKTsKIAotICAgIEZsb2F0U2l6
ZSBzY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBmaXhl
ZFBvc2l0aW9uRGVsdGFTaW5jZUxhc3RDb21taXQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENB
TGF5ZXIgKmxheWVyKCkgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZS5tbQkocmV2aXNpb24gMjQ3MDkwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExMiwxMCArMTEyLDEzIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6
OmFwcGx5TGF5ZXIKICAgICBbbV9sYXllciBfd2ViX3NldExheWVyVG9wTGVmdFBvc2l0aW9uOmxh
eWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpXTsKIH0KIAotRmxv
YXRTaXplIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpzY3JvbGxEZWx0YVNpbmNlTGFzdENvbW1p
dCgpIGNvbnN0CitGbG9hdFNpemUgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OmZpeGVkUG9zaXRp
b25EZWx0YVNpbmNlTGFzdENvbW1pdCgpIGNvbnN0CiB7CiAgICAgYXV0byBsYXllclBvc2l0aW9u
ID0gY29tcHV0ZUxheWVyUG9zaXRpb24oKTsKLSAgICByZXR1cm4gbGF5ZXJQb3NpdGlvbiAtIG1f
Y29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgpOworICAgIGF1dG8gZGVsdGEg
PSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0
KCk7CisKKyAgICAvLyBTdGlja3kgbm9kZXMgY29tcGVuc2F0ZSBmb3Igc2Nyb2xsaW5nLCBzbyBu
ZWdhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICByZXR1cm4gLWRlbHRhOwogfQogCiB2b2lkIFNj
cm9sbGluZ1RyZWVTdGlja3lOb2RlOjpkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgU2Ny
b2xsaW5nU3RhdGVUcmVlQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0Cg==
</data>
<flag name="review"
          id="394082"
          type_id="1"
          status="?"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>