<?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>230283</bug_id>
          
          <creation_ts>2021-09-14 16:22:05 -0700</creation_ts>
          <short_desc>[bmalloc] Simplify LargeRange constructors and remove meaningless one</short_desc>
          <delta_ts>2021-09-21 16:23:19 -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>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=230143</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>basuke</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793496</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2021-09-14 16:22:05 -0700</bug_when>
    <thetext>LargeRange is mainly created in Heap and most usages are simply memory region with full of physical pages. This patch add simple constructor with address and size, which generates LargeRange with full of pages.

Also the constructor which accept Range is used in only one place, shrinkLarge(), and that&apos;s also can be simplify with this new constructor because the range is only created to be passed to shrinkLarge(). Size information is fetched in shrinkLarge anyway and at worst, it is confusing not to use size information from the passed Range argument. Replacing the argument with simple void pointer and there&apos;s no change for its behavior  at all.

Actually I still cannot understand the behavior or meaning of physical page information stored in LargeRange. This is the first step of the investigation to simplify the case with full physical pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793500</commentid>
    <comment_count>1</comment_count>
      <attachid>438187</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2021-09-14 16:29:03 -0700</bug_when>
    <thetext>Created attachment 438187
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794799</commentid>
    <comment_count>2</comment_count>
      <attachid>438187</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-09-18 14:04:02 -0700</bug_when>
    <thetext>Comment on attachment 438187
PATCH

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

I get that auto is fun and cool, and for some kinds of code, it may be the right thing to do.

But not in a malloc.  We spend lots more time reading malloc than writing it.  So, auto is a bad trade-off.  It makes the code less self-documenting and it takes away checking.  It makes the code less well documented because now I need to check that largeRanges is really a collection of LargeRanges to know that this is what you get from it and add to it, for example.  Using auto also takes away checking; I like that the code before your change is explicitly stating that it wants to work with LargeRanges, not just whatever types the collection has.

So, I think that most of your change just makes the code harder to read and less self-checked.  It&apos;s not a good trade-off for a malloc.

&gt; Source/bmalloc/ChangeLog:19
&gt; +        Actually I still cannot understand the behavior or meaning of physical page information stored in
&gt; +        LargeRange. This is the first step of the investigation to simplify the case with full physical pages.

I strongly recommend you understand it deeply before making more changes.

&gt; Source/bmalloc/bmalloc/Heap.cpp:68
&gt; -        m_largeFree.add(LargeRange(base, Gigacage::size(gigacageKind(m_kind)), 0, 0, base));
&gt; +        m_largeFree.add({ base, Gigacage::size(gigacageKind(m_kind)), 0, 0, base });

This change makes the code less clear.  I want to know that I&apos;m creating LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:159
&gt; -    for (LargeRange&amp; range : m_largeFree) {
&gt; +    for (auto&amp; range : m_largeFree) {

This change makes the code less clear.  I want to know that range is a LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:247
&gt; -    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize, physicalEnd));
&gt; +    m_largeFree.add({ chunk, size, startPhysicalSize, totalPhysicalSize, physicalEnd });

This change makes the code less clear.  I want to know that I&apos;m creating LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:481
&gt; -        std::pair&lt;LargeRange, LargeRange&gt; pair = range.split(prefixSize);
&gt; +        auto pair = range.split(prefixSize);

This change makes the code less clear.  I want to know that it&apos;s a pair of LargeRanges.

&gt; Source/bmalloc/bmalloc/Heap.cpp:487
&gt; -        std::pair&lt;LargeRange, LargeRange&gt; pair = range.split(size);
&gt; +        auto pair = range.split(size);

This change makes the code less clear.  I want to know that it&apos;s a pair of LargeRanges.

&gt; Source/bmalloc/bmalloc/Heap.cpp:542
&gt; -    LargeRange range = m_largeFree.remove(alignment, size);
&gt; +    auto range = m_largeFree.remove(alignment, size);

This change makes the code less clear.  I want to know that it&apos;s a LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:574
&gt; -        return LargeRange();
&gt; +        return { };

This change makes the code less clear.  I want to know that I&apos;m returning a LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:579
&gt; -        return LargeRange();
&gt; +        return { };

This change makes the code less clear.  I want to know that I&apos;m returning a LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:584
&gt; -        return LargeRange();
&gt; +        return { };

This change makes the code less clear.  I want to know that I&apos;m returning a LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:590
&gt; -    return LargeRange(memory, size, size, size, static_cast&lt;char*&gt;(memory) + size);
&gt; +    return { memory, size };

This change makes the code less clear.  I want to know that I&apos;m returning a LargeRange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:612
&gt; -    m_largeFree.add(LargeRange(object, size, size, size, static_cast&lt;char*&gt;(object) + size));
&gt; +    m_largeFree.add({ object, size });

This change makes the code less clear.  I want to know that I&apos;m creating a LargeRange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794930</commentid>
    <comment_count>3</comment_count>
      <attachid>438617</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2021-09-19 14:04:02 -0700</bug_when>
    <thetext>Created attachment 438617
