<?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>192389</bug_id>
          
          <creation_ts>2018-12-04 17:39:34 -0800</creation_ts>
          <short_desc>bmalloc uses more memory on iOS compared to macOS due to physical page size differences</short_desc>
          <delta_ts>2019-02-12 12:19:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <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>
          <dependson>194547</dependson>
    
    <dependson>194550</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1485092</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-12-04 17:39:34 -0800</bug_when>
    <thetext>bmalloc uses physical page size chunks when creating size classes.  Given that iOS has a 16K page size while macOS has a 4K page size, under certain memory loads, iOS will use more memory than macOS.

One fix is to decouple the allocation of size classes from the physical page size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485093</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-12-04 17:40:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/45465291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485101</commentid>
    <comment_count>2</comment_count>
      <attachid>356564</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-12-04 18:08:18 -0800</bug_when>
    <thetext>Created attachment 356564
Work in progress patch

Want to run EWS bots.  Also Running performance tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485103</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-04 18:10:06 -0800</bug_when>
    <thetext>Attachment 356564 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:127:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 5 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>1486962</commentid>
    <comment_count>4</comment_count>
      <attachid>357062</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-12-11 10:17:52 -0800</bug_when>
    <thetext>Created attachment 357062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486963</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-11 10:18:58 -0800</bug_when>
    <thetext>Attachment 357062 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:127:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 5 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>1486968</commentid>
    <comment_count>6</comment_count>
      <attachid>356564</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-12-11 10:29:56 -0800</bug_when>
    <thetext>Comment on attachment 356564
Work in progress patch

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

&gt; Source/bmalloc/bmalloc/Heap.cpp:258
&gt; +struct Heap::SmallPageRange Heap::findSmallPageRangeSharingPhysicalPages(Lock&amp;, SmallPage* page, size_t pageSize, Function includeSmallPageAt)

This seems like an overly complicated way to find a set that will always be either &quot;page&quot; or &quot;page&quot; and three of its neighbors. I would have expected the function to use operations similar to Chunk::offset and Chunk::page, along with masking, to iterate from the first VM-page-size-aligned page to its (0 or 3) neighbors.

I&apos;m also not sure we want an abstract find operation with a predicate. I think we just want a function to return the set of (1 or 4) pages.

&gt; Source/bmalloc/bmalloc/Heap.cpp:316
&gt; +        for (auto* page : chunk-&gt;freePages()) {
&gt; +            if (pageToCheck == page)
&gt; +                return pageToCheck-&gt;hasPhysicalPages();
&gt; +        }

I&apos;m not sure why we need to do this -- but it&apos;s O(n^2), so we should find another way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487489</commentid>
    <comment_count>7</comment_count>
      <attachid>357062</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-12-12 20:21:00 -0800</bug_when>
    <thetext>Comment on attachment 357062
Patch

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

