<?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>158110</bug_id>
          
          <creation_ts>2016-05-25 20:25:14 -0700</creation_ts>
          <short_desc>Web Inspector: Memory Timeline sometimes shows impossible value for bmalloc size (underflowed)</short_desc>
          <delta_ts>2016-06-27 11:42:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mattbaker</cc>
    
    <cc>msaboff</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1196629</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-25 20:25:14 -0700</bug_when>
    <thetext>* SUMMARY
Memory Timeline shows impossible value for bmalloc size

* STEPS TO REPRODUCE
1. Show Resource Usage Overlay on &lt;https://www.apple.com/watch/&gt;
  =&gt; bmalloc size is 17592186044627.1 MB

* NOTES
- The bmalloc size underflows when we attempt to subtract GC sections from it:

&gt;    size_t currentGCHeapCapacity = vm-&gt;heap.blockBytesAllocated();
&gt;    size_t currentGCOwned = vm-&gt;heap.extraMemorySize();
&gt;
&gt;    // Subtract known subchunks from the bmalloc bucket.
&gt;    // FIXME: Handle running with bmalloc disabled.
&gt;    data.categories[MemoryCategory::bmalloc].dirtySize -= currentGCHeapCapacity + currentGCOwned;

Values on my MacBookPro were:

  - bmalloc (before)         59076608 bytes
  - currentGCHeapCapacity    13130752 bytes
  - currentGCOwned         1097250396 bytes

Either the Heap&apos;s values have runaway and are larger then they should be, or they are counting memory that isn&apos;t entirely in bmalloc zones and so the subtraction is not safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196666</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-25 23:55:36 -0700</bug_when>
    <thetext>With some logging it doesn&apos;t seem like we are duplicate counting any values.

The biggest values were coming from:

&gt; void JSHTMLCanvasElement::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
&gt; {
&gt;     auto* thisObject = jsCast&lt;JSHTMLCanvasElement*&gt;(cell);
&gt;     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
&gt;     Base::visitChildren(thisObject, visitor);
&gt;     thisObject-&gt;wrapped().visitJSEventListeners(visitor);
&gt;     visitor.reportExtraMemoryVisited(thisObject-&gt;wrapped().memoryCost());
&gt; }

which has:

&gt; size_t HTMLCanvasElement::memoryCost() const
&gt; {
&gt;     if (!m_imageBuffer)
&gt;         return 0;
&gt;     return 4 * m_imageBuffer-&gt;internalSize().width() * m_imageBuffer-&gt;internalSize().height();
&gt; }

It looks like WebCore::ImageBuffer may be using IOSurface memory instead of bmalloc memory if USE(IOSURFACE_CANVAS_BACKING_STORE) is enabled and the allocation succeeds in that path. Otherwise it looks like it falls back to bmalloc.

&gt; ImageBuffer::ImageBuffer(const FloatSize&amp; size, float resolutionScale, ColorSpace imageColorSpace, RenderingMode renderingMode, bool&amp; success)
&gt;     : m_logicalSize(size)
&gt;     , m_resolutionScale(resolutionScale)
&gt; {
&gt; ...
&gt;     RetainPtr&lt;CGContextRef&gt; cgContext;
&gt;     if (accelerateRendering) {
&gt; #if USE(IOSURFACE_CANVAS_BACKING_STORE)
&gt;         FloatSize userBounds = sizeForDestinationSize(FloatSize(width.unsafeGet(), height.unsafeGet()));
&gt;         m_data.surface = IOSurface::create(m_data.backingStoreSize, IntSize(userBounds), imageColorSpace);
&gt;         cgContext = m_data.surface-&gt;ensurePlatformContext();
&gt;         if (cgContext)
&gt;             CGContextClearRect(cgContext.get(), FloatRect(FloatPoint(), userBounds));
&gt; #endif
&gt; ...
&gt;     if (!accelerateRendering) {
&gt;         if (!tryFastCalloc(m_data.backingStoreSize.height(), m_data.bytesPerRow.unsafeGet()).getValue(m_data.data))
&gt;             return;
&gt; ...
&gt;     }
&gt; ...
&gt; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196704</commentid>
    <comment_count>2</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-05-26 06:21:35 -0700</bug_when>
    <thetext>Good find! You&apos;re right about the fix too, we should stop subtracting the &quot;GC owned&quot; number from the bmalloc number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196797</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-05-26 11:41:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/26498584&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196946</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-26 19:00:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Good find! You&apos;re right about the fix too, we should stop subtracting the
&gt; &quot;GC owned&quot; number from the bmalloc number.

When I stopped subtracting I found a startling result: The GC Owned memory (mostly from HTMLCanvasElement::memoryCost) was greater then the entire footprint of the WebContentProcess!

    Resource Usage - Total Footprint: 120MB
    Resource Usage - GC Owned Memory: 267MB

A number of tools (footprint, vmmap) match the output I&apos;m seeing in ResourceUsageThread concerning the WebContentProcess (120MB dirty memory, ~7MB reusable/purgeable).

The memoryCost we associate with the HTMLCanvasElement/ImageBuffer doesn&apos;t seem to live in the WebContentProcess when we are using IOSurfaces. I haven&apos;t been able to precisely track down where that memory lives, it seems like it is in the kernel, but I&apos;m not sure how to properly measure that. A few tools (IOSDebug, IOAccelMemory) show the surfaces and memory for the particular WebContentProcess. In total the sizes roughly matches the size of GC Owned memory that WebCore is claiming (260MB) but when I dig deeper I only find info about 137MB of allocations, and I&apos;m not sure I even understand what these tools are telling me.

Another possibility is that the accounting of the IOSurface memory resides somewhere in the &quot;Virtual&quot; IOKit memory:

&gt;                                    VIRTUAL RESIDENT    DIRTY  SWAPPED VOLATILE   NONVOL    EMPTY   REGION 
&gt;  REGION TYPE                          SIZE     SIZE     SIZE     SIZE     SIZE     SIZE     SIZE    COUNT (non-coalesced) 
&gt;  ===========                       ======= ========    =====  ======= ========   ======    =====  ======= 
&gt;  ...
&gt;  IOKit                              371.6M    11.9M    11.9M       0K       0K       8K    6372K      272 
&gt;  ...
&gt;  TOTAL, minus reserved VM space       1.7G   373.7M   121.1M      84K       0K    3068K    6384K     1513 

Ultimately I&apos;m settling on the idea that the actual IOSurface allocations are not in the WebContentProcess.

-------

Given that, here are my ideas to fix this bug:

  Approach 1. Resource Usage should show dirty resident memory for the just the WebContentProcess
    - the IOSurface memory doesn&apos;t appear to contribute to that, so have
      HTMLCanvasElement::memoryCost() reflect that when it is using an IOSurface
      which may mean just reporting 0 cost.

  Approach 2. Resource Usage should show the &quot;total memory cost&quot; incurred by the WebContentProcess, even if it is stored elsewhere.
    - we could track the IOSurface memory separately, and contribute it to
      MemoryCategory::Layer memory.

I&apos;m siding with Approach 1, because that would mean our numbers match existing tools (vmmap, footprint). Also, if Approach 2 was holistic, it would mean finding other places WebKit causes a lot of memory to show up in other processes.

Either way, for a page like this (large canvases), it will mean dramatically different &quot;extra memory cost&quot; values will be reported to VM::Heap. The values will be much more realistic values concerning the memory within the current process. From what I can tell, it may have an affect on GC scheduling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196956</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-05-26 19:44:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 
&gt; Another possibility is that the accounting of the IOSurface memory resides
&gt; somewhere in the &quot;Virtual&quot; IOKit memory:

That would make sense.

&gt; Given that, here are my ideas to fix this bug:
&gt; 
&gt;   Approach 1. Resource Usage should show dirty resident memory for the just
&gt; the WebContentProcess
&gt;     - the IOSurface memory doesn&apos;t appear to contribute to that, so have
&gt;       HTMLCanvasElement::memoryCost() reflect that when it is using an
&gt; IOSurface
&gt;       which may mean just reporting 0 cost.

That seems like a surprising plan if the point of your tool is to indicate the cost of a page to the system. Between canvas and the tiles/compositing layers (don&apos;t forget about them!), IOSurface memory is likely a very significant portion - if not a majority - of the memory allocated on behalf of a page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196965</commentid>
    <comment_count>6</comment_count>
      <attachid>279940</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-26 19:59:10 -0700</bug_when>
    <thetext>Created attachment 279940
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196966</commentid>
    <comment_count>7</comment_count>
      <attachid>279940</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-05-26 20:06:13 -0700</bug_when>
    <thetext>Comment on attachment 279940
[PATCH] Proposed Fix

This doesn&apos;t make any sense. Of course the memory is &quot;in this process&quot;; this is the process that allocated it, this is the process which you would kill to reclaim it, and this is the process that footprint will blame for it. It&apos;s true, it doesn&apos;t make any sense to subtract this memory from anything bmalloc-related, but just claiming that IOSurface-backed surfaces are free is crazypants :) Maybe memoryCost() needs to return multiple values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196972</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-26 20:22:27 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 279940 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; This doesn&apos;t make any sense. Of course the memory is &quot;in this process&quot;; this
&gt; is the process that allocated it, this is the process which you would kill
&gt; to reclaim it, and this is the process that footprint will blame for it.
&gt; It&apos;s true, it doesn&apos;t make any sense to subtract this memory from anything
&gt; bmalloc-related, but just claiming that IOSurface-backed surfaces are free
&gt; is crazypants :) Maybe memoryCost() needs to return multiple values?

I considered making multiple functions with different names. It seems the current trend is WebCore&apos;s &quot;memoryCost()&quot; method is &quot;extra memory cost reported to the JavaScript Heap&quot;, so I kept that name. I&apos;m willing to rename that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196978</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-05-26 21:29:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; From what I can tell, it may have an affect on GC scheduling.

Also, it seems like the GC totally *should* take into account the fact that this fairly small object that it knows about (the canvas element) is potentially the only thing hanging on to an enormous surface.

I would like to hear what ggaren has to say about all this before you land it, if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196983</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-26 22:11:09 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #4)
&gt; &gt; From what I can tell, it may have an affect on GC scheduling.
&gt; 
&gt; Also, it seems like the GC totally *should* take into account the fact that
&gt; this fairly small object that it knows about (the canvas element) is
&gt; potentially the only thing hanging on to an enormous surface.

This is a pretty compelling argument to me. I&apos;ll look into implementing the alternative approach tomorrow.

The alt approach would be basically keeping memory cost reporting things the way they are but keeping an estimate of additional memory that is outside the WebContentProcess (IOSurfaces here) to provide a more accurate total (values should add up!). GC Owned would not all fall under bmalloc so that would also need some tweaking. With bug 158144 implemented, this would mean the &lt;canvas&gt; elements on this page each show up with very high memory use in Web Inspector&apos;s JavaScript Allocations view, which is what you would expect if the canvas is the only thing holding onto the larger IOSurface memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197446</commentid>
    <comment_count>11</comment_count>
      <attachid>279940</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-28 21:22:57 -0700</bug_when>
    <thetext>Comment on attachment 279940
[PATCH] Proposed Fix

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        This patch avoids reporting any canvas IOSurface memory as extra memory

I am concerned about this.

We need these canvas elements to seem to have cost so that garbage collection will run sooner than it otherwise would. The logic that the cost for memory outside the web process does not matter may be correct for debugging tools or other uses, but it is incorrect for deciding whether it’s important to free the memory in a timely fashion. If we don’t do this we could have a lot of canvases with a lot of big IOSurface objects and garbage collection wouldn’t know that it needs to run to free system memory.

&gt; Source/WebCore/ChangeLog:19
&gt; +        Process, so incorportating it into Resource Usage, or the Heap to affect

Typo: &quot;incorportating&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197447</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-28 21:23:23 -0700</bug_when>
    <thetext>I see that other people have said the same thing I am saying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203156</commentid>
    <comment_count>13</comment_count>
      <attachid>281519</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-06-16 18:46:36 -0700</bug_when>
    <thetext>Created attachment 281519
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204870</commentid>
    <comment_count>14</comment_count>
      <attachid>281519</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-06-23 11:18:34 -0700</bug_when>
    <thetext>Comment on attachment 281519
[PATCH] Proposed Fix

r=me though needs some build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204892</commentid>
    <comment_count>15</comment_count>
      <attachid>281923</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-06-23 12:03:45 -0700</bug_when>
    <thetext>Created attachment 281923
[PATCH] For Bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204917</commentid>
    <comment_count>16</comment_count>
      <attachid>281923</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-23 13:05:37 -0700</bug_when>
    <thetext>Comment on attachment 281923