patch

Filip, thanks for reviewing.

(In reply to Filip Pizlo from comment #2) 
&gt; But not in a malloc.  We spend lots more time reading malloc than writing
&gt; it.

I agree with this, and I agree with this not only for malloc code, but for any kind of source code. `auto` helps to reduce the typing, but that&apos;s not the main purpose of auto. It helps to improve the readability of the code when it is used for clear deducible types by reducing the amount of volume required to read. That&apos;s my perspective.

From this, I agree with your review for some code, such as switching constructor to implicit deducing of class instantiation, but some improves the code quality with better readability. For instance,

1. auto in for-loop
The type of element is clear from the container and container type is as important as element type.

2. auto for complex type, i.e. std::pair&lt;LargeFree, LargeFree&gt;
Well, this is not so complex, but the variable name tells it is pair and the method name is split(). It is hard to think of other possibility, isn&apos;t it?

3. No number three.


But the focus of this patch is to simplify constructor to make the detail of physical memory management inside LargeFree.h. So I reverted my refactoring part of the changes from this patch. Please take a look again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794941</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-09-19 14:50:01 -0700</bug_when>
    <thetext>(In reply to Basuke Suzuki from comment #3)
&gt; Created attachment 438617 [details]
&gt; patch
&gt; 
&gt; Filip, thanks for reviewing.
&gt; 
&gt; (In reply to Filip Pizlo from comment #2) 
&gt; &gt; But not in a malloc.  We spend lots more time reading malloc than writing
&gt; &gt; it.
&gt; 
&gt; I agree with this, and I agree with this not only for malloc code, but for
&gt; any kind of source code.

I’m making the point that in malloc, the reading-time-to-writing-time ratio is greater than almost any other kind of code. 

&gt; `auto` helps to reduce the typing, but that&apos;s not
&gt; the main purpose of auto. It helps to improve the readability of the code
&gt; when it is used for clear deducible types by reducing the amount of volume
&gt; required to read. That&apos;s my perspective.
&gt; 
&gt; From this, I agree with your review for some code, such as switching
&gt; constructor to implicit deducing of class instantiation, but some improves
&gt; the code quality with better readability. For instance,
&gt; 
&gt; 1. auto in for-loop
&gt; The type of element is clear from the container and container type is as
&gt; important as element type.

It’s not clear enough if you use auto. Using auto means that if the type of the element changes then the code might still compile based on duck typing and that’s not good enough. Using auto means that anyone reading the code has to look at the collection type to work out what auto infers to, and that’s not good enough for me when reading my malloc code. 

&gt; 
&gt; 2. auto for complex type, i.e. std::pair&lt;LargeFree, LargeFree&gt;
&gt; Well, this is not so complex, but the variable name tells it is pair and the
&gt; method name is split(). It is hard to think of other possibility, isn&apos;t it?

I don’t like thinking about possibilities when reading malloc code. I prefer certainties. Malloc tends to have a shortage of certainties to begin with so I want the types to at least be something that is certain. 

&gt; 
&gt; 3. No number three.
&gt; 
&gt; 
&gt; But the focus of this patch is to simplify constructor to make the detail of
&gt; physical memory management inside LargeFree.h. So I reverted my refactoring
&gt; part of the changes from this patch. Please take a look again.

Looking…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794942</commentid>
    <comment_count>5</comment_count>
      <attachid>438617</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-09-19 14:52:02 -0700</bug_when>
    <thetext>Comment on attachment 438617
patch

I think this is fine - but if this refactoring is just so you can understand the code better then I have mixed feelings about it. 

From what I understand of what you’re trying to do, it seems you’d be better served by just hacking the scavenger to call munmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795845</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-21 16:23:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/83374267&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438187</attachid>
            <date>2021-09-14 16:29:03 -0700</date>
            <delta_ts>2021-09-19 14:04:02 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>10569</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZyBiL1NvdXJjZS9ibWFsbG9jL0No
YW5nZUxvZwppbmRleCA1YTA5NDdmM2NiMzguLjZlYzAxZjFhMmU3NyAxMDA2NDQKLS0tIGEvU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM3IEBACisyMDIxLTA5LTE0ICBCYXN1a2UgU3V6dWtpICA8YmFzdWtlLnN1enVraUBz
b255LmNvbT4KKworICAgICAgICBbYm1hbGxvY10gU2ltcGxpZnkgTGFyZ2VSYW5nZSBjb25zdHJ1
Y3RvcnMgYW5kIHJlbW92ZSBtZWFuaW5nbGVzcyBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExhcmdlUmFuZ2UgaXMgbWFpbmx5IGNyZWF0ZWQgaW4g
SGVhcCBhbmQgbW9zdCB1c2FnZXMgYXJlIHNpbXBseSBtZW1vcnkgcmVnaW9uIHdpdGggZnVsbCBv
ZiBwaHlzaWNhbAorICAgICAgICBwYWdlcy4gVGhpcyBwYXRjaCBhZGQgc2ltcGxlIGNvbnN0cnVj
dG9yIHdpdGggYWRkcmVzcyBhbmQgc2l6ZSwgd2hpY2ggZ2VuZXJhdGVzIExhcmdlUmFuZ2Ugd2l0
aCBmdWxsCisgICAgICAgIG9mIHBhZ2VzLgorCisgICAgICAgIEFsc28gdGhlIGNvbnN0cnVjdG9y
IHdoaWNoIGFjY2VwdCBSYW5nZSBpcyB1c2VkIGluIG9ubHkgb25lIHBsYWNlLCBzaHJpbmtMYXJn
ZSgpLCBhbmQgdGhhdCdzIGFsc28gY2FuCisgICAgICAgIGJlIHNpbXBsaWZ5IHdpdGggdGhpcyBu
ZXcgY29uc3RydWN0b3IgYmVjYXVzZSB0aGUgcmFuZ2UgaXMgb25seSBjcmVhdGVkIHRvIGJlIHBh
c3NlZCB0byBzaHJpbmtMYXJnZSgpLgorICAgICAgICBTaXplIGluZm9ybWF0aW9uIGlzIGZldGNo
ZWQgaW4gc2hyaW5rTGFyZ2UgYW55d2F5IGFuZCBhdCB3b3JzdCwgaXQgaXMgY29uZnVzaW5nIG5v
dCB0byB1c2Ugc2l6ZQorICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwYXNzZWQgUmFuZ2Ug
YXJndW1lbnQuIFJlcGxhY2luZyB0aGUgYXJndW1lbnQgd2l0aCBzaW1wbGUgdm9pZCBwb2ludGVy
IGFuZAorICAgICAgICB0aGVyZSdzIG5vIGNoYW5nZSBmb3IgaXRzIGJlaGF2aW9yICBhdCBhbGwu
CisKKyAgICAgICAgQWN0dWFsbHkgSSBzdGlsbCBjYW5ub3QgdW5kZXJzdGFuZCB0aGUgYmVoYXZp
b3Igb3IgbWVhbmluZyBvZiBwaHlzaWNhbCBwYWdlIGluZm9ybWF0aW9uIHN0b3JlZCBpbgorICAg
ICAgICBMYXJnZVJhbmdlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIG9mIHRoZSBpbnZlc3RpZ2F0
aW9uIHRvIHNpbXBsaWZ5IHRoZSBjYXNlIHdpdGggZnVsbCBwaHlzaWNhbCBwYWdlcy4KKworICAg
ICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZUltcGwpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFs
bG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzcGxpdEFuZEFsbG9j
YXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTGFyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6SGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnNocmlua0xhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVM
YXJnZSk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1hbGxvYy9MYXJn
ZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpMYXJnZVJhbmdlKToKKwog
MjAyMS0wOC0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFts
aWJwYXNdIG1lZGl1bSBzaXplIGNsYXNzIGxvb2t1cCBuZWVkcyB0byBjb3JyZWN0bHkgZmVuY2Ug
dGhlIGNvdW50aW5nIGxvY2sgcmVhZCBwYXRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAKaW5kZXggNTA2ZDJkODc2YWVkLi5mOWY1OTZlYWM3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9j
YXRlSW1wbCh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplLCBGYWlsdXJlQWN0aW9uIGFjdGkK
ICAgICAgICAgb2xkU2l6ZSA9IG1faGVhcC5sYXJnZVNpemUobG9jaywgb2JqZWN0KTsKIAogICAg
ICAgICBpZiAobmV3U2l6ZSA8IG9sZFNpemUgJiYgbmV3U2l6ZSA+IHNtYWxsTWF4KSB7Ci0gICAg
ICAgICAgICBtX2hlYXAuc2hyaW5rTGFyZ2UobG9jaywgUmFuZ2Uob2JqZWN0LCBvbGRTaXplKSwg
bmV3U2l6ZSk7CisgICAgICAgICAgICBtX2hlYXAuc2hyaW5rTGFyZ2UobG9jaywgb2JqZWN0LCBu
ZXdTaXplKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAppbmRleCAxYmM1ZTFhODY5Y2QuLjMwZDBjYTEx
ODUyNCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAorKysgYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NSw3IEBAIEhlYXA6Okhl
YXAoSGVhcEtpbmQga2luZCwgTG9ja0hvbGRlciYpCiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAg
IGlmICh1c2luZ0dpZ2FjYWdlKCkpIHsKICAgICAgICAgdm9pZCogYmFzZSA9IEdpZ2FjYWdlOjph
bGxvY0Jhc2UoZ2lnYWNhZ2VLaW5kKG1fa2luZCkpOwotICAgICAgICBtX2xhcmdlRnJlZS5hZGQo
TGFyZ2VSYW5nZShiYXNlLCBHaWdhY2FnZTo6c2l6ZShnaWdhY2FnZUtpbmQobV9raW5kKSksIDAs
IDAsIGJhc2UpKTsKKyAgICAgICAgbV9sYXJnZUZyZWUuYWRkKHsgYmFzZSwgR2lnYWNhZ2U6OnNp
emUoZ2lnYWNhZ2VLaW5kKG1fa2luZCkpLCAwLCAwLCBiYXNlIH0pOwogICAgIH0KICNlbmRpZgog
ICAgIApAQCAtMTU1LDcgKzE1Niw3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2UoVW5pcXVlTG9ja0hv
bGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgc2l6ZV90JiBkCiAgICAgICAg
ICAgICBkZWFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBsaXN0LnBvcCgpLCAmbGlzdCAtICZtX2No
dW5rQ2FjaGVbMF0pOwogICAgIH0KIAotICAgIGZvciAoTGFyZ2VSYW5nZSYgcmFuZ2UgOiBtX2xh
cmdlRnJlZSkgeworICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2xhcmdlRnJlZSkgewogICAgICAg
ICBpZiAoIXJhbmdlLmhhc1BoeXNpY2FsUGFnZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAocmFuZ2UudXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkpIHsKQEAgLTI0Myw3ICsy
NDQsNyBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXIm
IGxvY2ssIENodW5rKiBjaHVuaywgc2l6ZV90IHBhZwogICAgIHNpemVfdCBzdGFydFBoeXNpY2Fs
U2l6ZSA9IGZpcnN0UGFnZVdpdGhvdXRQaHlzaWNhbFBhZ2VzID8gZmlyc3RQYWdlV2l0aG91dFBo
eXNpY2FsUGFnZXMtPmJlZ2luKCktPmJlZ2luKCkgLSBjaHVuay0+Ynl0ZXMoKSA6IHNpemU7CiAg
ICAgcGh5c2ljYWxFbmQgPSBsYXN0UGFnZUhhc1BoeXNpY2FsUGFnZXMgPyBjaHVuay0+YWRkcmVz
cyhzaXplKSA6IHBoeXNpY2FsRW5kOwogICAgIAotICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJh
bmdlKGNodW5rLCBzaXplLCBzdGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNpemUsIHBo
eXNpY2FsRW5kKSk7CisgICAgbV9sYXJnZUZyZWUuYWRkKHsgY2h1bmssIHNpemUsIHN0YXJ0UGh5
c2ljYWxTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSwgcGh5c2ljYWxFbmQgfSk7CiB9CiAKIFNtYWxs
UGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6
ZV90IHNpemVDbGFzcywgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9u
KQpAQCAtNDc3LDEzICs0NzgsMTMgQEAgTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRl
KFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIExhcmdlUmFuZ2UmIHJhbmdlLCBzaXoKICAgICBzaXpl
X3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7CiAgICAgaWYgKHRlc3QocmFuZ2UuYmVn
aW4oKSwgYWxpZ25tZW50TWFzaykpIHsKICAgICAgICAgc2l6ZV90IHByZWZpeFNpemUgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgcmFuZ2UuYmVnaW4oKSkgLSByYW5nZS5iZWdpbigp
OwotICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdl
LnNwbGl0KHByZWZpeFNpemUpOworICAgICAgICBhdXRvIHBhaXIgPSByYW5nZS5zcGxpdChwcmVm
aXhTaXplKTsKICAgICAgICAgcHJldiA9IHBhaXIuZmlyc3Q7CiAgICAgICAgIHJhbmdlID0gcGFp
ci5zZWNvbmQ7CiAgICAgfQogCiAgICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUgPiBzaXplIC8g
cGFnZVNpemVXYXN0ZUZhY3RvcikgewotICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFy
Z2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0KHNpemUpOworICAgICAgICBhdXRvIHBhaXIgPSBy
YW5nZS5zcGxpdChzaXplKTsKICAgICAgICAgcmFuZ2UgPSBwYWlyLmZpcnN0OwogICAgICAgICBu
ZXh0ID0gcGFpci5zZWNvbmQ7CiAgICAgfQpAQCAtNTM4LDcgKzUzOSw3IEBAIHZvaWQqIEhlYXA6
OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUsCiAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKHJvdW5kZWRBbGln
bm1lbnQgPj0gYWxpZ25tZW50KTsgLy8gQ2hlY2sgZm9yIG92ZXJmbG93CiAgICAgYWxpZ25tZW50
ID0gcm91bmRlZEFsaWdubWVudDsKIAotICAgIExhcmdlUmFuZ2UgcmFuZ2UgPSBtX2xhcmdlRnJl
ZS5yZW1vdmUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBhdXRvIHJhbmdlID0gbV9sYXJnZUZyZWUu
cmVtb3ZlKGFsaWdubWVudCwgc2l6ZSk7CiAgICAgaWYgKCFyYW5nZSkgewogICAgICAgICBpZiAo
bV9oYXNQZW5kaW5nRGVjb21taXRzKSB7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KGxv
Y2ssIFsmXSgpIHsgcmV0dXJuICFtX2hhc1BlbmRpbmdEZWNvbW1pdHM7IH0pOwpAQCAtNTcwLDIz
ICs1NzEsMjMgQEAgTGFyZ2VSYW5nZSBIZWFwOjp0cnlBbGxvY2F0ZUxhcmdlQ2h1bmsoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiAgICAgLy8gdGhlIE9TIHdpbGwgcHJvdmlkZSBjb250
aWd1b3VzIHJhbmdlcyB0aGF0IHdlIGNhbiBtZXJnZS4KICAgICBzaXplX3Qgcm91bmRlZEFsaWdu
bWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8Y2h1bmtTaXplPihhbGlnbm1lbnQpOwogICAgIGlm
IChyb3VuZGVkQWxpZ25tZW50IDwgYWxpZ25tZW50KSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cKLSAg
ICAgICAgcmV0dXJuIExhcmdlUmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhbGln
bm1lbnQgPSByb3VuZGVkQWxpZ25tZW50OwogCiAgICAgc2l6ZV90IHJvdW5kZWRTaXplID0gcm91
bmRVcFRvTXVsdGlwbGVPZjxjaHVua1NpemU+KHNpemUpOwogICAgIGlmIChyb3VuZGVkU2l6ZSA8
IHNpemUpIC8vIENoZWNrIGZvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gTGFyZ2VSYW5nZSgp
OworICAgICAgICByZXR1cm4geyB9OwogICAgIHNpemUgPSByb3VuZGVkU2l6ZTsKIAogICAgIHZv
aWQqIG1lbW9yeSA9IHRyeVZNQWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKICAgICBpZiAoIW1l
bW9yeSkKLSAgICAgICAgcmV0dXJuIExhcmdlUmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAKICNpZiBCT1MoREFSV0lOKQogICAgIFBlclByb2Nlc3M8Wm9uZT46OmdldCgpLT5hZGRS
YW5nZShSYW5nZShtZW1vcnksIHNpemUpKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIExhcmdlUmFu
Z2UobWVtb3J5LCBzaXplLCBzaXplLCBzaXplLCBzdGF0aWNfY2FzdDxjaGFyKj4obWVtb3J5KSAr
IHNpemUpOworICAgIHJldHVybiB7IG1lbW9yeSwgc2l6ZSB9OwogfQogCiBzaXplX3QgSGVhcDo6
bGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBvYmplY3QpCkBAIC01OTQsMTIgKzU5
NSwxMiBAQCBzaXplX3QgSGVhcDo6bGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBv
YmplY3QpCiAgICAgcmV0dXJuIG1fbGFyZ2VBbGxvY2F0ZWQuZ2V0KG9iamVjdCk7CiB9CiAKLXZv
aWQgSGVhcDo6c2hyaW5rTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgY29uc3QgUmFuZ2Um
IG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxv
Y2tIb2xkZXImIGxvY2ssIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgQkFT
U0VSVChvYmplY3Quc2l6ZSgpID4gbmV3U2l6ZSk7CisgICAgYXV0byBzaXplID0gbV9sYXJnZUFs
bG9jYXRlZC5yZW1vdmUob2JqZWN0KTsKKyAgICBCQVNTRVJUKHNpemUgPiBuZXdTaXplKTsKIAot
ICAgIHNpemVfdCBzaXplID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2luKCkp
OwotICAgIExhcmdlUmFuZ2UgcmFuZ2UgPSBMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwgc2l6ZSwg
b2JqZWN0LmJlZ2luKCkgKyBzaXplKTsKKyAgICBMYXJnZVJhbmdlIHJhbmdlIHsgb2JqZWN0LCBz
aXplIH07CiAgICAgc3BsaXRBbmRBbGxvY2F0ZShsb2NrLCByYW5nZSwgYWxpZ25tZW50LCBuZXdT
aXplKTsKIAogICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShzaXplKTsKQEAgLTYwOCw3ICs2MDks
NyBAQCB2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIGNvbnN0
IFJhbmdlJiBvYmplY3QsIHNpemVfdCBuZXdTaQogdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uo
VW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIG9iamVjdCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1f
bGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKG9iamVjdCk7Ci0gICAgbV9sYXJnZUZyZWUuYWRkKExhcmdl
UmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplLCBzaXplLCBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0
KSArIHNpemUpKTsKKyAgICBtX2xhcmdlRnJlZS5hZGQoeyBvYmplY3QsIHNpemUgfSk7CiAgICAg
bV9mcmVlYWJsZU1lbW9yeSArPSBzaXplOwogICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShzaXpl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKaW5kZXggZWU3ZWQ4NTk1M2ZkLi44NWNhNGI2OGMxOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCisrKyBiL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyNCw3IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
ICAqLwogCi0jaWZuZGVmIEhlYXBfaAotI2RlZmluZSBIZWFwX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQnVtcFJhbmdlLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0xhcmdlKHZvaWQqKTsKICAgICBzaXplX3QgbGFyZ2VT
aXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKik7Ci0gICAgdm9pZCBzaHJpbmtMYXJnZShVbmlx
dWVMb2NrSG9sZGVyJiwgY29uc3QgUmFuZ2UmLCBzaXplX3QpOworICAgIHZvaWQgc2hyaW5rTGFy
Z2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5n
ZShVbmlxdWVMb2NrSG9sZGVyJiwgQnVsa0RlY29tbWl0Jiwgc2l6ZV90JiBkZWZlcnJlZERlY29t
bWl0cyk7CiAgICAgdm9pZCBzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiwgQnVsa0RlY29tbWl0
Jiwgc2l6ZV90JiBmcmVlZCwgc2l6ZV90IGdvYWwpOwpAQCAtMTY1LDUgKzE2NSwzIEBAIGlubGlu
ZSBib29sIEhlYXA6OmlzTGFyZ2Uodm9pZCogb2JqZWN0KQogfQogCiB9IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCi0KLSNlbmRpZiAvLyBIZWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvTGFyZ2VSYW5nZS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmgK
aW5kZXggOGQxNzEzOTk1ZjY2Li4wMzUwZjM4NDNlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvTGFyZ2VSYW5nZS5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFy
Z2VSYW5nZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMyw4ICsyNCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIExhcmdlUmFuZ2VfaAotI2RlZmluZSBMYXJnZVJhbmdlX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCkBAIC00MywxMyArNDMsMTMg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBMYXJnZVJhbmdlKGNvbnN0IFJhbmdlJiBv
dGhlciwgc2l6ZV90IHN0YXJ0UGh5c2ljYWxTaXplLCBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUs
IHZvaWQqIHBoeXNpY2FsRW5kKQotICAgICAgICA6IFJhbmdlKG90aGVyKQotICAgICAgICAsIG1f
c3RhcnRQaHlzaWNhbFNpemUoc3RhcnRQaHlzaWNhbFNpemUpCi0gICAgICAgICwgbV90b3RhbFBo
eXNpY2FsU2l6ZSh0b3RhbFBoeXNpY2FsU2l6ZSkKLSAgICAgICAgLCBtX3BoeXNpY2FsRW5kKHN0
YXRpY19jYXN0PGNoYXIqPihwaHlzaWNhbEVuZCkpCisgICAgTGFyZ2VSYW5nZSh2b2lkKiBiZWdp
biwgc2l6ZV90IHNpemUpCisgICAgICAgIDogUmFuZ2UoYmVnaW4sIHNpemUpCisgICAgICAgICwg
bV9zdGFydFBoeXNpY2FsU2l6ZShzaXplKQorICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNpemUo
c2l6ZSkKKyAgICAgICAgLCBtX3BoeXNpY2FsRW5kKHN0YXRpY19jYXN0PGNoYXIqPihiZWdpbikg
KyBzaXplKQogICAgICAgICAsIG1faXNFbGlnaWJsZSh0cnVlKQotICAgICAgICAsIG1fdXNlZFNp
bmNlTGFzdFNjYXZlbmdlKGZhbHNlKQorICAgICAgICAsIG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdl
KHNpemUgPiAwKQogICAgIHsKICAgICAgICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPj0gdGhpcy0+
dG90YWxQaHlzaWNhbFNpemUoKSk7CiAgICAgICAgIEJBU1NFUlQodGhpcy0+dG90YWxQaHlzaWNh
bFNpemUoKSA+PSB0aGlzLT5zdGFydFBoeXNpY2FsU2l6ZSgpKTsKQEAgLTE4OSw1ICsxODksMyBA
QCBpbmxpbmUgc3RkOjpwYWlyPExhcmdlUmFuZ2UsIExhcmdlUmFuZ2U+IExhcmdlUmFuZ2U6OnNw
bGl0KHNpemVfdCBsZWZ0U2l6ZSkgY29ucwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0K
LSNlbmRpZiAvLyBMYXJnZVJhbmdlX2gK
</data>
<flag name="review"
          id="461529"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438617</attachid>
            <date>2021-09-19 14:04:02 -0700</date>
            <delta_ts>2021-09-19 14:04:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>6809</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZyBiL1NvdXJjZS9ibWFsbG9jL0No
YW5nZUxvZwppbmRleCA1YTA5NDdmM2NiMzguLjcxNWUyNWM1OTljZSAxMDA2NDQKLS0tIGEvU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMwIEBACisyMDIxLTA5LTE5ICBCYXN1a2UgU3V6dWtpICA8YmFzdWtlLnN1enVraUBz
b255LmNvbT4KKworICAgICAgICBbYm1hbGxvY10gU2ltcGxpZnkgTGFyZ2VSYW5nZSBjb25zdHJ1
Y3RvcnMgYW5kIHJlbW92ZSBtZWFuaW5nbGVzcyBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExhcmdlUmFuZ2UgaXMgbWFpbmx5IGNyZWF0ZWQgaW4g
SGVhcCBhbmQgbW9zdCB1c2FnZXMgYXJlIHNpbXBseSBtZW1vcnkgcmVnaW9uIHdpdGggZnVsbCBv
ZiBwaHlzaWNhbAorICAgICAgICBwYWdlcy4gVGhpcyBwYXRjaCBhZGQgc2ltcGxlIGNvbnN0cnVj
dG9yIHdpdGggYWRkcmVzcyBhbmQgc2l6ZSwgd2hpY2ggZ2VuZXJhdGVzIExhcmdlUmFuZ2Ugd2l0
aCBmdWxsCisgICAgICAgIG9mIHBhZ2VzLgorCisgICAgICAgIEFsc28gdGhlIGNvbnN0cnVjdG9y
IHdoaWNoIGFjY2VwdCBSYW5nZSBpcyB1c2VkIGluIG9ubHkgb25lIHBsYWNlLCBzaHJpbmtMYXJn
ZSgpLCBhbmQgdGhhdCdzIGFsc28gY2FuCisgICAgICAgIGJlIHNpbXBsaWZ5IHdpdGggdGhpcyBu
ZXcgY29uc3RydWN0b3IgYmVjYXVzZSB0aGUgcmFuZ2UgaXMgb25seSBjcmVhdGVkIHRvIGJlIHBh
c3NlZCB0byBzaHJpbmtMYXJnZSgpLgorICAgICAgICBTaXplIGluZm9ybWF0aW9uIGlzIGZldGNo
ZWQgaW4gc2hyaW5rTGFyZ2UgYW55d2F5IGFuZCBhdCB3b3JzdCwgaXQgaXMgY29uZnVzaW5nIG5v
dCB0byB1c2Ugc2l6ZQorICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwYXNzZWQgUmFuZ2Ug
YXJndW1lbnQuIFJlcGxhY2luZyB0aGUgYXJndW1lbnQgd2l0aCBzaW1wbGUgdm9pZCBwb2ludGVy
IGFuZAorICAgICAgICB0aGVyZSdzIG5vIGNoYW5nZSBmb3IgaXRzIGJlaGF2aW9yICBhdCBhbGwu
CisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OnJlYWxsb2NhdGVJbXBsKToKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuY3BwOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRl
YWxsb2NhdGVMYXJnZSk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1h
bGxvYy9MYXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpMYXJnZVJh
bmdlKToKKwogMjAyMS0wOC0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtsaWJwYXNdIG1lZGl1bSBzaXplIGNsYXNzIGxvb2t1cCBuZWVkcyB0byBjb3JyZWN0
bHkgZmVuY2UgdGhlIGNvdW50aW5nIGxvY2sgcmVhZCBwYXRoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5jcHAKaW5kZXggNTA2ZDJkODc2YWVkLi5mOWY1OTZlYWM3MDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCogQWxsb2NhdG9y
OjpyZWFsbG9jYXRlSW1wbCh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplLCBGYWlsdXJlQWN0
aW9uIGFjdGkKICAgICAgICAgb2xkU2l6ZSA9IG1faGVhcC5sYXJnZVNpemUobG9jaywgb2JqZWN0
KTsKIAogICAgICAgICBpZiAobmV3U2l6ZSA8IG9sZFNpemUgJiYgbmV3U2l6ZSA+IHNtYWxsTWF4
KSB7Ci0gICAgICAgICAgICBtX2hlYXAuc2hyaW5rTGFyZ2UobG9jaywgUmFuZ2Uob2JqZWN0LCBv
bGRTaXplKSwgbmV3U2l6ZSk7CisgICAgICAgICAgICBtX2hlYXAuc2hyaW5rTGFyZ2UobG9jaywg
b2JqZWN0LCBuZXdTaXplKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAppbmRleCAxYmM1ZTFhODY5Y2Qu
LjZkNzE3MjYzNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNw
cAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01ODYsNyArNTg3LDcg
QEAgTGFyZ2VSYW5nZSBIZWFwOjp0cnlBbGxvY2F0ZUxhcmdlQ2h1bmsoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCiAgICAgUGVyUHJvY2Vzczxab25lPjo6Z2V0KCktPmFkZFJhbmdlKFJh
bmdlKG1lbW9yeSwgc2l6ZSkpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gTGFyZ2VSYW5nZShtZW1v
cnksIHNpemUsIHNpemUsIHNpemUsIHN0YXRpY19jYXN0PGNoYXIqPihtZW1vcnkpICsgc2l6ZSk7
CisgICAgcmV0dXJuIExhcmdlUmFuZ2UobWVtb3J5LCBzaXplKTsKIH0KIAogc2l6ZV90IEhlYXA6
OmxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCogb2JqZWN0KQpAQCAtNTk0LDEyICs1
OTUsMTIgQEAgc2l6ZV90IEhlYXA6OmxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCog
b2JqZWN0KQogICAgIHJldHVybiBtX2xhcmdlQWxsb2NhdGVkLmdldChvYmplY3QpOwogfQogCi12
b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIGNvbnN0IFJhbmdl
JiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShVbmlxdWVM
b2NrSG9sZGVyJiBsb2NrLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewotICAgIEJB
U1NFUlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOworICAgIHNpemVfdCBzaXplID0gbV9sYXJn
ZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0KTsKKyAgICBCQVNTRVJUKHNpemUgPiBuZXdTaXplKTsK
IAotICAgIHNpemVfdCBzaXplID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2lu
KCkpOwotICAgIExhcmdlUmFuZ2UgcmFuZ2UgPSBMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwgc2l6
ZSwgb2JqZWN0LmJlZ2luKCkgKyBzaXplKTsKKyAgICBMYXJnZVJhbmdlIHJhbmdlIHsgb2JqZWN0
LCBzaXplIH07CiAgICAgc3BsaXRBbmRBbGxvY2F0ZShsb2NrLCByYW5nZSwgYWxpZ25tZW50LCBu
ZXdTaXplKTsKIAogICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShzaXplKTsKQEAgLTYwOCw3ICs2
MDksNyBAQCB2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIGNv
bnN0IFJhbmdlJiBvYmplY3QsIHNpemVfdCBuZXdTaQogdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFy
Z2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIG9iamVjdCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9
IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKG9iamVjdCk7Ci0gICAgbV9sYXJnZUZyZWUuYWRkKExh
cmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplLCBzaXplLCBzdGF0aWNfY2FzdDxjaGFyKj4ob2Jq
ZWN0KSArIHNpemUpKTsKKyAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShvYmplY3QsIHNp
emUpKTsKICAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHNpemU7CiAgICAgbV9zY2F2ZW5nZXItPnNj
aGVkdWxlKHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAppbmRleCBlZTdlZDg1OTUzZmQuLjg1
Y2E0YjY4YzE5MCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKKysr
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzI0LDcgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSGVhcF9oCi0jZGVmaW5lIEhlYXBfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJCdW1wUmFuZ2UuaCIKICNpbmNsdWRlICJDaHVuay5oIgpAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTGFyZ2Uodm9pZCopOwogICAgIHNp
emVfdCBsYXJnZVNpemUoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqKTsKLSAgICB2b2lkIHNocmlu
a0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBjb25zdCBSYW5nZSYsIHNpemVfdCk7CisgICAgdm9p
ZCBzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCosIHNpemVfdCk7CiAKICAgICB2
b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQmLCBzaXplX3QmIGRl
ZmVycmVkRGVjb21taXRzKTsKICAgICB2b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBC
dWxrRGVjb21taXQmLCBzaXplX3QmIGZyZWVkLCBzaXplX3QgZ29hbCk7CkBAIC0xNjUsNSArMTY1
LDMgQEAgaW5saW5lIGJvb2wgSGVhcDo6aXNMYXJnZSh2b2lkKiBvYmplY3QpCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIEhlYXBfaApkaWZmIC0tZ2l0IGEvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xh
cmdlUmFuZ2UuaAppbmRleCA4ZDE3MTM5OTVmNjYuLjg1M2YxZTg0ZTdkYyAxMDA2NDQKLS0tIGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmgKKysrIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9MYXJnZVJhbmdlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzI0LDcgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgTGFyZ2VSYW5nZV9oCi0jZGVmaW5lIExhcmdlUmFuZ2VfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTQz
LDExICs0MywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExhcmdlUmFuZ2UoY29u
c3QgUmFuZ2UmIG90aGVyLCBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0b3RhbFBo
eXNpY2FsU2l6ZSwgdm9pZCogcGh5c2ljYWxFbmQpCi0gICAgICAgIDogUmFuZ2Uob3RoZXIpCi0g
ICAgICAgICwgbV9zdGFydFBoeXNpY2FsU2l6ZShzdGFydFBoeXNpY2FsU2l6ZSkKLSAgICAgICAg
LCBtX3RvdGFsUGh5c2ljYWxTaXplKHRvdGFsUGh5c2ljYWxTaXplKQotICAgICAgICAsIG1fcGh5
c2ljYWxFbmQoc3RhdGljX2Nhc3Q8Y2hhcio+KHBoeXNpY2FsRW5kKSkKKyAgICBMYXJnZVJhbmdl
KHZvaWQqIGJlZ2luLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBSYW5nZShiZWdpbiwgc2l6ZSkK
KyAgICAgICAgLCBtX3N0YXJ0UGh5c2ljYWxTaXplKHNpemUpCisgICAgICAgICwgbV90b3RhbFBo
eXNpY2FsU2l6ZShzaXplKQorICAgICAgICAsIG1fcGh5c2ljYWxFbmQoc3RhdGljX2Nhc3Q8Y2hh
cio+KGJlZ2luKSArIHNpemUpCiAgICAgICAgICwgbV9pc0VsaWdpYmxlKHRydWUpCiAgICAgICAg
ICwgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2UoZmFsc2UpCiAgICAgewpAQCAtMTg5LDUgKzE4OSwz
IEBAIGlubGluZSBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4gTGFyZ2VSYW5nZTo6
c3BsaXQoc2l6ZV90IGxlZnRTaXplKSBjb25zCiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
LQotI2VuZGlmIC8vIExhcmdlUmFuZ2VfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>