<?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>93475</bug_id>
          
          <creation_ts>2012-08-08 07:00:24 -0700</creation_ts>
          <short_desc>Floored and truncated rounding confused</short_desc>
          <delta_ts>2012-08-09 10:10:09 -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>Layout and Rendering</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>
          
          <blocked>23170</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>690277</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-08 07:00:24 -0700</bug_when>
    <thetext>The two rounding forms floor and truncate are mixed up in several places in the code, mostly in the subpixel layout code, but also in flooredIntPoint(FloatPoint). For most cases this is not a problem since truncate and floor are identical for positive numbers, they only differ for negative numbers, which are not as nearly as common in the WebCore layout code.

This bug currently only leads to minor pixel differences with subpixel layout enabled, but the fix for bug #23170 depends on it both with and without subpixel layout enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690284</commentid>
    <comment_count>1</comment_count>
      <attachid>157211</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-08 07:11:23 -0700</bug_when>
    <thetext>Created attachment 157211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690499</commentid>
    <comment_count>2</comment_count>
      <attachid>157211</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-08-08 10:45:54 -0700</bug_when>
    <thetext>Comment on attachment 157211
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        This patch changes several instances of floored rounding to do actual floored
&gt; +        rounding, and a fixes and cleans up several places using floored rounding.

What are you saying this changes? I&apos;m not sure what &quot;actual&quot; means here.

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:134
&gt; -    float x = floorf(rect.x().toFloat());
&gt; -    float y = floorf(rect.y().toFloat());
&gt; -    float width = ceilf(rect.maxX().toFloat()) - x;
&gt; -    float height = ceilf(rect.maxY().toFloat()) - y;
&gt; +    IntPoint location = flooredIntPoint(rect.minXMinYCorner());
&gt; +    IntPoint maxPoint = ceiledIntPoint(rect.maxXMaxYCorner());
&gt;  
&gt; -    return IntRect(clampToInteger(x), clampToInteger(y), 
&gt; -                   clampToInteger(width), clampToInteger(height));
&gt; +    return IntRect(location, maxPoint - location);

So much cleaner, well done!

&gt; Source/WebCore/rendering/RenderReplaced.cpp:291
&gt; -            m_intrinsicSize = flooredIntSize(intrinsicSize); // FIXME: This introduces precision errors. We should convert m_intrinsicSize to be a float.
&gt; +            m_intrinsicSize = IntSize(intrinsicSize.width(), intrinsicSize.height()); // FIXME: This introduces precision errors. We should convert m_intrinsicSize to be a float.

Why this change is correct isn&apos;t obvious to me. Since intrinsic size is never negative this doesn&apos;t seem to change any behavior. How about an explanation in the changelog?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690549</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-08 11:30:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 157211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157211&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        This patch changes several instances of floored rounding to do actual floored
&gt; &gt; +        rounding, and a fixes and cleans up several places using floored rounding.
&gt; 
&gt; What are you saying this changes? I&apos;m not sure what &quot;actual&quot; means here.
&gt; 
That is not clear I agree. I will remove &apos;actual&apos; and instead explain that some floor operations were previously doing rounding towards zero, when they should be rounding down (away from zero for negative numbers).

&gt; &gt; Source/WebCore/rendering/RenderReplaced.cpp:291
&gt; &gt; -            m_intrinsicSize = flooredIntSize(intrinsicSize); // FIXME: This introduces precision errors. We should convert m_intrinsicSize to be a float.
&gt; &gt; +            m_intrinsicSize = IntSize(intrinsicSize.width(), intrinsicSize.height()); // FIXME: This introduces precision errors. We should convert m_intrinsicSize to be a float.
&gt; 
&gt; Why this change is correct isn&apos;t obvious to me. Since intrinsic size is never negative this doesn&apos;t seem to change any behavior. How about an explanation in the changelog?