[PATCH] For Bots

Clearing flags on attachment: 281923

Committed r202394: &lt;http://trac.webkit.org/changeset/202394&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279940</attachid>
            <date>2016-05-26 19:59:10 -0700</date>
            <delta_ts>2016-06-16 18:46:36 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>approach-1.patch</filename>
            <type>text/plain</type>
            <size>6049</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZjNkMzgzLi41NWViNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTYtMDUtMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBNZW1vcnkgVGltZWxpbmUgc29tZXRpbWVzIHNob3dzIGlt
cG9zc2libGUgdmFsdWUgZm9yIGJtYWxsb2Mgc2l6ZSAodW5kZXJmbG93ZWQpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgxMTAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI2NDk4NTg0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50cyByZXBvcnQgYW4gZXh0cmEgbWVtb3J5
IGNvc3QgYmFzZWQgb24gdGhlIHNpemUgb2YKKyAgICAgICAgdGhlaXIgSW1hZ2VCdWZmZXIuIFRo
ZSB0b3RhbCBleHRyYSBtZW1vcnkgY29zdCwgaW5jbHVkaW5nIHRoaXMgYW5kIG90aGVycywKKyAg
ICAgICAgd2FzIGJlaW5nIHN1YnRyYWN0ZWQgZnJvbSB0aGUgYm1hbGxvYyBjYXRlZ29yeSBpbiBS
ZXNvdXJjZVVzYWdlLgorICAgICAgICBIb3dldmVyLCB3aGVuIENvY29hIGhhcyBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQorICAgICAgICB0aGUgSW1hZ2VCdWZmZXIgbWVtb3J5
IHdhcyBubyBsb25nZXIgc3RvcmVkIGluIGJtYWxsb2MsIHNvIHN1YnRyYWN0aW5nCisgICAgICAg
IG1lbW9yeSBvdXRzaWRlIG9mIGJtYWxsb2MsIHRoYXQgZW5kZWQgdXAgYmVpbmcgbGFyZ2VyIHRo
ZW4gYm1hbGxvYywKKyAgICAgICAgdW5kZXJmbG93ZWQgYW5kIHByb2R1Y2VkIGJvZ3VzIHZhbHVl
cy4KKworICAgICAgICBUaGlzIHBhdGNoIGF2b2lkcyByZXBvcnRpbmcgYW55IGNhbnZhcyBJT1N1
cmZhY2UgbWVtb3J5IGFzIGV4dHJhIG1lbW9yeQorICAgICAgICB0byB0aGUgSGVhcC4gSU9TdXJm
YWNlIG1lbW9yeSBkb2VzIG5vdCBhcHBlYXIgdG8gbGl2ZSBpbiB0aGUgV2ViIENvbnRlbnQKKyAg
ICAgICAgUHJvY2Vzcywgc28gaW5jb3Jwb3J0YXRpbmcgaXQgaW50byBSZXNvdXJjZSBVc2FnZSwg
b3IgdGhlIEhlYXAgdG8gYWZmZWN0CisgICAgICAgIGdhcmJhZ2UgY29sbGVjdGlvbiBzY2hlZHVs
aW5nLCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVt
b3J5Q29zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0KToKKyAgICAgICAgU2FtZSBtZW1vcnkg
Y29zdCBpbXBsZW1lbnRhdGlvbiwgYnV0IGNvdW50IGFzIDAgd2hlbgorICAgICAgICB0aGVyZSBp
cyBhbiBJT1N1cmZhY2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjptZW1vcnlDb3N0KToKKyAgICAg
ICAgTW92ZSBtZW1vcnkgY29zdCB0byB0aGUgSW1hZ2VCdWZmZXIgaW1wbGVtZW50YXRpb25zLgor
CisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW06CisgICAg
ICAgIChXZWJDb3JlOjpjYXRlZ29yeUZvclZNVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlVXNhZ2VUaHJlYWQ6OnBsYXRmb3JtVGhyZWFkQm9keSk6CisgICAgICAgIEl0IGxvb2tzIGxp
a2UgYWxsIG90aGVyIGV4dHJhIG1lbW9yeSBjb3N0IHJlcG9ydGVkIGZyb20gV2ViQ29yZSBpcyBi
YWNrIHRvCisgICAgICAgIGJlaW5nIHdpdGhpbiB0aGUgYm1hbGxvYywgc28gSSBjb250aW51ZSB0
byBzdWJ0cmFjdCBHQyBPd25lZCBmcm9tIGJtYWxsb2MuCisgICAgICAgIEFkZGVkIGFuIEFTU0VS
VCB0byBtb3JlIGVhc2lseSBjYXRjaCB0aGlzIGlzc3VlIGlmIGl0IGhhcHBlbnMgYWdhaW4uCisK
IDIwMTYtMDUtMjUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OIChyMTkxNTMxKTogV2ViIEluc3BlY3RvcjogV2ViU1FMIGRhdGFiYXNl
cyBhcmUgbm8gbG9uZ2VyIHNob3duIHdoZW4gZmlyc3Qgb3BlbmluZyBXZWIgSW5zcGVjdG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGUwNWU1ZTguLjUx
ZjQ3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC01
ODMsNyArNTgzLDcgQEAgc2l6ZV90IEhUTUxDYW52YXNFbGVtZW50OjptZW1vcnlDb3N0KCkgY29u
c3QKIHsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VC
dWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
LT5tZW1vcnlDb3N0KCk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQppbmRl
eCA1M2ZmODc3Li5hMDY2MDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nv
Y29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRp
YyB1bnNpZ25lZCBjYXRlZ29yeUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6Ok90aGVyOwogICAgIH0KLX07Cit9CiAKIHZv
aWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6cGxhdGZvcm1UaHJlYWRCb2R5KEpTQzo6Vk0qIHZtLCBS
ZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkKIHsKQEAgLTIyNiw2ICsyMjYsNyBAQCB2b2lkIFJlc291
cmNlVXNhZ2VUaHJlYWQ6OnBsYXRmb3JtVGhyZWFkQm9keShKU0M6OlZNKiB2bSwgUmVzb3VyY2VV
c2FnZURhdGEmIGRhdAogCiAgICAgLy8gU3VidHJhY3Qga25vd24gc3ViY2h1bmtzIGZyb20gdGhl
IGJtYWxsb2MgYnVja2V0LgogICAgIC8vIEZJWE1FOiBIYW5kbGUgcnVubmluZyB3aXRoIGJtYWxs
b2MgZGlzYWJsZWQuCisgICAgQVNTRVJUKGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6
Ym1hbGxvY10uZGlydHlTaXplID49IGN1cnJlbnRHQ0hlYXBDYXBhY2l0eSArIGN1cnJlbnRHQ093
bmVkKTsKICAgICBkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OmJtYWxsb2NdLmRpcnR5
U2l6ZSAtPSBjdXJyZW50R0NIZWFwQ2FwYWNpdHkgKyBjdXJyZW50R0NPd25lZDsKIAogICAgIGRh
dGEudGltZU9mTmV4dEVkZW5Db2xsZWN0aW9uID0gdm0tPmhlYXAuZWRlbkFjdGl2aXR5Q2FsbGJh
Y2soKS0+bmV4dEZpcmVUaW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMmFjZTczYy4uYmM4ZDdiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtODEsNiAr
ODEsMTMgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIGNsYW1wZWRT
aXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKKyNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKK3NpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0
KCk7Cit9CisjZW5kaWYKKwogI2lmICFVU0UoQ0cpCiBGbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNp
emVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIHNpemUpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA1N2JhNjM1Li44
ZjcxOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwdWJsaWM6CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UoKSBjb25zdDsKICNlbmRpZgogCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dDsKKwogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhv
ZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCiAgICAgLy8gd2l0aCB0
ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5
cGUuCiAgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBH
QzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAppbmRleCAxY2MzNGFiLi4yYjgwMTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMTYwLDYgKzE2MCwxNyBA
QCBGbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXpl
IGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QKICAgICByZXR1cm4gc2NhbGVTaXplVG9Vc2VyU3BhY2Uo
ZGVzdGluYXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKCkp
OwogfQogCisjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKK3NpemVfdCBJ
bWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSBoYXZlIGFu
IElPU3VyZmFjZSwgcmVwb3J0IG5vIGV4dHJhIG1lbW9yeSBjb3N0LiBUaGUgbWVtb3J5IGlzIG5v
dCBpbiB0aGlzIHByb2Nlc3MuCisgICAgaWYgKG1fZGF0YS5zdXJmYWNlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFs
U2l6ZSgpLmhlaWdodCgpOworfQorI2VuZGlmCisKIEdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZm
ZXI6OmNvbnRleHQoKSBjb25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281519</attachid>
            <date>2016-06-16 18:46:36 -0700</date>
            <delta_ts>2016-06-23 11:18:34 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>iosurface-1.patch</filename>
            <type>text/plain</type>
            <size>24490</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDUxZGJlODUuLjIyYmNkOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA2LTE2ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTWVtb3J5