&gt; Source/bmalloc/bmalloc/Heap.cpp:129
&gt; -        for (size_t pageSize = m_vmPageSizePhysical;
&gt; +        for (size_t pageSize = smallPageSize;
&gt;              pageSize &lt; pageSizeMax;
&gt; -            pageSize += m_vmPageSizePhysical) {
&gt; +            pageSize += smallPageSize) {

I think you need some code here to ensure that you don&apos;t use 12kB pages on 16kB page systems. On 16kB page systems, we want pages sizes of [ 4kB, 8kB, 16kB ... ]

Also worth testing whether including 2kB in the mix reduces memory use without causing a throughput regression.

I think you also need some code to ensure that you don&apos;t use the 20kB page size, etc. on 16kB systems. Those are really awkward values that will produce a lot of physical page size waste by defeating the scavenger.

The simplest solution is just to use [ 4kB, 8kB, 16kB, 32kB ... ]. But it might also be useful to include 2kB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502113</commentid>
    <comment_count>8</comment_count>
      <attachid>361127</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-04 16:44:19 -0800</bug_when>
    <thetext>Created attachment 361127
{patch addressing review issues

This is a 6.5% reduction in memory on iOS running ramification tests.  Running performance and more memory tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502117</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-04 16:46:32 -0800</bug_when>
    <thetext>Attachment 361127 did not pass style-queue:


ERROR: Source/bmalloc/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 6 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>1502127</commentid>
    <comment_count>10</comment_count>
      <attachid>361133</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-04 17:05:36 -0800</bug_when>
    <thetext>Created attachment 361133
Patch addressing review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503427</commentid>
    <comment_count>11</comment_count>
      <attachid>361315</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-06 12:29:52 -0800</bug_when>
    <thetext>Created attachment 361315
Patch with some pref improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503485</commentid>
    <comment_count>12</comment_count>
      <attachid>361315</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-06 14:56:50 -0800</bug_when>
    <thetext>Comment on attachment 361315
Patch with some pref improvements.

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

r- because I think there are many fixes that should be done.

&gt; Source/bmalloc/bmalloc/Heap.cpp:47
&gt; +static_assert(bmalloc::isPowerOfTwo(smallPageSize), &quot;&quot;);

No need for bmalloc:: qualifier.  We&apos;re in bmalloc namespace.

&gt; Source/bmalloc/bmalloc/Heap.cpp:276
&gt; +void Heap::tryDecommitSmallPageSlow(std::lock_guard&lt;Mutex&gt;&amp;, BulkDecommit&amp; decommitter, SmallPage* smallPage, size_t pageSize)
&gt; +{
&gt; +    Chunk* chunk = Chunk::get(smallPage);

I suggest you pass in the chunk since it&apos;s always know in the caller.

&gt; Source/bmalloc/bmalloc/Heap.cpp:300
&gt; +    SmallPage* firstPageInRange = chunk-&gt;page(chunk-&gt;offset(physicalPagesBegin));
&gt; +    SmallPage* lastPageInRange = chunk-&gt;page(chunk-&gt;offset(physicalPagesBegin + pageSize * (smallPageCount - 1)));
&gt; +    
&gt; +    for (auto* page : chunk-&gt;freePages()) {
&gt; +        if (page &gt;= firstPageInRange &amp;&amp; page &lt;= lastPageInRange) {
&gt; +            matchingPageCount++;
&gt; +            if (matchingPageCount == smallPageCount) {
&gt; +                firstPageToDecommit = firstPageInRange;
&gt; +                pagesToDecommit = matchingPageCount;
&gt; +                break;
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +
&gt; +    if (!firstPageToDecommit || !pagesToDecommit)
&gt; +        return;

Instead of doing this, can we instead do the following:
1. In class SmallPage, add a bit: isCommitted.
2. In Heap::commitSmallPage():
    if the SmallPage does not have a physical page yet, allocate the physical page, and set all of its SmallPage isCommitted bits to false.
    Always set the requested SmallPage&apos;s isCommitted bit to true.
3. Here in Heap::tryDecommitSmallPage():
    Assert that all SmallPages in this physical page bounds has a physical page.
    Clear the isCommitted bit for this SmallPage.
    Check if all SmallPage&apos;s isCommitted bit is cleared.  If so, decommit the physical page and clear all the m_hasPhysicalPages bits.

&gt; Source/bmalloc/bmalloc/Heap.cpp:327
&gt; +void Heap::commitSmallPageSlow(std::unique_lock&lt;Mutex&gt;&amp;, SmallPage* page, size_t pageSize)
&gt; +{
&gt; +    Chunk* chunk = Chunk::get(page);

I suggest you pass in the chunk since it&apos;s always know in the caller.

&gt; Source/bmalloc/bmalloc/Heap.cpp:331
&gt; +    char* physicalPagesBegin = roundDownToMultipleOf(m_vmPageSizePhysical, page-&gt;begin()-&gt;begin());

Can you add the following above this?
    BASSERT(isPowerOfTwo(pageSize));
    BASSERT(pageSize &lt; m_vmPageSizePhysical);

&gt; Source/bmalloc/bmalloc/Heap.cpp:335
&gt; +    unsigned smallPageCount = m_vmPageSizePhysical / pageSize;
&gt; +
&gt; +    size_t firstPageOffset = chunk-&gt;offset(physicalPagesBegin);
&gt; +    size_t lastPageOffset = firstPageOffset + smallPageCount * pageSize;

You can do away with smallPageCount and just compute lastPageOffset as:
    size_t lastPageOffset = firstPageOffset + m_vmPageSizePhysical;

Since we make reference to a SmallPage and a physical page in this body of code, I think it would be clearer if we name variables more clearly to distinguish between which one we&apos;re referring to.  I suggest renaming firstPageOffset to physicalPageBeginOffset, and lastPageOffset to physicalPageEndOffset.

Ditto for firstPageToCommit: I suggest renaming to firstSmallPageToCommit.
Ditto for pagesToCommit: I suggest renaming to smallPagesToCommit.

&gt; Source/bmalloc/bmalloc/Heap.cpp:350
&gt; +    for (auto it = begin; it + pageSize &lt;= end; it = it + pageSize) {
&gt; +        if (!firstPageToCommit) {
&gt; +            if (!it.page()-&gt;hasPhysicalPages()) {
&gt; +                firstPageToCommit = it.page();
&gt; +                pagesToCommit = 1;
&gt; +            }
&gt; +        } else if (!it.page()-&gt;hasPhysicalPages())
&gt; +            pagesToCommit++;
&gt; +        else
&gt; +            break;
&gt; +    }

I don&apos;t understand this.  My understanding is that either all SmallPages in this physical page&apos;s bound has a physical page or they don&apos;t.  Why not just check the requested page and be done?  That lessens the number of cache lines we touch too.  You can turn this into a debug assert loop to verify that all SmallPages in this bounds to be the same as the requested page in terms of whether they have a physical page or not.

&gt; Source/bmalloc/bmalloc/Heap.cpp:352
&gt; +    BASSERT(firstPageToCommit &amp;&amp; pagesToCommit);

This assert is invalid in light of the observation about the loop above.

&gt; Source/bmalloc/bmalloc/Heap.cpp:374
&gt; +    char* firstPageBegin = firstPageToCommit-&gt;begin()-&gt;begin();
&gt; +    size_t commitSize = physicalPageSizeSloppyRoundUp(firstPageBegin, pagesToCommit * pageSize);
&gt; +    m_footprint += commitSize;
&gt; +
&gt; +    vmAllocatePhysicalPagesSloppy(firstPageBegin, commitSize);
&gt; +
&gt; +    if (pagesToCommit == 1)
&gt; +        firstPageToCommit-&gt;setHasPhysicalPages(true);
&gt; +    else {
&gt; +        size_t firstPageOffset = chunk-&gt;offset(firstPageBegin);
&gt; +        size_t lastPageOffset = firstPageOffset + pagesToCommit * pageSize;
&gt; +
&gt; +        Object begin(chunk, firstPageOffset);
&gt; +        Object end(chunk, lastPageOffset);
&gt; +
&gt; +        for (auto it = begin; it + pageSize &lt;= end; it = it + pageSize)
&gt; +            it.page()-&gt;setHasPhysicalPages(true);
&gt; +    }
&gt; +#if ENABLE_PHYSICAL_PAGE_MAP
&gt; +    m_physicalPageMap.commit(firstPageToCommit, commitSize);
&gt; +#endif

This is also no longer valid.  This can be simplified as follows:

    if (!page-&gt;hasPhysicalPages()) {
        commit physical page;
        m_footprint += m_vmPageSizePhysical;
#if ENABLE_PHYSICAL_PAGE_MAP
        m_physicalPageMap.commit(physicalPageBegin, m_vmPageSizePhysical);
#endif
    }

&gt; Source/bmalloc/bmalloc/Heap.h:124
&gt; +    void tryDecommitSmallPageSlow(std::lock_guard&lt;Mutex&gt;&amp;, BulkDecommit&amp; decommitter, SmallPage*, size_t pageSize);
&gt; +    void commitSmallPageSlow(std::unique_lock&lt;Mutex&gt;&amp;, SmallPage*, size_t pageSize);

I think you can drop the &quot;Slow&quot; in the names since there is no fast version of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503504</commentid>
    <comment_count>13</comment_count>
      <attachid>361315</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-06 15:18:34 -0800</bug_when>
    <thetext>Comment on attachment 361315
Patch with some pref improvements.

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

&gt;&gt; Source/bmalloc/bmalloc/Heap.cpp:300
&gt;&gt; +        return;
&gt; 
&gt; Instead of doing this, can we instead do the following:
&gt; 1. In class SmallPage, add a bit: isCommitted.
&gt; 2. In Heap::commitSmallPage():
&gt;     if the SmallPage does not have a physical page yet, allocate the physical page, and set all of its SmallPage isCommitted bits to false.
&gt;     Always set the requested SmallPage&apos;s isCommitted bit to true.
&gt; 3. Here in Heap::tryDecommitSmallPage():
&gt;     Assert that all SmallPages in this physical page bounds has a physical page.
&gt;     Clear the isCommitted bit for this SmallPage.
&gt;     Check if all SmallPage&apos;s isCommitted bit is cleared.  If so, decommit the physical page and clear all the m_hasPhysicalPages bits.

My comment here is invalid.  I misunderstood and thought that this Heap::tryDecommitSmallPageSlow() is called symmetrically to Heap::commitSmallPageSlow() like free() to malloc().  I also missed that Heap::commitSmallPageSlow() is not called on all SmallPages, only those that does not already have a physical page.  Hence, we don&apos;t have a convenient opportunity to set and clear my &quot;isCommitted&quot; flag (which is also a misnomer, I meant &quot;isInUse&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503538</commentid>
    <comment_count>14</comment_count>
      <attachid>361348</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-06 17:20:38 -0800</bug_when>
    <thetext>Created attachment 361348
Updated patch responding to review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503541</commentid>
    <comment_count>15</comment_count>
      <attachid>361348</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-06 17:39:35 -0800</bug_when>
    <thetext>Comment on attachment 361348
Updated patch responding to review comments

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

r=me with suggestions.

&gt; Source/bmalloc/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=192389
&gt; +        bmalloc uses more memory on iOS compared to macOS due to physical page size differences

This is inverted.  Michael said he&apos;ll fix locally.

&gt; Source/bmalloc/bmalloc/Heap.cpp:280
&gt; +    size_t matchingPageCount = 0;

nit: let&apos;s use the { 0 } initializer style to be consistent with the lines above.  Or change the lines above to be consistent with this line.  It just looks strange.

&gt; Source/bmalloc/bmalloc/Heap.cpp:283
&gt; +    unsigned smallPageCount = m_vmPageSizePhysical / pageSize;

I suggest renaming smallPageCount to smallPagesPerPhysicalPage.  See below for reason.

&gt; Source/bmalloc/bmalloc/Heap.cpp:296
&gt; +                firstPageToDecommit = firstPageInRange;
&gt; +                pagesToDecommit = matchingPageCount;

We don&apos;t need these.  All we need to know is that matchingPageCount == smallPageCount.  If so, we will recommit the page.

Given that you can remove firstPageToDecommit and pagesToDecommit here, I suggest renaming matchingPageCount to pagesToDecommit.  I think that reads better, and focus on the idea that we&apos;ll only decommit if pagesToDecommit == smallPagesPerPhysicalPage.  You can decide.

&gt; Source/bmalloc/bmalloc/Heap.cpp:303
&gt; +    if (firstPageToDecommit != firstPageInRange || pagesToDecommit != smallPageCount)
&gt; +        return;

This can check for (matchingPageCount &lt; smallPageCount) instead ... or (pagesToDecommit &lt; smallPagesPerPhysicalPage) if you choose my suggested renaming.

&gt; Source/bmalloc/bmalloc/Heap.cpp:316
&gt; +    m_physicalPageMap.decommit(firstPageToDecommit, decommitSize);

Just use physicalPagesBegin here instead of firstPageToDecommit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503576</commentid>
    <comment_count>16</comment_count>
      <attachid>361362</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-06 18:57:44 -0800</bug_when>
    <thetext>Created attachment 361362
Patch for Landing

Has changes in response to review.  Waiting on performance tests before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503632</commentid>
    <comment_count>17</comment_count>
      <attachid>361362</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-06 21:57:28 -0800</bug_when>
    <thetext>Comment on attachment 361362
Patch for Landing

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

&gt; Source/bmalloc/bmalloc/Heap.cpp:136
&gt; +        // We only want power of 2 pageSizes. Given that smallPageSize is a power of 2, we just double it when we want a larger size.
&gt; +        for (size_t pageSize = smallPageSize; pageSize &lt; pageSizeMax; pageSize *= 2) {

This isn&apos;t quite right. At page sizes above { 4kB on Mac, 16kB on iOS }, you have a wasteful increase in page size.

We don&apos;t actually want powers of two. We want either even divisors of m_vmPageSizePhysical or even multiples of m_vmPageSizePhysical. That&apos;s what guarantees that we can madvise each physical page without waste.

You can get that effect by doing *= 2 up to m_vmPageSizePhysical and += m_vmPageSizePhysical above m_vmPageSizePhysical. I would write that as two loops.

&gt; Source/bmalloc/bmalloc/Heap.cpp:294
&gt; +    for (auto* page : chunk-&gt;freePages()) {
&gt; +        if (page &gt;= beginPageRange &amp;&amp; page &lt; endPageRange) {
&gt; +            smallPagesReadyToDecommit++;
&gt; +            if (smallPagesReadyToDecommit == smallPagePerPhysicalPage)
&gt; +                break;
&gt; +        }
&gt; +    }

We don&apos;t need a linear search of the free page list to find { 2 or 4 } pages thet are aligned neighbors.

Chunk needs this API:

    size_t pageNumber(SmallPage*);

You can make a mask like this:

    auto mask = smallPagePerPhysicalPage - 1;

Then you can iterate the pages you need like this:

auto pages = chunk-&gt;pages()[chunk-&gt;pageNumber(smallPage) &amp; mask];
for (size_t i = 0; i &lt; smallPagePerPhysicalPage; ++i) {
    auto page = pages[i];
    ...
}

Also, there&apos;s no need to count smallPagesReadyToDecommit. You can just return if any page says it has a non-zero refCount().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503716</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 07:26:22 -0800</bug_when>
    <thetext>Actually, even better than masking the page and iterating all neighbors, you should just skip any page that isn’t already aligned to the mask. 

That way, the first page in a run of pages is in charge of madvising the run, and the rest of the pages can be no-ops. If you never iterate the first page, that’s ok, that proves you would not have madvised the run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503859</commentid>
    <comment_count>19</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-07 11:53:13 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #17)
&gt; Comment on attachment 361362 [details]
&gt; Patch for Landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361362&amp;action=review
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Heap.cpp:136
&gt; &gt; +        // We only want power of 2 pageSizes. Given that smallPageSize is a power of 2, we just double it when we want a larger size.
&gt; &gt; +        for (size_t pageSize = smallPageSize; pageSize &lt; pageSizeMax; pageSize *= 2) {
&gt; 
&gt; This isn&apos;t quite right. At page sizes above { 4kB on Mac, 16kB on iOS }, you
&gt; have a wasteful increase in page size.
&gt; 
&gt; We don&apos;t actually want powers of two. We want either even divisors of
&gt; m_vmPageSizePhysical or even multiples of m_vmPageSizePhysical. That&apos;s what
&gt; guarantees that we can madvise each physical page without waste.
&gt; 
&gt; You can get that effect by doing *= 2 up to m_vmPageSizePhysical and +=
&gt; m_vmPageSizePhysical above m_vmPageSizePhysical. I would write that as two
&gt; loops.

Done.

&gt; &gt; Source/bmalloc/bmalloc/Heap.cpp:294
&gt; &gt; +    for (auto* page : chunk-&gt;freePages()) {
&gt; &gt; +        if (page &gt;= beginPageRange &amp;&amp; page &lt; endPageRange) {
&gt; &gt; +            smallPagesReadyToDecommit++;
&gt; &gt; +            if (smallPagesReadyToDecommit == smallPagePerPhysicalPage)
&gt; &gt; +                break;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; We don&apos;t need a linear search of the free page list to find { 2 or 4 } pages
&gt; thet are aligned neighbors.
&gt; 
&gt; Chunk needs this API:
&gt; 
&gt;     size_t pageNumber(SmallPage*);
&gt; 
&gt; You can make a mask like this:
&gt; 
&gt;     auto mask = smallPagePerPhysicalPage - 1;
&gt; 
&gt; Then you can iterate the pages you need like this:
&gt; 
&gt; auto pages = chunk-&gt;pages()[chunk-&gt;pageNumber(smallPage) &amp; mask];
&gt; for (size_t i = 0; i &lt; smallPagePerPhysicalPage; ++i) {
&gt;     auto page = pages[i];
&gt;     ...
&gt; }

We can&apos;t iterate by incrementing the page number since pages that are bigger than smallPageSize use multiple SmallPage entries in Chunk::m_pages (and set Page::m_slide accordingly).  Calculating a stride is possible, but ugly.  We should use a for loop of Objects with the pageSize just like elsewhere in the code.

It still makes sense to let the first page in the physical page manage the madvising.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503863</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 12:03:53 -0800</bug_when>
    <thetext>&gt; We can&apos;t iterate by incrementing the page number since pages that are bigger
&gt; than smallPageSize use multiple SmallPage entries in Chunk::m_pages (and set
&gt; Page::m_slide accordingly).  Calculating a stride is possible, but ugly.  We
&gt; should use a for loop of Objects with the pageSize just like elsewhere in
&gt; the code.
&gt; 
&gt; It still makes sense to let the first page in the physical page manage the
&gt; madvising.

Good point! Yeah, let&apos;s use masking to identify the first page and make the first page responsible for scanning the rest, but let&apos;s also use Object-based iteration rather than ++i.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503901</commentid>
    <comment_count>21</comment_count>
      <attachid>361436</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-07 13:32:57 -0800</bug_when>
    <thetext>Created attachment 361436
Updated patch responding to review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503944</commentid>
    <comment_count>22</comment_count>
      <attachid>361436</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 14:29:00 -0800</bug_when>
    <thetext>Comment on attachment 361436
Updated patch responding to review comments

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504072</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-02-07 18:30:24 -0800</bug_when>
    <thetext>Committed r241182: &lt;https://trac.webkit.org/changeset/241182&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504771</commentid>
    <comment_count>24</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-10 19:48:54 -0800</bug_when>
    <thetext>It seems possible this is a speedometer2 regression on iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505292</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-12 11:17:43 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 194547</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356564</attachid>
            <date>2018-12-04 18:08:18 -0800</date>
            <delta_ts>2018-12-11 10:17:52 -0800</delta_ts>
            <desc>Work in progress patch</desc>
            <filename>192389-wip1.patch</filename>
            <type>text/plain</type>
            <size>12959</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODg4MikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE4LTEyLTA0ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2MgdXNlcyBtb3Jl
IG1lbW9yeSBvZiBpT1MgY29tcGFyZWQgdG8gbWFjT1MgZHVlIHRvIHBoeXNpY2FsIHBhZ2Ugc2l6
ZSBkaWZmZXJlbmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkyMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgaW5jcmVtZW50cyBpbnN0ZWFkIG9mCisgICAgICAgIHBoeXNpY2Fs
IHBhZ2Ugc2l6ZSBpbmNyZW1lbnRzLiAgVGhpcyByZXF1aXJlZCBjaGFuZ2luZyB0aGUgc21hbGwg
cGFnZSBjb21taXQgLyBkZWNvbW1pdCBjb2RlCisgICAgICAgIHRvIHdvcmsgaW4gZnVsbCBwaHlz
aWNhbCBwYWdlIGluY3JlbWVudHMuICBGb3IgcGFnZSBjbGFzc2VzIGZvciBwaHlzaWNhbCBwYWdl
IHNpemUgYW5kIGxhcmdlciwKKyAgICAgICAgdGhlcmUgd2Fzbid0IGFueSBjaGFuZ2UuICBXaGVu
IHNjYXZlbmdpbmcgcGFnZSBjbGFzc2VzIHNtYWxsZXIgdGhhbiB0aGUgcGh5c2ljYWwgcGFnZSBz
aXplLAorICAgICAgICB3ZSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgb3Igbm90IHRoZSBhZGph
Y2VudCBzbWFsbCBwYWdlcyBvbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWdlIGFyZQorICAgICAgICBh
bHNvIGZyZWUgYmVmb3JlIGRlY29tbWl0aW5nIHRoYXQgY29udGFpbmluZyBwYWdlLiAgV2hlbiB3
ZSBuZWVkIHRvIGNvbW1pdCBtb3JlIG1lbW9yeSwKKyAgICAgICAgd2UgY29tbWl0IHRoZSB3aG9s
ZSBwYWdlLCBhbmQgYWRkIGFueSBhZGphY2VudCB2aXJ0dWFsIHBhZ2VzIHRoYXQgd2VyZSBmdWxs
eSBjb21taXRlZCBhcyB3ZWxsLgorCisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAg
ICAoYm1hbGxvYzo6Zm9yRWFjaFBhZ2UpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKToKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEpOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZmluZFNtYWxsUGFn
ZVJhbmdlU2hhcmluZ1BoeXNpY2FsUGFnZXMpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
RGVjb21taXRTbWFsbFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6Y29tbWl0U21hbGxQ
YWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSk6Cisg
ICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1hbGxvYy9WTUFsbG9jYXRlLmg6
CisgICAgICAgIChibWFsbG9jOjp2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKToKKyAgICAgICAg
KGJtYWxsb2M6OnBoeXNpY2FsUGFnZVNpemVTbG9wcHlSb3VuZFVwKToKKwogMjAxOC0xMS0yMSAg
RG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KIAogICAgICAgICBFbmFibGUg
SklUIG9uIEFSTS9MaW51eApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkocmV2aXNpb24gMjM4
ODM1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw3ICs3Nyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIGZvckVhY2gK
IHsKICAgICAvLyBXZSBhbGlnbiB0byBhdCBsZWFzdCB0aGUgcGFnZSBzaXplIHNvIHdlIGNhbiBz
ZXJ2aWNlIGFsaWduZWQgYWxsb2NhdGlvbnMKICAgICAvLyBhdCBlcXVhbCBhbmQgc21hbGxlciBw
b3dlcnMgb2YgdHdvLCBhbmQgYWxzbyBzbyB3ZSBjYW4gdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdl
cygpLgotICAgIHNpemVfdCBtZXRhZGF0YVNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mTm9uUG93
ZXJPZlR3byhwYWdlU2l6ZSwgc2l6ZW9mKENodW5rKSk7CisgICAgc2l6ZV90IGZpcnN0UGFnZU9m
ZnNldCA9IG1heChwYWdlU2l6ZSwgdm1QYWdlU2l6ZSgpKTsKKyAgICBzaXplX3QgbWV0YWRhdGFT
aXplID0gcm91bmRVcFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28oZmlyc3RQYWdlT2Zmc2V0LCBz
aXplb2YoQ2h1bmspKTsKIAogICAgIE9iamVjdCBiZWdpbihjaHVuaywgbWV0YWRhdGFTaXplKTsK
ICAgICBPYmplY3QgZW5kKGNodW5rLCBjaHVua1NpemUpOwpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hl
YXAuY3BwCShyZXZpc2lvbiAyMzg4MzUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHNpemVfdCBIZWFwOjpnaWdhY2Fn
ZVNpemUoKQogdm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKIHsKICAgICBzaXpl
X3Qgc2l6ZUNsYXNzQ291bnQgPSBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6ZSk7Ci0g
ICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5c2ljYWwgLyBzbWFsbExp
bmVTaXplOworICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFs
bExpbmVTaXplOwogICAgIG1fc21hbGxMaW5lTWV0YWRhdGEuZ3JvdyhzaXplQ2xhc3NDb3VudCAq
IHNtYWxsTGluZUNvdW50KTsKIAogICAgIGZvciAoc2l6ZV90IHNpemVDbGFzcyA9IDA7IHNpemVD
bGFzcyA8IHNpemVDbGFzc0NvdW50OyArK3NpemVDbGFzcykgewpAQCAtOTYsNyArOTYsNyBAQCB2
b2lkIEhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEoKQogCiAgICAgICAgIHNpemVfdCBvYmpl
Y3QgPSAwOwogICAgICAgICBzaXplX3QgbGluZSA9IDA7Ci0gICAgICAgIHdoaWxlIChvYmplY3Qg
PCBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICB3aGlsZSAob2JqZWN0IDwgc21hbGxQ
YWdlU2l6ZSkgewogICAgICAgICAgICAgbGluZSA9IG9iamVjdCAvIHNtYWxsTGluZVNpemU7CiAg
ICAgICAgICAgICBzaXplX3QgbGVmdG92ZXIgPSBvYmplY3QgJSBzbWFsbExpbmVTaXplOwogCkBA
IC0xMTAsNyArMTEwLDcgQEAgdm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERvbid0IGFsbG93IHRoZSBsYXN0IG9iamVjdCBpbiBhIHBh
Z2UgdG8gZXNjYXBlIHRoZSBwYWdlLgotICAgICAgICBpZiAob2JqZWN0ID4gbV92bVBhZ2VTaXpl
UGh5c2ljYWwpIHsKKyAgICAgICAgaWYgKG9iamVjdCA+IHNtYWxsUGFnZVNpemUpIHsKICAgICAg
ICAgICAgIEJBU1NFUlQocGFnZU1ldGFkYXRhW2xpbmVdLm9iamVjdENvdW50KTsKICAgICAgICAg
ICAgIC0tcGFnZU1ldGFkYXRhW2xpbmVdLm9iamVjdENvdW50OwogICAgICAgICB9CkBAIC0xMjIs
MTEgKzEyMiwxMSBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEoKQogICAgIGF1
dG8gY29tcHV0ZVBhZ2VTaXplID0gWyZdKHNpemVfdCBzaXplQ2xhc3MpIHsKICAgICAgICAgc2l6
ZV90IHNpemUgPSBvYmplY3RTaXplKHNpemVDbGFzcyk7CiAgICAgICAgIGlmIChzaXplQ2xhc3Mg
PCBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4g
bV92bVBhZ2VTaXplUGh5c2ljYWw7CisgICAgICAgICAgICByZXR1cm4gc21hbGxQYWdlU2l6ZTsK
IAotICAgICAgICBmb3IgKHNpemVfdCBwYWdlU2l6ZSA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwor
ICAgICAgICBmb3IgKHNpemVfdCBwYWdlU2l6ZSA9IHNtYWxsUGFnZVNpemU7CiAgICAgICAgICAg
ICBwYWdlU2l6ZSA8IHBhZ2VTaXplTWF4OwotICAgICAgICAgICAgcGFnZVNpemUgKz0gbV92bVBh
Z2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgICAgIHBhZ2VTaXplICs9IHNtYWxsUGFnZVNpemUp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VSVChwYWdlU2l6ZSA8PSBjaHVua1NpemUgLyAy
KTsKICAgICAgICAgICAgIHNpemVfdCB3YXN0ZSA9IHBhZ2VTaXplICUgc2l6ZTsKICAgICAgICAg
ICAgIGlmICh3YXN0ZSA8PSBwYWdlU2l6ZSAvIHBhZ2VTaXplV2FzdGVGYWN0b3IpCkBAIC0xODIs
MTQgKzE4Miw3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGUKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBzaXplX3QgcGFn
ZVNpemUgPSBibWFsbG9jOjpwYWdlU2l6ZSgmbGlzdCAtICZtX2ZyZWVQYWdlc1swXSk7Ci0gICAg
ICAgICAgICAgICAgc2l6ZV90IGRlY29tbWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHko
cGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotICAgICAgICAgICAgICAgIG1fZnJl
ZWFibGVNZW1vcnkgLT0gZGVjb21taXRTaXplOwotICAgICAgICAgICAgICAgIG1fZm9vdHByaW50
IC09IGRlY29tbWl0U2l6ZTsKLSAgICAgICAgICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihw
YWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcGFnZS0+
c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7Ci0jaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQ
IAotICAgICAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KHBhZ2UtPmJlZ2lu
KCktPmJlZ2luKCksIHBhZ2VTaXplKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIHRyeURlY29t
bWl0U21hbGxQYWdlKGxvY2ssIGRlY29tbWl0dGVyLCBwYWdlLCBwYWdlU2l6ZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNjEsNiArMjU0LDEyMyBAQCB2b2lkIEhlYXA6
OmFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OnVuaXF1CiAgICAgbV9mcmVlUGFnZXNbcGFnZUNsYXNz
XS5wdXNoKGNodW5rKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTG9jaywgdHlwZW5hbWUgRnVu
Y3Rpb24+CitzdHJ1Y3QgSGVhcDo6U21hbGxQYWdlUmFuZ2UgSGVhcDo6ZmluZFNtYWxsUGFnZVJh
bmdlU2hhcmluZ1BoeXNpY2FsUGFnZXMoTG9jayYsIFNtYWxsUGFnZSogcGFnZSwgc2l6ZV90IHBh
Z2VTaXplLCBGdW5jdGlvbiBpbmNsdWRlU21hbGxQYWdlQXQpCit7CisgICAgc3RydWN0IFNtYWxs
UGFnZVJhbmdlIHJlc3VsdCB7IG51bGxwdHIsIDAgfTsKKworICAgIGlmIChwYWdlU2l6ZSA+PSBt
X3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICByZXN1bHQuZmlyc3QgPSBwYWdlOworICAg
ICAgICByZXN1bHQuY291bnQgPSAxOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgY2hhciogcGFnZUJlZ2luID0gcGFnZS0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBjaGFy
KiBwaHlzaWNhbFBhZ2VzQmVnaW4gPSByb3VuZERvd25Ub011bHRpcGxlT2YobV92bVBhZ2VTaXpl
UGh5c2ljYWwsIHBhZ2VCZWdpbik7CisgICAgY2hhciogcGh5c2ljYWxQYWdlc0VuZCA9IHJvdW5k
VXBUb011bHRpcGxlT2YobV92bVBhZ2VTaXplUGh5c2ljYWwsIHBhZ2VCZWdpbiArIHBhZ2VTaXpl
KTsKKyAgICBjaGFyKiB0ZW1wUGFnZUJlZ2luID0gcGFnZUJlZ2luOworICAgIGNoYXIqIGZpcnN0
SW5jbHVkZWRQYWdlQmVnaW4gPSBudWxscHRyOworCisgICAgZm9yICh1bnNpZ25lZCBtYXhTbWFs
bFBhZ2VzID0gMzI7IHRlbXBQYWdlQmVnaW4gPj0gcGh5c2ljYWxQYWdlc0JlZ2luICYmIG1heFNt
YWxsUGFnZXMtLTsgdGVtcFBhZ2VCZWdpbiAtPSBwYWdlU2l6ZSkgeworICAgICAgICBpZiAoIWlu
Y2x1ZGVTbWFsbFBhZ2VBdCh0ZW1wUGFnZUJlZ2luKSkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGZpcnN0SW5jbHVkZWRQYWdlQmVnaW4gPSB0ZW1wUGFnZUJlZ2luOworICAgICAgICBy
ZXN1bHQuY291bnQrKzsKKyAgICB9CisKKyAgICBpZiAoIWZpcnN0SW5jbHVkZWRQYWdlQmVnaW4p
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0
KGZpcnN0SW5jbHVkZWRQYWdlQmVnaW4pOworICAgIHJlc3VsdC5maXJzdCA9IGNodW5rLT5wYWdl
KGNodW5rLT5vZmZzZXQoZmlyc3RJbmNsdWRlZFBhZ2VCZWdpbikpOworICAgIHRlbXBQYWdlQmVn
aW4gPSBwYWdlQmVnaW47CisKKyAgICBpZiAodGVtcFBhZ2VCZWdpbiArIHBhZ2VTaXplIDwgcGh5
c2ljYWxQYWdlc0VuZCkgeworICAgICAgICB0ZW1wUGFnZUJlZ2luICs9IHBhZ2VTaXplOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgbWF4U21hbGxQYWdlcyA9IDMyOyBtYXhTbWFsbFBhZ2VzLS07
IHRlbXBQYWdlQmVnaW4gKz0gcGFnZVNpemUpIHsKKyAgICAgICAgICAgIGlmICghaW5jbHVkZVNt
YWxsUGFnZUF0KHRlbXBQYWdlQmVnaW4pKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICByZXN1bHQuY291bnQrKzsKKworICAgICAgICAgICAgaWYgKHRlbXBQYWdlQmVnaW4g
KyBwYWdlU2l6ZSA+PSBwaHlzaWNhbFBhZ2VzRW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBIZWFwOjp0
cnlEZWNvbW1pdFNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+JiBsb2NrLCBCdWxrRGVj
b21taXQmIGRlY29tbWl0dGVyLCBTbWFsbFBhZ2UqIHNtYWxsUGFnZSwgc2l6ZV90IHBhZ2VTaXpl
KQoreworICAgIHN0cnVjdCBIZWFwOjpTbWFsbFBhZ2VSYW5nZSBwYWdlUmFuZ2UgPSBmaW5kU21h
bGxQYWdlUmFuZ2VTaGFyaW5nUGh5c2ljYWxQYWdlcyhsb2NrLCBzbWFsbFBhZ2UsIHBhZ2VTaXpl
LCBbJl0oY2hhciogc21hbGxQYWdlQmVnaW4pIHsKKyAgICAgICAgQ2h1bmsqIGNodW5rID0gQ2h1
bms6OmdldChzbWFsbFBhZ2VCZWdpbik7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZVRvQ2hlY2sg
PSBjaHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KHNtYWxsUGFnZUJlZ2luKSk7CisKKyAgICAgICAg
Zm9yIChhdXRvKiBwYWdlIDogY2h1bmstPmZyZWVQYWdlcygpKSB7CisgICAgICAgICAgICBpZiAo
cGFnZVRvQ2hlY2sgPT0gcGFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFnZVRvQ2hlY2st
Pmhhc1BoeXNpY2FsUGFnZXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9KTsKKworICAgIGlmICghcGFnZVJhbmdlLmZpcnN0IHx8ICFwYWdlUmFuZ2UuY291bnQp
CisgICAgICAgIHJldHVybjsKKworICAgIGNoYXIqIGZpcnN0UGFnZUJlZ2luID0gcGFnZVJhbmdl
LmZpcnN0LT5iZWdpbigpLT5iZWdpbigpOworICAgIHNpemVfdCBkZWNvbW1pdFNpemUgPSBwaHlz
aWNhbFBhZ2VTaXplU2xvcHB5KGZpcnN0UGFnZUJlZ2luLCBwYWdlUmFuZ2UuY291bnQgKiBwYWdl
U2l6ZSk7CisgICAgY2hhciogZGVjb21taXRFbmQgPSBmaXJzdFBhZ2VCZWdpbiArIGRlY29tbWl0
U2l6ZTsKKyAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IGRlY29tbWl0U2l6ZTsKKyAgICBtX2Zvb3Rw
cmludCAtPSBkZWNvbW1pdFNpemU7CisgICAgZGVjb21taXR0ZXIuYWRkRWFnZXIoZmlyc3RQYWdl
QmVnaW4sIGRlY29tbWl0U2l6ZSk7CisgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6OmdldChmaXJz
dFBhZ2VCZWdpbik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZ2VSYW5nZS5jb3Vu
dDsgaSsrKSB7CisgICAgICAgIGNoYXIqIHBhZ2VCZWdpbiA9IGZpcnN0UGFnZUJlZ2luICsgKGkg
KiBwYWdlU2l6ZSk7CisgICAgICAgIGlmIChwYWdlQmVnaW4gPj0gZmlyc3RQYWdlQmVnaW4gJiYg
cGFnZUJlZ2luICsgcGFnZVNpemUgPD0gZGVjb21taXRFbmQpIHsKKyAgICAgICAgICAgIFNtYWxs
UGFnZSogcGFnZVRvRGVjb21taXQgPSBjaHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KHBhZ2VCZWdp
bikpOworICAgICAgICAgICAgcGFnZVRvRGVjb21taXQtPnNldEhhc1BoeXNpY2FsUGFnZXMoZmFs
c2UpOworICAgICAgICB9CisgICAgfQorI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAorICAg
IG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KHBhZ2VSYW5nZS5zdGFydCwgZGVjb21taXRTaXpl
KTsKKyNlbmRpZgorfQorCit2b2lkIEhlYXA6OmNvbW1pdFNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9s
b2NrPE11dGV4PiYgbG9jaywgU21hbGxQYWdlKiBwYWdlLCBzaXplX3QgcGFnZVNpemUpCit7Cisg
ICAgc3RydWN0IEhlYXA6OlNtYWxsUGFnZVJhbmdlIHBhZ2VSYW5nZSA9IGZpbmRTbWFsbFBhZ2VS
YW5nZVNoYXJpbmdQaHlzaWNhbFBhZ2VzKGxvY2ssIHBhZ2UsIHBhZ2VTaXplLCBbJl0oY2hhciog
c21hbGxQYWdlQmVnaW4pIHsKKyAgICAgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6OmdldChzbWFs
bFBhZ2VCZWdpbik7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZVRvQ2hlY2sgPSBjaHVuay0+cGFn
ZShjaHVuay0+b2Zmc2V0KHNtYWxsUGFnZUJlZ2luKSk7CisgICAgICAgIHJldHVybiAhcGFnZVRv
Q2hlY2stPmhhc1BoeXNpY2FsUGFnZXMoKTsKKyAgICB9KTsKKworICAgIEJBU1NFUlQocGFnZVJh
bmdlLmZpcnN0ICYmIHBhZ2VSYW5nZS5jb3VudCk7CisKKyAgICBjaGFyKiBmaXJzdFBhZ2VCZWdp
biA9IHBhZ2VSYW5nZS5maXJzdC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgY29tbWl0
U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHlSb3VuZFVwKGZpcnN0UGFnZUJlZ2luLCBwYWdl
UmFuZ2UuY291bnQgKiBwYWdlU2l6ZSk7CisgICAgQkFTU0VSVChjb21taXRTaXplKTsKKyAgICBj
aGFyKiBjb21taXRFbmQgPSBmaXJzdFBhZ2VCZWdpbiArIGNvbW1pdFNpemU7CisgICAgbV9mb290
cHJpbnQgKz0gY29tbWl0U2l6ZTsKKworICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQoZmly
c3RQYWdlQmVnaW4pOworICAgIEJBU1NFUlQoY2h1bmsgPT0gQ2h1bms6OmdldChwYWdlLT5iZWdp
bigpLT5iZWdpbigpKSk7CisgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkoZmlyc3RQ
YWdlQmVnaW4sIGNvbW1pdFNpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWdl
UmFuZ2UuY291bnQ7IGkrKykgeworICAgICAgICBjaGFyKiBwYWdlQmVnaW4gPSBmaXJzdFBhZ2VC
ZWdpbiArIChpICogcGFnZVNpemUpOworICAgICAgICBpZiAocGFnZUJlZ2luID49IGZpcnN0UGFn
ZUJlZ2luICYmIHBhZ2VCZWdpbiArIHBhZ2VTaXplIDw9IGNvbW1pdEVuZCkgeworICAgICAgICAg
ICAgU21hbGxQYWdlKiBwYWdlVG9Db21taXQgPSBjaHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KHBh
Z2VCZWdpbikpOworICAgICAgICAgICAgcGFnZVRvQ29tbWl0LT5zZXRIYXNQaHlzaWNhbFBhZ2Vz
KHRydWUpOworICAgICAgICB9CisgICAgfQorI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAor
ICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlUmFuZ2Uuc3RhcnQsIGNvbW1pdFNpemUp
OworI2VuZGlmCit9CisKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqIGNo
dW5rLCBzaXplX3QgcGFnZUNsYXNzKQogewogICAgIG1fb2JqZWN0VHlwZXMuc2V0KGNodW5rLCBP
YmplY3RUeXBlOjpMYXJnZSk7CkBAIC0zMTksMTIgKzQyOSw3IEBAIFNtYWxsUGFnZSogSGVhcDo6
YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjoKICAgICAgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgLT0g
cGh5c2ljYWxTaXplOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fc2NhdmVuZ2VyLT5z
Y2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShwYWdlU2l6ZSk7Ci0gICAgICAgICAgICBtX2Zv
b3RwcmludCArPSBwaHlzaWNhbFNpemU7Ci0gICAgICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQ
YWdlc1Nsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAg
ICBwYWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKHRydWUpOwotI2lmIEVOQUJMRV9QSFlTSUNBTF9Q
QUdFX01BUCAKLSAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlLT5iZWdp
bigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbW1pdFNtYWxs
UGFnZShsb2NrLCBwYWdlLCBwYWdlU2l6ZSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4g
cGFnZTsKQEAgLTM4NCw3ICs0ODksNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlNZXRhCiAgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywg
c2l6ZUNsYXNzLCBsaW5lQ2FjaGUpOwogICAgIFNtYWxsTGluZSogbGluZXMgPSBwYWdlLT5iZWdp
bigpOwogICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKLSAgICBzaXplX3Qg
c21hbGxMaW5lQ291bnQgPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCAvIHNtYWxsTGluZVNpemU7Cisg
ICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7
CiAgICAgTGluZU1ldGFkYXRhKiBwYWdlTWV0YWRhdGEgPSAmbV9zbWFsbExpbmVNZXRhZGF0YVtz
aXplQ2xhc3MgKiBzbWFsbExpbmVDb3VudF07CiAgICAgCiAgICAgYXV0byBmaW5kU21hbGxCdW1w
UmFuZ2UgPSBbJl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
aAkocmV2aXNpb24gMjM4ODM1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
IH07CiAKKyAgICBzdHJ1Y3QgU21hbGxQYWdlUmFuZ2UgeworICAgICAgICBTbWFsbFBhZ2UqIGZp
cnN0OworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgfTsKKwogICAgIH5IZWFwKCkgPSBkZWxl
dGU7CiAgICAgCiAgICAgYm9vbCB1c2luZ0dpZ2FjYWdlKCk7CkBAIC0xMjAsNiArMTI1LDExIEBA
IHByaXZhdGU6CiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9s
b2NrPE11dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYpOwogICAgIHZvaWQgZGVh
bGxvY2F0ZVNtYWxsTGluZShzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYsIE9iamVjdCwgTGluZUNh
Y2hlJik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrLCB0eXBlbmFtZSBGdW5jdGlvbj4K
KyAgICBzdHJ1Y3QgU21hbGxQYWdlUmFuZ2UgZmluZFNtYWxsUGFnZVJhbmdlU2hhcmluZ1BoeXNp
Y2FsUGFnZXMoTG9jayYsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdlU2l6ZSwgRnVuY3Rpb24gaW5j
bHVkZVNtYWxsUGFnZSk7CisgICAgdm9pZCB0cnlEZWNvbW1pdFNtYWxsUGFnZShzdGQ6OmxvY2tf
Z3VhcmQ8TXV0ZXg+JiwgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgU21hbGxQYWdlKiwgc2l6
ZV90IHBhZ2VTaXplKTsKKyAgICB2b2lkIGNvbW1pdFNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2Nr
PE11dGV4PiYsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdlU2l6ZSk7CisKICAgICB2b2lkIGFsbG9j
YXRlU21hbGxDaHVuayhzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYsIHNpemVfdCBwYWdlQ2xhc3Mp
OwogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqLCBzaXplX3QgcGFnZUNsYXNz
KTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgJKHJldmlzaW9uIDIzODgz
NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1BbGxvY2F0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzUsNiArMjM1LDE2IEBAIGlubGluZSBzaXplX3QgcGh5c2ljYWxQYWdlU2l6ZVNsb3Bw
eSh2b2kKICAgICByZXR1cm4gZW5kIC0gYmVnaW47CiB9CiAKK2lubGluZSBzaXplX3QgcGh5c2lj
YWxQYWdlU2l6ZVNsb3BweVJvdW5kVXAodm9pZCogcCwgc2l6ZV90IHNpemUpCit7CisgICAgY2hh
ciogYmVnaW4gPSByb3VuZERvd25Ub011bHRpcGxlT2Yodm1QYWdlU2l6ZVBoeXNpY2FsKCksIHN0
YXRpY19jYXN0PGNoYXIqPihwKSk7CisgICAgY2hhciogZW5kID0gcm91bmRVcFRvTXVsdGlwbGVP
Zih2bVBhZ2VTaXplUGh5c2ljYWwoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KHApICsgc2l6ZSk7Cisg
ICAgCisgICAgaWYgKGJlZ2luID49IGVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGVuZCAtIGJlZ2luOworfQorCiAvLyBUcmltcyByZXF1ZXN0cyB0aGF0IGFyZSB1bi1wYWdlLWFs
aWduZWQuCiBpbmxpbmUgdm9pZCB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHZvaWQq
IHAsIHNpemVfdCBzaXplKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357062</attachid>
            <date>2018-12-11 10:17:52 -0800</date>
            <delta_ts>2019-02-04 16:44:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>192389.patch</filename>
            <type>text/plain</type>
            <size>12969</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTA3NCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE4LTEyLTExICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2MgdXNlcyBtb3Jl
IG1lbW9yeSBvZiBpT1MgY29tcGFyZWQgdG8gbWFjT1MgZHVlIHRvIHBoeXNpY2FsIHBhZ2Ugc2l6
ZSBkaWZmZXJlbmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkyMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgaW5jcmVtZW50cyBpbnN0ZWFkIG9mCisgICAgICAgIHBoeXNpY2Fs
IHBhZ2Ugc2l6ZSBpbmNyZW1lbnRzLiAgVGhpcyByZXF1aXJlZCBjaGFuZ2luZyB0aGUgc21hbGwg
cGFnZSBjb21taXQgLyBkZWNvbW1pdCBjb2RlCisgICAgICAgIHRvIHdvcmsgaW4gZnVsbCBwaHlz
aWNhbCBwYWdlIGluY3JlbWVudHMuICBGb3IgcGFnZSBjbGFzc2VzIHRoYXQgYXJlIHBoeXNpY2Fs
IHBhZ2Ugc2l6ZSBhbmQgICAgIAorICAgICAgICBsYXJnZXIsIHRoZXJlIHdhc24ndCBhbnkgY2hh
bmdlLiAgV2hlbiBzY2F2ZW5naW5nIHBhZ2UgY2xhc3NlcyBzbWFsbGVyIHRoYW4gdGhlIHBoeXNp
Y2FsIHBhZ2UKKyAgICAgICAgc2l6ZSwgd2UgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIG9yIG5v
dCB0aGUgYWRqYWNlbnQgc21hbGwgcGFnZXMgb24gdGhlIHNhbWUgcGh5c2ljYWwgcGFnZQorICAg
ICAgICBhcmUgYWxzbyBmcmVlIGJlZm9yZSBkZWNvbW1pdGluZyB0aGF0IGNvbnRhaW5pbmcgcGFn
ZS4gIFdoZW4gd2UgbmVlZCB0byBjb21taXQgbW9yZSBtZW1vcnksCisgICAgICAgIHdlIGNvbW1p
dCB0aGUgd2hvbGUgcGFnZSwgYW5kIGFkZCBhbnkgYWRqYWNlbnQgdmlydHVhbCBwYWdlcyB0aGF0
IHdlcmUgZnVsbHkgY29tbWl0ZWQgYXMgd2VsbC4KKworICAgICAgICAqIGJtYWxsb2MvQ2h1bmsu
aDoKKyAgICAgICAgKGJtYWxsb2M6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKiBibWFsbG9jL0hl
YXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSk6
CisgICAgICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplUGFnZU1ldGFkYXRhKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmZp
bmRTbWFsbFBhZ2VSYW5nZVNoYXJpbmdQaHlzaWNhbFBhZ2VzKToKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnRyeURlY29tbWl0U21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmNv
bW1pdFNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFn
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0
YWRhdGEpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAqIGJtYWxsb2MvVk1B
bGxvY2F0ZS5oOgorICAgICAgICAoYm1hbGxvYzo6dm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcyk6
CisgICAgICAgIChibWFsbG9jOjpwaHlzaWNhbFBhZ2VTaXplU2xvcHB5Um91bmRVcCk6CisKIDIw
MTgtMTEtMjEgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Q2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHJl
dmlzaW9uIDIzOTA3NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9p
ZCBmb3JFYWNoCiB7CiAgICAgLy8gV2UgYWxpZ24gdG8gYXQgbGVhc3QgdGhlIHBhZ2Ugc2l6ZSBz
byB3ZSBjYW4gc2VydmljZSBhbGlnbmVkIGFsbG9jYXRpb25zCiAgICAgLy8gYXQgZXF1YWwgYW5k
IHNtYWxsZXIgcG93ZXJzIG9mIHR3bywgYW5kIGFsc28gc28gd2UgY2FuIHZtRGVhbGxvY2F0ZVBo
eXNpY2FsUGFnZXMoKS4KLSAgICBzaXplX3QgbWV0YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlw
bGVPZk5vblBvd2VyT2ZUd28ocGFnZVNpemUsIHNpemVvZihDaHVuaykpOworICAgIHNpemVfdCBm
aXJzdFBhZ2VPZmZzZXQgPSBtYXgocGFnZVNpemUsIHZtUGFnZVNpemUoKSk7CisgICAgc2l6ZV90
IG1ldGFkYXRhU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2ZOb25Qb3dlck9mVHdvKGZpcnN0UGFn
ZU9mZnNldCwgc2l6ZW9mKENodW5rKSk7CiAKICAgICBPYmplY3QgYmVnaW4oY2h1bmssIG1ldGFk
YXRhU2l6ZSk7CiAgICAgT2JqZWN0IGVuZChjaHVuaywgY2h1bmtTaXplKTsKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMjM5MDc0KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBzaXplX3QgSGVh
cDo6Z2lnYWNhZ2VTaXplKCkKIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCiB7
CiAgICAgc2l6ZV90IHNpemVDbGFzc0NvdW50ID0gYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGlu
ZVNpemUpOwotICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2Fs
IC8gc21hbGxMaW5lU2l6ZTsKKyAgICBzaXplX3Qgc21hbGxMaW5lQ291bnQgPSBzbWFsbFBhZ2VT
aXplIC8gc21hbGxMaW5lU2l6ZTsKICAgICBtX3NtYWxsTGluZU1ldGFkYXRhLmdyb3coc2l6ZUNs
YXNzQ291bnQgKiBzbWFsbExpbmVDb3VudCk7CiAKICAgICBmb3IgKHNpemVfdCBzaXplQ2xhc3Mg
PSAwOyBzaXplQ2xhc3MgPCBzaXplQ2xhc3NDb3VudDsgKytzaXplQ2xhc3MpIHsKQEAgLTk2LDcg
Kzk2LDcgQEAgdm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKIAogICAgICAgICBz
aXplX3Qgb2JqZWN0ID0gMDsKICAgICAgICAgc2l6ZV90IGxpbmUgPSAwOwotICAgICAgICB3aGls
ZSAob2JqZWN0IDwgbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgd2hpbGUgKG9iamVj
dCA8IHNtYWxsUGFnZVNpemUpIHsKICAgICAgICAgICAgIGxpbmUgPSBvYmplY3QgLyBzbWFsbExp
bmVTaXplOwogICAgICAgICAgICAgc2l6ZV90IGxlZnRvdmVyID0gb2JqZWN0ICUgc21hbGxMaW5l
U2l6ZTsKIApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRh
ZGF0YSgpCiAgICAgICAgIH0KIAogICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGUgbGFzdCBvYmpl
Y3QgaW4gYSBwYWdlIHRvIGVzY2FwZSB0aGUgcGFnZS4KLSAgICAgICAgaWYgKG9iamVjdCA+IG1f
dm1QYWdlU2l6ZVBoeXNpY2FsKSB7CisgICAgICAgIGlmIChvYmplY3QgPiBzbWFsbFBhZ2VTaXpl
KSB7CiAgICAgICAgICAgICBCQVNTRVJUKHBhZ2VNZXRhZGF0YVtsaW5lXS5vYmplY3RDb3VudCk7
CiAgICAgICAgICAgICAtLXBhZ2VNZXRhZGF0YVtsaW5lXS5vYmplY3RDb3VudDsKICAgICAgICAg
fQpAQCAtMTIyLDExICsxMjIsMTEgQEAgdm9pZCBIZWFwOjppbml0aWFsaXplUGFnZU1ldGFkYXRh
KCkKICAgICBhdXRvIGNvbXB1dGVQYWdlU2l6ZSA9IFsmXShzaXplX3Qgc2l6ZUNsYXNzKSB7CiAg
ICAgICAgIHNpemVfdCBzaXplID0gb2JqZWN0U2l6ZShzaXplQ2xhc3MpOwogICAgICAgICBpZiAo
c2l6ZUNsYXNzIDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fdm1QYWdlU2l6ZVBoeXNpY2FsOworICAgICAgICAgICAgcmV0dXJuIHNtYWxs
UGFnZVNpemU7CiAKLSAgICAgICAgZm9yIChzaXplX3QgcGFnZVNpemUgPSBtX3ZtUGFnZVNpemVQ
aHlzaWNhbDsKKyAgICAgICAgZm9yIChzaXplX3QgcGFnZVNpemUgPSBzbWFsbFBhZ2VTaXplOwog
ICAgICAgICAgICAgcGFnZVNpemUgPCBwYWdlU2l6ZU1heDsKLSAgICAgICAgICAgIHBhZ2VTaXpl
ICs9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsKSB7CisgICAgICAgICAgICBwYWdlU2l6ZSArPSBzbWFs
bFBhZ2VTaXplKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQocGFnZVNpemUgPD0gY2h1
bmtTaXplIC8gMik7CiAgICAgICAgICAgICBzaXplX3Qgd2FzdGUgPSBwYWdlU2l6ZSAlIHNpemU7
CiAgICAgICAgICAgICBpZiAod2FzdGUgPD0gcGFnZVNpemUgLyBwYWdlU2l6ZVdhc3RlRmFjdG9y
KQpAQCAtMTgyLDE0ICsxODIsNyBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6bG9ja19ndWFy
ZDxNdXRlCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAg
c2l6ZV90IHBhZ2VTaXplID0gYm1hbGxvYzo6cGFnZVNpemUoJmxpc3QgLSAmbV9mcmVlUGFnZXNb
MF0pOwotICAgICAgICAgICAgICAgIHNpemVfdCBkZWNvbW1pdFNpemUgPSBwaHlzaWNhbFBhZ2VT
aXplU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKLSAgICAgICAgICAg
ICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IGRlY29tbWl0U2l6ZTsKLSAgICAgICAgICAgICAgICBt
X2Zvb3RwcmludCAtPSBkZWNvbW1pdFNpemU7Ci0gICAgICAgICAgICAgICAgZGVjb21taXR0ZXIu
YWRkRWFnZXIocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotICAgICAgICAgICAg
ICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXMoZmFsc2UpOwotI2lmIEVOQUJMRV9QSFlTSUNB
TF9QQUdFX01BUCAKLSAgICAgICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5kZWNvbW1pdChw
YWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAg
ICB0cnlEZWNvbW1pdFNtYWxsUGFnZShsb2NrLCBkZWNvbW1pdHRlciwgcGFnZSwgcGFnZVNpemUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjYxLDYgKzI1NCwxMjMgQEAg
dm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjp1bmlxdQogICAgIG1fZnJlZVBhZ2Vz
W3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2ssIHR5
cGVuYW1lIEZ1bmN0aW9uPgorc3RydWN0IEhlYXA6OlNtYWxsUGFnZVJhbmdlIEhlYXA6OmZpbmRT
bWFsbFBhZ2VSYW5nZVNoYXJpbmdQaHlzaWNhbFBhZ2VzKExvY2smLCBTbWFsbFBhZ2UqIHBhZ2Us
IHNpemVfdCBwYWdlU2l6ZSwgRnVuY3Rpb24gaW5jbHVkZVNtYWxsUGFnZUF0KQoreworICAgIHN0
cnVjdCBTbWFsbFBhZ2VSYW5nZSByZXN1bHQgeyBudWxscHRyLCAwIH07CisKKyAgICBpZiAocGFn
ZVNpemUgPj0gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgcmVzdWx0LmZpcnN0ID0g
cGFnZTsKKyAgICAgICAgcmVzdWx0LmNvdW50ID0gMTsKKworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIGNoYXIqIHBhZ2VCZWdpbiA9IHBhZ2UtPmJlZ2luKCktPmJlZ2luKCk7
CisgICAgY2hhciogcGh5c2ljYWxQYWdlc0JlZ2luID0gcm91bmREb3duVG9NdWx0aXBsZU9mKG1f
dm1QYWdlU2l6ZVBoeXNpY2FsLCBwYWdlQmVnaW4pOworICAgIGNoYXIqIHBoeXNpY2FsUGFnZXNF
bmQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBwYWdlQmVnaW4g
KyBwYWdlU2l6ZSk7CisgICAgY2hhciogdGVtcFBhZ2VCZWdpbiA9IHBhZ2VCZWdpbjsKKyAgICBj
aGFyKiBmaXJzdEluY2x1ZGVkUGFnZUJlZ2luID0gbnVsbHB0cjsKKworICAgIGZvciAodW5zaWdu
ZWQgbWF4U21hbGxQYWdlcyA9IDMyOyB0ZW1wUGFnZUJlZ2luID49IHBoeXNpY2FsUGFnZXNCZWdp
biAmJiBtYXhTbWFsbFBhZ2VzLS07IHRlbXBQYWdlQmVnaW4gLT0gcGFnZVNpemUpIHsKKyAgICAg
ICAgaWYgKCFpbmNsdWRlU21hbGxQYWdlQXQodGVtcFBhZ2VCZWdpbikpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBmaXJzdEluY2x1ZGVkUGFnZUJlZ2luID0gdGVtcFBhZ2VCZWdpbjsK
KyAgICAgICAgcmVzdWx0LmNvdW50Kys7CisgICAgfQorCisgICAgaWYgKCFmaXJzdEluY2x1ZGVk
UGFnZUJlZ2luKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQ2h1bmsqIGNodW5rID0g
Q2h1bms6OmdldChmaXJzdEluY2x1ZGVkUGFnZUJlZ2luKTsKKyAgICByZXN1bHQuZmlyc3QgPSBj
aHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KGZpcnN0SW5jbHVkZWRQYWdlQmVnaW4pKTsKKyAgICB0
ZW1wUGFnZUJlZ2luID0gcGFnZUJlZ2luOworCisgICAgaWYgKHRlbXBQYWdlQmVnaW4gKyBwYWdl
U2l6ZSA8IHBoeXNpY2FsUGFnZXNFbmQpIHsKKyAgICAgICAgdGVtcFBhZ2VCZWdpbiArPSBwYWdl
U2l6ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIG1heFNtYWxsUGFnZXMgPSAzMjsgbWF4U21h
bGxQYWdlcy0tOyB0ZW1wUGFnZUJlZ2luICs9IHBhZ2VTaXplKSB7CisgICAgICAgICAgICBpZiAo
IWluY2x1ZGVTbWFsbFBhZ2VBdCh0ZW1wUGFnZUJlZ2luKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgcmVzdWx0LmNvdW50Kys7CisKKyAgICAgICAgICAgIGlmICh0ZW1w
UGFnZUJlZ2luICsgcGFnZVNpemUgPj0gcGh5c2ljYWxQYWdlc0VuZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgSGVhcDo6dHJ5RGVjb21taXRTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYgbG9j
aywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgU21hbGxQYWdlKiBzbWFsbFBhZ2UsIHNpemVf
dCBwYWdlU2l6ZSkKK3sKKyAgICBzdHJ1Y3QgSGVhcDo6U21hbGxQYWdlUmFuZ2UgcGFnZVJhbmdl
ID0gZmluZFNtYWxsUGFnZVJhbmdlU2hhcmluZ1BoeXNpY2FsUGFnZXMobG9jaywgc21hbGxQYWdl
LCBwYWdlU2l6ZSwgWyZdKGNoYXIqIHNtYWxsUGFnZUJlZ2luKSB7CisgICAgICAgIENodW5rKiBj
aHVuayA9IENodW5rOjpnZXQoc21hbGxQYWdlQmVnaW4pOworICAgICAgICBTbWFsbFBhZ2UqIHBh
Z2VUb0NoZWNrID0gY2h1bmstPnBhZ2UoY2h1bmstPm9mZnNldChzbWFsbFBhZ2VCZWdpbikpOwor
CisgICAgICAgIGZvciAoYXV0byogcGFnZSA6IGNodW5rLT5mcmVlUGFnZXMoKSkgeworICAgICAg
ICAgICAgaWYgKHBhZ2VUb0NoZWNrID09IHBhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
Z2VUb0NoZWNrLT5oYXNQaHlzaWNhbFBhZ2VzKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBpZiAoIXBhZ2VSYW5nZS5maXJzdCB8fCAhcGFnZVJh
bmdlLmNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFyKiBmaXJzdFBhZ2VCZWdpbiA9
IHBhZ2VSYW5nZS5maXJzdC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgZGVjb21taXRT
aXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShmaXJzdFBhZ2VCZWdpbiwgcGFnZVJhbmdlLmNv
dW50ICogcGFnZVNpemUpOworICAgIGNoYXIqIGRlY29tbWl0RW5kID0gZmlyc3RQYWdlQmVnaW4g
KyBkZWNvbW1pdFNpemU7CisgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSBkZWNvbW1pdFNpemU7Cisg
ICAgbV9mb290cHJpbnQgLT0gZGVjb21taXRTaXplOworICAgIGRlY29tbWl0dGVyLmFkZEVhZ2Vy
KGZpcnN0UGFnZUJlZ2luLCBkZWNvbW1pdFNpemUpOworICAgIENodW5rKiBjaHVuayA9IENodW5r
OjpnZXQoZmlyc3RQYWdlQmVnaW4pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWdl
UmFuZ2UuY291bnQ7IGkrKykgeworICAgICAgICBjaGFyKiBwYWdlQmVnaW4gPSBmaXJzdFBhZ2VC
ZWdpbiArIChpICogcGFnZVNpemUpOworICAgICAgICBpZiAocGFnZUJlZ2luID49IGZpcnN0UGFn
ZUJlZ2luICYmIHBhZ2VCZWdpbiArIHBhZ2VTaXplIDw9IGRlY29tbWl0RW5kKSB7CisgICAgICAg
ICAgICBTbWFsbFBhZ2UqIHBhZ2VUb0RlY29tbWl0ID0gY2h1bmstPnBhZ2UoY2h1bmstPm9mZnNl
dChwYWdlQmVnaW4pKTsKKyAgICAgICAgICAgIHBhZ2VUb0RlY29tbWl0LT5zZXRIYXNQaHlzaWNh
bFBhZ2VzKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyNpZiBFTkFCTEVfUEhZU0lDQUxfUEFH
RV9NQVAKKyAgICBtX3BoeXNpY2FsUGFnZU1hcC5kZWNvbW1pdChwYWdlUmFuZ2Uuc3RhcnQsIGRl
Y29tbWl0U2l6ZSk7CisjZW5kaWYKK30KKwordm9pZCBIZWFwOjpjb21taXRTbWFsbFBhZ2Uoc3Rk
Ojp1bmlxdWVfbG9jazxNdXRleD4mIGxvY2ssIFNtYWxsUGFnZSogcGFnZSwgc2l6ZV90IHBhZ2VT
aXplKQoreworICAgIHN0cnVjdCBIZWFwOjpTbWFsbFBhZ2VSYW5nZSBwYWdlUmFuZ2UgPSBmaW5k
U21hbGxQYWdlUmFuZ2VTaGFyaW5nUGh5c2ljYWxQYWdlcyhsb2NrLCBwYWdlLCBwYWdlU2l6ZSwg
WyZdKGNoYXIqIHNtYWxsUGFnZUJlZ2luKSB7CisgICAgICAgIENodW5rKiBjaHVuayA9IENodW5r
OjpnZXQoc21hbGxQYWdlQmVnaW4pOworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2VUb0NoZWNrID0g
Y2h1bmstPnBhZ2UoY2h1bmstPm9mZnNldChzbWFsbFBhZ2VCZWdpbikpOworICAgICAgICByZXR1
cm4gIXBhZ2VUb0NoZWNrLT5oYXNQaHlzaWNhbFBhZ2VzKCk7CisgICAgfSk7CisKKyAgICBCQVNT
RVJUKHBhZ2VSYW5nZS5maXJzdCAmJiBwYWdlUmFuZ2UuY291bnQpOworCisgICAgY2hhciogZmly
c3RQYWdlQmVnaW4gPSBwYWdlUmFuZ2UuZmlyc3QtPmJlZ2luKCktPmJlZ2luKCk7CisgICAgc2l6
ZV90IGNvbW1pdFNpemUgPSBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5Um91bmRVcChmaXJzdFBhZ2VC
ZWdpbiwgcGFnZVJhbmdlLmNvdW50ICogcGFnZVNpemUpOworICAgIEJBU1NFUlQoY29tbWl0U2l6
ZSk7CisgICAgY2hhciogY29tbWl0RW5kID0gZmlyc3RQYWdlQmVnaW4gKyBjb21taXRTaXplOwor
ICAgIG1fZm9vdHByaW50ICs9IGNvbW1pdFNpemU7CisKKyAgICBDaHVuayogY2h1bmsgPSBDaHVu
azo6Z2V0KGZpcnN0UGFnZUJlZ2luKTsKKyAgICBCQVNTRVJUKGNodW5rID09IENodW5rOjpnZXQo
cGFnZS0+YmVnaW4oKS0+YmVnaW4oKSkpOworICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xv
cHB5KGZpcnN0UGFnZUJlZ2luLCBjb21taXRTaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGFnZVJhbmdlLmNvdW50OyBpKyspIHsKKyAgICAgICAgY2hhciogcGFnZUJlZ2luID0g
Zmlyc3RQYWdlQmVnaW4gKyAoaSAqIHBhZ2VTaXplKTsKKyAgICAgICAgaWYgKHBhZ2VCZWdpbiA+
PSBmaXJzdFBhZ2VCZWdpbiAmJiBwYWdlQmVnaW4gKyBwYWdlU2l6ZSA8PSBjb21taXRFbmQpIHsK
KyAgICAgICAgICAgIFNtYWxsUGFnZSogcGFnZVRvQ29tbWl0ID0gY2h1bmstPnBhZ2UoY2h1bmst
Pm9mZnNldChwYWdlQmVnaW4pKTsKKyAgICAgICAgICAgIHBhZ2VUb0NvbW1pdC0+c2V0SGFzUGh5
c2ljYWxQYWdlcyh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyNpZiBFTkFCTEVfUEhZU0lDQUxf
UEFHRV9NQVAKKyAgICBtX3BoeXNpY2FsUGFnZU1hcC5jb21taXQocGFnZVJhbmdlLnN0YXJ0LCBj
b21taXRTaXplKTsKKyNlbmRpZgorfQorCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5r
KENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VDbGFzcykKIHsKICAgICBtX29iamVjdFR5cGVzLnNl
dChjaHVuaywgT2JqZWN0VHlwZTo6TGFyZ2UpOwpAQCAtMzE5LDEyICs0MjksNyBAQCBTbWFsbFBh
Z2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6CiAgICAgICAgICAgICBtX2ZyZWVhYmxl
TWVtb3J5IC09IHBoeXNpY2FsU2l6ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX3Nj
YXZlbmdlci0+c2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUocGFnZVNpemUpOwotICAgICAg
ICAgICAgbV9mb290cHJpbnQgKz0gcGh5c2ljYWxTaXplOwotICAgICAgICAgICAgdm1BbGxvY2F0
ZVBoeXNpY2FsUGFnZXNTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwot
ICAgICAgICAgICAgcGFnZS0+c2V0SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKLSNpZiBFTkFCTEVf
UEhZU0lDQUxfUEFHRV9NQVAgCi0gICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5jb21taXQo
cGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotI2VuZGlmCisgICAgICAgICAgICBj
b21taXRTbWFsbFBhZ2UobG9jaywgcGFnZSwgcGFnZVNpemUpOwogICAgICAgICB9CiAKICAgICAg
ICAgcmV0dXJuIHBhZ2U7CkBAIC0zODQsNyArNDg5LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlc0J5TWV0YQogICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQ
YWdlKGxvY2ssIHNpemVDbGFzcywgbGluZUNhY2hlKTsKICAgICBTbWFsbExpbmUqIGxpbmVzID0g
cGFnZS0+YmVnaW4oKTsKICAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7Ci0g
ICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5c2ljYWwgLyBzbWFsbExp
bmVTaXplOworICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFs
bExpbmVTaXplOwogICAgIExpbmVNZXRhZGF0YSogcGFnZU1ldGFkYXRhID0gJm1fc21hbGxMaW5l
TWV0YWRhdGFbc2l6ZUNsYXNzICogc21hbGxMaW5lQ291bnRdOwogICAgIAogICAgIGF1dG8gZmlu
ZFNtYWxsQnVtcFJhbmdlID0gWyZdKHNpemVfdCYgbGluZU51bWJlcikgewpJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmgJKHJldmlzaW9uIDIzOTA3NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDExIEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICB9OwogCisgICAgc3RydWN0IFNtYWxsUGFnZVJhbmdlIHsKKyAgICAgICAgU21h
bGxQYWdlKiBmaXJzdDsKKyAgICAgICAgc2l6ZV90IGNvdW50OworICAgIH07CisKICAgICB+SGVh
cCgpID0gZGVsZXRlOwogICAgIAogICAgIGJvb2wgdXNpbmdHaWdhY2FnZSgpOwpAQCAtMTIwLDYg
KzEyNSwxMSBAQCBwcml2YXRlOgogICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3Rk
Ojp1bmlxdWVfbG9jazxNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmKTsKICAg
ICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBPYmpl
Y3QsIExpbmVDYWNoZSYpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9jaywgdHlwZW5hbWUg
RnVuY3Rpb24+CisgICAgc3RydWN0IFNtYWxsUGFnZVJhbmdlIGZpbmRTbWFsbFBhZ2VSYW5nZVNo
YXJpbmdQaHlzaWNhbFBhZ2VzKExvY2smLCBTbWFsbFBhZ2UqLCBzaXplX3QgcGFnZVNpemUsIEZ1
bmN0aW9uIGluY2x1ZGVTbWFsbFBhZ2UpOworICAgIHZvaWQgdHJ5RGVjb21taXRTbWFsbFBhZ2Uo
c3RkOjpsb2NrX2d1YXJkPE11dGV4PiYsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIsIFNtYWxs
UGFnZSosIHNpemVfdCBwYWdlU2l6ZSk7CisgICAgdm9pZCBjb21taXRTbWFsbFBhZ2Uoc3RkOjp1
bmlxdWVfbG9jazxNdXRleD4mLCBTbWFsbFBhZ2UqLCBzaXplX3QgcGFnZVNpemUpOworCiAgICAg
dm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBzaXplX3Qg
cGFnZUNsYXNzKTsKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbENodW5rKENodW5rKiwgc2l6ZV90
IHBhZ2VDbGFzcyk7CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1BbGxvY2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1BbGxvY2F0ZS5oCShyZXZp
c2lvbiAyMzkwNzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSwxNiBAQCBpbmxpbmUgc2l6ZV90IHBoeXNpY2FsUGFn
ZVNpemVTbG9wcHkodm9pCiAgICAgcmV0dXJuIGVuZCAtIGJlZ2luOwogfQogCitpbmxpbmUgc2l6
ZV90IHBoeXNpY2FsUGFnZVNpemVTbG9wcHlSb3VuZFVwKHZvaWQqIHAsIHNpemVfdCBzaXplKQor
eworICAgIGNoYXIqIGJlZ2luID0gcm91bmREb3duVG9NdWx0aXBsZU9mKHZtUGFnZVNpemVQaHlz
aWNhbCgpLCBzdGF0aWNfY2FzdDxjaGFyKj4ocCkpOworICAgIGNoYXIqIGVuZCA9IHJvdW5kVXBU
b011bHRpcGxlT2Yodm1QYWdlU2l6ZVBoeXNpY2FsKCksIHN0YXRpY19jYXN0PGNoYXIqPihwKSAr
IHNpemUpOworICAgIAorICAgIGlmIChiZWdpbiA+PSBlbmQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBlbmQgLSBiZWdpbjsKK30KKwogLy8gVHJpbXMgcmVxdWVzdHMgdGhhdCBhcmUg
dW4tcGFnZS1hbGlnbmVkLgogaW5saW5lIHZvaWQgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1Ns
b3BweSh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkKIHsK
</data>
<flag name="review"
          id="373977"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361127</attachid>
            <date>2019-02-04 16:44:19 -0800</date>
            <delta_ts>2019-02-04 17:05:36 -0800</delta_ts>
            <desc>{patch addressing review issues</desc>
            <filename>192389-2.patch</filename>
            <type>text/plain</type>
            <size>12937</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MDk0NykKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE5LTAyLTA0ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNj
cmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBzbWFs
bCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNpemUgInZpcnR1YWwgcGFnZSIg
bXVsdGlwbGVzIGluc3RlYWQgb2YKKyAgICAgICAgcGh5c2ljYWwgcGFnZSBzaXplIGluY3JlbWVu
dHMuICBUaGlzIHJlcXVpcmVkIGNoYW5naW5nIHRoZSBzbWFsbCBwYWdlIGNvbW1pdCAvIGRlY29t
bWl0IGNvZGUKKyAgICAgICAgdG8gd29yayBpbiBmdWxsIHBoeXNpY2FsIHBhZ2UgaW5jcmVtZW50
cy4gIEZvciBwYWdlIGNsYXNzZXMgdGhhdCBhcmUgcGh5c2ljYWwgcGFnZSBzaXplIGFuZCBsYXJn
ZXIsCisgICAgICAgIHRoZXJlIGlzbid0IGFueSBmdW5jdGlvbmFsIGNoYW5nZS4gIFdoZW4gc2Nh
dmVuZ2luZyBwYWdlIGNsYXNzZXMgc21hbGxlciB0aGFuIHRoZSBwaHlzaWNhbCBwYWdlIHNpemUs
CisgICAgICAgIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBvciBub3QgdGhlIGFkamFjZW50
IHNtYWxsIHBhZ2VzIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBhZ2UgYXJlIGFsc28KKyAgICAgICAg
ZnJlZSBiZWZvcmUgZGVjb21taXRpbmcgdGhhdCBjb250YWluaW5nIHBhZ2UuICBXaGVuIHdlIG5l
ZWQgdG8gY29tbWl0IG1vcmUgbWVtb3J5LCB3ZSBjb21taXQKKyAgICAgICAgdGhlIHdob2xlIHBh
Z2UsIGFuZCBhZGQgYW55IGFkamFjZW50IHZpcnR1YWwgcGFnZXMgdGhhdCB3ZXJlIGZ1bGx5IGNv
bW1pdHRlZCBhcyB3ZWxsLgorCisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAgICAo
Ym1hbGxvYzo6Zm9yRWFjaFBhZ2UpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKToKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEpOgorICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5RGVjb21taXRTbWFs
bFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6Y29tbWl0U21hbGxQYWdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAgICogYm1h
bGxvYy9IZWFwLmg6CisgICAgICAgICogYm1hbGxvYy9WTUFsbG9jYXRlLmg6CisgICAgICAgIChi
bWFsbG9jOjpwaHlzaWNhbFBhZ2VTaXplU2xvcHB5Um91bmRVcCk6CisKIDIwMTktMDEtMTggIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgZ2lnYWNhZ2Ug
c2xpZGUgc2hvdWxkIHJhbmRvbWl6ZSBib3RoIHN0YXJ0IGFuZCBlbmQKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NodW5rLmgJKHJldmlzaW9uIDI0MDkzOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Q2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdGlvbj4gdm9pZCBmb3JFYWNoCiB7CiAgICAgLy8gV2UgYWxpZ24gdG8gYXQgbGVhc3Qg
dGhlIHBhZ2Ugc2l6ZSBzbyB3ZSBjYW4gc2VydmljZSBhbGlnbmVkIGFsbG9jYXRpb25zCiAgICAg
Ly8gYXQgZXF1YWwgYW5kIHNtYWxsZXIgcG93ZXJzIG9mIHR3bywgYW5kIGFsc28gc28gd2UgY2Fu
IHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoKS4KLSAgICBzaXplX3QgbWV0YWRhdGFTaXplID0g
cm91bmRVcFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28ocGFnZVNpemUsIHNpemVvZihDaHVuaykp
OworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBtYXgocGFnZVNpemUsIHZtUGFnZVNpemUo
KSk7CisgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2ZOb25Qb3dl
ck9mVHdvKGZpcnN0UGFnZU9mZnNldCwgc2l6ZW9mKENodW5rKSk7CiAKICAgICBPYmplY3QgYmVn
aW4oY2h1bmssIG1ldGFkYXRhU2l6ZSk7CiAgICAgT2JqZWN0IGVuZChjaHVuaywgY2h1bmtTaXpl
KTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMjQwOTM5KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
OCBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK3N0YXRpY19hc3NlcnQoYm1hbGxvYzo6aXNQ
b3dlck9mVHdvKHNtYWxsUGFnZVNpemUpLCAiIik7CisKIEhlYXA6OkhlYXAoSGVhcEtpbmQga2lu
ZCwgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYpCiAgICAgOiBtX2tpbmQoa2luZCkKICAgICAsIG1f
dm1QYWdlU2l6ZVBoeXNpY2FsKHZtUGFnZVNpemVQaHlzaWNhbCgpKQpAQCAtOTMsNyArOTUsNyBA
QCBzaXplX3QgSGVhcDo6Z2lnYWNhZ2VTaXplKCkKIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVN
ZXRhZGF0YSgpCiB7CiAgICAgc2l6ZV90IHNpemVDbGFzc0NvdW50ID0gYm1hbGxvYzo6c2l6ZUNs
YXNzKHNtYWxsTGluZVNpemUpOwotICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IG1fdm1QYWdl
U2l6ZVBoeXNpY2FsIC8gc21hbGxMaW5lU2l6ZTsKKyAgICBzaXplX3Qgc21hbGxMaW5lQ291bnQg
PSBzbWFsbFBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKICAgICBtX3NtYWxsTGluZU1ldGFkYXRh
Lmdyb3coc2l6ZUNsYXNzQ291bnQgKiBzbWFsbExpbmVDb3VudCk7CiAKICAgICBmb3IgKHNpemVf
dCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBzaXplQ2xhc3NDb3VudDsgKytzaXplQ2xhc3Mp
IHsKQEAgLTEwMiw3ICsxMDQsNyBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEo
KQogCiAgICAgICAgIHNpemVfdCBvYmplY3QgPSAwOwogICAgICAgICBzaXplX3QgbGluZSA9IDA7
Ci0gICAgICAgIHdoaWxlIChvYmplY3QgPCBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAg
ICB3aGlsZSAob2JqZWN0IDwgc21hbGxQYWdlU2l6ZSkgewogICAgICAgICAgICAgbGluZSA9IG9i
amVjdCAvIHNtYWxsTGluZVNpemU7CiAgICAgICAgICAgICBzaXplX3QgbGVmdG92ZXIgPSBvYmpl
Y3QgJSBzbWFsbExpbmVTaXplOwogCkBAIC0xMTYsNyArMTE4LDcgQEAgdm9pZCBIZWFwOjppbml0
aWFsaXplTGluZU1ldGFkYXRhKCkKICAgICAgICAgfQogCiAgICAgICAgIC8vIERvbid0IGFsbG93
IHRoZSBsYXN0IG9iamVjdCBpbiBhIHBhZ2UgdG8gZXNjYXBlIHRoZSBwYWdlLgotICAgICAgICBp
ZiAob2JqZWN0ID4gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgaWYgKG9iamVjdCA+
IHNtYWxsUGFnZVNpemUpIHsKICAgICAgICAgICAgIEJBU1NFUlQocGFnZU1ldGFkYXRhW2xpbmVd
Lm9iamVjdENvdW50KTsKICAgICAgICAgICAgIC0tcGFnZU1ldGFkYXRhW2xpbmVdLm9iamVjdENv
dW50OwogICAgICAgICB9CkBAIC0xMjgsMTEgKzEzMCwxMCBAQCB2b2lkIEhlYXA6OmluaXRpYWxp
emVQYWdlTWV0YWRhdGEoKQogICAgIGF1dG8gY29tcHV0ZVBhZ2VTaXplID0gWyZdKHNpemVfdCBz
aXplQ2xhc3MpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3RTaXplKHNpemVDbGFzcyk7
CiAgICAgICAgIGlmIChzaXplQ2xhc3MgPCBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6
ZSkpCi0gICAgICAgICAgICByZXR1cm4gbV92bVBhZ2VTaXplUGh5c2ljYWw7CisgICAgICAgICAg
ICByZXR1cm4gc21hbGxQYWdlU2l6ZTsKIAotICAgICAgICBmb3IgKHNpemVfdCBwYWdlU2l6ZSA9
IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwotICAgICAgICAgICAgcGFnZVNpemUgPCBwYWdlU2l6ZU1h
eDsKLSAgICAgICAgICAgIHBhZ2VTaXplICs9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsKSB7CisgICAg
ICAgIC8vIFdlIG9ubHkgd2FudCBwb3dlciBvZiAyIHBhZ2VTaXplcy4gR2l2ZW4gdGhhdCBzbWFs
bFBhZ2VTaXplIGlzIGEgcG93ZXIgb2YgMiwgd2UganVzdCBkb3VibGUgaXQgd2hlbiB3ZSB3YW50
IGEgbGFyZ2VyIHNpemUuCisgICAgICAgIGZvciAoc2l6ZV90IHBhZ2VTaXplID0gc21hbGxQYWdl
U2l6ZTsgcGFnZVNpemUgPCBwYWdlU2l6ZU1heDsgcGFnZVNpemUgKj0gMikgewogICAgICAgICAg
ICAgUkVMRUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGNodW5rU2l6ZSAvIDIpOwogICAgICAgICAg
ICAgc2l6ZV90IHdhc3RlID0gcGFnZVNpemUgJSBzaXplOwogICAgICAgICAgICAgaWYgKHdhc3Rl
IDw9IHBhZ2VTaXplIC8gcGFnZVNpemVXYXN0ZUZhY3RvcikKQEAgLTE4OCwxNCArMTg5LDcgQEAg
dm9pZCBIZWFwOjpzY2F2ZW5nZShzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIHNpemVfdCBwYWdlU2l6ZSA9IGJtYWxs
b2M6OnBhZ2VTaXplKCZsaXN0IC0gJm1fZnJlZVBhZ2VzWzBdKTsKLSAgICAgICAgICAgICAgICBz
aXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5iZWdpbigp
LT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgbV9mcmVlYWJsZU1lbW9yeSAt
PSBkZWNvbW1pdFNpemU7Ci0gICAgICAgICAgICAgICAgbV9mb290cHJpbnQgLT0gZGVjb21taXRT
aXplOwotICAgICAgICAgICAgICAgIGRlY29tbWl0dGVyLmFkZEVhZ2VyKHBhZ2UtPmJlZ2luKCkt
PmJlZ2luKCksIHBhZ2VTaXplKTsKLSAgICAgICAgICAgICAgICBwYWdlLT5zZXRIYXNQaHlzaWNh
bFBhZ2VzKGZhbHNlKTsKLSNpZiBFTkFCTEVfUEhZU0lDQUxfUEFHRV9NQVAgCi0gICAgICAgICAg
ICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuZGVjb21taXQocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwg
cGFnZVNpemUpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgdHJ5RGVjb21taXRTbWFsbFBhZ2Uo
bG9jaywgZGVjb21taXR0ZXIsIHBhZ2UsIHBhZ2VTaXplKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTI2Nyw2ICsyNjEsMTEyIEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKHN0ZDo6dW5pcXUKICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmsp
OwogfQogCit2b2lkIEhlYXA6OnRyeURlY29tbWl0U21hbGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxN
dXRleD4mLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBTbWFsbFBhZ2UqIHNtYWxsUGFnZSwg
c2l6ZV90IHBhZ2VTaXplKQoreworICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQoc21hbGxQ
YWdlKTsKKyAgICBTbWFsbFBhZ2UqIGZpcnN0UGFnZVRvRGVjb21taXQgeyBudWxscHRyIH07Cisg
ICAgc2l6ZV90IHBhZ2VzVG9EZWNvbW1pdCB7IDAgfTsKKworICAgIGlmIChwYWdlU2l6ZSA+PSBt
X3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICBmaXJzdFBhZ2VUb0RlY29tbWl0ID0gc21h
bGxQYWdlOworICAgICAgICBwYWdlc1RvRGVjb21taXQgPSAxOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHNpemVfdCBtYXRjaGluZ1BhZ2VDb3VudCA9IDA7CisKKyAgICAgICAgY2hhciogcGh5c2lj
YWxQYWdlc0JlZ2luID0gcm91bmREb3duVG9NdWx0aXBsZU9mKG1fdm1QYWdlU2l6ZVBoeXNpY2Fs
LCBzbWFsbFBhZ2UtPmJlZ2luKCktPmJlZ2luKCkpOworICAgICAgICB1bnNpZ25lZCBzbWFsbFBh
Z2VDb3VudCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gcGFnZVNpemU7CisKKyAgICAgICAgU21h
bGxQYWdlKiBmaXJzdFBhZ2VJblJhbmdlID0gY2h1bmstPnBhZ2UoY2h1bmstPm9mZnNldChwaHlz
aWNhbFBhZ2VzQmVnaW4pKTsKKyAgICAgICAgU21hbGxQYWdlKiBsYXN0UGFnZUluUmFuZ2UgPSBj
aHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KHBoeXNpY2FsUGFnZXNCZWdpbiArIHBhZ2VTaXplICog
KHNtYWxsUGFnZUNvdW50IC0gMSkpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoYXV0byogcGFn
ZSA6IGNodW5rLT5mcmVlUGFnZXMoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UgPj0gZmlyc3RQ
YWdlSW5SYW5nZSAmJiBwYWdlIDw9IGxhc3RQYWdlSW5SYW5nZSkgeworICAgICAgICAgICAgICAg
IG1hdGNoaW5nUGFnZUNvdW50Kys7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFnZUNv
dW50ID09IHNtYWxsUGFnZUNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UGFnZVRv
RGVjb21taXQgPSBmaXJzdFBhZ2VJblJhbmdlOworICAgICAgICAgICAgICAgICAgICBwYWdlc1Rv
RGVjb21taXQgPSBtYXRjaGluZ1BhZ2VDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCFmaXJzdFBhZ2VUb0RlY29tbWl0IHx8ICFwYWdlc1RvRGVjb21taXQpCisgICAgICAg
IHJldHVybjsKKworICAgIGNoYXIqIGZpcnN0UGFnZUJlZ2luID0gZmlyc3RQYWdlVG9EZWNvbW1p
dC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQ
YWdlU2l6ZVNsb3BweShmaXJzdFBhZ2VCZWdpbiwgcGFnZXNUb0RlY29tbWl0ICogcGFnZVNpemUp
OworICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gZGVjb21taXRTaXplOworICAgIG1fZm9vdHByaW50
IC09IGRlY29tbWl0U2l6ZTsKKyAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihmaXJzdFBhZ2VCZWdp
biwgZGVjb21taXRTaXplKTsKKworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBjaHVuay0+
b2Zmc2V0KGZpcnN0UGFnZUJlZ2luKTsKKyAgICBzaXplX3QgbGFzdFBhZ2VPZmZzZXQgPSBmaXJz
dFBhZ2VPZmZzZXQgKyBwYWdlc1RvRGVjb21taXQgKiBwYWdlU2l6ZTsKKyAgICAKKyAgICBPYmpl
Y3QgYmVnaW4oY2h1bmssIGZpcnN0UGFnZU9mZnNldCk7CisgICAgT2JqZWN0IGVuZChjaHVuaywg
bGFzdFBhZ2VPZmZzZXQpOworICAgIAorICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCArIHBh
Z2VTaXplIDw9IGVuZDsgaXQgPSBpdCArIHBhZ2VTaXplKQorICAgICAgICBpdC5wYWdlKCktPnNl
dEhhc1BoeXNpY2FsUGFnZXMoZmFsc2UpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAor
ICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KGZpcnN0UGFnZVRvRGVjb21taXQsIGRlY29t
bWl0U2l6ZSk7CisjZW5kaWYKK30KKwordm9pZCBIZWFwOjpjb21taXRTbWFsbFBhZ2Uoc3RkOjp1
bmlxdWVfbG9jazxNdXRleD4mLCBTbWFsbFBhZ2UqIHBhZ2UsIHNpemVfdCBwYWdlU2l6ZSkKK3sK
KyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOworICAgIFNtYWxsUGFnZSogZmly
c3RQYWdlVG9Db21taXQgeyBudWxscHRyIH07CisgICAgc2l6ZV90IHBhZ2VzVG9Db21taXQgeyAw
IH07CisKKyAgICBpZiAocGFnZVNpemUgPj0gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAg
ICAgZmlyc3RQYWdlVG9Db21taXQgPSBwYWdlOworICAgICAgICBwYWdlc1RvQ29tbWl0ID0gMTsK
KyAgICB9IGVsc2UgeworICAgICAgICBjaGFyKiBwaHlzaWNhbFBhZ2VzQmVnaW4gPSByb3VuZERv
d25Ub011bHRpcGxlT2YobV92bVBhZ2VTaXplUGh5c2ljYWwsIHBhZ2UtPmJlZ2luKCktPmJlZ2lu
KCkpOworICAgICAgICB1bnNpZ25lZCBzbWFsbFBhZ2VDb3VudCA9IG1fdm1QYWdlU2l6ZVBoeXNp
Y2FsIC8gcGFnZVNpemU7CisKKyAgICAgICAgc2l6ZV90IGZpcnN0UGFnZU9mZnNldCA9IGNodW5r
LT5vZmZzZXQocGh5c2ljYWxQYWdlc0JlZ2luKTsKKyAgICAgICAgc2l6ZV90IGxhc3RQYWdlT2Zm
c2V0ID0gZmlyc3RQYWdlT2Zmc2V0ICsgc21hbGxQYWdlQ291bnQgKiBwYWdlU2l6ZTsKKworICAg
ICAgICBPYmplY3QgYmVnaW4oY2h1bmssIGZpcnN0UGFnZU9mZnNldCk7CisgICAgICAgIE9iamVj
dCBlbmQoY2h1bmssIGxhc3RQYWdlT2Zmc2V0KTsKKworICAgICAgICBmb3IgKGF1dG8gaXQgPSBi
ZWdpbjsgaXQgKyBwYWdlU2l6ZSA8PSBlbmQ7IGl0ID0gaXQgKyBwYWdlU2l6ZSkgeworICAgICAg
ICAgICAgaWYgKCFmaXJzdFBhZ2VUb0NvbW1pdCkgeworICAgICAgICAgICAgICAgIGlmICghaXQu
cGFnZSgpLT5oYXNQaHlzaWNhbFBhZ2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RQ
YWdlVG9Db21taXQgPSBpdC5wYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2VzVG9Db21t
aXQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWl0LnBh
Z2UoKS0+aGFzUGh5c2ljYWxQYWdlcygpKQorICAgICAgICAgICAgICAgIHBhZ2VzVG9Db21taXQr
KzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIEJBU1NFUlQoZmlyc3RQYWdlVG9Db21taXQgJiYgcGFnZXNUb0NvbW1pdCk7Cisg
ICAgfQorCisgICAgY2hhciogZmlyc3RQYWdlQmVnaW4gPSBmaXJzdFBhZ2VUb0NvbW1pdC0+YmVn
aW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgY29tbWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVT
bG9wcHlSb3VuZFVwKGZpcnN0UGFnZUJlZ2luLCBwYWdlc1RvQ29tbWl0ICogcGFnZVNpemUpOwor
ICAgIEJBU1NFUlQoY29tbWl0U2l6ZSk7CisgICAgbV9mb290cHJpbnQgKz0gY29tbWl0U2l6ZTsK
KworICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGZpcnN0UGFnZUJlZ2luLCBjb21t
aXRTaXplKTsKKworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBjaHVuay0+b2Zmc2V0KGZp
cnN0UGFnZUJlZ2luKTsKKyAgICBzaXplX3QgbGFzdFBhZ2VPZmZzZXQgPSBmaXJzdFBhZ2VPZmZz
ZXQgKyBwYWdlc1RvQ29tbWl0ICogcGFnZVNpemU7CisKKyAgICBPYmplY3QgYmVnaW4oY2h1bmss
IGZpcnN0UGFnZU9mZnNldCk7CisgICAgT2JqZWN0IGVuZChjaHVuaywgbGFzdFBhZ2VPZmZzZXQp
OworCisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5kOyBpdCA9
IGl0ICsgcGFnZVNpemUpCisgICAgICAgIGl0LnBhZ2UoKS0+c2V0SGFzUGh5c2ljYWxQYWdlcyh0
cnVlKTsKKyNpZiBFTkFCTEVfUEhZU0lDQUxfUEFHRV9NQVAKKyAgICBtX3BoeXNpY2FsUGFnZU1h
cC5jb21taXQoZmlyc3RQYWdlVG9Db21taXQsIGNvbW1pdFNpemUpOworI2VuZGlmCit9CisKIHZv
aWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqIGNodW5rLCBzaXplX3QgcGFnZUNs
YXNzKQogewogICAgIG1fb2JqZWN0VHlwZXMuc2V0KGNodW5rLCBPYmplY3RUeXBlOjpMYXJnZSk7
CkBAIC0zMjUsMTIgKzQyNSw3IEBAIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uo
c3RkOjoKICAgICAgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcGh5c2ljYWxTaXplOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZUlmVW5kZXJNZW1v
cnlQcmVzc3VyZShwYWdlU2l6ZSk7Ci0gICAgICAgICAgICBtX2Zvb3RwcmludCArPSBwaHlzaWNh
bFNpemU7Ci0gICAgICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShwYWdlLT5i
ZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICBwYWdlLT5zZXRIYXNQaHlz
aWNhbFBhZ2VzKHRydWUpOwotI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKLSAgICAgICAg
ICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdl
U2l6ZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbW1pdFNtYWxsUGFnZShsb2NrLCBwYWdlLCBw
YWdlU2l6ZSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gcGFnZTsKQEAgLTM5MCw3ICs0
ODUsNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhCiAgICAgU21h
bGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5lQ2Fj
aGUpOwogICAgIFNtYWxsTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigpOwogICAgIEJBU1NFUlQo
cGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKLSAgICBzaXplX3Qgc21hbGxMaW5lQ291bnQgPSBt
X3ZtUGFnZVNpemVQaHlzaWNhbCAvIHNtYWxsTGluZVNpemU7CisgICAgc2l6ZV90IHNtYWxsTGlu
ZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7CiAgICAgTGluZU1ldGFkYXRh
KiBwYWdlTWV0YWRhdGEgPSAmbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3MgKiBzbWFsbExp
bmVDb3VudF07CiAgICAgCiAgICAgYXV0byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBbJl0oc2l6ZV90
JiBsaW5lTnVtYmVyKSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMjQwOTM5
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
MCw2ICsxMjAsOSBAQCBwcml2YXRlOgogICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uo
c3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmKTsK
ICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBP
YmplY3QsIExpbmVDYWNoZSYpOwogCisgICAgdm9pZCB0cnlEZWNvbW1pdFNtYWxsUGFnZShzdGQ6
OmxvY2tfZ3VhcmQ8TXV0ZXg+JiwgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgU21hbGxQYWdl
Kiwgc2l6ZV90IHBhZ2VTaXplKTsKKyAgICB2b2lkIGNvbW1pdFNtYWxsUGFnZShzdGQ6OnVuaXF1
ZV9sb2NrPE11dGV4PiYsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdlU2l6ZSk7CisKICAgICB2b2lk
IGFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYsIHNpemVfdCBwYWdl
Q2xhc3MpOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqLCBzaXplX3QgcGFn
ZUNsYXNzKTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAkocmV2aXNpb24gMjQwOTM5KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGNodW5rU2l6ZSA9IDEgKiAKIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IGNodW5rTWFzayA9IH4oY2h1bmtTaXplIC0gMXVsKTsKIAogc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3Qgc21hbGxMaW5lU2l6ZSA9IDI1NjsKLXN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IHNtYWxsUGFnZVNpemUgPSA0ICoga0I7CitzdGF0aWMgY29uc3RleHByIHNpemVf
dCBzbWFsbFBhZ2VTaXplID0gMiAqIGtCOwogc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc21hbGxQ
YWdlTGluZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7CiAKIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG1hc2tTaXplQ2xhc3NNYXggPSA1MTI7CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1ZNQWxsb2NhdGUuaAkocmV2aXNpb24gMjQwOTM5KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9WTUFsbG9jYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsMTYgQEAg
aW5saW5lIHNpemVfdCBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHZvaQogICAgIHJldHVybiBlbmQg
LSBiZWdpbjsKIH0KIAoraW5saW5lIHNpemVfdCBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5Um91bmRV
cCh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBjaGFyKiBiZWdpbiA9IHJvdW5kRG93blRv
TXVsdGlwbGVPZih2bVBhZ2VTaXplUGh5c2ljYWwoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KHApKTsK
KyAgICBjaGFyKiBlbmQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKHZtUGFnZVNpemVQaHlzaWNhbCgp
LCBzdGF0aWNfY2FzdDxjaGFyKj4ocCkgKyBzaXplKTsKKyAgICAKKyAgICBpZiAoYmVnaW4gPj0g
ZW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZW5kIC0gYmVnaW47Cit9CisKIC8v
IFRyaW1zIHJlcXVlc3RzIHRoYXQgYXJlIHVuLXBhZ2UtYWxpZ25lZC4KIGlubGluZSB2b2lkIHZt
RGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkodm9pZCogcCwgc2l6ZV90IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361133</attachid>
            <date>2019-02-04 17:05:36 -0800</date>
            <delta_ts>2019-02-06 12:29:52 -0800</delta_ts>
            <desc>Patch addressing review comments</desc>
            <filename>192389-2a.patch</filename>
            <type>text/plain</type>
            <size>13012</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MDk0MikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE5LTAyLTA0ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIzODkKKyAgICAgICAgYm1hbGxvYyB1c2VzIG1vcmUg
bWVtb3J5IG9uIGlPUyBjb21wYXJlZCB0byBtYWNPUyBkdWUgdG8gcGh5c2ljYWwgcGFnZSBzaXpl
IGRpZmZlcmVuY2VzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgbXVsdGlwbGVzIGluc3RlYWQgb2YKKyAgICAgICAgcGh5c2ljYWwg
cGFnZSBzaXplIGluY3JlbWVudHMuICBUaGlzIHJlcXVpcmVkIGNoYW5naW5nIHRoZSBzbWFsbCBw
YWdlIGNvbW1pdCAvIGRlY29tbWl0IGNvZGUKKyAgICAgICAgdG8gd29yayBpbiBmdWxsIHBoeXNp
Y2FsIHBhZ2UgaW5jcmVtZW50cy4gIEZvciBwYWdlIGNsYXNzZXMgdGhhdCBhcmUgcGh5c2ljYWwg
cGFnZSBzaXplIGFuZCBsYXJnZXIsCisgICAgICAgIHRoZXJlIGlzbid0IGFueSBmdW5jdGlvbmFs
IGNoYW5nZS4gIFdoZW4gc2NhdmVuZ2luZyBwYWdlIGNsYXNzZXMgc21hbGxlciB0aGFuIHRoZSBw
aHlzaWNhbCBwYWdlIHNpemUsCisgICAgICAgIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBv
ciBub3QgdGhlIGFkamFjZW50IHNtYWxsIHBhZ2VzIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBhZ2Ug
YXJlIGFsc28KKyAgICAgICAgZnJlZSBiZWZvcmUgZGVjb21taXRpbmcgdGhhdCBjb250YWluaW5n
IHBhZ2UuICBXaGVuIHdlIG5lZWQgdG8gY29tbWl0IG1vcmUgbWVtb3J5LCB3ZSBjb21taXQKKyAg
ICAgICAgdGhlIHdob2xlIHBhZ2UsIGFuZCBhZGQgYW55IGFkamFjZW50IHZpcnR1YWwgcGFnZXMg
dGhhdCB3ZXJlIGZ1bGx5IGNvbW1pdHRlZCBhcyB3ZWxsLgorCisgICAgICAgICogYm1hbGxvYy9D
aHVuay5oOgorICAgICAgICAoYm1hbGxvYzo6Zm9yRWFjaFBhZ2UpOgorICAgICAgICAqIGJtYWxs
b2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplTGluZU1ldGFk
YXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEpOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5RGVjb21taXRTbWFsbFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6Y29tbWl0
U21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0
YSk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1hbGxvYy9WTUFsbG9j
YXRlLmg6CisgICAgICAgIChibWFsbG9jOjpwaHlzaWNhbFBhZ2VTaXplU2xvcHB5Um91bmRVcCk6
CisKIDIwMTktMDEtMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgZ2lnYWNhZ2Ugc2xpZGUgc2hvdWxkIHJhbmRvbWl6ZSBib3RoIHN0YXJ0IGFuZCBl
bmQKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHJldmlzaW9uIDI0MDk0MikKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBmb3JFYWNoCiB7CiAgICAgLy8gV2Ug
YWxpZ24gdG8gYXQgbGVhc3QgdGhlIHBhZ2Ugc2l6ZSBzbyB3ZSBjYW4gc2VydmljZSBhbGlnbmVk
IGFsbG9jYXRpb25zCiAgICAgLy8gYXQgZXF1YWwgYW5kIHNtYWxsZXIgcG93ZXJzIG9mIHR3bywg
YW5kIGFsc28gc28gd2UgY2FuIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoKS4KLSAgICBzaXpl
X3QgbWV0YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28ocGFnZVNp
emUsIHNpemVvZihDaHVuaykpOworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBtYXgocGFn
ZVNpemUsIHZtUGFnZVNpemUoKSk7CisgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZSA9IHJvdW5kVXBU
b011bHRpcGxlT2ZOb25Qb3dlck9mVHdvKGZpcnN0UGFnZU9mZnNldCwgc2l6ZW9mKENodW5rKSk7
CiAKICAgICBPYmplY3QgYmVnaW4oY2h1bmssIG1ldGFkYXRhU2l6ZSk7CiAgICAgT2JqZWN0IGVu
ZChjaHVuaywgY2h1bmtTaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNp
b24gMjQwOTQyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsOCBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK3N0YXRpY19h
c3NlcnQoYm1hbGxvYzo6aXNQb3dlck9mVHdvKHNtYWxsUGFnZVNpemUpLCAiIik7CisKIEhlYXA6
OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYpCiAgICAgOiBtX2tp
bmQoa2luZCkKICAgICAsIG1fdm1QYWdlU2l6ZVBoeXNpY2FsKHZtUGFnZVNpemVQaHlzaWNhbCgp
KQpAQCAtOTMsNyArOTUsNyBAQCBzaXplX3QgSGVhcDo6Z2lnYWNhZ2VTaXplKCkKIHZvaWQgSGVh
cDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCiB7CiAgICAgc2l6ZV90IHNpemVDbGFzc0NvdW50
ID0gYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpOwotICAgIHNpemVfdCBzbWFsbExp
bmVDb3VudCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gc21hbGxMaW5lU2l6ZTsKKyAgICBzaXpl
X3Qgc21hbGxMaW5lQ291bnQgPSBzbWFsbFBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKICAgICBt
X3NtYWxsTGluZU1ldGFkYXRhLmdyb3coc2l6ZUNsYXNzQ291bnQgKiBzbWFsbExpbmVDb3VudCk7
CiAKICAgICBmb3IgKHNpemVfdCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBzaXplQ2xhc3ND
b3VudDsgKytzaXplQ2xhc3MpIHsKQEAgLTEwMiw3ICsxMDQsNyBAQCB2b2lkIEhlYXA6OmluaXRp
YWxpemVMaW5lTWV0YWRhdGEoKQogCiAgICAgICAgIHNpemVfdCBvYmplY3QgPSAwOwogICAgICAg
ICBzaXplX3QgbGluZSA9IDA7Ci0gICAgICAgIHdoaWxlIChvYmplY3QgPCBtX3ZtUGFnZVNpemVQ
aHlzaWNhbCkgeworICAgICAgICB3aGlsZSAob2JqZWN0IDwgc21hbGxQYWdlU2l6ZSkgewogICAg
ICAgICAgICAgbGluZSA9IG9iamVjdCAvIHNtYWxsTGluZVNpemU7CiAgICAgICAgICAgICBzaXpl
X3QgbGVmdG92ZXIgPSBvYmplY3QgJSBzbWFsbExpbmVTaXplOwogCkBAIC0xMTYsNyArMTE4LDcg
QEAgdm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIERvbid0IGFsbG93IHRoZSBsYXN0IG9iamVjdCBpbiBhIHBhZ2UgdG8gZXNjYXBlIHRo
ZSBwYWdlLgotICAgICAgICBpZiAob2JqZWN0ID4gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAg
ICAgICAgaWYgKG9iamVjdCA+IHNtYWxsUGFnZVNpemUpIHsKICAgICAgICAgICAgIEJBU1NFUlQo
cGFnZU1ldGFkYXRhW2xpbmVdLm9iamVjdENvdW50KTsKICAgICAgICAgICAgIC0tcGFnZU1ldGFk
YXRhW2xpbmVdLm9iamVjdENvdW50OwogICAgICAgICB9CkBAIC0xMjgsMTEgKzEzMCwxMCBAQCB2
b2lkIEhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEoKQogICAgIGF1dG8gY29tcHV0ZVBhZ2VT
aXplID0gWyZdKHNpemVfdCBzaXplQ2xhc3MpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBvYmpl
Y3RTaXplKHNpemVDbGFzcyk7CiAgICAgICAgIGlmIChzaXplQ2xhc3MgPCBibWFsbG9jOjpzaXpl
Q2xhc3Moc21hbGxMaW5lU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbV92bVBhZ2VTaXplUGh5
c2ljYWw7CisgICAgICAgICAgICByZXR1cm4gc21hbGxQYWdlU2l6ZTsKIAotICAgICAgICBmb3Ig
KHNpemVfdCBwYWdlU2l6ZSA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwotICAgICAgICAgICAgcGFn
ZVNpemUgPCBwYWdlU2l6ZU1heDsKLSAgICAgICAgICAgIHBhZ2VTaXplICs9IG1fdm1QYWdlU2l6
ZVBoeXNpY2FsKSB7CisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBwb3dlciBvZiAyIHBhZ2VTaXpl
cy4gR2l2ZW4gdGhhdCBzbWFsbFBhZ2VTaXplIGlzIGEgcG93ZXIgb2YgMiwgd2UganVzdCBkb3Vi
bGUgaXQgd2hlbiB3ZSB3YW50IGEgbGFyZ2VyIHNpemUuCisgICAgICAgIGZvciAoc2l6ZV90IHBh
Z2VTaXplID0gc21hbGxQYWdlU2l6ZTsgcGFnZVNpemUgPCBwYWdlU2l6ZU1heDsgcGFnZVNpemUg
Kj0gMikgewogICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGNodW5rU2l6
ZSAvIDIpOwogICAgICAgICAgICAgc2l6ZV90IHdhc3RlID0gcGFnZVNpemUgJSBzaXplOwogICAg
ICAgICAgICAgaWYgKHdhc3RlIDw9IHBhZ2VTaXplIC8gcGFnZVNpemVXYXN0ZUZhY3RvcikKQEAg
LTE4OCwxNCArMTg5LDcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShzdGQ6OmxvY2tfZ3VhcmQ8TXV0
ZQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIHNpemVf
dCBwYWdlU2l6ZSA9IGJtYWxsb2M6OnBhZ2VTaXplKCZsaXN0IC0gJm1fZnJlZVBhZ2VzWzBdKTsK
LSAgICAgICAgICAgICAgICBzaXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNs
b3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAg
bV9mcmVlYWJsZU1lbW9yeSAtPSBkZWNvbW1pdFNpemU7Ci0gICAgICAgICAgICAgICAgbV9mb290
cHJpbnQgLT0gZGVjb21taXRTaXplOwotICAgICAgICAgICAgICAgIGRlY29tbWl0dGVyLmFkZEVh
Z2VyKHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKLSAgICAgICAgICAgICAgICBw
YWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKGZhbHNlKTsKLSNpZiBFTkFCTEVfUEhZU0lDQUxfUEFH
RV9NQVAgCi0gICAgICAgICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuZGVjb21taXQocGFnZS0+
YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgdHJ5
RGVjb21taXRTbWFsbFBhZ2UobG9jaywgZGVjb21taXR0ZXIsIHBhZ2UsIHBhZ2VTaXplKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI2Nyw2ICsyNjEsMTEyIEBAIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKHN0ZDo6dW5pcXUKICAgICBtX2ZyZWVQYWdlc1twYWdl
Q2xhc3NdLnB1c2goY2h1bmspOwogfQogCit2b2lkIEhlYXA6OnRyeURlY29tbWl0U21hbGxQYWdl
KHN0ZDo6bG9ja19ndWFyZDxNdXRleD4mLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBTbWFs
bFBhZ2UqIHNtYWxsUGFnZSwgc2l6ZV90IHBhZ2VTaXplKQoreworICAgIENodW5rKiBjaHVuayA9
IENodW5rOjpnZXQoc21hbGxQYWdlKTsKKyAgICBTbWFsbFBhZ2UqIGZpcnN0UGFnZVRvRGVjb21t
aXQgeyBudWxscHRyIH07CisgICAgc2l6ZV90IHBhZ2VzVG9EZWNvbW1pdCB7IDAgfTsKKworICAg
IGlmIChwYWdlU2l6ZSA+PSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICBmaXJzdFBh
Z2VUb0RlY29tbWl0ID0gc21hbGxQYWdlOworICAgICAgICBwYWdlc1RvRGVjb21taXQgPSAxOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBtYXRjaGluZ1BhZ2VDb3VudCA9IDA7CisKKyAg
ICAgICAgY2hhciogcGh5c2ljYWxQYWdlc0JlZ2luID0gcm91bmREb3duVG9NdWx0aXBsZU9mKG1f
dm1QYWdlU2l6ZVBoeXNpY2FsLCBzbWFsbFBhZ2UtPmJlZ2luKCktPmJlZ2luKCkpOworICAgICAg
ICB1bnNpZ25lZCBzbWFsbFBhZ2VDb3VudCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gcGFnZVNp
emU7CisKKyAgICAgICAgU21hbGxQYWdlKiBmaXJzdFBhZ2VJblJhbmdlID0gY2h1bmstPnBhZ2Uo
Y2h1bmstPm9mZnNldChwaHlzaWNhbFBhZ2VzQmVnaW4pKTsKKyAgICAgICAgU21hbGxQYWdlKiBs
YXN0UGFnZUluUmFuZ2UgPSBjaHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KHBoeXNpY2FsUGFnZXNC
ZWdpbiArIHBhZ2VTaXplICogKHNtYWxsUGFnZUNvdW50IC0gMSkpKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoYXV0byogcGFnZSA6IGNodW5rLT5mcmVlUGFnZXMoKSkgeworICAgICAgICAgICAg
aWYgKHBhZ2UgPj0gZmlyc3RQYWdlSW5SYW5nZSAmJiBwYWdlIDw9IGxhc3RQYWdlSW5SYW5nZSkg
eworICAgICAgICAgICAgICAgIG1hdGNoaW5nUGFnZUNvdW50Kys7CisgICAgICAgICAgICAgICAg
aWYgKG1hdGNoaW5nUGFnZUNvdW50ID09IHNtYWxsUGFnZUNvdW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpcnN0UGFnZVRvRGVjb21taXQgPSBmaXJzdFBhZ2VJblJhbmdlOworICAgICAgICAg
ICAgICAgICAgICBwYWdlc1RvRGVjb21taXQgPSBtYXRjaGluZ1BhZ2VDb3VudDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFmaXJzdFBhZ2VUb0RlY29tbWl0IHx8ICFwYWdlc1Rv
RGVjb21taXQpCisgICAgICAgIHJldHVybjsKKworICAgIGNoYXIqIGZpcnN0UGFnZUJlZ2luID0g
Zmlyc3RQYWdlVG9EZWNvbW1pdC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgZGVjb21t
aXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShmaXJzdFBhZ2VCZWdpbiwgcGFnZXNUb0Rl
Y29tbWl0ICogcGFnZVNpemUpOworICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gZGVjb21taXRTaXpl
OworICAgIG1fZm9vdHByaW50IC09IGRlY29tbWl0U2l6ZTsKKyAgICBkZWNvbW1pdHRlci5hZGRF
YWdlcihmaXJzdFBhZ2VCZWdpbiwgZGVjb21taXRTaXplKTsKKworICAgIHNpemVfdCBmaXJzdFBh
Z2VPZmZzZXQgPSBjaHVuay0+b2Zmc2V0KGZpcnN0UGFnZUJlZ2luKTsKKyAgICBzaXplX3QgbGFz
dFBhZ2VPZmZzZXQgPSBmaXJzdFBhZ2VPZmZzZXQgKyBwYWdlc1RvRGVjb21taXQgKiBwYWdlU2l6
ZTsKKyAgICAKKyAgICBPYmplY3QgYmVnaW4oY2h1bmssIGZpcnN0UGFnZU9mZnNldCk7CisgICAg
T2JqZWN0IGVuZChjaHVuaywgbGFzdFBhZ2VPZmZzZXQpOworICAgIAorICAgIGZvciAoYXV0byBp
dCA9IGJlZ2luOyBpdCArIHBhZ2VTaXplIDw9IGVuZDsgaXQgPSBpdCArIHBhZ2VTaXplKQorICAg
ICAgICBpdC5wYWdlKCktPnNldEhhc1BoeXNpY2FsUGFnZXMoZmFsc2UpOworI2lmIEVOQUJMRV9Q
SFlTSUNBTF9QQUdFX01BUAorICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KGZpcnN0UGFn
ZVRvRGVjb21taXQsIGRlY29tbWl0U2l6ZSk7CisjZW5kaWYKK30KKwordm9pZCBIZWFwOjpjb21t
aXRTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBTbWFsbFBhZ2UqIHBhZ2UsIHNp
emVfdCBwYWdlU2l6ZSkKK3sKKyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOwor
ICAgIFNtYWxsUGFnZSogZmlyc3RQYWdlVG9Db21taXQgeyBudWxscHRyIH07CisgICAgc2l6ZV90
IHBhZ2VzVG9Db21taXQgeyAwIH07CisKKyAgICBpZiAocGFnZVNpemUgPj0gbV92bVBhZ2VTaXpl
UGh5c2ljYWwpIHsKKyAgICAgICAgZmlyc3RQYWdlVG9Db21taXQgPSBwYWdlOworICAgICAgICBw
YWdlc1RvQ29tbWl0ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyKiBwaHlzaWNhbFBh
Z2VzQmVnaW4gPSByb3VuZERvd25Ub011bHRpcGxlT2YobV92bVBhZ2VTaXplUGh5c2ljYWwsIHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCkpOworICAgICAgICB1bnNpZ25lZCBzbWFsbFBhZ2VDb3VudCA9
IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gcGFnZVNpemU7CisKKyAgICAgICAgc2l6ZV90IGZpcnN0
UGFnZU9mZnNldCA9IGNodW5rLT5vZmZzZXQocGh5c2ljYWxQYWdlc0JlZ2luKTsKKyAgICAgICAg
c2l6ZV90IGxhc3RQYWdlT2Zmc2V0ID0gZmlyc3RQYWdlT2Zmc2V0ICsgc21hbGxQYWdlQ291bnQg
KiBwYWdlU2l6ZTsKKworICAgICAgICBPYmplY3QgYmVnaW4oY2h1bmssIGZpcnN0UGFnZU9mZnNl
dCk7CisgICAgICAgIE9iamVjdCBlbmQoY2h1bmssIGxhc3RQYWdlT2Zmc2V0KTsKKworICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgKyBwYWdlU2l6ZSA8PSBlbmQ7IGl0ID0gaXQgKyBw
YWdlU2l6ZSkgeworICAgICAgICAgICAgaWYgKCFmaXJzdFBhZ2VUb0NvbW1pdCkgeworICAgICAg
ICAgICAgICAgIGlmICghaXQucGFnZSgpLT5oYXNQaHlzaWNhbFBhZ2VzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZmlyc3RQYWdlVG9Db21taXQgPSBpdC5wYWdlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHBhZ2VzVG9Db21taXQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWl0LnBhZ2UoKS0+aGFzUGh5c2ljYWxQYWdlcygpKQorICAgICAgICAgICAg
ICAgIHBhZ2VzVG9Db21taXQrKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEJBU1NFUlQoZmlyc3RQYWdlVG9Db21taXQgJiYg
cGFnZXNUb0NvbW1pdCk7CisgICAgfQorCisgICAgY2hhciogZmlyc3RQYWdlQmVnaW4gPSBmaXJz
dFBhZ2VUb0NvbW1pdC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgY29tbWl0U2l6ZSA9
IHBoeXNpY2FsUGFnZVNpemVTbG9wcHlSb3VuZFVwKGZpcnN0UGFnZUJlZ2luLCBwYWdlc1RvQ29t
bWl0ICogcGFnZVNpemUpOworICAgIEJBU1NFUlQoY29tbWl0U2l6ZSk7CisgICAgbV9mb290cHJp
bnQgKz0gY29tbWl0U2l6ZTsKKworICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGZp
cnN0UGFnZUJlZ2luLCBjb21taXRTaXplKTsKKworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQg
PSBjaHVuay0+b2Zmc2V0KGZpcnN0UGFnZUJlZ2luKTsKKyAgICBzaXplX3QgbGFzdFBhZ2VPZmZz
ZXQgPSBmaXJzdFBhZ2VPZmZzZXQgKyBwYWdlc1RvQ29tbWl0ICogcGFnZVNpemU7CisKKyAgICBP
YmplY3QgYmVnaW4oY2h1bmssIGZpcnN0UGFnZU9mZnNldCk7CisgICAgT2JqZWN0IGVuZChjaHVu
aywgbGFzdFBhZ2VPZmZzZXQpOworCisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFn
ZVNpemUgPD0gZW5kOyBpdCA9IGl0ICsgcGFnZVNpemUpCisgICAgICAgIGl0LnBhZ2UoKS0+c2V0
SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKKyNpZiBFTkFCTEVfUEhZU0lDQUxfUEFHRV9NQVAKKyAg
ICBtX3BoeXNpY2FsUGFnZU1hcC5jb21taXQoZmlyc3RQYWdlVG9Db21taXQsIGNvbW1pdFNpemUp
OworI2VuZGlmCit9CisKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqIGNo
dW5rLCBzaXplX3QgcGFnZUNsYXNzKQogewogICAgIG1fb2JqZWN0VHlwZXMuc2V0KGNodW5rLCBP
YmplY3RUeXBlOjpMYXJnZSk7CkBAIC0zMjUsMTIgKzQyNSw3IEBAIFNtYWxsUGFnZSogSGVhcDo6
YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjoKICAgICAgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgLT0g
cGh5c2ljYWxTaXplOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fc2NhdmVuZ2VyLT5z
Y2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShwYWdlU2l6ZSk7Ci0gICAgICAgICAgICBtX2Zv
b3RwcmludCArPSBwaHlzaWNhbFNpemU7Ci0gICAgICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQ
YWdlc1Nsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAg
ICBwYWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKHRydWUpOwotI2lmIEVOQUJMRV9QSFlTSUNBTF9Q
QUdFX01BUCAKLSAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlLT5iZWdp
bigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbW1pdFNtYWxs
UGFnZShsb2NrLCBwYWdlLCBwYWdlU2l6ZSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4g
cGFnZTsKQEAgLTM5MCw3ICs0ODUsNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlNZXRhCiAgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywg
c2l6ZUNsYXNzLCBsaW5lQ2FjaGUpOwogICAgIFNtYWxsTGluZSogbGluZXMgPSBwYWdlLT5iZWdp
bigpOwogICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKLSAgICBzaXplX3Qg
c21hbGxMaW5lQ291bnQgPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCAvIHNtYWxsTGluZVNpemU7Cisg
ICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7
CiAgICAgTGluZU1ldGFkYXRhKiBwYWdlTWV0YWRhdGEgPSAmbV9zbWFsbExpbmVNZXRhZGF0YVtz
aXplQ2xhc3MgKiBzbWFsbExpbmVDb3VudF07CiAgICAgCiAgICAgYXV0byBmaW5kU21hbGxCdW1w
UmFuZ2UgPSBbJl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
aAkocmV2aXNpb24gMjQwOTQyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOSBAQCBwcml2YXRlOgogICAgIFNtYWxsUGFnZSog
YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBzaXplX3Qgc2l6ZUNs
YXNzLCBMaW5lQ2FjaGUmKTsKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjp1bmlx
dWVfbG9jazxNdXRleD4mLCBPYmplY3QsIExpbmVDYWNoZSYpOwogCisgICAgdm9pZCB0cnlEZWNv
bW1pdFNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+JiwgQnVsa0RlY29tbWl0JiBkZWNv
bW1pdHRlciwgU21hbGxQYWdlKiwgc2l6ZV90IHBhZ2VTaXplKTsKKyAgICB2b2lkIGNvbW1pdFNt
YWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdl
U2l6ZSk7CisKICAgICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OnVuaXF1ZV9sb2NrPE11
dGV4PiYsIHNpemVfdCBwYWdlQ2xhc3MpOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsQ2h1bmso
Q2h1bmsqLCBzaXplX3QgcGFnZUNsYXNzKTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9TaXplcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAko
cmV2aXNpb24gMjQwOTQyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGNodW5r
U2l6ZSA9IDEgKiAKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGNodW5rTWFzayA9IH4oY2h1bmtT
aXplIC0gMXVsKTsKIAogc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc21hbGxMaW5lU2l6ZSA9IDI1
NjsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNtYWxsUGFnZVNpemUgPSA0ICoga0I7CitzdGF0
aWMgY29uc3RleHByIHNpemVfdCBzbWFsbFBhZ2VTaXplID0gMiAqIGtCOwogc3RhdGljIGNvbnN0
ZXhwciBzaXplX3Qgc21hbGxQYWdlTGluZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAvIHNtYWxsTGlu
ZVNpemU7CiAKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1hc2tTaXplQ2xhc3NNYXggPSA1MTI7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkocmV2aXNpb24gMjQwOTQyKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzNCw2ICsyMzQsMTYgQEAgaW5saW5lIHNpemVfdCBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHZv
aQogICAgIHJldHVybiBlbmQgLSBiZWdpbjsKIH0KIAoraW5saW5lIHNpemVfdCBwaHlzaWNhbFBh
Z2VTaXplU2xvcHB5Um91bmRVcCh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBjaGFyKiBi
ZWdpbiA9IHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplUGh5c2ljYWwoKSwgc3RhdGlj
X2Nhc3Q8Y2hhcio+KHApKTsKKyAgICBjaGFyKiBlbmQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKHZt
UGFnZVNpemVQaHlzaWNhbCgpLCBzdGF0aWNfY2FzdDxjaGFyKj4ocCkgKyBzaXplKTsKKyAgICAK
KyAgICBpZiAoYmVnaW4gPj0gZW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZW5k
IC0gYmVnaW47Cit9CisKIC8vIFRyaW1zIHJlcXVlc3RzIHRoYXQgYXJlIHVuLXBhZ2UtYWxpZ25l
ZC4KIGlubGluZSB2b2lkIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkodm9pZCogcCwg
c2l6ZV90IHNpemUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361315</attachid>
            <date>2019-02-06 12:29:52 -0800</date>
            <delta_ts>2019-02-06 17:20:38 -0800</delta_ts>
            <desc>Patch with some pref improvements.</desc>
            <filename>192389-4.patch</filename>
            <type>text/plain</type>
            <size>13183</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MTA0MCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE5LTAyLTA2ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIzODkKKyAgICAgICAgYm1hbGxvYyB1c2VzIG1vcmUg
bWVtb3J5IG9uIGlPUyBjb21wYXJlZCB0byBtYWNPUyBkdWUgdG8gcGh5c2ljYWwgcGFnZSBzaXpl
IGRpZmZlcmVuY2VzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgbXVsdGlwbGVzIGluc3RlYWQgb2YKKyAgICAgICAgcGh5c2ljYWwg
cGFnZSBzaXplIGluY3JlbWVudHMuICBUaGlzIHJlcXVpcmVkIGNoYW5naW5nIHRoZSBzbWFsbCBw
YWdlIGNvbW1pdCAvIGRlY29tbWl0IGNvZGUKKyAgICAgICAgdG8gd29yayBpbiBmdWxsIHBoeXNp
Y2FsIHBhZ2UgaW5jcmVtZW50cy4gIEZvciBwYWdlIGNsYXNzZXMgdGhhdCBhcmUgcGh5c2ljYWwg
cGFnZSBzaXplIGFuZCBsYXJnZXIsCisgICAgICAgIHRoZXJlIGlzbid0IGFueSBmdW5jdGlvbmFs
IGNoYW5nZS4gIFdoZW4gc2NhdmVuZ2luZyBwYWdlIGNsYXNzZXMgc21hbGxlciB0aGFuIHRoZSBw
aHlzaWNhbCBwYWdlIHNpemUsCisgICAgICAgIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBv
ciBub3QgdGhlIGFkamFjZW50IHNtYWxsIHBhZ2VzIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBhZ2Ug
YXJlIGFsc28KKyAgICAgICAgZnJlZSBiZWZvcmUgZGVjb21taXRpbmcgdGhhdCBjb250YWluaW5n
IHBhZ2UuICBXaGVuIHdlIG5lZWQgdG8gY29tbWl0IG1vcmUgbWVtb3J5LCB3ZSBjb21taXQKKyAg
ICAgICAgdGhlIHdob2xlIHBhZ2UsIGFuZCBhZGQgYW55IGFkamFjZW50IHZpcnR1YWwgcGFnZXMg
dGhhdCB3ZXJlIGZ1bGx5IGNvbW1pdHRlZCBhcyB3ZWxsLgorCisgICAgICAgICogYm1hbGxvYy9D
aHVuay5oOgorICAgICAgICAoYm1hbGxvYzo6Zm9yRWFjaFBhZ2UpOgorICAgICAgICAqIGJtYWxs
b2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplTGluZU1ldGFk
YXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEpOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5RGVjb21taXRTbWFsbFBhZ2VTbG93KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmNv
bW1pdFNtYWxsUGFnZVNsb3cpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFs
bFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNC
eU1ldGFkYXRhKToKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKiBibWFsbG9j
L1ZNQWxsb2NhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6OnBoeXNpY2FsUGFnZVNpemVTbG9wcHlS
b3VuZFVwKToKKwogMjAxOS0wMS0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBnaWdhY2FnZSBzbGlkZSBzaG91bGQgcmFuZG9taXplIGJvdGggc3Rh
cnQgYW5kIGVuZApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkocmV2aXNpb24gMjQwOTkyKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3
ICs3Nyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIGZvckVhY2gKIHsKICAg
ICAvLyBXZSBhbGlnbiB0byBhdCBsZWFzdCB0aGUgcGFnZSBzaXplIHNvIHdlIGNhbiBzZXJ2aWNl
IGFsaWduZWQgYWxsb2NhdGlvbnMKICAgICAvLyBhdCBlcXVhbCBhbmQgc21hbGxlciBwb3dlcnMg
b2YgdHdvLCBhbmQgYWxzbyBzbyB3ZSBjYW4gdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcygpLgot
ICAgIHNpemVfdCBtZXRhZGF0YVNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mTm9uUG93ZXJPZlR3
byhwYWdlU2l6ZSwgc2l6ZW9mKENodW5rKSk7CisgICAgc2l6ZV90IGZpcnN0UGFnZU9mZnNldCA9
IG1heChwYWdlU2l6ZSwgdm1QYWdlU2l6ZSgpKTsKKyAgICBzaXplX3QgbWV0YWRhdGFTaXplID0g
cm91bmRVcFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28oZmlyc3RQYWdlT2Zmc2V0LCBzaXplb2Yo
Q2h1bmspKTsKIAogICAgIE9iamVjdCBiZWdpbihjaHVuaywgbWV0YWRhdGFTaXplKTsKICAgICBP
YmplY3QgZW5kKGNodW5rLCBjaHVua1NpemUpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
CShyZXZpc2lvbiAyNDA5OTIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAor
c3RhdGljX2Fzc2VydChibWFsbG9jOjppc1Bvd2VyT2ZUd28oc21hbGxQYWdlU2l6ZSksICIiKTsK
KwogSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+JikKICAg
ICA6IG1fa2luZChraW5kKQogICAgICwgbV92bVBhZ2VTaXplUGh5c2ljYWwodm1QYWdlU2l6ZVBo
eXNpY2FsKCkpCkBAIC05Myw3ICs5NSw3IEBAIHNpemVfdCBIZWFwOjpnaWdhY2FnZVNpemUoKQog
dm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKIHsKICAgICBzaXplX3Qgc2l6ZUNs
YXNzQ291bnQgPSBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6ZSk7Ci0gICAgc2l6ZV90
IHNtYWxsTGluZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5c2ljYWwgLyBzbWFsbExpbmVTaXplOwor
ICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFsbExpbmVTaXpl
OwogICAgIG1fc21hbGxMaW5lTWV0YWRhdGEuZ3JvdyhzaXplQ2xhc3NDb3VudCAqIHNtYWxsTGlu
ZUNvdW50KTsKIAogICAgIGZvciAoc2l6ZV90IHNpemVDbGFzcyA9IDA7IHNpemVDbGFzcyA8IHNp
emVDbGFzc0NvdW50OyArK3NpemVDbGFzcykgewpAQCAtMTAyLDcgKzEwNCw3IEBAIHZvaWQgSGVh
cDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCiAKICAgICAgICAgc2l6ZV90IG9iamVjdCA9IDA7
CiAgICAgICAgIHNpemVfdCBsaW5lID0gMDsKLSAgICAgICAgd2hpbGUgKG9iamVjdCA8IG1fdm1Q
YWdlU2l6ZVBoeXNpY2FsKSB7CisgICAgICAgIHdoaWxlIChvYmplY3QgPCBzbWFsbFBhZ2VTaXpl
KSB7CiAgICAgICAgICAgICBsaW5lID0gb2JqZWN0IC8gc21hbGxMaW5lU2l6ZTsKICAgICAgICAg
ICAgIHNpemVfdCBsZWZ0b3ZlciA9IG9iamVjdCAlIHNtYWxsTGluZVNpemU7CiAKQEAgLTExNiw3
ICsxMTgsNyBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEoKQogICAgICAgICB9
CiAKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGxhc3Qgb2JqZWN0IGluIGEgcGFnZSB0byBl
c2NhcGUgdGhlIHBhZ2UuCi0gICAgICAgIGlmIChvYmplY3QgPiBtX3ZtUGFnZVNpemVQaHlzaWNh
bCkgeworICAgICAgICBpZiAob2JqZWN0ID4gc21hbGxQYWdlU2l6ZSkgewogICAgICAgICAgICAg
QkFTU0VSVChwYWdlTWV0YWRhdGFbbGluZV0ub2JqZWN0Q291bnQpOwogICAgICAgICAgICAgLS1w
YWdlTWV0YWRhdGFbbGluZV0ub2JqZWN0Q291bnQ7CiAgICAgICAgIH0KQEAgLTEyOCwxMSArMTMw
LDEwIEBAIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpCiAgICAgYXV0byBjb21w
dXRlUGFnZVNpemUgPSBbJl0oc2l6ZV90IHNpemVDbGFzcykgewogICAgICAgICBzaXplX3Qgc2l6
ZSA9IG9iamVjdFNpemUoc2l6ZUNsYXNzKTsKICAgICAgICAgaWYgKHNpemVDbGFzcyA8IGJtYWxs
b2M6OnNpemVDbGFzcyhzbWFsbExpbmVTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZtUGFn
ZVNpemVQaHlzaWNhbDsKKyAgICAgICAgICAgIHJldHVybiBzbWFsbFBhZ2VTaXplOwogCi0gICAg
ICAgIGZvciAoc2l6ZV90IHBhZ2VTaXplID0gbV92bVBhZ2VTaXplUGh5c2ljYWw7Ci0gICAgICAg
ICAgICBwYWdlU2l6ZSA8IHBhZ2VTaXplTWF4OwotICAgICAgICAgICAgcGFnZVNpemUgKz0gbV92
bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgLy8gV2Ugb25seSB3YW50IHBvd2VyIG9mIDIg
cGFnZVNpemVzLiBHaXZlbiB0aGF0IHNtYWxsUGFnZVNpemUgaXMgYSBwb3dlciBvZiAyLCB3ZSBq
dXN0IGRvdWJsZSBpdCB3aGVuIHdlIHdhbnQgYSBsYXJnZXIgc2l6ZS4KKyAgICAgICAgZm9yIChz
aXplX3QgcGFnZVNpemUgPSBzbWFsbFBhZ2VTaXplOyBwYWdlU2l6ZSA8IHBhZ2VTaXplTWF4OyBw
YWdlU2l6ZSAqPSAyKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQocGFnZVNpemUgPD0g
Y2h1bmtTaXplIC8gMik7CiAgICAgICAgICAgICBzaXplX3Qgd2FzdGUgPSBwYWdlU2l6ZSAlIHNp
emU7CiAgICAgICAgICAgICBpZiAod2FzdGUgPD0gcGFnZVNpemUgLyBwYWdlU2l6ZVdhc3RlRmFj
dG9yKQpAQCAtMTg4LDE0ICsxODksMTcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShzdGQ6OmxvY2tf
Z3VhcmQ8TXV0ZQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAg
ICAgIHNpemVfdCBwYWdlU2l6ZSA9IGJtYWxsb2M6OnBhZ2VTaXplKCZsaXN0IC0gJm1fZnJlZVBh
Z2VzWzBdKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQ
YWdlU2l6ZVNsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSBkZWNvbW1pdFNpemU7Ci0gICAgICAgICAgICAg
ICAgbV9mb290cHJpbnQgLT0gZGVjb21taXRTaXplOwotICAgICAgICAgICAgICAgIGRlY29tbWl0
dGVyLmFkZEVhZ2VyKHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKLSAgICAgICAg
ICAgICAgICBwYWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKGZhbHNlKTsKLSNpZiBFTkFCTEVfUEhZ
U0lDQUxfUEFHRV9NQVAgCi0gICAgICAgICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuZGVjb21t
aXQocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOworICAgICAgICAgICAgICAgIGlm
IChwYWdlU2l6ZSA+PSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5iZWdp
bigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fZnJlZWFibGVN
ZW1vcnkgLT0gZGVjb21taXRTaXplOworICAgICAgICAgICAgICAgICAgICBtX2Zvb3RwcmludCAt
PSBkZWNvbW1pdFNpemU7CisgICAgICAgICAgICAgICAgICAgIGRlY29tbWl0dGVyLmFkZEVhZ2Vy
KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKKyAgICAgICAgICAgICAgICAgICAg
cGFnZS0+c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7CisjaWYgRU5BQkxFX1BIWVNJQ0FMX1BB
R0VfTUFQCisgICAgICAgICAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKICNlbmRpZgorICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0cnlEZWNvbW1pdFNtYWxsUGFnZVNsb3cobG9j
aywgZGVjb21taXR0ZXIsIHBhZ2UsIHBhZ2VTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTI2Nyw2ICsyNzEsMTA5IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENo
dW5rKHN0ZDo6dW5pcXUKICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmspOwog
fQogCit2b2lkIEhlYXA6OnRyeURlY29tbWl0U21hbGxQYWdlU2xvdyhzdGQ6OmxvY2tfZ3VhcmQ8
TXV0ZXg+JiwgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgU21hbGxQYWdlKiBzbWFsbFBhZ2Us
IHNpemVfdCBwYWdlU2l6ZSkKK3sKKyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHNtYWxs
UGFnZSk7CisgICAgU21hbGxQYWdlKiBmaXJzdFBhZ2VUb0RlY29tbWl0IHsgbnVsbHB0ciB9Owor
ICAgIHNpemVfdCBwYWdlc1RvRGVjb21taXQgeyAwIH07CisKKyAgICBzaXplX3QgbWF0Y2hpbmdQ
YWdlQ291bnQgPSAwOworCisgICAgY2hhciogcGh5c2ljYWxQYWdlc0JlZ2luID0gcm91bmREb3du
VG9NdWx0aXBsZU9mKG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzbWFsbFBhZ2UtPmJlZ2luKCktPmJl
Z2luKCkpOworICAgIHVuc2lnbmVkIHNtYWxsUGFnZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5c2lj
YWwgLyBwYWdlU2l6ZTsKKworICAgIFNtYWxsUGFnZSogZmlyc3RQYWdlSW5SYW5nZSA9IGNodW5r
LT5wYWdlKGNodW5rLT5vZmZzZXQocGh5c2ljYWxQYWdlc0JlZ2luKSk7CisgICAgU21hbGxQYWdl
KiBsYXN0UGFnZUluUmFuZ2UgPSBjaHVuay0+cGFnZShjaHVuay0+b2Zmc2V0KHBoeXNpY2FsUGFn
ZXNCZWdpbiArIHBhZ2VTaXplICogKHNtYWxsUGFnZUNvdW50IC0gMSkpKTsKKyAgICAKKyAgICBm
b3IgKGF1dG8qIHBhZ2UgOiBjaHVuay0+ZnJlZVBhZ2VzKCkpIHsKKyAgICAgICAgaWYgKHBhZ2Ug
Pj0gZmlyc3RQYWdlSW5SYW5nZSAmJiBwYWdlIDw9IGxhc3RQYWdlSW5SYW5nZSkgeworICAgICAg
ICAgICAgbWF0Y2hpbmdQYWdlQ291bnQrKzsKKyAgICAgICAgICAgIGlmIChtYXRjaGluZ1BhZ2VD
b3VudCA9PSBzbWFsbFBhZ2VDb3VudCkgeworICAgICAgICAgICAgICAgIGZpcnN0UGFnZVRvRGVj
b21taXQgPSBmaXJzdFBhZ2VJblJhbmdlOworICAgICAgICAgICAgICAgIHBhZ2VzVG9EZWNvbW1p
dCA9IG1hdGNoaW5nUGFnZUNvdW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmaXJzdFBhZ2VUb0RlY29tbWl0IHx8
ICFwYWdlc1RvRGVjb21taXQpCisgICAgICAgIHJldHVybjsKKworICAgIGNoYXIqIGZpcnN0UGFn
ZUJlZ2luID0gZmlyc3RQYWdlVG9EZWNvbW1pdC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXpl
X3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShmaXJzdFBhZ2VCZWdpbiwg
cGFnZXNUb0RlY29tbWl0ICogcGFnZVNpemUpOworICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gZGVj
b21taXRTaXplOworICAgIG1fZm9vdHByaW50IC09IGRlY29tbWl0U2l6ZTsKKyAgICBkZWNvbW1p
dHRlci5hZGRFYWdlcihmaXJzdFBhZ2VCZWdpbiwgZGVjb21taXRTaXplKTsKKworICAgIGlmIChw
YWdlc1RvRGVjb21taXQgPT0gMSkKKyAgICAgICAgZmlyc3RQYWdlVG9EZWNvbW1pdC0+c2V0SGFz
UGh5c2ljYWxQYWdlcyhmYWxzZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBmaXJzdFBh
Z2VPZmZzZXQgPSBjaHVuay0+b2Zmc2V0KGZpcnN0UGFnZUJlZ2luKTsKKyAgICAgICAgc2l6ZV90
IGxhc3RQYWdlT2Zmc2V0ID0gZmlyc3RQYWdlT2Zmc2V0ICsgcGFnZXNUb0RlY29tbWl0ICogcGFn
ZVNpemU7CisgICAgICAgIAorICAgICAgICBPYmplY3QgYmVnaW4oY2h1bmssIGZpcnN0UGFnZU9m
ZnNldCk7CisgICAgICAgIE9iamVjdCBlbmQoY2h1bmssIGxhc3RQYWdlT2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCArIHBhZ2VTaXplIDw9IGVuZDsg
aXQgPSBpdCArIHBhZ2VTaXplKQorICAgICAgICAgICAgaXQucGFnZSgpLT5zZXRIYXNQaHlzaWNh
bFBhZ2VzKGZhbHNlKTsKKyAgICB9CisjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQCisgICAg
bV9waHlzaWNhbFBhZ2VNYXAuZGVjb21taXQoZmlyc3RQYWdlVG9EZWNvbW1pdCwgZGVjb21taXRT
aXplKTsKKyNlbmRpZgorfQorCit2b2lkIEhlYXA6OmNvbW1pdFNtYWxsUGFnZVNsb3coc3RkOjp1
bmlxdWVfbG9jazxNdXRleD4mLCBTbWFsbFBhZ2UqIHBhZ2UsIHNpemVfdCBwYWdlU2l6ZSkKK3sK
KyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOworICAgIFNtYWxsUGFnZSogZmly
c3RQYWdlVG9Db21taXQgeyBudWxscHRyIH07CisgICAgc2l6ZV90IHBhZ2VzVG9Db21taXQgeyAw
IH07CisKKyAgICBjaGFyKiBwaHlzaWNhbFBhZ2VzQmVnaW4gPSByb3VuZERvd25Ub011bHRpcGxl
T2YobV92bVBhZ2VTaXplUGh5c2ljYWwsIHBhZ2UtPmJlZ2luKCktPmJlZ2luKCkpOworICAgIHVu
c2lnbmVkIHNtYWxsUGFnZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5c2ljYWwgLyBwYWdlU2l6ZTsK
KworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBjaHVuay0+b2Zmc2V0KHBoeXNpY2FsUGFn
ZXNCZWdpbik7CisgICAgc2l6ZV90IGxhc3RQYWdlT2Zmc2V0ID0gZmlyc3RQYWdlT2Zmc2V0ICsg
c21hbGxQYWdlQ291bnQgKiBwYWdlU2l6ZTsKKworICAgIE9iamVjdCBiZWdpbihjaHVuaywgZmly
c3RQYWdlT2Zmc2V0KTsKKyAgICBPYmplY3QgZW5kKGNodW5rLCBsYXN0UGFnZU9mZnNldCk7CisK
KyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgKyBwYWdlU2l6ZSA8PSBlbmQ7IGl0ID0gaXQg
KyBwYWdlU2l6ZSkgeworICAgICAgICBpZiAoIWZpcnN0UGFnZVRvQ29tbWl0KSB7CisgICAgICAg
ICAgICBpZiAoIWl0LnBhZ2UoKS0+aGFzUGh5c2ljYWxQYWdlcygpKSB7CisgICAgICAgICAgICAg
ICAgZmlyc3RQYWdlVG9Db21taXQgPSBpdC5wYWdlKCk7CisgICAgICAgICAgICAgICAgcGFnZXNU
b0NvbW1pdCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWl0LnBhZ2Uo
KS0+aGFzUGh5c2ljYWxQYWdlcygpKQorICAgICAgICAgICAgcGFnZXNUb0NvbW1pdCsrOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBCQVNTRVJUKGZpcnN0
UGFnZVRvQ29tbWl0ICYmIHBhZ2VzVG9Db21taXQpOworCisgICAgY2hhciogZmlyc3RQYWdlQmVn
aW4gPSBmaXJzdFBhZ2VUb0NvbW1pdC0+YmVnaW4oKS0+YmVnaW4oKTsKKyAgICBzaXplX3QgY29t
bWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHlSb3VuZFVwKGZpcnN0UGFnZUJlZ2luLCBw
YWdlc1RvQ29tbWl0ICogcGFnZVNpemUpOworICAgIG1fZm9vdHByaW50ICs9IGNvbW1pdFNpemU7
CisKKyAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShmaXJzdFBhZ2VCZWdpbiwgY29t
bWl0U2l6ZSk7CisKKyAgICBpZiAocGFnZXNUb0NvbW1pdCA9PSAxKQorICAgICAgICBmaXJzdFBh
Z2VUb0NvbW1pdC0+c2V0SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc2l6ZV90IGZpcnN0UGFnZU9mZnNldCA9IGNodW5rLT5vZmZzZXQoZmlyc3RQYWdlQmVnaW4p
OworICAgICAgICBzaXplX3QgbGFzdFBhZ2VPZmZzZXQgPSBmaXJzdFBhZ2VPZmZzZXQgKyBwYWdl
c1RvQ29tbWl0ICogcGFnZVNpemU7CisKKyAgICAgICAgT2JqZWN0IGJlZ2luKGNodW5rLCBmaXJz
dFBhZ2VPZmZzZXQpOworICAgICAgICBPYmplY3QgZW5kKGNodW5rLCBsYXN0UGFnZU9mZnNldCk7
CisKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5kOyBp
dCA9IGl0ICsgcGFnZVNpemUpCisgICAgICAgICAgICBpdC5wYWdlKCktPnNldEhhc1BoeXNpY2Fs
UGFnZXModHJ1ZSk7CisgICAgfQorI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAorICAgIG1f
cGh5c2ljYWxQYWdlTWFwLmNvbW1pdChmaXJzdFBhZ2VUb0NvbW1pdCwgY29tbWl0U2l6ZSk7Cisj
ZW5kaWYKK30KKwogdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVuayhDaHVuayogY2h1bmss
IHNpemVfdCBwYWdlQ2xhc3MpCiB7CiAgICAgbV9vYmplY3RUeXBlcy5zZXQoY2h1bmssIE9iamVj
dFR5cGU6OkxhcmdlKTsKQEAgLTMyNSwxMiArNDMyLDE1IEBAIFNtYWxsUGFnZSogSGVhcDo6YWxs
b2NhdGVTbWFsbFBhZ2Uoc3RkOjoKICAgICAgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcGh5
c2ljYWxTaXplOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fc2NhdmVuZ2VyLT5zY2hl
ZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShwYWdlU2l6ZSk7Ci0gICAgICAgICAgICBtX2Zvb3Rw
cmludCArPSBwaHlzaWNhbFNpemU7Ci0gICAgICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdl
c1Nsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICBw
YWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKHRydWUpOwotI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdF
X01BUCAKLSAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlLT5iZWdpbigp
LT5iZWdpbigpLCBwYWdlU2l6ZSk7CisgICAgICAgICAgICBpZiAocGFnZVNpemUgPj0gbV92bVBh
Z2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgICAgICAgICBtX2Zvb3RwcmludCArPSBwaHlzaWNh
bFNpemU7CisgICAgICAgICAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocGFn
ZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOworICAgICAgICAgICAgICAgIHBhZ2UtPnNl
dEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7CisjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQCisg
ICAgICAgICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuY29tbWl0KHBhZ2UtPmJlZ2luKCktPmJl
Z2luKCksIHBhZ2VTaXplKTsKICNlbmRpZgorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgY29tbWl0U21hbGxQYWdlU2xvdyhsb2NrLCBwYWdlLCBwYWdlU2l6ZSk7CiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gcGFnZTsKQEAgLTM5MCw3ICs1MDAsNyBAQCB2b2lkIEhlYXA6
OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhCiAgICAgU21hbGxQYWdlKiBwYWdlID0gYWxs
b2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5lQ2FjaGUpOwogICAgIFNtYWxsTGlu
ZSogbGluZXMgPSBwYWdlLT5iZWdpbigpOwogICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVz
KGxvY2spKTsKLSAgICBzaXplX3Qgc21hbGxMaW5lQ291bnQgPSBtX3ZtUGFnZVNpemVQaHlzaWNh
bCAvIHNtYWxsTGluZVNpemU7CisgICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gc21hbGxQYWdl
U2l6ZSAvIHNtYWxsTGluZVNpemU7CiAgICAgTGluZU1ldGFkYXRhKiBwYWdlTWV0YWRhdGEgPSAm
bV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3MgKiBzbWFsbExpbmVDb3VudF07CiAgICAgCiAg
ICAgYXV0byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBbJl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7Cklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMjQwOTkyKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOSBAQCBwcml2
YXRlOgogICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxN
dXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmKTsKICAgICB2b2lkIGRlYWxsb2Nh
dGVTbWFsbExpbmUoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBPYmplY3QsIExpbmVDYWNoZSYp
OwogCisgICAgdm9pZCB0cnlEZWNvbW1pdFNtYWxsUGFnZVNsb3coc3RkOjpsb2NrX2d1YXJkPE11
dGV4PiYsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdl
U2l6ZSk7CisgICAgdm9pZCBjb21taXRTbWFsbFBhZ2VTbG93KHN0ZDo6dW5pcXVlX2xvY2s8TXV0
ZXg+JiwgU21hbGxQYWdlKiwgc2l6ZV90IHBhZ2VTaXplKTsKKwogICAgIHZvaWQgYWxsb2NhdGVT
bWFsbENodW5rKHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+Jiwgc2l6ZV90IHBhZ2VDbGFzcyk7CiAg
ICAgdm9pZCBkZWFsbG9jYXRlU21hbGxDaHVuayhDaHVuayosIHNpemVfdCBwYWdlQ2xhc3MpOwog
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkocmV2aXNpb24gMjQwOTkyKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzNCw2ICsyMzQsMTYgQEAgaW5saW5lIHNpemVfdCBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHZv
aQogICAgIHJldHVybiBlbmQgLSBiZWdpbjsKIH0KIAoraW5saW5lIHNpemVfdCBwaHlzaWNhbFBh
Z2VTaXplU2xvcHB5Um91bmRVcCh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBjaGFyKiBi
ZWdpbiA9IHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplUGh5c2ljYWwoKSwgc3RhdGlj
X2Nhc3Q8Y2hhcio+KHApKTsKKyAgICBjaGFyKiBlbmQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKHZt
UGFnZVNpemVQaHlzaWNhbCgpLCBzdGF0aWNfY2FzdDxjaGFyKj4ocCkgKyBzaXplKTsKKyAgICAK
KyAgICBpZiAoYmVnaW4gPj0gZW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZW5k
IC0gYmVnaW47Cit9CisKIC8vIFRyaW1zIHJlcXVlc3RzIHRoYXQgYXJlIHVuLXBhZ2UtYWxpZ25l
ZC4KIGlubGluZSB2b2lkIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkodm9pZCogcCwg
c2l6ZV90IHNpemUpCiB7Cg==
</data>
<flag name="review"
          id="378013"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361348</attachid>
            <date>2019-02-06 17:20:38 -0800</date>
            <delta_ts>2019-02-06 18:57:44 -0800</delta_ts>
            <desc>Updated patch responding to review comments</desc>
            <filename>192389-5.patch</filename>
            <type>text/plain</type>
            <size>11274</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MTExMSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE5LTAyLTA2ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIzODkKKyAgICAgICAgYm1hbGxvYyB1c2VzIG1vcmUg
bWVtb3J5IG9uIGlPUyBjb21wYXJlZCB0byBtYWNPUyBkdWUgdG8gcGh5c2ljYWwgcGFnZSBzaXpl
IGRpZmZlcmVuY2VzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgbXVsdGlwbGVzIGluc3RlYWQgb2YKKyAgICAgICAgcGh5c2ljYWwg
cGFnZSBzaXplIGluY3JlbWVudHMuICBUaGlzIHJlcXVpcmVkIGNoYW5naW5nIHRoZSBzbWFsbCBw
YWdlIGNvbW1pdCAvIGRlY29tbWl0IGNvZGUKKyAgICAgICAgdG8gd29yayBpbiBmdWxsIHBoeXNp
Y2FsIHBhZ2UgaW5jcmVtZW50cy4gIEZvciBwYWdlIGNsYXNzZXMgdGhhdCBhcmUgcGh5c2ljYWwg
cGFnZSBzaXplIGFuZCBsYXJnZXIsCisgICAgICAgIHRoZXJlIGlzbid0IGFueSBmdW5jdGlvbmFs
IGNoYW5nZS4gIFdoZW4gc2NhdmVuZ2luZyBwYWdlIGNsYXNzZXMgc21hbGxlciB0aGFuIHRoZSBw
aHlzaWNhbCBwYWdlIHNpemUsCisgICAgICAgIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBv
ciBub3QgdGhlIGFkamFjZW50IHNtYWxsIHBhZ2VzIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBhZ2Ug
YXJlIGFsc28KKyAgICAgICAgZnJlZSBiZWZvcmUgZGVjb21taXRpbmcgdGhhdCBjb250YWluaW5n
IHBhZ2UuICBXaGVuIHdlIG5lZWQgdG8gY29tbWl0IG1vcmUgbWVtb3J5LCB3ZSBjb21taXQKKyAg
ICAgICAgdGhlIHdob2xlIHBhZ2UsIGFuZCBhZGQgYW55IGFkamFjZW50IHZpcnR1YWwgcGFnZXMg
dGhhdCB3ZXJlIGZ1bGx5IGNvbW1pdHRlZCBhcyB3ZWxsLgorCisgICAgICAgICogYm1hbGxvYy9D
aHVuay5oOgorICAgICAgICAoYm1hbGxvYzo6Zm9yRWFjaFBhZ2UpOgorICAgICAgICAqIGJtYWxs
b2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplTGluZU1ldGFk
YXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEpOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2UpOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6Y29tbWl0U21hbGxQYWdlc0luUGh5c2ljYWxQYWdlKToKKyAgICAgICAgKGJtYWxs
b2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFs
bG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAgICogYm1hbGxvYy9IZWFw
Lmg6CisKIDIwMTktMDEtMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgZ2lnYWNhZ2Ugc2xpZGUgc2hvdWxkIHJhbmRvbWl6ZSBib3RoIHN0YXJ0IGFu
ZCBlbmQKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHJldmlzaW9uIDI0MDk5MikKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcs
OCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBmb3JFYWNoCiB7CiAgICAgLy8g
V2UgYWxpZ24gdG8gYXQgbGVhc3QgdGhlIHBhZ2Ugc2l6ZSBzbyB3ZSBjYW4gc2VydmljZSBhbGln
bmVkIGFsbG9jYXRpb25zCiAgICAgLy8gYXQgZXF1YWwgYW5kIHNtYWxsZXIgcG93ZXJzIG9mIHR3
bywgYW5kIGFsc28gc28gd2UgY2FuIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoKS4KLSAgICBz
aXplX3QgbWV0YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28ocGFn
ZVNpemUsIHNpemVvZihDaHVuaykpOworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBtYXgo
cGFnZVNpemUsIHZtUGFnZVNpemUoKSk7CisgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2ZOb25Qb3dlck9mVHdvKGZpcnN0UGFnZU9mZnNldCwgc2l6ZW9mKENodW5r
KSk7CiAKICAgICBPYmplY3QgYmVnaW4oY2h1bmssIG1ldGFkYXRhU2l6ZSk7CiAgICAgT2JqZWN0
IGVuZChjaHVuaywgY2h1bmtTaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2
aXNpb24gMjQwOTkyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK3N0YXRp
Y19hc3NlcnQoaXNQb3dlck9mVHdvKHNtYWxsUGFnZVNpemUpLCAiIik7CisKIEhlYXA6OkhlYXAo
SGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYpCiAgICAgOiBtX2tpbmQoa2lu
ZCkKICAgICAsIG1fdm1QYWdlU2l6ZVBoeXNpY2FsKHZtUGFnZVNpemVQaHlzaWNhbCgpKQpAQCAt
OTMsNyArOTUsNyBAQCBzaXplX3QgSGVhcDo6Z2lnYWNhZ2VTaXplKCkKIHZvaWQgSGVhcDo6aW5p
dGlhbGl6ZUxpbmVNZXRhZGF0YSgpCiB7CiAgICAgc2l6ZV90IHNpemVDbGFzc0NvdW50ID0gYm1h
bGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpOwotICAgIHNpemVfdCBzbWFsbExpbmVDb3Vu
dCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gc21hbGxMaW5lU2l6ZTsKKyAgICBzaXplX3Qgc21h
bGxMaW5lQ291bnQgPSBzbWFsbFBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKICAgICBtX3NtYWxs
TGluZU1ldGFkYXRhLmdyb3coc2l6ZUNsYXNzQ291bnQgKiBzbWFsbExpbmVDb3VudCk7CiAKICAg
ICBmb3IgKHNpemVfdCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBzaXplQ2xhc3NDb3VudDsg
KytzaXplQ2xhc3MpIHsKQEAgLTEwMiw3ICsxMDQsNyBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVM
aW5lTWV0YWRhdGEoKQogCiAgICAgICAgIHNpemVfdCBvYmplY3QgPSAwOwogICAgICAgICBzaXpl
X3QgbGluZSA9IDA7Ci0gICAgICAgIHdoaWxlIChvYmplY3QgPCBtX3ZtUGFnZVNpemVQaHlzaWNh
bCkgeworICAgICAgICB3aGlsZSAob2JqZWN0IDwgc21hbGxQYWdlU2l6ZSkgewogICAgICAgICAg
ICAgbGluZSA9IG9iamVjdCAvIHNtYWxsTGluZVNpemU7CiAgICAgICAgICAgICBzaXplX3QgbGVm
dG92ZXIgPSBvYmplY3QgJSBzbWFsbExpbmVTaXplOwogCkBAIC0xMTYsNyArMTE4LDcgQEAgdm9p
ZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKICAgICAgICAgfQogCiAgICAgICAgIC8v
IERvbid0IGFsbG93IHRoZSBsYXN0IG9iamVjdCBpbiBhIHBhZ2UgdG8gZXNjYXBlIHRoZSBwYWdl
LgotICAgICAgICBpZiAob2JqZWN0ID4gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAg
aWYgKG9iamVjdCA+IHNtYWxsUGFnZVNpemUpIHsKICAgICAgICAgICAgIEJBU1NFUlQocGFnZU1l
dGFkYXRhW2xpbmVdLm9iamVjdENvdW50KTsKICAgICAgICAgICAgIC0tcGFnZU1ldGFkYXRhW2xp
bmVdLm9iamVjdENvdW50OwogICAgICAgICB9CkBAIC0xMjgsMTEgKzEzMCwxMCBAQCB2b2lkIEhl
YXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEoKQogICAgIGF1dG8gY29tcHV0ZVBhZ2VTaXplID0g
WyZdKHNpemVfdCBzaXplQ2xhc3MpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3RTaXpl
KHNpemVDbGFzcyk7CiAgICAgICAgIGlmIChzaXplQ2xhc3MgPCBibWFsbG9jOjpzaXplQ2xhc3Mo
c21hbGxMaW5lU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbV92bVBhZ2VTaXplUGh5c2ljYWw7
CisgICAgICAgICAgICByZXR1cm4gc21hbGxQYWdlU2l6ZTsKIAotICAgICAgICBmb3IgKHNpemVf
dCBwYWdlU2l6ZSA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwotICAgICAgICAgICAgcGFnZVNpemUg
PCBwYWdlU2l6ZU1heDsKLSAgICAgICAgICAgIHBhZ2VTaXplICs9IG1fdm1QYWdlU2l6ZVBoeXNp
Y2FsKSB7CisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBwb3dlciBvZiAyIHBhZ2VTaXplcy4gR2l2
ZW4gdGhhdCBzbWFsbFBhZ2VTaXplIGlzIGEgcG93ZXIgb2YgMiwgd2UganVzdCBkb3VibGUgaXQg
d2hlbiB3ZSB3YW50IGEgbGFyZ2VyIHNpemUuCisgICAgICAgIGZvciAoc2l6ZV90IHBhZ2VTaXpl
ID0gc21hbGxQYWdlU2l6ZTsgcGFnZVNpemUgPCBwYWdlU2l6ZU1heDsgcGFnZVNpemUgKj0gMikg
ewogICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGNodW5rU2l6ZSAvIDIp
OwogICAgICAgICAgICAgc2l6ZV90IHdhc3RlID0gcGFnZVNpemUgJSBzaXplOwogICAgICAgICAg
ICAgaWYgKHdhc3RlIDw9IHBhZ2VTaXplIC8gcGFnZVNpemVXYXN0ZUZhY3RvcikKQEAgLTE4OCwx
NCArMTg5LDE3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGUKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBzaXplX3QgcGFn
ZVNpemUgPSBibWFsbG9jOjpwYWdlU2l6ZSgmbGlzdCAtICZtX2ZyZWVQYWdlc1swXSk7Ci0gICAg
ICAgICAgICAgICAgc2l6ZV90IGRlY29tbWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHko
cGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotICAgICAgICAgICAgICAgIG1fZnJl
ZWFibGVNZW1vcnkgLT0gZGVjb21taXRTaXplOwotICAgICAgICAgICAgICAgIG1fZm9vdHByaW50
IC09IGRlY29tbWl0U2l6ZTsKLSAgICAgICAgICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihw
YWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcGFnZS0+
c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7Ci0jaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQ
IAotICAgICAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KHBhZ2UtPmJlZ2lu
KCktPmJlZ2luKCksIHBhZ2VTaXplKTsKKyAgICAgICAgICAgICAgICBpZiAocGFnZVNpemUgPj0g
bV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlY29t
bWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwg
cGFnZVNpemUpOworICAgICAgICAgICAgICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IGRlY29t
bWl0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9mb290cHJpbnQgLT0gZGVjb21taXRTaXpl
OworICAgICAgICAgICAgICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihwYWdlLT5iZWdpbigp
LT5iZWdpbigpLCBwYWdlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnNldEhhc1Bo
eXNpY2FsUGFnZXMoZmFsc2UpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAorICAgICAg
ICAgICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5kZWNvbW1pdChwYWdlLT5iZWdpbigpLT5i
ZWdpbigpLCBwYWdlU2l6ZSk7CiAjZW5kaWYKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgdHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2UobG9jaywg
ZGVjb21taXR0ZXIsIHBhZ2UsIHBhZ2VTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTI2Nyw2ICsyNzEsNzkgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmso
c3RkOjp1bmlxdQogICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CiB9CiAK
K3ZvaWQgSGVhcDo6dHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uoc3RkOjpsb2Nr
X2d1YXJkPE11dGV4PiYsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIsIFNtYWxsUGFnZSogc21h
bGxQYWdlLCBzaXplX3QgcGFnZVNpemUpCit7CisgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6Omdl
dChzbWFsbFBhZ2UpOworICAgIFNtYWxsUGFnZSogZmlyc3RQYWdlVG9EZWNvbW1pdCB7IG51bGxw
dHIgfTsKKyAgICBzaXplX3QgcGFnZXNUb0RlY29tbWl0IHsgMCB9OworCisgICAgc2l6ZV90IG1h
dGNoaW5nUGFnZUNvdW50ID0gMDsKKworICAgIGNoYXIqIHBoeXNpY2FsUGFnZXNCZWdpbiA9IHJv
dW5kRG93blRvTXVsdGlwbGVPZihtX3ZtUGFnZVNpemVQaHlzaWNhbCwgc21hbGxQYWdlLT5iZWdp
bigpLT5iZWdpbigpKTsKKyAgICB1bnNpZ25lZCBzbWFsbFBhZ2VDb3VudCA9IG1fdm1QYWdlU2l6
ZVBoeXNpY2FsIC8gcGFnZVNpemU7CisKKyAgICBzaXplX3QgZmlyc3RTbWFsbFBhZ2VPZmZzZXQg
PSBjaHVuay0+b2Zmc2V0KHBoeXNpY2FsUGFnZXNCZWdpbik7CisgICAgc2l6ZV90IGxhc3RTbWFs
bFBhZ2VPZmZzZXQgPSBmaXJzdFNtYWxsUGFnZU9mZnNldCArIG1fdm1QYWdlU2l6ZVBoeXNpY2Fs
OworCisgICAgU21hbGxQYWdlKiBmaXJzdFBhZ2VJblJhbmdlID0gY2h1bmstPnBhZ2UoZmlyc3RT
bWFsbFBhZ2VPZmZzZXQpOworICAgIFNtYWxsUGFnZSogbGFzdFBhZ2VJblJhbmdlID0gY2h1bmst
PnBhZ2UobGFzdFNtYWxsUGFnZU9mZnNldCk7CisgICAgCisgICAgZm9yIChhdXRvKiBwYWdlIDog
Y2h1bmstPmZyZWVQYWdlcygpKSB7CisgICAgICAgIGlmIChwYWdlID49IGZpcnN0UGFnZUluUmFu
Z2UgJiYgcGFnZSA8IGxhc3RQYWdlSW5SYW5nZSkgeworICAgICAgICAgICAgbWF0Y2hpbmdQYWdl
Q291bnQrKzsKKyAgICAgICAgICAgIGlmIChtYXRjaGluZ1BhZ2VDb3VudCA9PSBzbWFsbFBhZ2VD
b3VudCkgeworICAgICAgICAgICAgICAgIGZpcnN0UGFnZVRvRGVjb21taXQgPSBmaXJzdFBhZ2VJ
blJhbmdlOworICAgICAgICAgICAgICAgIHBhZ2VzVG9EZWNvbW1pdCA9IG1hdGNoaW5nUGFnZUNv
dW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGZpcnN0UGFnZVRvRGVjb21taXQgIT0gZmlyc3RQYWdlSW5SYW5nZSB8
fCBwYWdlc1RvRGVjb21taXQgIT0gc21hbGxQYWdlQ291bnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNpemVfdCBkZWNvbW1pdFNpemUgPSBtX3ZtUGFnZVNpemVQaHlzaWNhbDsKKyAgICBtX2Zy
ZWVhYmxlTWVtb3J5IC09IGRlY29tbWl0U2l6ZTsKKyAgICBtX2Zvb3RwcmludCAtPSBkZWNvbW1p
dFNpemU7CisgICAgZGVjb21taXR0ZXIuYWRkRWFnZXIocGh5c2ljYWxQYWdlc0JlZ2luLCBkZWNv
bW1pdFNpemUpOworCisgICAgT2JqZWN0IGJlZ2luKGNodW5rLCBmaXJzdFNtYWxsUGFnZU9mZnNl
dCk7CisgICAgT2JqZWN0IGVuZChjaHVuaywgbGFzdFNtYWxsUGFnZU9mZnNldCk7CisgICAgCisg
ICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5kOyBpdCA9IGl0ICsg
cGFnZVNpemUpCisgICAgICAgIGl0LnBhZ2UoKS0+c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7
CisjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQCisgICAgbV9waHlzaWNhbFBhZ2VNYXAuZGVj
b21taXQoZmlyc3RQYWdlVG9EZWNvbW1pdCwgZGVjb21taXRTaXplKTsKKyNlbmRpZgorfQorCit2
b2lkIEhlYXA6OmNvbW1pdFNtYWxsUGFnZXNJblBoeXNpY2FsUGFnZShzdGQ6OnVuaXF1ZV9sb2Nr
PE11dGV4PiYsIFNtYWxsUGFnZSogcGFnZSwgc2l6ZV90IHBhZ2VTaXplKQoreworICAgIENodW5r
KiBjaHVuayA9IENodW5rOjpnZXQocGFnZSk7CisKKyAgICBjaGFyKiBwaHlzaWNhbFBhZ2VzQmVn
aW4gPSByb3VuZERvd25Ub011bHRpcGxlT2YobV92bVBhZ2VTaXplUGh5c2ljYWwsIHBhZ2UtPmJl
Z2luKCktPmJlZ2luKCkpOworCisgICAgc2l6ZV90IGZpcnN0U21hbGxQYWdlT2Zmc2V0ID0gY2h1
bmstPm9mZnNldChwaHlzaWNhbFBhZ2VzQmVnaW4pOworICAgIHNpemVfdCBsYXN0U21hbGxQYWdl
T2Zmc2V0ID0gZmlyc3RTbWFsbFBhZ2VPZmZzZXQgKyBtX3ZtUGFnZVNpemVQaHlzaWNhbDsKKwor
ICAgIE9iamVjdCBiZWdpbihjaHVuaywgZmlyc3RTbWFsbFBhZ2VPZmZzZXQpOworICAgIE9iamVj
dCBlbmQoY2h1bmssIGxhc3RTbWFsbFBhZ2VPZmZzZXQpOworCisjaWYgZGVmaW5lZChOREVCVUcp
CisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5kOyBpdCA9IGl0
ICsgcGFnZVNpemUpCisgICAgICAgIEJBU1NFUlQoIWl0LnBhZ2UoKS0+aGFzUGh5c2ljYWxQYWdl
cygpKTsKKyNlbmRpZgorCisgICAgbV9mb290cHJpbnQgKz0gbV92bVBhZ2VTaXplUGh5c2ljYWw7
CisgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocGh5c2ljYWxQYWdlc0JlZ2luLCBt
X3ZtUGFnZVNpemVQaHlzaWNhbCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgKyBw
YWdlU2l6ZSA8PSBlbmQ7IGl0ID0gaXQgKyBwYWdlU2l6ZSkKKyAgICAgICAgaXQucGFnZSgpLT5z
ZXRIYXNQaHlzaWNhbFBhZ2VzKHRydWUpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAor
ICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChiZWdpbi5wYWdlKCksIG1fdm1QYWdlU2l6ZVBo
eXNpY2FsKTsKKyNlbmRpZgorfQorCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKENo
dW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VDbGFzcykKIHsKICAgICBtX29iamVjdFR5cGVzLnNldChj
aHVuaywgT2JqZWN0VHlwZTo6TGFyZ2UpOwpAQCAtMzI1LDEyICs0MDIsMTUgQEAgU21hbGxQYWdl
KiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OgogICAgICAgICAgICAgbV9mcmVlYWJsZU1l
bW9yeSAtPSBwaHlzaWNhbFNpemU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9zY2F2
ZW5nZXItPnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKHBhZ2VTaXplKTsKLSAgICAgICAg
ICAgIG1fZm9vdHByaW50ICs9IHBoeXNpY2FsU2l6ZTsKLSAgICAgICAgICAgIHZtQWxsb2NhdGVQ
aHlzaWNhbFBhZ2VzU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKLSAg
ICAgICAgICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Ci0jaWYgRU5BQkxFX1BI
WVNJQ0FMX1BBR0VfTUFQIAotICAgICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuY29tbWl0KHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKKyAgICAgICAgICAgIGlmIChwYWdlU2l6
ZSA+PSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICAgICAgICAgIG1fZm9vdHByaW50
ICs9IHBoeXNpY2FsU2l6ZTsKKyAgICAgICAgICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdl
c1Nsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CisgICAgICAgICAgICAg
ICAgcGFnZS0+c2V0SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKKyNpZiBFTkFCTEVfUEhZU0lDQUxf
UEFHRV9NQVAKKyAgICAgICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5jb21taXQocGFnZS0+
YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwogI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2UobG9jaywgcGFn
ZSwgcGFnZVNpemUpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHBhZ2U7CkBAIC0zOTAs
NyArNDcwLDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YQogICAg
IFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFzcywgbGlu
ZUNhY2hlKTsKICAgICBTbWFsbExpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsKICAgICBCQVNT
RVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7Ci0gICAgc2l6ZV90IHNtYWxsTGluZUNvdW50
ID0gbV92bVBhZ2VTaXplUGh5c2ljYWwgLyBzbWFsbExpbmVTaXplOworICAgIHNpemVfdCBzbWFs
bExpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFsbExpbmVTaXplOwogICAgIExpbmVNZXRh
ZGF0YSogcGFnZU1ldGFkYXRhID0gJm1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzICogc21h
bGxMaW5lQ291bnRdOwogICAgIAogICAgIGF1dG8gZmluZFNtYWxsQnVtcFJhbmdlID0gWyZdKHNp
emVfdCYgbGluZU51bWJlcikgewpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDI0
MDk5MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNiArMTIwLDkgQEAgcHJpdmF0ZToKICAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQ
YWdlKHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywgTGluZUNhY2hl
Jik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+
JiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKIAorICAgIHZvaWQgdHJ5RGVjb21taXRTbWFsbFBhZ2Vz
SW5QaHlzaWNhbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYsIEJ1bGtEZWNvbW1pdCYgZGVj
b21taXR0ZXIsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdlU2l6ZSk7CisgICAgdm9pZCBjb21taXRT
bWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBTbWFsbFBh
Z2UqLCBzaXplX3QgcGFnZVNpemUpOworCiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoc3Rk
Ojp1bmlxdWVfbG9jazxNdXRleD4mLCBzaXplX3QgcGFnZUNsYXNzKTsKICAgICB2b2lkIGRlYWxs
b2NhdGVTbWFsbENodW5rKENodW5rKiwgc2l6ZV90IHBhZ2VDbGFzcyk7CiAK
</data>
<flag name="review"
          id="378040"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361362</attachid>
            <date>2019-02-06 18:57:44 -0800</date>
            <delta_ts>2019-02-07 13:32:57 -0800</delta_ts>
            <desc>Patch for Landing</desc>
            <filename>192389-6.patch</filename>
            <type>text/plain</type>
            <size>11055</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MTExMSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE5LTAyLTA2ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2MgdXNlcyBtb3Jl
IG1lbW9yeSBvbiBpT1MgY29tcGFyZWQgdG8gbWFjT1MgZHVlIHRvIHBoeXNpY2FsIHBhZ2Ugc2l6
ZSBkaWZmZXJlbmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkyMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgbXVsdGlwbGVzIGluc3RlYWQgb2YKKyAgICAgICAgcGh5c2ljYWwg
cGFnZSBzaXplIGluY3JlbWVudHMuICBUaGlzIHJlcXVpcmVkIGNoYW5naW5nIHRoZSBzbWFsbCBw
YWdlIGNvbW1pdCAvIGRlY29tbWl0IGNvZGUKKyAgICAgICAgdG8gd29yayBpbiBmdWxsIHBoeXNp
Y2FsIHBhZ2UgaW5jcmVtZW50cy4gIEZvciBwYWdlIGNsYXNzZXMgdGhhdCBhcmUgcGh5c2ljYWwg
cGFnZSBzaXplIGFuZCBsYXJnZXIsCisgICAgICAgIHRoZXJlIGlzbid0IGFueSBmdW5jdGlvbmFs
IGNoYW5nZS4gIFdoZW4gc2NhdmVuZ2luZyBwYWdlIGNsYXNzZXMgc21hbGxlciB0aGFuIHRoZSBw
aHlzaWNhbCBwYWdlIHNpemUsCisgICAgICAgIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBv
ciBub3QgdGhlIGFkamFjZW50IHNtYWxsIHBhZ2VzIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBhZ2Ug
YXJlIGFsc28KKyAgICAgICAgZnJlZSBiZWZvcmUgZGVjb21taXRpbmcgdGhhdCBjb250YWluaW5n
IHBhZ2UuICBXaGVuIHdlIG5lZWQgdG8gY29tbWl0IG1vcmUgbWVtb3J5LCB3ZSBjb21taXQKKyAg
ICAgICAgdGhlIHdob2xlIHBhZ2UsIGFuZCBhZGQgYW55IGFkamFjZW50IHZpcnR1YWwgcGFnZXMg
dGhhdCB3ZXJlIGZ1bGx5IGNvbW1pdHRlZCBhcyB3ZWxsLgorCisgICAgICAgICogYm1hbGxvYy9D
aHVuay5oOgorICAgICAgICAoYm1hbGxvYzo6Zm9yRWFjaFBhZ2UpOgorICAgICAgICAqIGJtYWxs
b2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjppbml0aWFsaXplTGluZU1ldGFk
YXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEpOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2UpOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6Y29tbWl0U21hbGxQYWdlc0luUGh5c2ljYWxQYWdlKToKKyAgICAgICAgKGJtYWxs
b2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFs
bG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAgICogYm1hbGxvYy9IZWFw
Lmg6CisKIDIwMTktMDEtMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgZ2lnYWNhZ2Ugc2xpZGUgc2hvdWxkIHJhbmRvbWl6ZSBib3RoIHN0YXJ0IGFu
ZCBlbmQKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHJldmlzaW9uIDI0MDk5MikKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcs
OCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBmb3JFYWNoCiB7CiAgICAgLy8g
V2UgYWxpZ24gdG8gYXQgbGVhc3QgdGhlIHBhZ2Ugc2l6ZSBzbyB3ZSBjYW4gc2VydmljZSBhbGln
bmVkIGFsbG9jYXRpb25zCiAgICAgLy8gYXQgZXF1YWwgYW5kIHNtYWxsZXIgcG93ZXJzIG9mIHR3
bywgYW5kIGFsc28gc28gd2UgY2FuIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoKS4KLSAgICBz
aXplX3QgbWV0YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28ocGFn
ZVNpemUsIHNpemVvZihDaHVuaykpOworICAgIHNpemVfdCBmaXJzdFBhZ2VPZmZzZXQgPSBtYXgo
cGFnZVNpemUsIHZtUGFnZVNpemUoKSk7CisgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2ZOb25Qb3dlck9mVHdvKGZpcnN0UGFnZU9mZnNldCwgc2l6ZW9mKENodW5r
KSk7CiAKICAgICBPYmplY3QgYmVnaW4oY2h1bmssIG1ldGFkYXRhU2l6ZSk7CiAgICAgT2JqZWN0
IGVuZChjaHVuaywgY2h1bmtTaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2
aXNpb24gMjQwOTkyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK3N0YXRp
Y19hc3NlcnQoaXNQb3dlck9mVHdvKHNtYWxsUGFnZVNpemUpLCAiIik7CisKIEhlYXA6OkhlYXAo
SGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYpCiAgICAgOiBtX2tpbmQoa2lu
ZCkKICAgICAsIG1fdm1QYWdlU2l6ZVBoeXNpY2FsKHZtUGFnZVNpemVQaHlzaWNhbCgpKQpAQCAt
OTMsNyArOTUsNyBAQCBzaXplX3QgSGVhcDo6Z2lnYWNhZ2VTaXplKCkKIHZvaWQgSGVhcDo6aW5p
dGlhbGl6ZUxpbmVNZXRhZGF0YSgpCiB7CiAgICAgc2l6ZV90IHNpemVDbGFzc0NvdW50ID0gYm1h
bGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpOwotICAgIHNpemVfdCBzbWFsbExpbmVDb3Vu
dCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gc21hbGxMaW5lU2l6ZTsKKyAgICBzaXplX3Qgc21h
bGxMaW5lQ291bnQgPSBzbWFsbFBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKICAgICBtX3NtYWxs
TGluZU1ldGFkYXRhLmdyb3coc2l6ZUNsYXNzQ291bnQgKiBzbWFsbExpbmVDb3VudCk7CiAKICAg
ICBmb3IgKHNpemVfdCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBzaXplQ2xhc3NDb3VudDsg
KytzaXplQ2xhc3MpIHsKQEAgLTEwMiw3ICsxMDQsNyBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVM
aW5lTWV0YWRhdGEoKQogCiAgICAgICAgIHNpemVfdCBvYmplY3QgPSAwOwogICAgICAgICBzaXpl
X3QgbGluZSA9IDA7Ci0gICAgICAgIHdoaWxlIChvYmplY3QgPCBtX3ZtUGFnZVNpemVQaHlzaWNh
bCkgeworICAgICAgICB3aGlsZSAob2JqZWN0IDwgc21hbGxQYWdlU2l6ZSkgewogICAgICAgICAg
ICAgbGluZSA9IG9iamVjdCAvIHNtYWxsTGluZVNpemU7CiAgICAgICAgICAgICBzaXplX3QgbGVm
dG92ZXIgPSBvYmplY3QgJSBzbWFsbExpbmVTaXplOwogCkBAIC0xMTYsNyArMTE4LDcgQEAgdm9p
ZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKICAgICAgICAgfQogCiAgICAgICAgIC8v
IERvbid0IGFsbG93IHRoZSBsYXN0IG9iamVjdCBpbiBhIHBhZ2UgdG8gZXNjYXBlIHRoZSBwYWdl
LgotICAgICAgICBpZiAob2JqZWN0ID4gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAg
aWYgKG9iamVjdCA+IHNtYWxsUGFnZVNpemUpIHsKICAgICAgICAgICAgIEJBU1NFUlQocGFnZU1l
dGFkYXRhW2xpbmVdLm9iamVjdENvdW50KTsKICAgICAgICAgICAgIC0tcGFnZU1ldGFkYXRhW2xp
bmVdLm9iamVjdENvdW50OwogICAgICAgICB9CkBAIC0xMjgsMTEgKzEzMCwxMCBAQCB2b2lkIEhl
YXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEoKQogICAgIGF1dG8gY29tcHV0ZVBhZ2VTaXplID0g
WyZdKHNpemVfdCBzaXplQ2xhc3MpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3RTaXpl
KHNpemVDbGFzcyk7CiAgICAgICAgIGlmIChzaXplQ2xhc3MgPCBibWFsbG9jOjpzaXplQ2xhc3Mo
c21hbGxMaW5lU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbV92bVBhZ2VTaXplUGh5c2ljYWw7
CisgICAgICAgICAgICByZXR1cm4gc21hbGxQYWdlU2l6ZTsKIAotICAgICAgICBmb3IgKHNpemVf
dCBwYWdlU2l6ZSA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwotICAgICAgICAgICAgcGFnZVNpemUg
PCBwYWdlU2l6ZU1heDsKLSAgICAgICAgICAgIHBhZ2VTaXplICs9IG1fdm1QYWdlU2l6ZVBoeXNp
Y2FsKSB7CisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBwb3dlciBvZiAyIHBhZ2VTaXplcy4gR2l2
ZW4gdGhhdCBzbWFsbFBhZ2VTaXplIGlzIGEgcG93ZXIgb2YgMiwgd2UganVzdCBkb3VibGUgaXQg
d2hlbiB3ZSB3YW50IGEgbGFyZ2VyIHNpemUuCisgICAgICAgIGZvciAoc2l6ZV90IHBhZ2VTaXpl
ID0gc21hbGxQYWdlU2l6ZTsgcGFnZVNpemUgPCBwYWdlU2l6ZU1heDsgcGFnZVNpemUgKj0gMikg
ewogICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGNodW5rU2l6ZSAvIDIp
OwogICAgICAgICAgICAgc2l6ZV90IHdhc3RlID0gcGFnZVNpemUgJSBzaXplOwogICAgICAgICAg
ICAgaWYgKHdhc3RlIDw9IHBhZ2VTaXplIC8gcGFnZVNpemVXYXN0ZUZhY3RvcikKQEAgLTE4OCwx
NCArMTg5LDE3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGUKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBzaXplX3QgcGFn
ZVNpemUgPSBibWFsbG9jOjpwYWdlU2l6ZSgmbGlzdCAtICZtX2ZyZWVQYWdlc1swXSk7Ci0gICAg
ICAgICAgICAgICAgc2l6ZV90IGRlY29tbWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHko
cGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotICAgICAgICAgICAgICAgIG1fZnJl
ZWFibGVNZW1vcnkgLT0gZGVjb21taXRTaXplOwotICAgICAgICAgICAgICAgIG1fZm9vdHByaW50
IC09IGRlY29tbWl0U2l6ZTsKLSAgICAgICAgICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihw
YWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcGFnZS0+
c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7Ci0jaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQ
IAotICAgICAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KHBhZ2UtPmJlZ2lu
KCktPmJlZ2luKCksIHBhZ2VTaXplKTsKKyAgICAgICAgICAgICAgICBpZiAocGFnZVNpemUgPj0g
bV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlY29t
bWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwg
cGFnZVNpemUpOworICAgICAgICAgICAgICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IGRlY29t
bWl0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9mb290cHJpbnQgLT0gZGVjb21taXRTaXpl
OworICAgICAgICAgICAgICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihwYWdlLT5iZWdpbigp
LT5iZWdpbigpLCBwYWdlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnNldEhhc1Bo
eXNpY2FsUGFnZXMoZmFsc2UpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAorICAgICAg
ICAgICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5kZWNvbW1pdChwYWdlLT5iZWdpbigpLT5i
ZWdpbigpLCBwYWdlU2l6ZSk7CiAjZW5kaWYKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgdHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2UobG9jaywg
ZGVjb21taXR0ZXIsIHBhZ2UsIHBhZ2VTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTI2Nyw2ICsyNzEsNzMgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmso
c3RkOjp1bmlxdQogICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CiB9CiAK
K3ZvaWQgSGVhcDo6dHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uoc3RkOjpsb2Nr
X2d1YXJkPE11dGV4PiYsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIsIFNtYWxsUGFnZSogc21h
bGxQYWdlLCBzaXplX3QgcGFnZVNpemUpCit7CisgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6Omdl
dChzbWFsbFBhZ2UpOworICAgIHNpemVfdCBzbWFsbFBhZ2VzUmVhZHlUb0RlY29tbWl0ID0gMDsK
KworICAgIGNoYXIqIHBoeXNpY2FsUGFnZXNCZWdpbiA9IHJvdW5kRG93blRvTXVsdGlwbGVPZiht
X3ZtUGFnZVNpemVQaHlzaWNhbCwgc21hbGxQYWdlLT5iZWdpbigpLT5iZWdpbigpKTsKKyAgICB1
bnNpZ25lZCBzbWFsbFBhZ2VQZXJQaHlzaWNhbFBhZ2UgPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCAv
IHBhZ2VTaXplOworCisgICAgc2l6ZV90IGJlZ2luU21hbGxQYWdlT2Zmc2V0ID0gY2h1bmstPm9m
ZnNldChwaHlzaWNhbFBhZ2VzQmVnaW4pOworICAgIHNpemVfdCBlbmRTbWFsbFBhZ2VPZmZzZXQg
PSBiZWdpblNtYWxsUGFnZU9mZnNldCArIG1fdm1QYWdlU2l6ZVBoeXNpY2FsOworCisgICAgU21h
bGxQYWdlKiBiZWdpblBhZ2VSYW5nZSA9IGNodW5rLT5wYWdlKGJlZ2luU21hbGxQYWdlT2Zmc2V0
KTsKKyAgICBTbWFsbFBhZ2UqIGVuZFBhZ2VSYW5nZSA9IGNodW5rLT5wYWdlKGVuZFNtYWxsUGFn
ZU9mZnNldCk7CisgICAgCisgICAgZm9yIChhdXRvKiBwYWdlIDogY2h1bmstPmZyZWVQYWdlcygp
KSB7CisgICAgICAgIGlmIChwYWdlID49IGJlZ2luUGFnZVJhbmdlICYmIHBhZ2UgPCBlbmRQYWdl
UmFuZ2UpIHsKKyAgICAgICAgICAgIHNtYWxsUGFnZXNSZWFkeVRvRGVjb21taXQrKzsKKyAgICAg
ICAgICAgIGlmIChzbWFsbFBhZ2VzUmVhZHlUb0RlY29tbWl0ID09IHNtYWxsUGFnZVBlclBoeXNp
Y2FsUGFnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChzbWFsbFBhZ2VzUmVhZHlUb0RlY29tbWl0IDwgc21hbGxQYWdlUGVyUGh5c2ljYWxQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgZGVjb21taXRTaXplID0gbV92bVBhZ2VT
aXplUGh5c2ljYWw7CisgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSBkZWNvbW1pdFNpemU7CisgICAg
bV9mb290cHJpbnQgLT0gZGVjb21taXRTaXplOworICAgIGRlY29tbWl0dGVyLmFkZEVhZ2VyKHBo
eXNpY2FsUGFnZXNCZWdpbiwgZGVjb21taXRTaXplKTsKKworICAgIE9iamVjdCBiZWdpbihjaHVu
aywgYmVnaW5TbWFsbFBhZ2VPZmZzZXQpOworICAgIE9iamVjdCBlbmQoY2h1bmssIGVuZFNtYWxs
UGFnZU9mZnNldCk7CisgICAgCisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNp
emUgPD0gZW5kOyBpdCA9IGl0ICsgcGFnZVNpemUpCisgICAgICAgIGl0LnBhZ2UoKS0+c2V0SGFz
UGh5c2ljYWxQYWdlcyhmYWxzZSk7CisjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQCisgICAg
bV9waHlzaWNhbFBhZ2VNYXAuZGVjb21taXQoYmVnaW5QYWdlUmFuZ2UsIGRlY29tbWl0U2l6ZSk7
CisjZW5kaWYKK30KKwordm9pZCBIZWFwOjpjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uo
c3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBTbWFsbFBhZ2UqIHBhZ2UsIHNpemVfdCBwYWdlU2l6
ZSkKK3sKKyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOworCisgICAgY2hhciog
cGh5c2ljYWxQYWdlc0JlZ2luID0gcm91bmREb3duVG9NdWx0aXBsZU9mKG1fdm1QYWdlU2l6ZVBo
eXNpY2FsLCBwYWdlLT5iZWdpbigpLT5iZWdpbigpKTsKKworICAgIHNpemVfdCBiZWdpblNtYWxs
UGFnZU9mZnNldCA9IGNodW5rLT5vZmZzZXQocGh5c2ljYWxQYWdlc0JlZ2luKTsKKyAgICBzaXpl
X3QgZW5kU21hbGxQYWdlT2Zmc2V0ID0gYmVnaW5TbWFsbFBhZ2VPZmZzZXQgKyBtX3ZtUGFnZVNp
emVQaHlzaWNhbDsKKworICAgIE9iamVjdCBiZWdpbihjaHVuaywgYmVnaW5TbWFsbFBhZ2VPZmZz
ZXQpOworICAgIE9iamVjdCBlbmQoY2h1bmssIGVuZFNtYWxsUGFnZU9mZnNldCk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5k
OyBpdCA9IGl0ICsgcGFnZVNpemUpCisgICAgICAgIEJBU1NFUlQoIWl0LnBhZ2UoKS0+aGFzUGh5
c2ljYWxQYWdlcygpKTsKKyNlbmRpZgorCisgICAgbV9mb290cHJpbnQgKz0gbV92bVBhZ2VTaXpl
UGh5c2ljYWw7CisgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocGh5c2ljYWxQYWdl
c0JlZ2luLCBtX3ZtUGFnZVNpemVQaHlzaWNhbCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdp
bjsgaXQgKyBwYWdlU2l6ZSA8PSBlbmQ7IGl0ID0gaXQgKyBwYWdlU2l6ZSkKKyAgICAgICAgaXQu
cGFnZSgpLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKHRydWUpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9Q
QUdFX01BUAorICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChiZWdpbi5wYWdlKCksIG1fdm1Q
YWdlU2l6ZVBoeXNpY2FsKTsKKyNlbmRpZgorfQorCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFs
bENodW5rKENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VDbGFzcykKIHsKICAgICBtX29iamVjdFR5
cGVzLnNldChjaHVuaywgT2JqZWN0VHlwZTo6TGFyZ2UpOwpAQCAtMzI1LDEyICszOTYsMTUgQEAg
U21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OgogICAgICAgICAgICAgbV9m
cmVlYWJsZU1lbW9yeSAtPSBwaHlzaWNhbFNpemU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKHBhZ2VTaXplKTsK
LSAgICAgICAgICAgIG1fZm9vdHByaW50ICs9IHBoeXNpY2FsU2l6ZTsKLSAgICAgICAgICAgIHZt
QWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VT
aXplKTsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Ci0jaWYg
RU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQIAotICAgICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAu
Y29tbWl0KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKKyAgICAgICAgICAgIGlm
IChwYWdlU2l6ZSA+PSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICAgICAgICAgIG1f
Zm9vdHByaW50ICs9IHBoeXNpY2FsU2l6ZTsKKyAgICAgICAgICAgICAgICB2bUFsbG9jYXRlUGh5
c2ljYWxQYWdlc1Nsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CisgICAg
ICAgICAgICAgICAgcGFnZS0+c2V0SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKKyNpZiBFTkFCTEVf
UEhZU0lDQUxfUEFHRV9NQVAKKyAgICAgICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5jb21t
aXQocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwogI2VuZGlmCisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uo
bG9jaywgcGFnZSwgcGFnZVNpemUpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHBhZ2U7
CkBAIC0zOTAsNyArNDY0LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5
TWV0YQogICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVD
bGFzcywgbGluZUNhY2hlKTsKICAgICBTbWFsbExpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsK
ICAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7Ci0gICAgc2l6ZV90IHNtYWxs
TGluZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5c2ljYWwgLyBzbWFsbExpbmVTaXplOworICAgIHNp
emVfdCBzbWFsbExpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFsbExpbmVTaXplOwogICAg
IExpbmVNZXRhZGF0YSogcGFnZU1ldGFkYXRhID0gJm1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNs
YXNzICogc21hbGxMaW5lQ291bnRdOwogICAgIAogICAgIGF1dG8gZmluZFNtYWxsQnVtcFJhbmdl
ID0gWyZdKHNpemVfdCYgbGluZU51bWJlcikgewpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJl
dmlzaW9uIDI0MDk5MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsNiArMTIwLDkgQEAgcHJpdmF0ZToKICAgICBTbWFsbFBhZ2UqIGFsbG9j
YXRlU21hbGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywg
TGluZUNhY2hlJik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6dW5pcXVlX2xv
Y2s8TXV0ZXg+JiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKIAorICAgIHZvaWQgdHJ5RGVjb21taXRT
bWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYsIEJ1bGtEZWNv
bW1pdCYgZGVjb21taXR0ZXIsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdlU2l6ZSk7CisgICAgdm9p
ZCBjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4m
LCBTbWFsbFBhZ2UqLCBzaXplX3QgcGFnZVNpemUpOworCiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxs
Q2h1bmsoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBzaXplX3QgcGFnZUNsYXNzKTsKICAgICB2
b2lkIGRlYWxsb2NhdGVTbWFsbENodW5rKENodW5rKiwgc2l6ZV90IHBhZ2VDbGFzcyk7CiAK
</data>
<flag name="review"
          id="378062"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361436</attachid>
            <date>2019-02-07 13:32:57 -0800</date>
            <delta_ts>2019-02-07 14:29:00 -0800</delta_ts>
            <desc>Updated patch responding to review comments</desc>
            <filename>192389-7.patch</filename>
            <type>text/plain</type>
            <size>11852</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MTE0MCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE5LTAyLTA3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2MgdXNlcyBtb3Jl
IG1lbW9yeSBvbiBpT1MgY29tcGFyZWQgdG8gbWFjT1MgZHVlIHRvIHBoeXNpY2FsIHBhZ2Ugc2l6
ZSBkaWZmZXJlbmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkyMzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBzbWFsbCBsaW5lIGFsbG9jYXRpb25zIHRvIGJlIGluIHNtYWxsUGFnZVNp
emUgInZpcnR1YWwgcGFnZSIgbXVsdGlwbGVzIGluc3RlYWQgb2YgcGh5c2ljYWwKKyAgICAgICAg
cGFnZSBzaXplIGluY3JlbWVudHMgZm9yIHNpemVzIGxlc3MgdGhhdCB0aGUgcGh5c2ljYWwgcGFn
ZSBzaXplLiAgVGhpcyByZXF1aXJlZCBjaGFuZ2luZyB0aGUgc21hbGwKKyAgICAgICAgcGFnZSBj
b21taXQgLyBkZWNvbW1pdCBjb2RlIHRvIHdvcmsgaW4gZnVsbCBwaHlzaWNhbCBwYWdlIGluY3Jl
bWVudHMuICBGb3IgcGFnZSBjbGFzc2VzIHRoYXQgYXJlCisgICAgICAgIHBoeXNpY2FsIHBhZ2Ug
c2l6ZSBhbmQgbGFyZ2VyLCB0aGVyZSBpc24ndCBhbnkgZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAg
ICAgICAgV2hlbiBzY2F2ZW5naW5nIHBhZ2UgY2xhc3NlcyBzbWFsbGVyIHRoYW4gdGhlIHBoeXNp
Y2FsIHBhZ2Ugc2l6ZSwgd2UgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIG9yCisgICAgICAgIG5v
dCB0aGUgYWRqYWNlbnQgc21hbGwgcGFnZXMgb24gdGhlIHNhbWUgcGh5c2ljYWwgcGFnZSBhcmUg
YWxzbyBmcmVlIGJlZm9yZSBkZWNvbW1pdGluZyB0aGF0CisgICAgICAgIGNvbnRhaW5pbmcgcGFn
ZS4gIFdoZW4gd2UgbmVlZCB0byBjb21taXQgbW9yZSBtZW1vcnksIHdlIGNvbW1pdCB0aGUgd2hv
bGUgcGFnZSwgYW5kIGFkZCBhbnkKKyAgICAgICAgYWRqYWNlbnQgdmlydHVhbCBwYWdlcyB0aGF0
IHdlcmUgZnVsbHkgY29tbWl0dGVkIGFzIHdlbGwuCisKKyAgICAgICAgKiBibWFsbG9jL0NodW5r
Lmg6CisgICAgICAgIChibWFsbG9jOjpmb3JFYWNoUGFnZSk6CisgICAgICAgICogYm1hbGxvYy9I
ZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEp
OgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6aW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSk6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpfX2F0dHJp
YnV0ZV9fKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmNvbW1pdFNtYWxsUGFnZXNJblBoeXNp
Y2FsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEp
OgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAqIGJtYWxsb2MvU21hbGxQYWdl
Lmg6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnJlZkNvdW50KToKKwogMjAxOS0wMS0x
OCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBnaWdh
Y2FnZSBzbGlkZSBzaG91bGQgcmFuZG9taXplIGJvdGggc3RhcnQgYW5kIGVuZApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQ2h1bmsuaAkocmV2aXNpb24gMjQwOTkyKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9DaHVuay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICBjaGFyKiBhZGRyZXNzKHNpemVfdCBvZmZzZXQpOwogICAgIFNtYWxsUGFnZSogcGFnZShzaXpl
X3Qgb2Zmc2V0KTsKICAgICBTbWFsbExpbmUqIGxpbmUoc2l6ZV90IG9mZnNldCk7CisgICAgc2l6
ZV90IHBhZ2VOdW1iZXIoU21hbGxQYWdlKik7CiAKICAgICBjaGFyKiBieXRlcygpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyB9CiAgICAgU21hbGxMaW5lKiBsaW5lcygp
IHsgcmV0dXJuICZtX2xpbmVzWzBdOyB9CkBAIC03Nyw3ICs3OCw4IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uPiB2b2lkIGZvckVhY2gKIHsKICAgICAvLyBXZSBhbGlnbiB0byBhdCBsZWFz
dCB0aGUgcGFnZSBzaXplIHNvIHdlIGNhbiBzZXJ2aWNlIGFsaWduZWQgYWxsb2NhdGlvbnMKICAg
ICAvLyBhdCBlcXVhbCBhbmQgc21hbGxlciBwb3dlcnMgb2YgdHdvLCBhbmQgYWxzbyBzbyB3ZSBj
YW4gdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcygpLgotICAgIHNpemVfdCBtZXRhZGF0YVNpemUg
PSByb3VuZFVwVG9NdWx0aXBsZU9mTm9uUG93ZXJPZlR3byhwYWdlU2l6ZSwgc2l6ZW9mKENodW5r
KSk7CisgICAgc2l6ZV90IGZpcnN0UGFnZU9mZnNldCA9IG1heChwYWdlU2l6ZSwgdm1QYWdlU2l6
ZSgpKTsKKyAgICBzaXplX3QgbWV0YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZk5vblBv
d2VyT2ZUd28oZmlyc3RQYWdlT2Zmc2V0LCBzaXplb2YoQ2h1bmspKTsKIAogICAgIE9iamVjdCBi
ZWdpbihjaHVuaywgbWV0YWRhdGFTaXplKTsKICAgICBPYmplY3QgZW5kKGNodW5rLCBjaHVua1Np
emUpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAyNDA5OTIpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0
NCw4IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAorc3RhdGljX2Fzc2VydChpc1Bvd2VyT2ZU
d28oc21hbGxQYWdlU2l6ZSksICIiKTsKKwogSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBzdGQ6
OmxvY2tfZ3VhcmQ8TXV0ZXg+JikKICAgICA6IG1fa2luZChraW5kKQogICAgICwgbV92bVBhZ2VT
aXplUGh5c2ljYWwodm1QYWdlU2l6ZVBoeXNpY2FsKCkpCkBAIC05Myw3ICs5NSw3IEBAIHNpemVf
dCBIZWFwOjpnaWdhY2FnZVNpemUoKQogdm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRh
KCkKIHsKICAgICBzaXplX3Qgc2l6ZUNsYXNzQ291bnQgPSBibWFsbG9jOjpzaXplQ2xhc3Moc21h
bGxMaW5lU2l6ZSk7Ci0gICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gbV92bVBhZ2VTaXplUGh5
c2ljYWwgLyBzbWFsbExpbmVTaXplOworICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IHNtYWxs
UGFnZVNpemUgLyBzbWFsbExpbmVTaXplOwogICAgIG1fc21hbGxMaW5lTWV0YWRhdGEuZ3Jvdyhz
aXplQ2xhc3NDb3VudCAqIHNtYWxsTGluZUNvdW50KTsKIAogICAgIGZvciAoc2l6ZV90IHNpemVD
bGFzcyA9IDA7IHNpemVDbGFzcyA8IHNpemVDbGFzc0NvdW50OyArK3NpemVDbGFzcykgewpAQCAt
MTAyLDcgKzEwNCw3IEBAIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCiAKICAg
ICAgICAgc2l6ZV90IG9iamVjdCA9IDA7CiAgICAgICAgIHNpemVfdCBsaW5lID0gMDsKLSAgICAg
ICAgd2hpbGUgKG9iamVjdCA8IG1fdm1QYWdlU2l6ZVBoeXNpY2FsKSB7CisgICAgICAgIHdoaWxl
IChvYmplY3QgPCBzbWFsbFBhZ2VTaXplKSB7CiAgICAgICAgICAgICBsaW5lID0gb2JqZWN0IC8g
c21hbGxMaW5lU2l6ZTsKICAgICAgICAgICAgIHNpemVfdCBsZWZ0b3ZlciA9IG9iamVjdCAlIHNt
YWxsTGluZVNpemU7CiAKQEAgLTExNiw3ICsxMTgsNyBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVM
aW5lTWV0YWRhdGEoKQogICAgICAgICB9CiAKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGxh
c3Qgb2JqZWN0IGluIGEgcGFnZSB0byBlc2NhcGUgdGhlIHBhZ2UuCi0gICAgICAgIGlmIChvYmpl
Y3QgPiBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgeworICAgICAgICBpZiAob2JqZWN0ID4gc21hbGxQ
YWdlU2l6ZSkgewogICAgICAgICAgICAgQkFTU0VSVChwYWdlTWV0YWRhdGFbbGluZV0ub2JqZWN0
Q291bnQpOwogICAgICAgICAgICAgLS1wYWdlTWV0YWRhdGFbbGluZV0ub2JqZWN0Q291bnQ7CiAg
ICAgICAgIH0KQEAgLTEyOCwxMSArMTMwLDE4IEBAIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZVBhZ2VN
ZXRhZGF0YSgpCiAgICAgYXV0byBjb21wdXRlUGFnZVNpemUgPSBbJl0oc2l6ZV90IHNpemVDbGFz
cykgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdFNpemUoc2l6ZUNsYXNzKTsKICAgICAg
ICAgaWYgKHNpemVDbGFzcyA8IGJtYWxsb2M6OnNpemVDbGFzcyhzbWFsbExpbmVTaXplKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX3ZtUGFnZVNpemVQaHlzaWNhbDsKKyAgICAgICAgICAgIHJldHVy
biBzbWFsbFBhZ2VTaXplOwogCi0gICAgICAgIGZvciAoc2l6ZV90IHBhZ2VTaXplID0gbV92bVBh
Z2VTaXplUGh5c2ljYWw7Ci0gICAgICAgICAgICBwYWdlU2l6ZSA8IHBhZ2VTaXplTWF4OwotICAg
ICAgICAgICAgcGFnZVNpemUgKz0gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKKyAgICAgICAgLy8g
V2Ugd2FudCBwb3dlciBvZiAyIHBhZ2VTaXplcyBzaXplcyBiZWxvdyBwaHlzaWNhbCBwYWdlIHNp
emUgYW5kIG11bHRpcGxlcyBvZiBwaHlzaWNhbCBwYWdlcyBzaXplIGFib3ZlIHRoYXQuCisgICAg
ICAgIHNpemVfdCBwYWdlU2l6ZSA9IHNtYWxsUGFnZVNpemU7CisgICAgICAgIGZvciAoOyBwYWdl
U2l6ZSA8IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOyBwYWdlU2l6ZSAqPSAyKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0JBU1NFUlQocGFnZVNpemUgPD0gY2h1bmtTaXplIC8gMik7CisgICAgICAgICAg
ICBzaXplX3Qgd2FzdGUgPSBwYWdlU2l6ZSAlIHNpemU7CisgICAgICAgICAgICBpZiAod2FzdGUg
PD0gcGFnZVNpemUgLyBwYWdlU2l6ZVdhc3RlRmFjdG9yKQorICAgICAgICAgICAgICAgIHJldHVy
biBwYWdlU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoOyBwYWdlU2l6ZSA8IHBhZ2VT
aXplTWF4OyBwYWdlU2l6ZSArPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgewogICAgICAgICAgICAg
UkVMRUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGNodW5rU2l6ZSAvIDIpOwogICAgICAgICAgICAg
c2l6ZV90IHdhc3RlID0gcGFnZVNpemUgJSBzaXplOwogICAgICAgICAgICAgaWYgKHdhc3RlIDw9
IHBhZ2VTaXplIC8gcGFnZVNpemVXYXN0ZUZhY3RvcikKQEAgLTE4OCwxNCArMTk3LDE3IEBAIHZv
aWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGUKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBzaXplX3QgcGFnZVNpemUgPSBibWFsbG9j
OjpwYWdlU2l6ZSgmbGlzdCAtICZtX2ZyZWVQYWdlc1swXSk7Ci0gICAgICAgICAgICAgICAgc2l6
ZV90IGRlY29tbWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+
YmVnaW4oKSwgcGFnZVNpemUpOwotICAgICAgICAgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgLT0g
ZGVjb21taXRTaXplOwotICAgICAgICAgICAgICAgIG1fZm9vdHByaW50IC09IGRlY29tbWl0U2l6
ZTsKLSAgICAgICAgICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihwYWdlLT5iZWdpbigpLT5i
ZWdpbigpLCBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcGFnZS0+c2V0SGFzUGh5c2ljYWxQ
YWdlcyhmYWxzZSk7Ci0jaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQIAotICAgICAgICAgICAg
ICAgIG1fcGh5c2ljYWxQYWdlTWFwLmRlY29tbWl0KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBh
Z2VTaXplKTsKKyAgICAgICAgICAgICAgICBpZiAocGFnZVNpemUgPj0gbV92bVBhZ2VTaXplUGh5
c2ljYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlY29tbWl0U2l6ZSA9IHBoeXNp
Y2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOworICAg
ICAgICAgICAgICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IGRlY29tbWl0U2l6ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9mb290cHJpbnQgLT0gZGVjb21taXRTaXplOworICAgICAgICAgICAg
ICAgICAgICBkZWNvbW1pdHRlci5hZGRFYWdlcihwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdl
U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXMoZmFs
c2UpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAorICAgICAgICAgICAgICAgICAgICBt
X3BoeXNpY2FsUGFnZU1hcC5kZWNvbW1pdChwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6
ZSk7CiAjZW5kaWYKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
dHJ5RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2UobG9jaywgZGVjb21taXR0ZXIsIHBh
Z2UsIHBhZ2VTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI2Nyw2
ICsyNzksNjMgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjp1bmlxdQogICAg
IG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CiB9CiAKK3ZvaWQgSGVhcDo6dHJ5
RGVjb21taXRTbWFsbFBhZ2VzSW5QaHlzaWNhbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYg
bG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgU21hbGxQYWdlKiBzbWFsbFBhZ2UsIHNp
emVfdCBwYWdlU2l6ZSkKK3sKKyAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHNtYWxsUGFn
ZSk7CisKKyAgICBjaGFyKiBwYWdlQmVnaW4gPSBzbWFsbFBhZ2UtPmJlZ2luKCktPmJlZ2luKCk7
CisgICAgY2hhciogcGh5c2ljYWxQYWdlQmVnaW4gPSByb3VuZERvd25Ub011bHRpcGxlT2YobV92
bVBhZ2VTaXplUGh5c2ljYWwsIHBhZ2VCZWdpbik7CisKKyAgICAvLyBUaGUgZmlyc3QgcGFnZSBp
biBhIHBoeXNpY2FsIHBhZ2UgdGFrZXMgY2FyZSBvZiBkZWNvbW1pdHRpbmcgaXRzIHBoeXNpY2Fs
IG5laWdoYm9ycworICAgIGlmIChwYWdlQmVnaW4gIT0gcGh5c2ljYWxQYWdlQmVnaW4pCisgICAg
ICAgIHJldHVybjsKKworICAgIHNpemVfdCBiZWdpblBhZ2VPZmZzZXQgPSBjaHVuay0+b2Zmc2V0
KHBoeXNpY2FsUGFnZUJlZ2luKTsKKyAgICBzaXplX3QgZW5kUGFnZU9mZnNldCA9IGJlZ2luUGFn
ZU9mZnNldCArIG1fdm1QYWdlU2l6ZVBoeXNpY2FsOworCisgICAgT2JqZWN0IGJlZ2luKGNodW5r
LCBiZWdpblBhZ2VPZmZzZXQpOworICAgIE9iamVjdCBlbmQoY2h1bmssIGVuZFBhZ2VPZmZzZXQp
OworCisgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5kOyBpdCA9
IGl0ICsgcGFnZVNpemUpIHsKKyAgICAgICAgaWYgKGl0LnBhZ2UoKS0+cmVmQ291bnQobG9jaykp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IGRlY29tbWl0U2l6ZSA9
IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOworICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gZGVjb21taXRT
aXplOworICAgIG1fZm9vdHByaW50IC09IGRlY29tbWl0U2l6ZTsKKworICAgIGRlY29tbWl0dGVy
LmFkZEVhZ2VyKHBoeXNpY2FsUGFnZUJlZ2luLCBkZWNvbW1pdFNpemUpOworCisgICAgZm9yIChh
dXRvIGl0ID0gYmVnaW47IGl0ICsgcGFnZVNpemUgPD0gZW5kOyBpdCA9IGl0ICsgcGFnZVNpemUp
CisgICAgICAgIGl0LnBhZ2UoKS0+c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7CisjaWYgRU5B
QkxFX1BIWVNJQ0FMX1BBR0VfTUFQCisgICAgbV9waHlzaWNhbFBhZ2VNYXAuZGVjb21taXQoc21h
bGxQYWdlLCBkZWNvbW1pdFNpemUpOworI2VuZGlmCit9CisKK3ZvaWQgSGVhcDo6Y29tbWl0U21h
bGxQYWdlc0luUGh5c2ljYWxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+JiwgU21hbGxQYWdl
KiBwYWdlLCBzaXplX3QgcGFnZVNpemUpCit7CisgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6Omdl
dChwYWdlKTsKKworICAgIGNoYXIqIHBoeXNpY2FsUGFnZUJlZ2luID0gcm91bmREb3duVG9NdWx0
aXBsZU9mKG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBwYWdlLT5iZWdpbigpLT5iZWdpbigpKTsKKwor
ICAgIHNpemVfdCBiZWdpblBhZ2VPZmZzZXQgPSBjaHVuay0+b2Zmc2V0KHBoeXNpY2FsUGFnZUJl
Z2luKTsKKyAgICBzaXplX3QgZW5kUGFnZU9mZnNldCA9IGJlZ2luUGFnZU9mZnNldCArIG1fdm1Q
YWdlU2l6ZVBoeXNpY2FsOworCisgICAgT2JqZWN0IGJlZ2luKGNodW5rLCBiZWdpblBhZ2VPZmZz
ZXQpOworICAgIE9iamVjdCBlbmQoY2h1bmssIGVuZFBhZ2VPZmZzZXQpOworCisgICAgbV9mb290
cHJpbnQgKz0gbV92bVBhZ2VTaXplUGh5c2ljYWw7CisgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFn
ZXNTbG9wcHkocGh5c2ljYWxQYWdlQmVnaW4sIG1fdm1QYWdlU2l6ZVBoeXNpY2FsKTsKKworICAg
IGZvciAoYXV0byBpdCA9IGJlZ2luOyBpdCArIHBhZ2VTaXplIDw9IGVuZDsgaXQgPSBpdCArIHBh
Z2VTaXplKQorICAgICAgICBpdC5wYWdlKCktPnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Cisj
aWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQCisgICAgbV9waHlzaWNhbFBhZ2VNYXAuY29tbWl0
KGJlZ2luLnBhZ2UoKSwgbV92bVBhZ2VTaXplUGh5c2ljYWwpOworI2VuZGlmCit9CisKIHZvaWQg
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqIGNodW5rLCBzaXplX3QgcGFnZUNsYXNz
KQogewogICAgIG1fb2JqZWN0VHlwZXMuc2V0KGNodW5rLCBPYmplY3RUeXBlOjpMYXJnZSk7CkBA
IC0zMjUsMTIgKzM5NCwxNSBAQCBTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0
ZDo6CiAgICAgICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IHBoeXNpY2FsU2l6ZTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGVJZlVuZGVyTWVtb3J5
UHJlc3N1cmUocGFnZVNpemUpOwotICAgICAgICAgICAgbV9mb290cHJpbnQgKz0gcGh5c2ljYWxT
aXplOwotICAgICAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocGFnZS0+YmVn
aW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwotICAgICAgICAgICAgcGFnZS0+c2V0SGFzUGh5c2lj
YWxQYWdlcyh0cnVlKTsKLSNpZiBFTkFCTEVfUEhZU0lDQUxfUEFHRV9NQVAgCi0gICAgICAgICAg
ICBtX3BoeXNpY2FsUGFnZU1hcC5jb21taXQocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNp
emUpOworICAgICAgICAgICAgaWYgKHBhZ2VTaXplID49IG1fdm1QYWdlU2l6ZVBoeXNpY2FsKSB7
CisgICAgICAgICAgICAgICAgbV9mb290cHJpbnQgKz0gcGh5c2ljYWxTaXplOworICAgICAgICAg
ICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2lu
KCksIHBhZ2VTaXplKTsKKyAgICAgICAgICAgICAgICBwYWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2Vz
KHRydWUpOworI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUAorICAgICAgICAgICAgICAgIG1f
cGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7
CiAjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNvbW1pdFNtYWxs
UGFnZXNJblBoeXNpY2FsUGFnZShsb2NrLCBwYWdlLCBwYWdlU2l6ZSk7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gcGFnZTsKQEAgLTM5MCw3ICs0NjIsNyBAQCB2b2lkIEhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhCiAgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVT
bWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5lQ2FjaGUpOwogICAgIFNtYWxsTGluZSogbGlu
ZXMgPSBwYWdlLT5iZWdpbigpOwogICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2sp
KTsKLSAgICBzaXplX3Qgc21hbGxMaW5lQ291bnQgPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCAvIHNt
YWxsTGluZVNpemU7CisgICAgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAv
IHNtYWxsTGluZVNpemU7CiAgICAgTGluZU1ldGFkYXRhKiBwYWdlTWV0YWRhdGEgPSAmbV9zbWFs
bExpbmVNZXRhZGF0YVtzaXplQ2xhc3MgKiBzbWFsbExpbmVDb3VudF07CiAgICAgCiAgICAgYXV0
byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBbJl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMjQwOTkyKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOSBAQCBwcml2YXRlOgog
ICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4m
LCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmKTsKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFs
bExpbmUoc3RkOjp1bmlxdWVfbG9jazxNdXRleD4mLCBPYmplY3QsIExpbmVDYWNoZSYpOwogCisg
ICAgdm9pZCB0cnlEZWNvbW1pdFNtYWxsUGFnZXNJblBoeXNpY2FsUGFnZShzdGQ6OmxvY2tfZ3Vh
cmQ8TXV0ZXg+JiwgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgU21hbGxQYWdlKiwgc2l6ZV90
IHBhZ2VTaXplKTsKKyAgICB2b2lkIGNvbW1pdFNtYWxsUGFnZXNJblBoeXNpY2FsUGFnZShzdGQ6
OnVuaXF1ZV9sb2NrPE11dGV4PiYsIFNtYWxsUGFnZSosIHNpemVfdCBwYWdlU2l6ZSk7CisKICAg
ICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYsIHNpemVf
dCBwYWdlQ2xhc3MpOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqLCBzaXpl
X3QgcGFnZUNsYXNzKTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCShyZXZp
c2lvbiAyNDA5OTIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZihzdGQ6OnVu
aXF1ZV9sb2NrPE11dGV4PiYpOwogICAgIGJvb2wgZGVyZWYoc3RkOjp1bmlxdWVfbG9jazxNdXRl
eD4mKTsKICAgICB1bnNpZ25lZCByZWZDb3VudChzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYpIHsg
cmV0dXJuIG1fcmVmQ291bnQ7IH0KLSAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudChzdGQ6Omxv
Y2tfZ3VhcmQ8TXV0ZXg+JikgeyByZXR1cm4gbV9yZWZDb3VudDsgfQorCiAgICAgc2l6ZV90IHNp
emVDbGFzcygpIHsgcmV0dXJuIG1fc2l6ZUNsYXNzOyB9CiAgICAgdm9pZCBzZXRTaXplQ2xhc3Mo
c2l6ZV90IHNpemVDbGFzcykgeyBtX3NpemVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAo=
</data>
<flag name="review"
          id="378120"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>