You are right, I should have left that unchanged. I was at one point considering removing all uses of flooredIntSize (around 3), but decided to not to include that in this patch. I guess I forgot to revert this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691406</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-09 05:20:48 -0700</bug_when>
    <thetext>Committed r125167: &lt;http://trac.webkit.org/changeset/125167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691535</commentid>
    <comment_count>5</comment_count>
      <attachid>157211</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-08-09 10:10:09 -0700</bug_when>
    <thetext>Comment on attachment 157211
Patch

Clearing flags.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157211</attachid>
            <date>2012-08-08 07:11:23 -0700</date>
            <delta_ts>2012-08-09 10:10:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93475-20120808161055.patch</filename>
            <type>text/plain</type>
            <size>18251</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTEzNWRmMjJmNTlkYjZj
ODI4MzU2ODllMGY5NGFlNWIxMTQ2YWE5ZC4uYWFlNzU0ZjhmM2ZlNjQyOGNhMjVkZTdkY2Y5ZWZk
MDk1YTI1YThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA4LTA4ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEZs
b29yZWQgYW5kIHRydW5jYXRlZCByb3VuZGVkIGNvbmZ1c2VkLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0NzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdGhlIGNvbW1vbiBtaXN0YWtlIG9mIGJl
bGlldmluZyB0cnVuY2F0ZWQgYW5kIGZsb29yZWQgcm91bmRpbmcgYXJlIHRoZSBzYW1lLgorICAg
ICAgICBUaGV5IGFyZSBvbmx5IGlkZW50aWNhbCBmb3IgcG9zaXRpdmUgbnVtYmVycywgbm90IGZv
ciBuZWdhdGl2ZSBudW1iZXJzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBzZXZlcmFs
IGluc3RhbmNlcyBvZiBmbG9vcmVkIHJvdW5kaW5nIHRvIGRvIGFjdHVhbCBmbG9vcmVkCisgICAg
ICAgIHJvdW5kaW5nLCBhbmQgYSBmaXhlcyBhbmQgY2xlYW5zIHVwIHNldmVyYWwgcGxhY2VzIHVz
aW5nIGZsb29yZWQgcm91bmRpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GcmFjdGlvbmFsTGF5
b3V0VW5pdC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21G
bG9hdEZsb29yKToKKyAgICAgICAgKEZyYWN0aW9uYWxMYXlvdXRVbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRVbml0OjpjZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWN0aW9uYWxMYXlvdXRVbml0OjpmbG9vcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6RmxvYXRQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Zmxvb3JlZEludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNlaWxlZEludFBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmZsb29yZWRJbnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NlZEludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRlZEludFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Zmxvb3JlZEludFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Zmxvb3JlZEludFBvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb29yZWRJbnRQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpmbG9vcmVkRnJhY3Rpb25hbExheW91dFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQb2ludCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5j
bG9zaW5nSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdGcmFjdGlvbmFsTGF5
b3V0UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNp
emUuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb29yZWRJbnRTaXplKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6Oklu
dFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Zmxvb3JlZExheW91dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZsb29yVG9JbnQp
OgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlZ2VyVmFsdWUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVy
dFRvTGF5ZXJDb29yZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZUFzcGVjdFJhdGlvSW5m
b3JtYXRpb25Gb3JSZW5kZXJCb3gpOgorCiAyMDEyLTA4LTA4ICBLZW50YXJvIEhhcmEgIDxoYXJh
a2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFBhc3MgSXNvbGF0ZSB0byBBcnJheVZh
bHVlIGFuZCBEaWN0aW9uYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25h
bExheW91dFVuaXQuaAppbmRleCA1OTQ0MDM1YjVmNzkxN2QyMjcwYmE3MTllMGM0NThiZmQ1NWUx
Nzk3Li5kODFhZWYyNGI2MzIxNTFlMWU1YTM2YzQxNDZhNDljZTFmODUwOGIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0LmgKQEAgLTk1LDYgKzk1
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCisgICAgc3RhdGljIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKKyAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgdjsKKyAgICAgICAgdi5tX3ZhbHVlID0gZmxvb3JmKHZhbHVlICoga0Zp
eGVkUG9pbnREZW5vbWluYXRvcik7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKwogICAgIHN0
YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRSb3VuZChmbG9hdCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICh2YWx1ZSA+PSAwKQpAQCAtMTQ2LDkgKzE1NCw5IEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgICAgICBpZiAo
bV92YWx1ZSA+IDApCisgICAgICAgIGlmIChtX3ZhbHVlID49IDApCiAgICAgICAgICAgICByZXR1
cm4gKG1fdmFsdWUgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC0gMSkgLyBrRml4ZWRQb2ludERl
bm9taW5hdG9yOwotICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSBrRml4ZWRQb2ludERlbm9taW5h
dG9yICsgMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gdG9JbnQo
KTsKICNlbHNlCiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogI2VuZGlmCkBAIC0xNjYsNyArMTc0
LDEzIEBAIHB1YmxpYzoKIAogICAgIGludCBmbG9vcigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gdG9JbnQoKTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgICAgICBpZiAo
bV92YWx1ZSA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHRvSW50KCk7CisgICAgICAgIHJldHVy
biAobV92YWx1ZSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgKyAxKSAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7CisjZWxzZQorICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyNlbmRpZgogICAgIH0K
IAogICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgeyByZXR1cm4gMS4wZiAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaAppbmRleCBhNjAxYTlkZmZhYTE4ODljZjM0MzliMmQ4ZmY0YjVlMDY0NzVlZjdhLi45
MGU2YzRiNmRkYTczNDEwNDYwOTI5YzEwMDZiYjY3Mzk5MmMzYmQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC03Nyw2ICs3Nyw3IEBAIHB1
YmxpYzoKICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkg
eyB9CiAgICAgRmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQoY29u
c3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgZXhwbGljaXQgRmxvYXRQb2ludChjb25z
dCBGbG9hdFNpemUmIHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgp
KSB7IH0KIAogICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50
KCk7IH0KIApAQCAtMjQzLDE3ICsyNDQsMjIgQEAgaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25z
dCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiKQogCiBpbmxpbmUgSW50UG9pbnQg
cm91bmRlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJuIEludFBv
aW50KHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueCgpKSksIHN0YXRpY19jYXN0PGludD4ocm91
bmRmKHAueSgpKSkpOworICAgIHJldHVybiBJbnRQb2ludChjbGFtcFRvSW50ZWdlcihyb3VuZGYo
cC54KCkpKSwgY2xhbXBUb0ludGVnZXIocm91bmRmKHAueSgpKSkpOwogfQogCiBpbmxpbmUgSW50
UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJu
IEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgp
KSk7CisgICAgcmV0dXJuIEludFBvaW50KGNsYW1wVG9JbnRlZ2VyKGZsb29yZihwLngoKSkpLCBj
bGFtcFRvSW50ZWdlcihmbG9vcmYocC55KCkpKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCBjZWls
ZWRJbnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChj
bGFtcFRvSW50ZWdlcihjZWlsZihwLngoKSkpLCBjbGFtcFRvSW50ZWdlcihjZWlsZihwLnkoKSkp
KTsKIH0KIAogaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYXRQb2ludCYg
cCkKIHsKLSAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGlj
X2Nhc3Q8aW50PihwLnkoKSkpOworICAgIHJldHVybiBJbnRTaXplKGNsYW1wVG9JbnRlZ2VyKGZs
b29yZihwLngoKSkpLCBjbGFtcFRvSW50ZWdlcihmbG9vcmYocC55KCkpKSk7CiB9CiAKIGZsb2F0
IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZs
b2F0JiBjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwCmluZGV4IGI0M2ZjNzRhMjdhNTg0NmNiZGZkOWUyNDkxMWIxY2E0MjgyYjExNTMuLmYzMWM2
Y2NkZjFjODFmNDU5ZTFlZWFjNDljNDNiMjk2ZTE4NDc4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE0LDI2ICsyMTQsMjAgQEAg
dm9pZCBGbG9hdFJlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBG
bG9hdFBvaW50JiBwMSwgY29uc3QgRmwKIAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBmbG9hdCBsZWZ0ID0gZmxvb3JmKHJlY3QueCgpKTsK
LSAgICBmbG9hdCB0b3AgPSBmbG9vcmYocmVjdC55KCkpOwotICAgIGZsb2F0IHdpZHRoID0gY2Vp
bGYocmVjdC5tYXhYKCkpIC0gbGVmdDsKLSAgICBmbG9hdCBoZWlnaHQgPSBjZWlsZihyZWN0Lm1h
eFkoKSkgLSB0b3A7Ci0gICAgCi0gICAgcmV0dXJuIEludFJlY3QoY2xhbXBUb0ludGVnZXIobGVm
dCksIGNsYW1wVG9JbnRlZ2VyKHRvcCksIAotICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRl
Z2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7CisgICAgSW50UG9pbnQgbG9jYXRp
b24gPSBmbG9vcmVkSW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBJbnRQb2lu
dCBtYXhQb2ludCA9IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7CisKKyAg
ICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7CiB9CiAKIElu
dFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpbnQg
eCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7Ci0gICAgaW50IHkgPSBjbGFtcFRv
SW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOwotICAgIGZsb2F0IG1heFggPSBjbGFtcFRvSW50ZWdl
cihmbG9vcmYocmVjdC5tYXhYKCkpKTsKLSAgICBmbG9hdCBtYXhZID0gY2xhbXBUb0ludGVnZXIo
Zmxvb3JmKHJlY3QubWF4WSgpKSk7Ci0gICAgLy8gQSByZWN0IG9mIHdpZHRoIDAgc2hvdWxkIG5v
dCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWlsL2Zsb29yLgotICAgIGludCB3
aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDApOwotICAgIGludCBoZWlnaHQg
PSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKLQotICAgIHJldHVybiBJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFBvaW50IGxvY2F0aW9uID0gY2VpbGVkSW50
UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBJbnRQb2ludCBtYXhQb2ludCA9IGZs
b29yZWRJbnRQb2ludChyZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgIEludFNpemUgc2l6ZSA9
IG1heFBvaW50IC0gbG9jYXRpb247CisgICAgc2l6ZS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisK
KyAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgc2l6ZSk7CiB9CiAKIEludFJlY3Qgcm91bmRl
ZEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaAppbmRleCA1ZjAxZmJiMTJiOTI3MTYyMTExOTkxMjk2YzQ0
YWVlN2Q3MzU2MmExLi5iMWQ3MmE1OGRjZjJhY2QxODgxNTczNTY2NjMyM2Q4Y2Y2YjcwYTk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaApAQCAtMTg2
LDEyICsxODYsMTIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFNpemUmIGEs
IGNvbnN0IEZsb2F0U2l6ZSYgYikKIAogaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29u
c3QgRmxvYXRTaXplJiBwKQogewotICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4o
cm91bmRmKHAud2lkdGgoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLmhlaWdodCgpKSkp
OworICAgIHJldHVybiBJbnRTaXplKGNsYW1wVG9JbnRlZ2VyKHJvdW5kZihwLndpZHRoKCkpKSwg
Y2xhbXBUb0ludGVnZXIocm91bmRmKHAuaGVpZ2h0KCkpKSk7CiB9CiAKIGlubGluZSBJbnRTaXpl
IGZsb29yZWRJbnRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcCkKIHsKLSAgICByZXR1cm4gSW50U2l6
ZShzdGF0aWNfY2FzdDxpbnQ+KHAud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4ocC5oZWlnaHQo
KSkpOworICAgIHJldHVybiBJbnRTaXplKGNsYW1wVG9JbnRlZ2VyKGZsb29yZihwLndpZHRoKCkp
KSwgY2xhbXBUb0ludGVnZXIoZmxvb3JmKHAuaGVpZ2h0KCkpKSk7CiB9CiAKIGlubGluZSBJbnRT
aXplIGV4cGFuZGVkSW50U2l6ZShjb25zdCBGbG9hdFNpemUmIHApCkBAIC0yMDEsNyArMjAxLDcg
QEAgaW5saW5lIEludFNpemUgZXhwYW5kZWRJbnRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcCkKIAog
aW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGbG9hdFNpemUmIHApCiB7Ci0g
ICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocC53aWR0aCgpKSwgc3RhdGljX2Nh
c3Q8aW50PihwLmhlaWdodCgpKSk7CisgICAgcmV0dXJuIEludFBvaW50KGNsYW1wVG9JbnRlZ2Vy
KGZsb29yZihwLndpZHRoKCkpKSwgY2xhbXBUb0ludGVnZXIoZmxvb3JmKHAuaGVpZ2h0KCkpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKaW5kZXggMjY1NTBi
OTZiNTUwYTMzZmZmNWQzMzdiYzI4ZjY0YTk2M2FmNTQ3ZC4uZmM4MzBlNjhkMWE0M2I1MDdkMzEw
ZDliZWYyODcxOGY3ZjI2YzNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKQEAgLTE1OSw3ICsxNTksNyBA
QCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgdG9TaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgYSkKIAogaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54
KCkudG9JbnQoKSwgcG9pbnQueSgpLnRvSW50KCkpOworICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCkuZmxvb3IoKSwgcG9pbnQueSgpLmZsb29yKCkpOwogfQogCiBpbmxpbmUgSW50UG9pbnQg
cm91bmRlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCkBAIC0x
NzcsNiArMTc3LDE2IEBAIGlubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQb2ludChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQogICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCku
Y2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsKIH0KIAoraW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBmbG9vcmVkRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7
CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6
ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxv
b3IocC55KCkpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZWlsZWRGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAu
eCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC55KCkpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFBvaW50
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRSZWN0LmNwcAppbmRleCA3YzkyNTU2NGVmMzFiYTE3MzhiZmQyNzkwNjZhYjQ1
MzZiNDE2ZjQxLi43NmMwMDI2MDFkZjJjYzQwNmM5YzdkMzRkNWE2YzYwODJhNjY0ZDc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25h
bExheW91dFJlY3QuY3BwCkBAIC0xMjgsMjEgKzEyOCwxOSBAQCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYgcmVjdHMpCiAK
IEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVj
dCkKIHsKLSAgICBmbG9hdCB4ID0gZmxvb3JmKHJlY3QueCgpLnRvRmxvYXQoKSk7Ci0gICAgZmxv
YXQgeSA9IGZsb29yZihyZWN0LnkoKS50b0Zsb2F0KCkpOwotICAgIGZsb2F0IHdpZHRoID0gY2Vp
bGYocmVjdC5tYXhYKCkudG9GbG9hdCgpKSAtIHg7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYo
cmVjdC5tYXhZKCkudG9GbG9hdCgpKSAtIHk7CisgICAgSW50UG9pbnQgbG9jYXRpb24gPSBmbG9v
cmVkSW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBJbnRQb2ludCBtYXhQb2lu
dCA9IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7CiAKLSAgICByZXR1cm4g
SW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwgY2xhbXBUb0ludGVnZXIoeSksIAotICAgICAgICAg
ICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7
CisgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOwogfQog
CiBGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QocmVjdC54KCksIHJlY3QueSgpLAotICAgICAgICAg
ICAgICAgICAgICAgcmVjdC5tYXhYKCkgLSByZWN0LngoKSArIEZyYWN0aW9uYWxMYXlvdXRVbml0
OjplcHNpbG9uKCksCi0gICAgICAgICAgICAgICAgICAgICByZWN0Lm1heFkoKSAtIHJlY3QueSgp
ICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVwc2lsb24oKSk7CisgICAgRnJhY3Rpb25hbExheW91
dFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChyZWN0Lm1pblhN
aW5ZQ29ybmVyKCkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhQb2ludCA9IGNlaWxl
ZEZyYWN0aW9uYWxMYXlvdXRQb2ludChyZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworCisgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGxvY2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsK
ICNlbHNlCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRT
aXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oCmluZGV4IDRlZDk3ZTM0OTQ0MTE5YTE5YzI3ZGVmNTBjOWJhYjEwNWNlZTk1ZTAuLjEw
NzFkOGFlMzljMDA5MTNjMTlkMThiZWJhYzg2YmU2NjUzMTE2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaApA
QCAtMTUxLDcgKzE1MSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplCiAKIGlubGluZSBJbnRT
aXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQogewotICAg
IHJldHVybiBJbnRTaXplKHMud2lkdGgoKS50b0ludCgpLCBzLmhlaWdodCgpLnRvSW50KCkpOwor
ICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5mbG9vcigpLCBzLmhlaWdodCgpLmZsb29yKCkp
OwogfQogCiBpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5j
cHAKaW5kZXggZGZhMmY5MWYxOGE1OTczZWM4ZmE5M2FkNWM1OGZkOTY1YmRkNTRiOC4uZmQxZTUw
OTQ5MTJiZDI4ZWUyMzljNjNmM2Y3MGY0NTlkMWE2MzFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKQEAgLTM2LDE0ICszNiwxNCBAQCB1c2luZyBz
dGQ6Om1pbjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW50UmVjdDo6SW50UmVjdChjb25zdCBG
bG9hdFJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHN0YXRpY19jYXN0PGludD4o
ci54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHIueSgpKSkpCi0gICAgLCBtX3NpemUoSW50U2l6ZShz
dGF0aWNfY2FzdDxpbnQ+KHIud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oci5oZWlnaHQoKSkp
KQorICAgIDogbV9sb2NhdGlvbihjbGFtcFRvSW50ZWdlcihyLngoKSksIGNsYW1wVG9JbnRlZ2Vy
KHIueSgpKSkKKyAgICAsIG1fc2l6ZShjbGFtcFRvSW50ZWdlcihyLndpZHRoKCkpLCBjbGFtcFRv
SW50ZWdlcihyLmhlaWdodCgpKSkKIHsKIH0KIAogSW50UmVjdDo6SW50UmVjdChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgcikKLSAgICA6IG1fbG9jYXRpb24oZmxvb3JlZEludFBvaW50KHIu
bG9jYXRpb24oKSkpCi0gICAgLCBtX3NpemUoZmxvb3JlZEludFNpemUoci5zaXplKCkpKQorICAg
IDogbV9sb2NhdGlvbihyLngoKSwgci55KCkpCisgICAgLCBtX3NpemUoci53aWR0aCgpLCByLmhl
aWdodCgpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCmluZGV4
IDNiOGZmNTMwOGY2OTM2NTQ3YjgxYjkxMzVkNWE2M2JlMjhiMzY1ODIuLjUxOTY3ZjhlOTdjYmY1
ZDJhYWY5YzQ2ZDQxMzJhMTRhOTU2MGE5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRUeXBlcy5oCkBAIC05MSwxNyArOTEsMTIgQEAgaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRM
YXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogCiBpbmxpbmUgTGF5b3V0UG9pbnQgZmxv
b3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJuIExheW91
dFBvaW50KHAueCgpLCBwLnkoKSk7CisgICAgcmV0dXJuIGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0
UG9pbnQocCk7CiB9CiAKIGlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRTaXplJiBzKQogewotICAgIHJldHVybiBMYXlvdXRQb2ludChzLndpZHRoKCksIHMu
aGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6ZSBmbG9vcmVkTGF5b3V0U2l6ZShjb25z
dCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBMYXlvdXRTaXplKHAueCgpLCBwLnkoKSk7
CisgICAgcmV0dXJuIGZsb29yZWRMYXlvdXRQb2ludChGbG9hdFBvaW50KHMpKTsKIH0KIAogaW5s
aW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFsdWUpCkBAIC0xMTEsNyArMTA2LDcgQEAg
aW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFsdWUpCiAKIGlubGluZSBpbnQgZmxv
b3JUb0ludChMYXlvdXRVbml0IHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS50b0ludCgpOwor
ICAgIHJldHVybiB2YWx1ZS5mbG9vcigpOwogfQogCiBpbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVk
TGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKQEAgLTE2NCw3ICsxNTksNyBAQCBpbmxpbmUgSW50UmVj
dCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFBvaW50IGxvY2F0aW9uLCBMYXlvdXRTaXplIHNp
emUpCiAKIGlubGluZSBib29sIGlzSW50ZWdlclZhbHVlKGNvbnN0IExheW91dFVuaXQgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIHZhbHVlLmZsb29yKCkgPT0gdmFsdWU7CisgICAgcmV0dXJuIHZhbHVl
LnRvSW50KCkgPT0gdmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGMyYjY3NjZjYTUxOTk1Yjg1ZGNj
NzcxZTk4NWRhOGViZDI5NGU4NDMuLjFiOGNiYjE3OGMxZjg3ZDMwZTQ0NmFhZGRkOTA3N2EwMzg4
OWUyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTQ0
Niw3ICsxNDQ2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMoY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIExheW91dFAKICAgICAgICAgLy8gSWYgdGhl
IGZpeGVkIGxheWVyJ3MgY29udGFpbmVyIGlzIHRoZSByb290LCBqdXN0IGFkZCBpbiB0aGUgb2Zm
c2V0IG9mIHRoZSB2aWV3LiBXZSBjYW4gb2J0YWluIHRoaXMgYnkgY2FsbGluZwogICAgICAgICAv
LyBsb2NhbFRvQWJzb2x1dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4KICAgICAgICAgRmxvYXRQb2lu
dCBhYnNQb3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCB0cnVl
KTsKLSAgICAgICAgbG9jYXRpb24gKz0gZmxvb3JlZExheW91dFNpemUoYWJzUG9zKTsKKyAgICAg
ICAgbG9jYXRpb24gKz0gTGF5b3V0U2l6ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAKaW5kZXggMzU3MTZiZTUyNzVjY2NhYTQzZjM0MDc4YzZhNjk3NzJiNDFmYjJlOS4u
MWZhZmQyMjJjYmZkMTdlODliYTEzZjViMGI2MWQ5MDkyODNlYTc0NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC0yODgsNyArMjg4LDcgQEAgdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZUFzcGVjdFJhdGlvSW5mb3JtYXRpb25Gb3JSZW5kZXJC
b3goUmVuZGVyQm94KiBjb250ZW4KICAgICAgICAgLy8gY29uc3RyYWluIHRoZSBzaXplIGJlbG93
LCB0aGUgY29ycmVjdCBpbnRyaW5zaWMgc2l6ZSB3aWxsIGJlIG9idGFpbmVkIGZvciBjb21wYXJp
c29uIGFnYWluc3QKICAgICAgICAgLy8gbWluIGFuZCBtYXggd2lkdGhzLgogICAgICAgICBpZiAo
aW50cmluc2ljUmF0aW8gJiYgIWlzUGVyY2VudGFnZUludHJpbnNpY1NpemUgJiYgIWludHJpbnNp
Y1NpemUuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9pbnRyaW5zaWNTaXplID0gZmxvb3JlZElu
dFNpemUoaW50cmluc2ljU2l6ZSk7IC8vIEZJWE1FOiBUaGlzIGludHJvZHVjZXMgcHJlY2lzaW9u
IGVycm9ycy4gV2Ugc2hvdWxkIGNvbnZlcnQgbV9pbnRyaW5zaWNTaXplIHRvIGJlIGEgZmxvYXQu
CisgICAgICAgICAgICBtX2ludHJpbnNpY1NpemUgPSBJbnRTaXplKGludHJpbnNpY1NpemUud2lk
dGgoKSwgaW50cmluc2ljU2l6ZS5oZWlnaHQoKSk7IC8vIEZJWE1FOiBUaGlzIGludHJvZHVjZXMg
cHJlY2lzaW9uIGVycm9ycy4gV2Ugc2hvdWxkIGNvbnZlcnQgbV9pbnRyaW5zaWNTaXplIHRvIGJl
IGEgZmxvYXQuCiAKICAgICAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAg
ICAgICAgICAgICBpZiAoaW50cmluc2ljUmF0aW8pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWUxNGI0MTg2ZjdjNzMzNzNl
MDc1MjgyNzRhMzZkMDU0NWM0MGRiMy4uZGEyZWM3Y2Y5MmE3YzY4ZDg0NTdiZTIxNjYwNzcxODky
ZDRmYWYxNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTA4ICBBbGxhbiBTYW5kZmVs
ZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEZsb29yZWQgYW5k
IHRydW5jYXRlZCByb3VuZGVkIGNvbmZ1c2VkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMDgtMDgg
IFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogY2FjaGVkIGltYWdlcyBtZW1vcnkgaW5zdHJ1bWVudGF0aW9uIHJlZ3Jlc3Npb24g
YWZ0ZXIgcjEyNDc0NApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggZWY0NmJjNjUxMWFhODEzMzNlYTZlNzIyYTA4NjY5ODkzMTI0YTQ5Mi4u
N2JhZmZiNzhjMjRlODI5YTZjNWJhOTA1MTJiYThiYzFiYjQ3Y2M4NCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNDg1LDMgKzM0ODUs
NyBAQCBCVUdXSzkzMTQ4IE1BQyA6IGZhc3QvY3NzL25lc3RlZC1sYXllcnMtd2l0aC1ob3Zlci5o
dG1sID0gVElNRU9VVAogCiAKIEJVR1dLOTMyNDcgREVCVUcgOiBmYXN0L2xpc3RzL2xpc3QtbWFy
a2VyLXJlbW92ZS1jcmFzaC5odG1sID0gQ1JBU0gKKworLy8gVGVzdHMgcmVxdWlyaW5nIHJlYmFz
ZWxpbmcgYWZlciBidWcgOTM0NzUKK0JVR1dLOTM0NzUgOiBmYXN0L2Jsb2NrL2Zsb2F0L292ZXJo
YW5naW5nLXRhbGwtYmxvY2suaHRtbCA9IFRFWFQKK0JVR1dLOTM0NzUgOiBmYXN0L2h0bWwvZGV0
YWlscy13cml0aW5nLW1vZGUuaHRtbCA9IElNQUdFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IDcyMTg0OWYyZDRiMzg0MGVmZmY4MmY1ZjhlNWQyOTY3ZGE3
ODg3MTQuLjliMGVkNWNhODA3NDMxYWQxMGQ1Njc4MWIyNGIyNjRmMzBlMzA2N2MgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCkBAIC0zMjksMyArMzI5LDYgQEAg
QlVHV0s5MzM4NyA6ICBpbnNwZWN0b3IvZGVidWdnZXIvcGF1c2UtaW4taW50ZXJuYWwtc2NyaXB0
Lmh0bWwgPSBURVhUCiBCVUdXSzkzMzg3IDogIGluc3BlY3Rvci9kZWJ1Z2dlci93YXRjaC1leHBy
ZXNzaW9ucy1wYW5lbC1zd2l0Y2guaHRtbCA9IFRFWFQKIEJVR1dLOTMzODcgOiAgaW5zcGVjdG9y
L2RlYnVnZ2VyL2RlYnVnZ2VyLWFjdGl2YXRpb24tY3Jhc2gyLmh0bWwgPSBURVhUCiBCVUdXSzkz
Mzg3IDogIGluc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1zZXQtYnJlYWtwb2ludC1yZWdleC5o
dG1sID0gVEVYVAorCisvLyBUZXN0cyByZXF1aXJpbmcgcmViYXNlbGluZyBhZmVyIGJ1ZyA5MzQ3
NQorQlVHV0s5MzQ3NSA6IGZhc3QvYmxvY2svZmxvYXQvb3ZlcmhhbmdpbmctdGFsbC1ibG9jay5o
dG1sID0gVEVYVAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>