IFRpbWVsaW5lIHNvbWV0aW1lcyBzaG93cyBpbXBvc3NpYmxlIHZhbHVlIGZvciBibWFsbG9jIHNp
emUgKHVuZGVyZmxvd2VkKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU4MTEwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNjQ5ODU4ND4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvSGVhcC5j
cHA6CisgICAgICAgIChKU0M6OkhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24pOgorICAgICAgICAo
SlNDOjpIZWFwOjpkaWRGaW5pc2hDb2xsZWN0aW9uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6ZXh0ZXJuYWxNZW1vcnlTaXplKToKKyAgICAgICAgKiBoZWFw
L0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5
VmlzaXRlZCk6CisgICAgICAgIEtlZXAgY291bnQgb2YgZXh0ZXJuYWwgbWVtb3J5IHdlIHZpc2l0
LgorCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQpOgorICAgICAgICBSZXBvcnQgZXh0ZXJuYWwgbWVtb3J5IHZpc2l0ZWQg
bGlrZSB3ZSBkbyBleHRyYSBtZW1vcnksIHNpbmNlCisgICAgICAgIGl0IHdpbGwgYmUgc29tZSBz
dWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgaXMgZXh0ZXJuYWwuCisKIDIwMTYtMDYtMTQgIEpv
c2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBjb25zb2xlLnByb2ZpbGUgc2hvdWxkIHVzZSB0aGUgbmV3IFNhbXBsaW5nIFByb2ZpbGVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDZkOGRlNzYuLjY0NjcwNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0xMjQzLDYgKzEyNDMsOSBAQCB2b2lk
IEhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24oSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkK
ICAgICAgICAgbV9zaXplQmVmb3JlTGFzdEZ1bGxDb2xsZWN0ID0gbV9zaXplQWZ0ZXJMYXN0Q29s
bGVjdCArIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CiAgICAgICAgIG1fZXh0cmFNZW1vcnlT
aXplID0gMDsKICAgICAgICAgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplID0gMDsKKyNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgICAgIG1fZXh0ZXJuYWxNZW1vcnlTaXplID0gMDsK
KyNlbmRpZgogCiAgICAgICAgIGlmIChtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrKQogICAgICAgICAg
ICAgbV9mdWxsQWN0aXZpdHlDYWxsYmFjay0+d2lsbENvbGxlY3QoKTsKQEAgLTE0NTUsNiArMTQ1
OCwxMCBAQCB2b2lkIEhlYXA6OmRpZEZpbmlzaENvbGxlY3Rpb24oZG91YmxlIGdjU3RhcnRUaW1l
KQogICAgIGVsc2UKICAgICAgICAgbV9sYXN0RWRlbkdDTGVuZ3RoID0gZ2NFbmRUaW1lIC0gZ2NT
dGFydFRpbWU7CiAKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgQVNTRVJUKGV4dGVy
bmFsTWVtb3J5U2l6ZSgpIDw9IGV4dHJhTWVtb3J5U2l6ZSgpKTsKKyNlbmRpZgorCiAgICAgaWYg
KE9wdGlvbnM6OnJlY29yZEdDUGF1c2VUaW1lcygpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6
cmVjb3JkR0NQYXVzZVRpbWUoZ2NTdGFydFRpbWUsIGdjRW5kVGltZSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAppbmRleCA3OTVmZGVlLi41ZDc5NjdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCkBAIC0xNzksNiArMTc5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7CiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIGNlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nLCBzaXplX3QpOwogCisjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhl
IHN1YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4K
KyAgICB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgY2VsbFN0YXRl
QmVmb3JlVmlzaXRpbmcsIHNpemVfdCk7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgp
IHsgcmV0dXJuIG1fZXh0cmFNZW1vcnlTaXplOyB9CisjZW5kaWYKKwogICAgIC8vIFVzZSB0aGlz
IEFQSSB0byByZXBvcnQgbm9uLUdDIG1lbW9yeSBpZiB5b3UgY2FuJ3QgdXNlIHRoZSBiZXR0ZXIg
QVBJIGFib3ZlLgogICAgIHZvaWQgZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KHNpemVfdCk7
CiAKQEAgLTQ2Myw2ICs0NjksNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIHNpemVfdCBtX2Jsb2NrQnl0ZXNBbGxvY2F0ZWQgeyAwIH07CisgICAgc2l6ZV90
IG1fZXh0ZXJuYWxNZW1vcnlTaXplIHsgMCB9OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAppbmRleCAwOTFjOWQ3Li4xYTYwYzcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTE0MSw2ICsxNDEsMjMgQEAg
aW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBkYXRh
QmVmb3JlVmlzaXRpbmcsIHNpemVfdAogICAgIH0KIH0KIAorI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKK2lubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxs
U3RhdGUgZGF0YUJlZm9yZVZpc2l0aW5nLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvLyBXZSBkb24n
dCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9y
dGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgorICAgIGlmIChvcGVyYXRpb25JblByb2dyZXNz
KCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgZGF0YUJlZm9yZVZpc2l0aW5nID09IENlbGxTdGF0ZTo6
T2xkR3JleSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0
ZXJuYWxNZW1vcnlTaXplOworCisgICAgZm9yICg7OykgeworICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9ICpjb3VudGVyOworICAgICAgICBpZiAoV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoY291bnRl
ciwgb2xkU2l6ZSwgb2xkU2l6ZSArIHNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKyNlbmRpZgorCiBpbmxpbmUgdm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1v
cnkoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHNpemUgPiBtaW5FeHRyYU1lbW9yeSkgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAppbmRleCA1NTkwMTU5Li5lN2NkNjM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKQEAgLTEwOSw2ICsx
MDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5TGF0ZXIoSlNDZWxsKiwgQ29weVRva2VuLCB2
b2lkKiwgc2l6ZV90KTsKICAgICAKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChz
aXplX3QpOworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICB2b2lkIHJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOworI2VuZGlmCiAgICAgCiAgICAgdm9pZCBhZGRXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqKTsKICAgICB2b2lkIGFk
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXplciopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAppbmRleCBhMzc5
MjM4Li44YWM0OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaApAQCAtMTA5LDYgKzEwOSwxMyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogICAgIGhlYXAoKS0+cmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0
aW5nLCBzaXplKTsKIH0KIAorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKK2lubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCit7
CisgICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9jdXJyZW50T2JqZWN0
Q2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcsIHNpemUpOworfQorI2VuZGlmCisKIGlubGluZSBIZWFw
KiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICZtX2hlYXA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMTZiZmY3YS4uOTZmNjhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisy
MDE2LTA2LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogTWVtb3J5IFRpbWVsaW5lIHNvbWV0aW1lcyBzaG93cyBpbXBvc3Np
YmxlIHZhbHVlIGZvciBibWFsbG9jIHNpemUgKHVuZGVyZmxvd2VkKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MTEwCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8yNjQ5ODU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJT1N1cmZhY2UgbWVtb3J5IGJhY2tpbmcgQ2FudmFzIGVsZW1lbnQgYnVmZmVy
cyBzaG91bGQgYmUgY2xhc3NpZmllZCBhcyAiR0MgT3duZWQiLAorICAgICAgICBidXQgc2hvdWxk
IG5vdCBiZSBjb25zaWRlcmVkIGEgcGFydCBvZiBibWFsbG9jLiBJbiBmYWN0LCB0aGUgYWN0dWFs
IG1lbW9yeSBjb3N0IGlzCisgICAgICAgIGV4dGVybmFsIHRvIHRoZSBXZWIgQ29udGVudCBQcm9j
ZXNzLiBUaGUgbWFqb3JpdHkgb2YgZXh0cmEgbWVtb3J5IHJlcG9ydGVycyB0ZW5kCisgICAgICAg
IHRvIHJlcG9ydCBleHRyYSBtZW1vcnkgdGhhdCBpcyBhbHNvIGFsbG9jYXRlZCBpbiBibWFsbG9j
LiBIb3dldmVyLCBzb21lIHJlcG9ydAorICAgICAgICBub24tYm1hbGxvYyBtZW1vcnksIHN1Y2gg
YXMgdGhlIElPU3VyZmFjZXMgaGVyZS4KKyAgICAgICAgCisgICAgICAgIENvbnRpbnVlIHRvIHJl
cG9ydCB0aGUgbWVtb3J5IGNvc3Qgd2l0aG91dCBjaGFuZ2VzIHRvIGluZm9ybSB0aGUgSGVhcCBm
b3IgZ2FyYmFnZQorICAgICAgICBjb2xsZWN0aW9uLiBIb3dldmVyLCBhbHNvIGtlZXAgYmV0dGVy
IGFjY291bnRpbmcgb2YgR0NPd25lZCBtZW1vcnkgdGhhdCBpcyBleHRlcm5hbAorICAgICAgICB0
byB0aGUgcHJvY2VzcyBmb3IgYmV0dGVyIGFjY291bnRpbmcgZm9yIHRoZSBSZXNvdXJjZSBVc2Fn
ZSBvdmVybGF5IGFuZCBXZWIgSW5zcGVjdG9yCisgICAgICAgIE1lbW9yeSB0aW1lbGluZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBiaXQgb2YgYSBnYW1lIHdoZXJlIHdlIHdhbnQgdG8g
ZGlzcGxheSB0aGUgYmVzdCBwb3NzaWJsZSBudW1iZXIgZm9yCisgICAgICAgICJHQ093bmVkIG1l
bW9yeSIgaW4gdGhlIHRvb2xzLCBidXQgc29tZSBvZiB0aGF0IG1lbW9yeSBzaG93cyB1cCBpbiB0
aGUgb3RoZXIKKyAgICAgICAgcmVnaW9ucyAoYm1hbGxvYywgc3lzdGVtIG1hbGxvYywgZXRjKS4g
QWxyZWFkeSBtYW55IHNpemVzIGFyZSBlc3RpbWF0ZXMKKyAgICAgICAgKFJlcG9ydEV4dHJhTWVt
b3J5LCByZXBvcnRFeHRyYU1lbW9yeSBpZ25vcmVzIHNtYWxsIGFsbG9jYXRpb25zKSwgc28gd2Ug
anVzdCBmb2N1cworICAgICAgICBvbiBnZXR0aW5nIHRoZSBsYXJnZXN0IHNvdXJjZXMgb2YgYWxs
b2NhdGlvbnMsIHN1Y2ggYXMgQ2FudmFzIElPU3VyZmFjZXMgaGVyZSwKKyAgICAgICAgaW50byB0
aGUgcmlnaHQgYnVja2V0LiBSZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EgY29udGludWVzIHRvIHN1
YnRyYWN0IHRoZSAiZXh0cmEiCisgICAgICAgIG1lbW9yeSBmcm9tIGJtYWxsb2MuIFNvLCB3ZSBz
aG91bGQgYWRkcmVzcyBvdGhlciBsYXJnZSBzb3VyY2VzIG9mICJleHRyYSBtZW1vcnkiCisgICAg
ICAgIG5vdCBpbiBibWFsbG9jLiBBIGxpa2VseSBjYW5kaWRhdGUgaXMgSFRNTE1lZGlhRWxlbWVu
dCB3aGljaCB1c2VzIHRoZSBkZXByZWNhdGVkCisgICAgICAgIHJlcG9ydGluZyByaWdodCBub3cu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAg
ICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgIEFkZCBhIHdheSB0byByZXBvcnQgRXh0ZXJuYWwg
bWVtb3J5LCBkZXBlbmRlbnQgb24gcmVwb3J0aW5nIEV4dHJhIG1lbW9yeS4KKworICAgICAgICAq
IGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZh
c0VsZW1lbnQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsOgorICAgICAg
ICBSZXBvcnQgZXh0ZXJuYWwgbWVtb3J5IGNvc3QganVzdCBsaWtlIGV4dHJhIG1lbW9yeS4KKwor
ICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRhKToKKyAgICAgICAgKiBwYWdlL1Jl
c291cmNlVXNhZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYXRlZ29yeUluZm86
OnRvdGFsU2l6ZSk6CisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmluZ0J1ZmZlcjo6YXQpOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kRGF0YVRvSGlzdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVVz
YWdlT3ZlcmxheTo6cGxhdGZvcm1EcmF3KToKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jlc291cmNl
VXNhZ2VUaHJlYWRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9yVk1UYWcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6cGxhdGZvcm1UaHJlYWRC
b2R5KToKKyAgICAgICAgRG8gbm90IGNvdW50IHRoZSBHQ093bmVkIEV4dGVybmFsIG1lbW9yeSBh
cyBkaXJ0eSBtZW1vcnkuCisgICAgICAgIEluY2x1ZGUgRXh0ZXJuYWwgbWVtb3J5IG91dHB1dCBp
biB0aGUgb3ZlcmxheS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Y29sbGVjdFNh
bXBsZSk6CisgICAgICAgIFdoZW4gc2l6aW5nIHRoZSBKYXZhU2NyaXB0IHBvcnRpb24sIGluY2x1
ZGUgYm90aCB0aGUgR0MgT3duZWQKKyAgICAgICAgY2F0ZWdvcnkncyBkaXJ0eSBhbmQgZXh0ZXJu
YWwgbWVtb3J5LiBVbHRpbWF0ZWx5IHdlIHdpbGwKKyAgICAgICAgd2FudCB0aGlzIGV2ZXJ5d2hl
cmUgaW4gY2FzZSB0aGluZ3MgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVtb3J5Q29zdCk6CisgICAgICAg
IChXZWJDb3JlOjpleHRlcm5hbE1lbW9yeUNvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAg
ICAgICAgUmVwb3J0IElPU3VyZmFjZSB0b3RhbCBieXRlcyBhcyBleHRyYSBtZW1vcnkgYW5kIGV4
dGVybmFsIG1lbW9yeQorICAgICAgICBzbyB0aGF0IGl0IGNhbiBiZSB0cmFja2VkIGFzIEdDIE93
bmVkIG1lbW9yeSB0aGF0IGlzIHNlcGFyYXRlIGZyb20KKyAgICAgICAgcmVndWxhciAoYm1hbGxv
Yy9vdGhlcikgaW4gcHJvY2VzcyBtZW1vcnkuCisKIDIwMTYtMDYtMTQgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xl
LnByb2ZpbGUgc2hvdWxkIHVzZSB0aGUgbmV3IFNhbXBsaW5nIFByb2ZpbGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDE1
MzFmYWUuLjgwZGQ5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0zMjQ2LDYgKzMyNDYsMTEgQEAgRU5ECiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKHZpc2l0b3IpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpT
Q3VzdG9tTWFya0Z1bmN0aW9uIn07CiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiUmVwb3J0RXh0cmFNZW1vcnlDb3N0In0pIHsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPndyYXBwZWQoKS5tZW1vcnlDb3N0KCkpO1xuIik7CisgICAgICAgICAgICBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcG9ydEV4dGVybmFsTWVtb3J5Q29zdCJ9
KSB7OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHZpc2l0b3IucmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPndyYXBwZWQo
KS5leHRlcm5hbE1lbW9yeUNvc3QoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiNlbmRpZlxuIik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgewogICAgICAgICAgICAgZm9yZWFjaCAoQHsk
aW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXggNjE0ZWJhNy4uYjM3MDA4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CkBA
IC0xMTMsNiArMTEzLDcgQEAgUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UKIFJlZmxlY3Q9Kgog
UmVwbGFjZWFibGUKIFJlcG9ydEV4dHJhTWVtb3J5Q29zdAorUmVwb3J0RXh0ZXJuYWxNZW1vcnlD
b3N0CiBSZXF1aXJlc0V4aXN0aW5nQXRvbWljU3RyaW5nCiBTZXR0ZXJSYWlzZXNFeGNlcHRpb24K
IFNldHRlclJhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDBlOTJkOTAuLjg1MzBiZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC01ODksNiArNTg5LDEzIEBAIHNpemVf
dCBIVE1MQ2FudmFzRWxlbWVudDo6bWVtb3J5Q29zdCgpIGNvbnN0CiAgICAgcmV0dXJuIDQgKiBt
X2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CiB9CiAKK3NpemVfdCBIVE1MQ2FudmFzRWxlbWVudDo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXpl
KCkud2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOworfQor
CiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wg
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKICAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgKaW5kZXggZmU2OTZhNC4uOTJmMjY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzKSBjb25zdDsKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CisgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEhUTUxD
YW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAppbmRleCBmMzU0MmEyLi5hOGYxODY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbApAQCAtMjYsNyArMjYs
OCBAQAogCiBbCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIFJlcG9ydEV4dHJh
TWVtb3J5Q29zdAorICAgIFJlcG9ydEV4dHJhTWVtb3J5Q29zdCwKKyAgICBSZXBvcnRFeHRlcm5h
bE1lbW9yeUNvc3QsCiBdIGludGVyZmFjZSBIVE1MQ2FudmFzRWxlbWVudCA6IEhUTUxFbGVtZW50
IHsKICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSAmJiBMQU5HVUFHRV9PQkpFQ1RJ
VkVfQyB8fCBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKICAg
ICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDcwMmZhZDQuLmViZjljMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAt
MTA3LDMyICsxMDcsMzIgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Y29sbGVjdFNhbXBs
ZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkKIHsKICAgICBhdXRvIGphdmFzY3JpcHRD
YXRlZ29yeSA9IFByb3RvY29sOjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6Y3JlYXRlKCkKICAgICAg
ICAgLnNldFR5cGUoUHJvdG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlEYXRhOjpUeXBlOjpKYXZhc2Ny
aXB0KQotICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkdD
SGVhcF0uZGlydHlTaXplICsgZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpHQ093bmVk
XS5kaXJ0eVNpemUpCisgICAgICAgIC5zZXRTaXplKGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRl
Z29yeTo6R0NIZWFwXS50b3RhbFNpemUoKSArIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29y
eTo6R0NPd25lZF0udG90YWxTaXplKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBhdXRv
IGppdENhdGVnb3J5ID0gUHJvdG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlEYXRhOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TWVtb3J5OjpDYXRlZ29yeURhdGE6OlR5cGU6OkpJ
VCkKLSAgICAgICAgLnNldFNpemUoZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpKU0pJ
VF0uZGlydHlTaXplKQorICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0
ZWdvcnk6OkpTSklUXS50b3RhbFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGF1
dG8gaW1hZ2VzQ2F0ZWdvcnkgPSBQcm90b2NvbDo6TWVtb3J5OjpDYXRlZ29yeURhdGE6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6VHlw
ZTo6SW1hZ2VzKQotICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdv
cnk6OkltYWdlc10uZGlydHlTaXplKQorICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNb
TWVtb3J5Q2F0ZWdvcnk6OkltYWdlc10udG90YWxTaXplKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7
CiAKICAgICBhdXRvIGxheWVyc0NhdGVnb3J5ID0gUHJvdG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlE
YXRhOjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TWVtb3J5OjpDYXRlZ29y
eURhdGE6OlR5cGU6OkxheWVycykKLSAgICAgICAgLnNldFNpemUoZGF0YS5jYXRlZ29yaWVzW01l
bW9yeUNhdGVnb3J5OjpMYXllcnNdLmRpcnR5U2l6ZSkKKyAgICAgICAgLnNldFNpemUoZGF0YS5j
YXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdLnRvdGFsU2l6ZSgpKQogICAgICAgICAu
cmVsZWFzZSgpOwogCiAgICAgYXV0byBwYWdlQ2F0ZWdvcnkgPSBQcm90b2NvbDo6TWVtb3J5OjpD
YXRlZ29yeURhdGE6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpNZW1vcnk6
OkNhdGVnb3J5RGF0YTo6VHlwZTo6UGFnZSkKLSAgICAgICAgLnNldFNpemUoZGF0YS5jYXRlZ29y
aWVzW01lbW9yeUNhdGVnb3J5OjpibWFsbG9jXS5kaXJ0eVNpemUgKyBkYXRhLmNhdGVnb3JpZXNb
TWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdLmRpcnR5U2l6ZSkKKyAgICAgICAgLnNldFNpemUo
ZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpibWFsbG9jXS50b3RhbFNpemUoKSArIGRh
dGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvY10udG90YWxTaXplKCkpCiAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBhdXRvIG90aGVyQ2F0ZWdvcnkgPSBQcm90b2NvbDo6
TWVtb3J5OjpDYXRlZ29yeURhdGE6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUeXBlKFByb3RvY29s
OjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6VHlwZTo6T3RoZXIpCi0gICAgICAgIC5zZXRTaXplKGRh
dGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6T3RoZXJdLmRpcnR5U2l6ZSkKKyAgICAgICAg
LnNldFNpemUoZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpPdGhlcl0udG90YWxTaXpl
KCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBhdXRvIGNhdGVnb3JpZXMgPSBQcm90b2Nv
bDo6QXJyYXk8UHJvdG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlEYXRhPjo6Y3JlYXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCmluZGV4IGM5NzU5Y2MuLjU5MTJi
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCkBAIC00OCw2
ICs0OCw3IEBAIFJlc291cmNlVXNhZ2VEYXRhOjpSZXNvdXJjZVVzYWdlRGF0YSgpCiBSZXNvdXJj
ZVVzYWdlRGF0YTo6UmVzb3VyY2VVc2FnZURhdGEoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIG90
aGVyKQogICAgIDogY3B1KG90aGVyLmNwdSkKICAgICAsIHRvdGFsRGlydHlTaXplKG90aGVyLnRv
dGFsRGlydHlTaXplKQorICAgICwgdG90YWxFeHRlcm5hbFNpemUob3RoZXIudG90YWxFeHRlcm5h
bFNpemUpCiAgICAgLCB0aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24ob3RoZXIudGltZU9mTmV4dEVk
ZW5Db2xsZWN0aW9uKQogICAgICwgdGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uKG90aGVyLnRpbWVP
Zk5leHRGdWxsQ29sbGVjdGlvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURh
dGEuaAppbmRleCAxYzgwOTQ0Li5kOGU3YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlRGF0YS5oCkBAIC01Miw4ICs1MiwxMSBAQCBzdHJ1Y3QgTWVtb3J5Q2F0ZWdvcnlJbmZv
IHsKICAgICB7CiAgICAgfQogCisgICAgc2l6ZV90IHRvdGFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IGRpcnR5U2l6ZSArIGV4dGVybmFsU2l6ZTsgfQorCiAgICAgc2l6ZV90IGRpcnR5U2l6ZSB7IDAg
fTsKICAgICBzaXplX3QgcmVjbGFpbWFibGVTaXplIHsgMCB9OworICAgIHNpemVfdCBleHRlcm5h
bFNpemUgeyAwIH07CiAgICAgYm9vbCBpc1N1YmNhdGVnb3J5IHsgZmFsc2UgfTsKICAgICB1bnNp
Z25lZCB0eXBlIHsgTWVtb3J5Q2F0ZWdvcnk6Ok51bWJlck9mQ2F0ZWdvcmllcyB9OwogfTsKQEAg
LTY0LDYgKzY3LDcgQEAgc3RydWN0IFJlc291cmNlVXNhZ2VEYXRhIHsKIAogICAgIGZsb2F0IGNw
dSB7IDAgfTsKICAgICBzaXplX3QgdG90YWxEaXJ0eVNpemUgeyAwIH07CisgICAgc2l6ZV90IHRv
dGFsRXh0ZXJuYWxTaXplIHsgMCB9OwogICAgIHN0ZDo6YXJyYXk8TWVtb3J5Q2F0ZWdvcnlJbmZv
LCBNZW1vcnlDYXRlZ29yeTo6TnVtYmVyT2ZDYXRlZ29yaWVzPiBjYXRlZ29yaWVzOwogICAgIGRv
dWJsZSB0aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24geyAwIH07CiAgICAgZG91YmxlIHRpbWVPZk5l
eHRGdWxsQ29sbGVjdGlvbiB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQppbmRleCBhMjNlNmIxLi41ZTg0OGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVy
bGF5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdl
T3ZlcmxheUNvY29hLm1tCkBAIC0xMzgsNiArMTM4LDcgQEAgc3RydWN0IEhpc3RvcmljTWVtb3J5
Q2F0ZWdvcnlJbmZvIHsKICAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3I7CiAgICAgUmlu
Z0J1ZmZlcjxzaXplX3Q+IGRpcnR5U2l6ZTsKICAgICBSaW5nQnVmZmVyPHNpemVfdD4gcmVjbGFp
bWFibGVTaXplOworICAgIFJpbmdCdWZmZXI8c2l6ZV90PiBleHRlcm5hbFNpemU7CiAgICAgYm9v
bCBpc1N1YmNhdGVnb3J5IHsgZmFsc2UgfTsKICAgICB1bnNpZ25lZCB0eXBlIHsgTWVtb3J5Q2F0
ZWdvcnk6Ok51bWJlck9mQ2F0ZWdvcmllcyB9OwogfTsKQEAgLTE0Nyw2ICsxNDgsNyBAQCBzdHJ1
Y3QgSGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YSB7CiAKICAgICBSaW5nQnVmZmVyPGZsb2F0PiBj
cHU7CiAgICAgUmluZ0J1ZmZlcjxzaXplX3Q+IHRvdGFsRGlydHlTaXplOworICAgIFJpbmdCdWZm
ZXI8c2l6ZV90PiB0b3RhbEV4dGVybmFsU2l6ZTsKICAgICBSaW5nQnVmZmVyPHNpemVfdD4gZ2NI
ZWFwU2l6ZTsKICAgICBzdGQ6OmFycmF5PEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvLCBNZW1v
cnlDYXRlZ29yeTo6TnVtYmVyT2ZDYXRlZ29yaWVzPiBjYXRlZ29yaWVzOwogICAgIGRvdWJsZSB0
aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24geyAwIH07CkBAIC0xODksOSArMTkxLDExIEBAIHN0YXRp
YyB2b2lkIGFwcGVuZERhdGFUb0hpc3RvcnkoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEp
CiAgICAgYXV0byYgaGlzdG9yaWNEYXRhID0gaGlzdG9yaWNVc2FnZURhdGEoKTsKICAgICBoaXN0
b3JpY0RhdGEuY3B1LmFwcGVuZChkYXRhLmNwdSk7CiAgICAgaGlzdG9yaWNEYXRhLnRvdGFsRGly
dHlTaXplLmFwcGVuZChkYXRhLnRvdGFsRGlydHlTaXplKTsKKyAgICBoaXN0b3JpY0RhdGEudG90
YWxFeHRlcm5hbFNpemUuYXBwZW5kKGRhdGEudG90YWxFeHRlcm5hbFNpemUpOwogICAgIGZvciAo
YXV0byYgY2F0ZWdvcnkgOiBoaXN0b3JpY0RhdGEuY2F0ZWdvcmllcykgewogICAgICAgICBjYXRl
Z29yeS5kaXJ0eVNpemUuYXBwZW5kKGRhdGEuY2F0ZWdvcmllc1tjYXRlZ29yeS50eXBlXS5kaXJ0
eVNpemUpOwogICAgICAgICBjYXRlZ29yeS5yZWNsYWltYWJsZVNpemUuYXBwZW5kKGRhdGEuY2F0
ZWdvcmllc1tjYXRlZ29yeS50eXBlXS5yZWNsYWltYWJsZVNpemUpOworICAgICAgICBjYXRlZ29y
eS5leHRlcm5hbFNpemUuYXBwZW5kKGRhdGEuY2F0ZWdvcmllc1tjYXRlZ29yeS50eXBlXS5leHRl
cm5hbFNpemUpOwogICAgIH0KICAgICBoaXN0b3JpY0RhdGEudGltZU9mTmV4dEVkZW5Db2xsZWN0
aW9uID0gZGF0YS50aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb247CiAgICAgaGlzdG9yaWNEYXRhLnRp
bWVPZk5leHRGdWxsQ29sbGVjdGlvbiA9IGRhdGEudGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uOwpA
QCAtNDQ4LDExICs0NTIsMTcgQEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1E
cmF3KENHQ29udGV4dFJlZiBjb250ZXh0KQogICAgIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9y
TGFiZWxzID0gY3JlYXRlQ29sb3IoMC45LCAwLjksIDAuOSwgMSk7CiAgICAgc2hvd1RleHQoY29u
dGV4dCwgMTAsIDIwLCBjb2xvckZvckxhYmVscywgU3RyaW5nOjpmb3JtYXQoIiAgICAgICAgQ1BV
OiAlZyIsIGRhdGEuY3B1Lmxhc3QoKSkpOwogICAgIHNob3dUZXh0KGNvbnRleHQsIDEwLCAzMCwg
Y29sb3JGb3JMYWJlbHMsICIgIEZvb3RwcmludDogIiArIGZvcm1hdEJ5dGVOdW1iZXIoZGF0YS50
b3RhbERpcnR5U2l6ZS5sYXN0KCkpKTsKKyAgICBzaG93VGV4dChjb250ZXh0LCAxMCwgNDAsIGNv
bG9yRm9yTGFiZWxzLCAiICAgRXh0ZXJuYWw6ICIgKyBmb3JtYXRCeXRlTnVtYmVyKGRhdGEudG90
YWxFeHRlcm5hbFNpemUubGFzdCgpKSk7CiAKLSAgICBmbG9hdCB5ID0gNTA7CisgICAgZmxvYXQg
eSA9IDU1OwogICAgIGZvciAoYXV0byYgY2F0ZWdvcnkgOiBkYXRhLmNhdGVnb3JpZXMpIHsKLSAg
ICAgICAgU3RyaW5nIGxhYmVsID0gU3RyaW5nOjpmb3JtYXQoIiUgMTFzOiAlcyIsIGNhdGVnb3J5
Lm5hbWUuYXNjaWkoKS5kYXRhKCksIGZvcm1hdEJ5dGVOdW1iZXIoY2F0ZWdvcnkuZGlydHlTaXpl
Lmxhc3QoKSkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBzaXplX3QgZGlydHkgPSBjYXRlZ29y
eS5kaXJ0eVNpemUubGFzdCgpOwogICAgICAgICBzaXplX3QgcmVjbGFpbWFibGUgPSBjYXRlZ29y
eS5yZWNsYWltYWJsZVNpemUubGFzdCgpOworICAgICAgICBzaXplX3QgZXh0ZXJuYWwgPSBjYXRl
Z29yeS5leHRlcm5hbFNpemUubGFzdCgpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGxhYmVs
ID0gU3RyaW5nOjpmb3JtYXQoIiUgMTFzOiAlcyIsIGNhdGVnb3J5Lm5hbWUuYXNjaWkoKS5kYXRh
KCksIGZvcm1hdEJ5dGVOdW1iZXIoZGlydHkpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgaWYg
KGV4dGVybmFsKQorICAgICAgICAgICAgbGFiZWwgPSBsYWJlbCArIFN0cmluZzo6Zm9ybWF0KCIg
KyAlcyIsIGZvcm1hdEJ5dGVOdW1iZXIoZXh0ZXJuYWwpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAg
ICAgaWYgKHJlY2xhaW1hYmxlKQogICAgICAgICAgICAgbGFiZWwgPSBsYWJlbCArIFN0cmluZzo6
Zm9ybWF0KCIgWyVzXSIsIGZvcm1hdEJ5dGVOdW1iZXIocmVjbGFpbWFibGUpLmFzY2lpKCkuZGF0
YSgpKTsKIApAQCAtNDYwLDYgKzQ3MCw3IEBAIHZvaWQgUmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBs
YXRmb3JtRHJhdyhDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICAgICAgc2hvd1RleHQoY29udGV4
dCwgMTAsIHksIGNhdGVnb3J5LmNvbG9yLmdldCgpLCBsYWJlbCk7CiAgICAgICAgIHkgKz0gMTA7
CiAgICAgfQorICAgIHkgLT0gNTsKIAogICAgIGRvdWJsZSBub3cgPSBXVEY6OmN1cnJlbnRUaW1l
KCk7CiAgICAgc2hvd1RleHQoY29udGV4dCwgMTAsIHkgKyAxMCwgY29sb3JGb3JMYWJlbHMsIFN0
cmluZzo6Zm9ybWF0KCIgICAgRWRlbiBHQzogJXMiLCBnY1RpbWVyU3RyaW5nKGRhdGEudGltZU9m
TmV4dEVkZW5Db2xsZWN0aW9uLCBub3cpLmFzY2lpKCkuZGF0YSgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCmluZGV4
IDUzZmY4NzcuLmQ0N2M0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29j
b2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCkBAIC0xOTUsNyArMTk1LDcgQEAgc3RhdGlj
IHVuc2lnbmVkIGNhdGVnb3J5Rm9yVk1UYWcodW5zaWduZWQgdGFnKQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6T3RoZXI7CiAgICAgfQotfTsKK30KIAogdm9p
ZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpwbGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSogdm0sIFJl
c291cmNlVXNhZ2VEYXRhJiBkYXRhKQogewpAQCAtMjE5LDE0ICsyMTksMjEgQEAgdm9pZCBSZXNv
dXJjZVVzYWdlVGhyZWFkOjpwbGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSogdm0sIFJlc291cmNl
VXNhZ2VEYXRhJiBkYXQKICAgICBkYXRhLnRvdGFsRGlydHlTaXplID0gdG90YWxEaXJ0eVBhZ2Vz
ICogdm1QYWdlU2l6ZSgpOwogCiAgICAgc2l6ZV90IGN1cnJlbnRHQ0hlYXBDYXBhY2l0eSA9IHZt
LT5oZWFwLmJsb2NrQnl0ZXNBbGxvY2F0ZWQoKTsKLSAgICBzaXplX3QgY3VycmVudEdDT3duZWQg
PSB2bS0+aGVhcC5leHRyYU1lbW9yeVNpemUoKTsKKyAgICBzaXplX3QgY3VycmVudEdDT3duZWRF
eHRyYSA9IHZtLT5oZWFwLmV4dHJhTWVtb3J5U2l6ZSgpOworICAgIHNpemVfdCBjdXJyZW50R0NP
d25lZEV4dGVybmFsID0gdm0tPmhlYXAuZXh0ZXJuYWxNZW1vcnlTaXplKCk7CisgICAgQVNTRVJU
KGN1cnJlbnRHQ093bmVkRXh0ZXJuYWwgPD0gY3VycmVudEdDT3duZWRFeHRyYSk7CiAKICAgICBk
YXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkdDSGVhcF0uZGlydHlTaXplID0gY3VycmVu
dEdDSGVhcENhcGFjaXR5OwotICAgIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6R0NP
d25lZF0uZGlydHlTaXplID0gY3VycmVudEdDT3duZWQ7CisgICAgZGF0YS5jYXRlZ29yaWVzW01l
bW9yeUNhdGVnb3J5OjpHQ093bmVkXS5kaXJ0eVNpemUgPSBjdXJyZW50R0NPd25lZEV4dHJhIC0g
Y3VycmVudEdDT3duZWRFeHRlcm5hbDsKKyAgICBkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdv
cnk6OkdDT3duZWRdLmV4dGVybmFsU2l6ZSA9IGN1cnJlbnRHQ093bmVkRXh0ZXJuYWw7CiAKICAg
ICAvLyBTdWJ0cmFjdCBrbm93biBzdWJjaHVua3MgZnJvbSB0aGUgYm1hbGxvYyBidWNrZXQuCiAg
ICAgLy8gRklYTUU6IEhhbmRsZSBydW5uaW5nIHdpdGggYm1hbGxvYyBkaXNhYmxlZC4KLSAgICBk
YXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OmJtYWxsb2NdLmRpcnR5U2l6ZSAtPSBjdXJy
ZW50R0NIZWFwQ2FwYWNpdHkgKyBjdXJyZW50R0NPd25lZDsKKyAgICBzaXplX3QgY3VycmVudEdD
T3duZWRHZW5lcmFsbHlJbkJtYWxsb2MgPSBjdXJyZW50R0NPd25lZEV4dHJhIC0gY3VycmVudEdD
T3duZWRFeHRlcm5hbDsKKyAgICBBU1NFUlQoY3VycmVudEdDT3duZWRHZW5lcmFsbHlJbkJtYWxs
b2MgPCBkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OmJtYWxsb2NdLmRpcnR5U2l6ZSk7
CisgICAgZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpibWFsbG9jXS5kaXJ0eVNpemUg
LT0gY3VycmVudEdDSGVhcENhcGFjaXR5ICsgY3VycmVudEdDT3duZWRHZW5lcmFsbHlJbkJtYWxs
b2M7CisKKyAgICBkYXRhLnRvdGFsRXh0ZXJuYWxTaXplID0gY3VycmVudEdDT3duZWRFeHRlcm5h
bDsKIAogICAgIGRhdGEudGltZU9mTmV4dEVkZW5Db2xsZWN0aW9uID0gdm0tPmhlYXAuZWRlbkFj
dGl2aXR5Q2FsbGJhY2soKS0+bmV4dEZpcmVUaW1lKCk7CiAgICAgZGF0YS50aW1lT2ZOZXh0RnVs
bENvbGxlY3Rpb24gPSB2bS0+aGVhcC5mdWxsQWN0aXZpdHlDYWxsYmFjaygpLT5uZXh0RmlyZVRp
bWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAppbmRleCBjMzhkNDgxLi4xZTlkODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xOTcsNCArMTk3LDE2IEBAIGJvb2wg
SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKICAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChjb250ZXh0
LnNjYWxlRmFjdG9yKCksIHRoaXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKIH0KIAorI2lm
ICFVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQorc2l6ZV90IG1lbW9yeUNvc3Qo
KSBjb25zdAoreworICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOworfQorCitzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA2ZGY3OTk0Li5mMWYzOTllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAg
LTEyNyw2ICsxMjcsOSBAQCBwdWJsaWM6CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2Uo
KSBjb25zdDsKICNlbmRpZgogCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisKICAgICAvLyBGSVhNRTogY3VycmVu
dCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhh
dCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJH
QkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgogICAgIGJvb2wgY29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0RlbnVtLCBib29sLCBib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggMWNjMzRhYi4uODRiNTc1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAKQEAgLTE2MCw2ICsxNjAsMjIgQEAgRmxvYXRTaXplIEltYWdlQnVmZmVyOjpz
aXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0aW5hdGlvblNpemUpIGNvbnN0CiAg
ICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRlc3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsKIH0KIAorI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCitzaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBj
b25zdAoreworICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCk7CisgICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0
aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcjo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICBpZiAobV9kYXRhLnN1cmZhY2UpCisg
ICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOworICAgIHJldHVybiAw
OworfQorI2VuZGlmCisKIEdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBj
b25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCmluZGV4
IGVkYmFjMWMuLjg4NzcwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCg==
</data>
<flag name="review"
          id="305353"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="305354"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281923</attachid>
            <date>2016-06-23 12:03:45 -0700</date>
            <delta_ts>2016-06-23 13:05:37 -0700</delta_ts>
            <desc>[PATCH] For Bots</desc>
            <filename>for-bots-1.patch</filename>
            <type>text/plain</type>
            <size>24719</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg5ZmM3ODYuLjU1OWRkNmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDE2LTA2LTIzICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTWVtb3J5
IFRpbWVsaW5lIHNvbWV0aW1lcyBzaG93cyBpbXBvc3NpYmxlIHZhbHVlIGZvciBibWFsbG9jIHNp
emUgKHVuZGVyZmxvd2VkKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU4MTEwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNjQ5ODU4ND4KKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbik6CisgICAgICAgIChK
U0M6OkhlYXA6OmRpZEZpbmlzaENvbGxlY3Rpb24pOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgor
ICAgICAgICAoSlNDOjpIZWFwOjpleHRlcm5hbE1lbW9yeVNpemUpOgorICAgICAgICAqIGhlYXAv
SGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKToKKyAgICAgICAgS2VlcCBjb3VudCBvZiBleHRlcm5hbCBtZW1vcnkgd2UgdmlzaXQu
CisKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFs
TWVtb3J5VmlzaXRlZCk6CisgICAgICAgIFJlcG9ydCBleHRlcm5hbCBtZW1vcnkgdmlzaXRlZCBs
aWtlIHdlIGRvIGV4dHJhIG1lbW9yeSwgc2luY2UKKyAgICAgICAgaXQgd2lsbCBiZSBzb21lIHN1
YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBpcyBleHRlcm5hbC4KKworMjAxNi0wNi0yMyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFNuYXBzaG90cyBzaG91bGQgYmUgY2xlYXJlZCBhdCBzb21lIHBvaW50CiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5MDcKICAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI2MzczNjEwPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRl
eCA2OGQyZGMyLi4zMzZlMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAt
MTI0MCw2ICsxMjQwLDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKEhlYXBPcGVy
YXRpb24gY29sbGVjdGlvblR5cGUpCiAgICAgICAgIG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVj
dCA9IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QgKyBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwog
ICAgICAgICBtX2V4dHJhTWVtb3J5U2l6ZSA9IDA7CiAgICAgICAgIG1fZGVwcmVjYXRlZEV4dHJh
TWVtb3J5U2l6ZSA9IDA7CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorICAgICAgICBtX2V4
dGVybmFsTWVtb3J5U2l6ZSA9IDA7CisjZW5kaWYKIAogICAgICAgICBpZiAobV9mdWxsQWN0aXZp
dHlDYWxsYmFjaykKICAgICAgICAgICAgIG1fZnVsbEFjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xs
ZWN0KCk7CkBAIC0xNDUyLDYgKzE0NTUsMTAgQEAgdm9pZCBIZWFwOjpkaWRGaW5pc2hDb2xsZWN0
aW9uKGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICBlbHNlCiAgICAgICAgIG1fbGFzdEVkZW5HQ0xl
bmd0aCA9IGdjRW5kVGltZSAtIGdjU3RhcnRUaW1lOwogCisjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQorICAgIEFTU0VSVChleHRlcm5hbE1lbW9yeVNpemUoKSA8PSBleHRyYU1lbW9yeVNpemUo
KSk7CisjZW5kaWYKKwogICAgIGlmIChPcHRpb25zOjpyZWNvcmRHQ1BhdXNlVGltZXMoKSkKICAg
ICAgICAgSGVhcFN0YXRpc3RpY3M6OnJlY29yZEdDUGF1c2VUaW1lKGdjU3RhcnRUaW1lLCBnY0Vu
ZFRpbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggMzkzYjk3Mi4uYmE2MWY2
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMTc5LDYgKzE3OSwxMiBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwogICAgIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBjZWxsU3RhdGVCZWZvcmVWaXNp
dGluZywgc2l6ZV90KTsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICAvLyBVc2Ug
dGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMg
b3V0c2lkZSB0aGlzIHByb2Nlc3MuCisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0
ZWQoQ2VsbFN0YXRlIGNlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nLCBzaXplX3QpOworICAgIHNpemVf
dCBleHRlcm5hbE1lbW9yeVNpemUoKSB7IHJldHVybiBtX2V4dHJhTWVtb3J5U2l6ZTsgfQorI2Vu
ZGlmCisKICAgICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IG5vbi1HQyBtZW1vcnkgaWYgeW91
IGNhbid0IHVzZSB0aGUgYmV0dGVyIEFQSSBhYm92ZS4KICAgICB2b2lkIGRlcHJlY2F0ZWRSZXBv
cnRFeHRyYU1lbW9yeShzaXplX3QpOwogCkBAIC00NjIsNiArNDY4LDcgQEAgcHJpdmF0ZToKIAog
I2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2Nh
dGVkIHsgMCB9OworICAgIHNpemVfdCBtX2V4dGVybmFsTWVtb3J5U2l6ZSB7IDAgfTsKICNlbmRp
ZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggNzc0
OTU4MC4uNGNlOWM5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CkBAIC0xNDEsNiArMTQxLDIzIEBAIGlubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChDZWxsU3RhdGUgZGF0YUJlZm9yZVZpc2l0aW5nLCBzaXplX3QKICAgICB9CiB9CiAK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCitpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRl
cm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIGRhdGFCZWZvcmVWaXNpdGluZywgc2l6ZV90IHNp
emUpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dGVybmFs
IG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KKyAgICBp
ZiAob3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uICYmIGRhdGFCZWZvcmVW
aXNpdGluZyA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCisgICAgICAgIHJldHVybjsKKworICAgIHNp
emVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5U2l6ZTsKKworICAgIGZvciAoOzspIHsK
KyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSAqY291bnRlcjsKKyAgICAgICAgaWYgKFdURjo6d2Vh
a0NvbXBhcmVBbmRTd2FwKGNvdW50ZXIsIG9sZFNpemUsIG9sZFNpemUgKyBzaXplKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYKKwogaW5saW5lIHZvaWQgSGVhcDo6ZGVw
cmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KHNpemVfdCBzaXplKQogewogICAgIGlmIChzaXplID4g
bWluRXh0cmFNZW1vcnkpIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgK
aW5kZXggNTU5MDE1OS4uZTdjZDYzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCkBAIC0xMDksNiArMTA5LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29weUxhdGVy
KEpTQ2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCByZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
CisgICAgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyNlbmRpZgog
ICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyKik7CiAgICAgdm9pZCBhZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgKaW5kZXggYTM3OTIzOC4uOGFjNDlmYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKQEAgLTEwOSw2ICsxMDksMTMgQEAg
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qg
c2l6ZSkKICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX2N1cnJlbnRPYmpl
Y3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZywgc2l6ZSk7CiB9CiAKKyNpZiBFTkFCTEUoUkVTT1VS
Q0VfVVNBR0UpCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKHNpemVfdCBzaXplKQoreworICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nLCBzaXplKTsKK30K
KyNlbmRpZgorCiBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAogewogICAg
IHJldHVybiAmbV9oZWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA5ZmRmMGYuLmRlZGE2YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSw3NiBAQAogMjAxNi0wNi0yMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1lbW9yeSBUaW1lbGluZSBz
b21ldGltZXMgc2hvd3MgaW1wb3NzaWJsZSB2YWx1ZSBmb3IgYm1hbGxvYyBzaXplICh1bmRlcmZs
b3dlZCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODExMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjY0OTg1ODQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQW5kcmVhcyBLbGluZy4KKworICAgICAgICBJT1N1cmZhY2UgbWVtb3J5IGJhY2tpbmcg
Q2FudmFzIGVsZW1lbnQgYnVmZmVycyBzaG91bGQgYmUgY2xhc3NpZmllZCBhcyAiR0MgT3duZWQi
LAorICAgICAgICBidXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGEgcGFydCBvZiBibWFsbG9j
LiBJbiBmYWN0LCB0aGUgYWN0dWFsIG1lbW9yeSBjb3N0IGlzCisgICAgICAgIGV4dGVybmFsIHRv
IHRoZSBXZWIgQ29udGVudCBQcm9jZXNzLiBUaGUgbWFqb3JpdHkgb2YgZXh0cmEgbWVtb3J5IHJl
cG9ydGVycyB0ZW5kCisgICAgICAgIHRvIHJlcG9ydCBleHRyYSBtZW1vcnkgdGhhdCBpcyBhbHNv
IGFsbG9jYXRlZCBpbiBibWFsbG9jLiBIb3dldmVyLCBzb21lIHJlcG9ydAorICAgICAgICBub24t
Ym1hbGxvYyBtZW1vcnksIHN1Y2ggYXMgdGhlIElPU3VyZmFjZXMgaGVyZS4KKyAgICAgICAgCisg
ICAgICAgIENvbnRpbnVlIHRvIHJlcG9ydCB0aGUgbWVtb3J5IGNvc3Qgd2l0aG91dCBjaGFuZ2Vz
IHRvIGluZm9ybSB0aGUgSGVhcCBmb3IgZ2FyYmFnZQorICAgICAgICBjb2xsZWN0aW9uLiBIb3dl
dmVyLCBhbHNvIGtlZXAgYmV0dGVyIGFjY291bnRpbmcgb2YgR0NPd25lZCBtZW1vcnkgdGhhdCBp
cyBleHRlcm5hbAorICAgICAgICB0byB0aGUgcHJvY2VzcyBmb3IgYmV0dGVyIGFjY291bnRpbmcg
Zm9yIHRoZSBSZXNvdXJjZSBVc2FnZSBvdmVybGF5IGFuZCBXZWIgSW5zcGVjdG9yCisgICAgICAg
IE1lbW9yeSB0aW1lbGluZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBiaXQgb2YgYSBn
YW1lIHdoZXJlIHdlIHdhbnQgdG8gZGlzcGxheSB0aGUgYmVzdCBwb3NzaWJsZSBudW1iZXIgZm9y
CisgICAgICAgICJHQ093bmVkIG1lbW9yeSIgaW4gdGhlIHRvb2xzLCBidXQgc29tZSBvZiB0aGF0
IG1lbW9yeSBzaG93cyB1cCBpbiB0aGUgb3RoZXIKKyAgICAgICAgcmVnaW9ucyAoYm1hbGxvYywg
c3lzdGVtIG1hbGxvYywgZXRjKS4gQWxyZWFkeSBtYW55IHNpemVzIGFyZSBlc3RpbWF0ZXMKKyAg
ICAgICAgKFJlcG9ydEV4dHJhTWVtb3J5LCByZXBvcnRFeHRyYU1lbW9yeSBpZ25vcmVzIHNtYWxs
IGFsbG9jYXRpb25zKSwgc28gd2UganVzdCBmb2N1cworICAgICAgICBvbiBnZXR0aW5nIHRoZSBs
YXJnZXN0IHNvdXJjZXMgb2YgYWxsb2NhdGlvbnMsIHN1Y2ggYXMgQ2FudmFzIElPU3VyZmFjZXMg
aGVyZSwKKyAgICAgICAgaW50byB0aGUgcmlnaHQgYnVja2V0LiBSZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EgY29udGludWVzIHRvIHN1YnRyYWN0IHRoZSAiZXh0cmEiCisgICAgICAgIG1lbW9yeSBm
cm9tIGJtYWxsb2MuIFNvLCB3ZSBzaG91bGQgYWRkcmVzcyBvdGhlciBsYXJnZSBzb3VyY2VzIG9m
ICJleHRyYSBtZW1vcnkiCisgICAgICAgIG5vdCBpbiBibWFsbG9jLiBBIGxpa2VseSBjYW5kaWRh
dGUgaXMgSFRNTE1lZGlhRWxlbWVudCB3aGljaCB1c2VzIHRoZSBkZXByZWNhdGVkCisgICAgICAg
IHJlcG9ydGluZyByaWdodCBub3cuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgIEFkZCBhIHdh
eSB0byByZXBvcnQgRXh0ZXJuYWwgbWVtb3J5LCBkZXBlbmRlbnQgb24gcmVwb3J0aW5nIEV4dHJh
IG1lbW9yeS4KKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaWRsOgorICAgICAgICBSZXBvcnQgZXh0ZXJuYWwgbWVtb3J5IGNvc3QganVzdCBs
aWtlIGV4dHJhIG1lbW9yeS4KKworICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRh
KToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpNZW1vcnlDYXRlZ29yeUluZm86OnRvdGFsU2l6ZSk6CisgICAgICAgICogcGFnZS9jb2NvYS9S
ZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmluZ0J1ZmZl
cjo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kRGF0YVRvSGlzdG9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1EcmF3KToKKyAgICAgICAg
KiBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmNhdGVnb3J5Rm9yVk1UYWcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRo
cmVhZDo6cGxhdGZvcm1UaHJlYWRCb2R5KToKKyAgICAgICAgRG8gbm90IGNvdW50IHRoZSBHQ093
bmVkIEV4dGVybmFsIG1lbW9yeSBhcyBkaXJ0eSBtZW1vcnkuCisgICAgICAgIEluY2x1ZGUgRXh0
ZXJuYWwgbWVtb3J5IG91dHB1dCBpbiB0aGUgb3ZlcmxheS4KKworICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JN
ZW1vcnlBZ2VudDo6Y29sbGVjdFNhbXBsZSk6CisgICAgICAgIFdoZW4gc2l6aW5nIHRoZSBKYXZh
U2NyaXB0IHBvcnRpb24sIGluY2x1ZGUgYm90aCB0aGUgR0MgT3duZWQKKyAgICAgICAgY2F0ZWdv
cnkncyBkaXJ0eSBhbmQgZXh0ZXJuYWwgbWVtb3J5LiBVbHRpbWF0ZWx5IHdlIHdpbGwKKyAgICAg
ICAgd2FudCB0aGlzIGV2ZXJ5d2hlcmUgaW4gY2FzZSB0aGluZ3MgY2hhbmdlLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpleHRlcm5hbE1lbW9yeUNvc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgUmVwb3J0IElPU3VyZmFjZSB0b3RhbCBieXRlcyBh
cyBleHRyYSBtZW1vcnkgYW5kIGV4dGVybmFsIG1lbW9yeQorICAgICAgICBzbyB0aGF0IGl0IGNh
biBiZSB0cmFja2VkIGFzIEdDIE93bmVkIG1lbW9yeSB0aGF0IGlzIHNlcGFyYXRlIGZyb20KKyAg
ICAgICAgcmVndWxhciAoYm1hbGxvYy9vdGhlcikgaW4gcHJvY2VzcyBtZW1vcnkuCisKKzIwMTYt
MDYtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBmaXJzdCBoZWFwIHNuYXBzaG90IHRha2VuIHdoZW4gYSBwYWdlIGlzIHJl
bG9hZGVkIGhhcHBlbnMgYmVmb3JlIHRoZSByZWxvYWQgbmF2aWdhdGlvbgogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4OTk1CiAgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNjkyMzc3OD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggYWZiNmY3Ni4uMmUyYjU5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAg
LTMyNDUsNiArMzI0NSwxMSBAQCBFTkQKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
dGhpc09iamVjdC0+dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7XG4iKSBpZiAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21NYXJrRnVuY3Rpb24ifTsKICAg
ICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBvcnRFeHRyYU1l
bW9yeUNvc3QifSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+d3JhcHBlZCgpLm1lbW9yeUNv
c3QoKSk7XG4iKTsKKyAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiUmVwb3J0RXh0ZXJuYWxNZW1vcnlDb3N0In0pIHs7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKVxuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdmlzaXRvci5yZXBvcnRFeHRlcm5hbE1l
bW9yeVZpc2l0ZWQodGhpc09iamVjdC0+d3JhcHBlZCgpLmV4dGVybmFsTWVtb3J5Q29zdCgpKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG4iKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMg
PiAwKSB7CiAgICAgICAgICAgICBmb3JlYWNoIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4
dAppbmRleCAzMThjMjBlLi40ZWMzM2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTExNCw2ICsxMTQsNyBAQCBSYWlzZXNF
eGNlcHRpb25XaXRoTWVzc2FnZQogUmVmbGVjdD0qCiBSZXBsYWNlYWJsZQogUmVwb3J0RXh0cmFN
ZW1vcnlDb3N0CitSZXBvcnRFeHRlcm5hbE1lbW9yeUNvc3QKIFJlcXVpcmVzRXhpc3RpbmdBdG9t
aWNTdHJpbmcKIFNldHRlclJhaXNlc0V4Y2VwdGlvbgogU2V0dGVyUmFpc2VzRXhjZXB0aW9uV2l0
aE1lc3NhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
MGU5MmQ5MC4uODUzMGJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAKQEAgLTU4OSw2ICs1ODksMTMgQEAgc2l6ZV90IEhUTUxDYW52YXNFbGVtZW50OjptZW1v
cnlDb3N0KCkgY29uc3QKICAgICByZXR1cm4gNCAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6
ZSgpLndpZHRoKCkgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKIH0K
IAorc2l6ZV90IEhUTUxDYW52YXNFbGVtZW50OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAor
eworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IDQgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFnZUJ1ZmZl
ci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Cit9CisKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQog
ewogICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBmZTY5NmE0
Li45MmYyNjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0x
MzYsNiArMTM2LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyByZXBsYXlE
aXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MpIGNvbnN0OwogCiAgICAg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCmluZGV4IGYzNTQyYTIuLmE4ZjE4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaWRsCkBAIC0yNiw3ICsyNiw4IEBACiAKIFsKICAgICBKU0dlbmVyYXRl
VG9OYXRpdmVPYmplY3QsCi0gICAgUmVwb3J0RXh0cmFNZW1vcnlDb3N0CisgICAgUmVwb3J0RXh0
cmFNZW1vcnlDb3N0LAorICAgIFJlcG9ydEV4dGVybmFsTWVtb3J5Q29zdCwKIF0gaW50ZXJmYWNl
IEhUTUxDYW52YXNFbGVtZW50IDogSFRNTEVsZW1lbnQgewogI2lmIGRlZmluZWQoTEFOR1VBR0Vf
T0JKRUNUSVZFX0MpICYmIExBTkdVQUdFX09CSkVDVElWRV9DIHx8IGRlZmluZWQoTEFOR1VBR0Vf
R09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAogICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAK
aW5kZXggNzAyZmFkNC4uZWJmOWMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC0xMDcsMzIgKzEwNywzMiBAQCB2b2lkIElu
c3BlY3Rvck1lbW9yeUFnZW50Ojpjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
JiBkYXRhKQogewogICAgIGF1dG8gamF2YXNjcmlwdENhdGVnb3J5ID0gUHJvdG9jb2w6Ok1lbW9y
eTo6Q2F0ZWdvcnlEYXRhOjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TWVt
b3J5OjpDYXRlZ29yeURhdGE6OlR5cGU6OkphdmFzY3JpcHQpCi0gICAgICAgIC5zZXRTaXplKGRh
dGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6R0NIZWFwXS5kaXJ0eVNpemUgKyBkYXRhLmNh
dGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkdDT3duZWRdLmRpcnR5U2l6ZSkKKyAgICAgICAgLnNl
dFNpemUoZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpHQ0hlYXBdLnRvdGFsU2l6ZSgp
ICsgZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpHQ093bmVkXS50b3RhbFNpemUoKSkK
ICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gaml0Q2F0ZWdvcnkgPSBQcm90b2NvbDo6
TWVtb3J5OjpDYXRlZ29yeURhdGE6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUeXBlKFByb3RvY29s
OjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6VHlwZTo6SklUKQotICAgICAgICAuc2V0U2l6ZShkYXRh
LmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklUXS5kaXJ0eVNpemUpCisgICAgICAgIC5z
ZXRTaXplKGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNKSVRdLnRvdGFsU2l6ZSgp
KQogICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgYXV0byBpbWFnZXNDYXRlZ29yeSA9IFByb3Rv
Y29sOjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFR5cGUoUHJv
dG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlEYXRhOjpUeXBlOjpJbWFnZXMpCi0gICAgICAgIC5zZXRT
aXplKGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzXS5kaXJ0eVNpemUpCisg
ICAgICAgIC5zZXRTaXplKGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzXS50
b3RhbFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gbGF5ZXJzQ2F0ZWdv
cnkgPSBQcm90b2NvbDo6TWVtb3J5OjpDYXRlZ29yeURhdGE6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6VHlwZTo6TGF5ZXJzKQotICAg
ICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10uZGly
dHlTaXplKQorICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6
OkxheWVyc10udG90YWxTaXplKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHBh
Z2VDYXRlZ29yeSA9IFByb3RvY29sOjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlEYXRhOjpUeXBlOjpQYWdl
KQotICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OmJtYWxs
b2NdLmRpcnR5U2l6ZSArIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxv
Y10uZGlydHlTaXplKQorICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0
ZWdvcnk6OmJtYWxsb2NdLnRvdGFsU2l6ZSgpICsgZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVn
b3J5OjpMaWJjTWFsbG9jXS50b3RhbFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
IGF1dG8gb3RoZXJDYXRlZ29yeSA9IFByb3RvY29sOjpNZW1vcnk6OkNhdGVnb3J5RGF0YTo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok1lbW9yeTo6Q2F0ZWdvcnlEYXRhOjpU
eXBlOjpPdGhlcikKLSAgICAgICAgLnNldFNpemUoZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVn
b3J5OjpPdGhlcl0uZGlydHlTaXplKQorICAgICAgICAuc2V0U2l6ZShkYXRhLmNhdGVnb3JpZXNb
TWVtb3J5Q2F0ZWdvcnk6Ok90aGVyXS50b3RhbFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsK
IAogICAgIGF1dG8gY2F0ZWdvcmllcyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6TWVtb3J5
OjpDYXRlZ29yeURhdGE+OjpjcmVhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVz
YWdlRGF0YS5jcHAKaW5kZXggYzk3NTljYy4uNTkxMmIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAgUmVzb3VyY2VVc2FnZURh
dGE6OlJlc291cmNlVXNhZ2VEYXRhKCkKIFJlc291cmNlVXNhZ2VEYXRhOjpSZXNvdXJjZVVzYWdl
RGF0YShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYgb3RoZXIpCiAgICAgOiBjcHUob3RoZXIuY3B1
KQogICAgICwgdG90YWxEaXJ0eVNpemUob3RoZXIudG90YWxEaXJ0eVNpemUpCisgICAgLCB0b3Rh
bEV4dGVybmFsU2l6ZShvdGhlci50b3RhbEV4dGVybmFsU2l6ZSkKICAgICAsIHRpbWVPZk5leHRF
ZGVuQ29sbGVjdGlvbihvdGhlci50aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24pCiAgICAgLCB0aW1l
T2ZOZXh0RnVsbENvbGxlY3Rpb24ob3RoZXIudGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCmluZGV4IDFjODA5NDQuLmQ4ZTdj
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKQEAgLTUyLDggKzUy
LDExIEBAIHN0cnVjdCBNZW1vcnlDYXRlZ29yeUluZm8gewogICAgIHsKICAgICB9CiAKKyAgICBz
aXplX3QgdG90YWxTaXplKCkgY29uc3QgeyByZXR1cm4gZGlydHlTaXplICsgZXh0ZXJuYWxTaXpl
OyB9CisKICAgICBzaXplX3QgZGlydHlTaXplIHsgMCB9OwogICAgIHNpemVfdCByZWNsYWltYWJs
ZVNpemUgeyAwIH07CisgICAgc2l6ZV90IGV4dGVybmFsU2l6ZSB7IDAgfTsKICAgICBib29sIGlz
U3ViY2F0ZWdvcnkgeyBmYWxzZSB9OwogICAgIHVuc2lnbmVkIHR5cGUgeyBNZW1vcnlDYXRlZ29y
eTo6TnVtYmVyT2ZDYXRlZ29yaWVzIH07CiB9OwpAQCAtNjQsNiArNjcsNyBAQCBzdHJ1Y3QgUmVz
b3VyY2VVc2FnZURhdGEgewogCiAgICAgZmxvYXQgY3B1IHsgMCB9OwogICAgIHNpemVfdCB0b3Rh
bERpcnR5U2l6ZSB7IDAgfTsKKyAgICBzaXplX3QgdG90YWxFeHRlcm5hbFNpemUgeyAwIH07CiAg
ICAgc3RkOjphcnJheTxNZW1vcnlDYXRlZ29yeUluZm8sIE1lbW9yeUNhdGVnb3J5OjpOdW1iZXJP
ZkNhdGVnb3JpZXM+IGNhdGVnb3JpZXM7CiAgICAgZG91YmxlIHRpbWVPZk5leHRFZGVuQ29sbGVj
dGlvbiB7IDAgfTsKICAgICBkb3VibGUgdGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uIHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tCmluZGV4IGEyM2U2YjEuLjVlODQ4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KQEAgLTEzOCw2
ICsxMzgsNyBAQCBzdHJ1Y3QgSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8gewogICAgIFJldGFp
blB0cjxDR0NvbG9yUmVmPiBjb2xvcjsKICAgICBSaW5nQnVmZmVyPHNpemVfdD4gZGlydHlTaXpl
OwogICAgIFJpbmdCdWZmZXI8c2l6ZV90PiByZWNsYWltYWJsZVNpemU7CisgICAgUmluZ0J1ZmZl
cjxzaXplX3Q+IGV4dGVybmFsU2l6ZTsKICAgICBib29sIGlzU3ViY2F0ZWdvcnkgeyBmYWxzZSB9
OwogICAgIHVuc2lnbmVkIHR5cGUgeyBNZW1vcnlDYXRlZ29yeTo6TnVtYmVyT2ZDYXRlZ29yaWVz
IH07CiB9OwpAQCAtMTQ3LDYgKzE0OCw3IEBAIHN0cnVjdCBIaXN0b3JpY1Jlc291cmNlVXNhZ2VE
YXRhIHsKIAogICAgIFJpbmdCdWZmZXI8ZmxvYXQ+IGNwdTsKICAgICBSaW5nQnVmZmVyPHNpemVf
dD4gdG90YWxEaXJ0eVNpemU7CisgICAgUmluZ0J1ZmZlcjxzaXplX3Q+IHRvdGFsRXh0ZXJuYWxT
aXplOwogICAgIFJpbmdCdWZmZXI8c2l6ZV90PiBnY0hlYXBTaXplOwogICAgIHN0ZDo6YXJyYXk8
SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8sIE1lbW9yeUNhdGVnb3J5OjpOdW1iZXJPZkNhdGVn
b3JpZXM+IGNhdGVnb3JpZXM7CiAgICAgZG91YmxlIHRpbWVPZk5leHRFZGVuQ29sbGVjdGlvbiB7
IDAgfTsKQEAgLTE4OSw5ICsxOTEsMTEgQEAgc3RhdGljIHZvaWQgYXBwZW5kRGF0YVRvSGlzdG9y
eShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkKICAgICBhdXRvJiBoaXN0b3JpY0RhdGEg
PSBoaXN0b3JpY1VzYWdlRGF0YSgpOwogICAgIGhpc3RvcmljRGF0YS5jcHUuYXBwZW5kKGRhdGEu
Y3B1KTsKICAgICBoaXN0b3JpY0RhdGEudG90YWxEaXJ0eVNpemUuYXBwZW5kKGRhdGEudG90YWxE
aXJ0eVNpemUpOworICAgIGhpc3RvcmljRGF0YS50b3RhbEV4dGVybmFsU2l6ZS5hcHBlbmQoZGF0
YS50b3RhbEV4dGVybmFsU2l6ZSk7CiAgICAgZm9yIChhdXRvJiBjYXRlZ29yeSA6IGhpc3Rvcmlj
RGF0YS5jYXRlZ29yaWVzKSB7CiAgICAgICAgIGNhdGVnb3J5LmRpcnR5U2l6ZS5hcHBlbmQoZGF0
YS5jYXRlZ29yaWVzW2NhdGVnb3J5LnR5cGVdLmRpcnR5U2l6ZSk7CiAgICAgICAgIGNhdGVnb3J5
LnJlY2xhaW1hYmxlU2l6ZS5hcHBlbmQoZGF0YS5jYXRlZ29yaWVzW2NhdGVnb3J5LnR5cGVdLnJl
Y2xhaW1hYmxlU2l6ZSk7CisgICAgICAgIGNhdGVnb3J5LmV4dGVybmFsU2l6ZS5hcHBlbmQoZGF0
YS5jYXRlZ29yaWVzW2NhdGVnb3J5LnR5cGVdLmV4dGVybmFsU2l6ZSk7CiAgICAgfQogICAgIGhp
c3RvcmljRGF0YS50aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24gPSBkYXRhLnRpbWVPZk5leHRFZGVu
Q29sbGVjdGlvbjsKICAgICBoaXN0b3JpY0RhdGEudGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uID0g
ZGF0YS50aW1lT2ZOZXh0RnVsbENvbGxlY3Rpb247CkBAIC00NDgsMTEgKzQ1MiwxNyBAQCB2b2lk
IFJlc291cmNlVXNhZ2VPdmVybGF5OjpwbGF0Zm9ybURyYXcoQ0dDb250ZXh0UmVmIGNvbnRleHQp
CiAgICAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JGb3JMYWJlbHMgPSBjcmVhdGVDb2xvcigwLjks
IDAuOSwgMC45LCAxKTsKICAgICBzaG93VGV4dChjb250ZXh0LCAxMCwgMjAsIGNvbG9yRm9yTGFi
ZWxzLCBTdHJpbmc6OmZvcm1hdCgiICAgICAgICBDUFU6ICVnIiwgZGF0YS5jcHUubGFzdCgpKSk7
CiAgICAgc2hvd1RleHQoY29udGV4dCwgMTAsIDMwLCBjb2xvckZvckxhYmVscywgIiAgRm9vdHBy
aW50OiAiICsgZm9ybWF0Qnl0ZU51bWJlcihkYXRhLnRvdGFsRGlydHlTaXplLmxhc3QoKSkpOwor
ICAgIHNob3dUZXh0KGNvbnRleHQsIDEwLCA0MCwgY29sb3JGb3JMYWJlbHMsICIgICBFeHRlcm5h
bDogIiArIGZvcm1hdEJ5dGVOdW1iZXIoZGF0YS50b3RhbEV4dGVybmFsU2l6ZS5sYXN0KCkpKTsK
IAotICAgIGZsb2F0IHkgPSA1MDsKKyAgICBmbG9hdCB5ID0gNTU7CiAgICAgZm9yIChhdXRvJiBj
YXRlZ29yeSA6IGRhdGEuY2F0ZWdvcmllcykgewotICAgICAgICBTdHJpbmcgbGFiZWwgPSBTdHJp
bmc6OmZvcm1hdCgiJSAxMXM6ICVzIiwgY2F0ZWdvcnkubmFtZS5hc2NpaSgpLmRhdGEoKSwgZm9y
bWF0Qnl0ZU51bWJlcihjYXRlZ29yeS5kaXJ0eVNpemUubGFzdCgpKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIHNpemVfdCBkaXJ0eSA9IGNhdGVnb3J5LmRpcnR5U2l6ZS5sYXN0KCk7CiAgICAg
ICAgIHNpemVfdCByZWNsYWltYWJsZSA9IGNhdGVnb3J5LnJlY2xhaW1hYmxlU2l6ZS5sYXN0KCk7
CisgICAgICAgIHNpemVfdCBleHRlcm5hbCA9IGNhdGVnb3J5LmV4dGVybmFsU2l6ZS5sYXN0KCk7
CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbGFiZWwgPSBTdHJpbmc6OmZvcm1hdCgiJSAxMXM6
ICVzIiwgY2F0ZWdvcnkubmFtZS5hc2NpaSgpLmRhdGEoKSwgZm9ybWF0Qnl0ZU51bWJlcihkaXJ0
eSkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBpZiAoZXh0ZXJuYWwpCisgICAgICAgICAgICBs
YWJlbCA9IGxhYmVsICsgU3RyaW5nOjpmb3JtYXQoIiArICVzIiwgZm9ybWF0Qnl0ZU51bWJlcihl
eHRlcm5hbCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBpZiAocmVjbGFpbWFibGUpCiAgICAg
ICAgICAgICBsYWJlbCA9IGxhYmVsICsgU3RyaW5nOjpmb3JtYXQoIiBbJXNdIiwgZm9ybWF0Qnl0
ZU51bWJlcihyZWNsYWltYWJsZSkuYXNjaWkoKS5kYXRhKCkpOwogCkBAIC00NjAsNiArNDcwLDcg
QEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1EcmF3KENHQ29udGV4dFJlZiBj
b250ZXh0KQogICAgICAgICBzaG93VGV4dChjb250ZXh0LCAxMCwgeSwgY2F0ZWdvcnkuY29sb3Iu
Z2V0KCksIGxhYmVsKTsKICAgICAgICAgeSArPSAxMDsKICAgICB9CisgICAgeSAtPSA1OwogCiAg
ICAgZG91YmxlIG5vdyA9IFdURjo6Y3VycmVudFRpbWUoKTsKICAgICBzaG93VGV4dChjb250ZXh0
LCAxMCwgeSArIDEwLCBjb2xvckZvckxhYmVscywgU3RyaW5nOjpmb3JtYXQoIiAgICBFZGVuIEdD
OiAlcyIsIGdjVGltZXJTdHJpbmcoZGF0YS50aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24sIG5vdyku
YXNjaWkoKS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9S
ZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0KaW5kZXggNTNmZjg3Ny4uZDQ3YzQ4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29j
b2EubW0KQEAgLTE5NSw3ICsxOTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2F0ZWdvcnlGb3JWTVRh
Zyh1bnNpZ25lZCB0YWcpCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVn
b3J5OjpPdGhlcjsKICAgICB9Ci19OworfQogCiB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnBs
YXRmb3JtVGhyZWFkQm9keShKU0M6OlZNKiB2bSwgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCiB7
CkBAIC0yMTksMTQgKzIxOSwyMSBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnBsYXRmb3Jt
VGhyZWFkQm9keShKU0M6OlZNKiB2bSwgUmVzb3VyY2VVc2FnZURhdGEmIGRhdAogICAgIGRhdGEu
dG90YWxEaXJ0eVNpemUgPSB0b3RhbERpcnR5UGFnZXMgKiB2bVBhZ2VTaXplKCk7CiAKICAgICBz
aXplX3QgY3VycmVudEdDSGVhcENhcGFjaXR5ID0gdm0tPmhlYXAuYmxvY2tCeXRlc0FsbG9jYXRl
ZCgpOwotICAgIHNpemVfdCBjdXJyZW50R0NPd25lZCA9IHZtLT5oZWFwLmV4dHJhTWVtb3J5U2l6
ZSgpOworICAgIHNpemVfdCBjdXJyZW50R0NPd25lZEV4dHJhID0gdm0tPmhlYXAuZXh0cmFNZW1v
cnlTaXplKCk7CisgICAgc2l6ZV90IGN1cnJlbnRHQ093bmVkRXh0ZXJuYWwgPSB2bS0+aGVhcC5l
eHRlcm5hbE1lbW9yeVNpemUoKTsKKyAgICBBU1NFUlQoY3VycmVudEdDT3duZWRFeHRlcm5hbCA8
PSBjdXJyZW50R0NPd25lZEV4dHJhKTsKIAogICAgIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRl
Z29yeTo6R0NIZWFwXS5kaXJ0eVNpemUgPSBjdXJyZW50R0NIZWFwQ2FwYWNpdHk7Ci0gICAgZGF0
YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpHQ093bmVkXS5kaXJ0eVNpemUgPSBjdXJyZW50
R0NPd25lZDsKKyAgICBkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkdDT3duZWRdLmRp
cnR5U2l6ZSA9IGN1cnJlbnRHQ093bmVkRXh0cmEgLSBjdXJyZW50R0NPd25lZEV4dGVybmFsOwor
ICAgIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6R0NPd25lZF0uZXh0ZXJuYWxTaXpl
ID0gY3VycmVudEdDT3duZWRFeHRlcm5hbDsKIAogICAgIC8vIFN1YnRyYWN0IGtub3duIHN1YmNo
dW5rcyBmcm9tIHRoZSBibWFsbG9jIGJ1Y2tldC4KICAgICAvLyBGSVhNRTogSGFuZGxlIHJ1bm5p
bmcgd2l0aCBibWFsbG9jIGRpc2FibGVkLgotICAgIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRl
Z29yeTo6Ym1hbGxvY10uZGlydHlTaXplIC09IGN1cnJlbnRHQ0hlYXBDYXBhY2l0eSArIGN1cnJl
bnRHQ093bmVkOworICAgIHNpemVfdCBjdXJyZW50R0NPd25lZEdlbmVyYWxseUluQm1hbGxvYyA9
IGN1cnJlbnRHQ093bmVkRXh0cmEgLSBjdXJyZW50R0NPd25lZEV4dGVybmFsOworICAgIEFTU0VS
VChjdXJyZW50R0NPd25lZEdlbmVyYWxseUluQm1hbGxvYyA8IGRhdGEuY2F0ZWdvcmllc1tNZW1v
cnlDYXRlZ29yeTo6Ym1hbGxvY10uZGlydHlTaXplKTsKKyAgICBkYXRhLmNhdGVnb3JpZXNbTWVt
b3J5Q2F0ZWdvcnk6OmJtYWxsb2NdLmRpcnR5U2l6ZSAtPSBjdXJyZW50R0NIZWFwQ2FwYWNpdHkg
KyBjdXJyZW50R0NPd25lZEdlbmVyYWxseUluQm1hbGxvYzsKKworICAgIGRhdGEudG90YWxFeHRl
cm5hbFNpemUgPSBjdXJyZW50R0NPd25lZEV4dGVybmFsOwogCiAgICAgZGF0YS50aW1lT2ZOZXh0
RWRlbkNvbGxlY3Rpb24gPSB2bS0+aGVhcC5lZGVuQWN0aXZpdHlDYWxsYmFjaygpLT5uZXh0Rmly
ZVRpbWUoKTsKICAgICBkYXRhLnRpbWVPZk5leHRGdWxsQ29sbGVjdGlvbiA9IHZtLT5oZWFwLmZ1
bGxBY3Rpdml0eUNhbGxiYWNrKCktPm5leHRGaXJlVGltZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDUyNzFhODEuLjVhZTJh
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKQEAgLTE5Nyw0ICsxOTcsMTYgQEAgYm9vbCBJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxl
V2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIHJl
dHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29u
dGV4dCgpLnNjYWxlRmFjdG9yKCkpOwogfQogCisjaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCitzaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorewor
ICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhl
aWdodCgpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNjM5YzI4Zi4uZTkwY2ZkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBA
IC0xMjcsNiArMTI3LDkgQEAgcHVibGljOgogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
KCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CisgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworCiAgICAgLy8gRklYTUU6IGN1cnJl
bnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRo
YXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBS
R0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KICAgICBib29sIGNvcHlUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEZW51bSwgYm9vbCwgYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IDFjYzM0YWIuLjg0YjU3NTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0cuY3BwCkBAIC0xNjAsNiArMTYwLDIyIEBAIEZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6
c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXplKSBjb25zdAog
ICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7CiB9CiAKKyNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQorc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9kYXRhLnN1cmZhY2UpCisgICAgICAgIHJldHVybiBtX2RhdGEu
c3VyZmFjZS0+dG90YWxCeXRlcygpOworICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lk
dGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXI6
OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZGF0YS5zdXJmYWNlKQor
ICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKKyAgICByZXR1cm4g
MDsKK30KKyNlbmRpZgorCiBHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkg
Y29uc3QKIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAppbmRl
eCA1YTllNDFkLi4xMmVjY2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>