<?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>159451</bug_id>
          
          <creation_ts>2016-07-05 23:09:19 -0700</creation_ts>
          <short_desc>Rename VM stack limit fields to better describe their purpose.</short_desc>
          <delta_ts>2016-07-07 22:11:18 -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>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159442</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1208081</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-05 23:09:19 -0700</bug_when>
    <thetext>This is in preparation for an upcoming patch that changes what stack limit values are used under various circumstances.  This patch aims to do minimal work to rename the fields so that it will be easier to reason about the upcoming patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208083</commentid>
    <comment_count>1</comment_count>
      <attachid>282852</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-05 23:15:07 -0700</bug_when>
    <thetext>Created attachment 282852
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208265</commentid>
    <comment_count>2</comment_count>
      <attachid>282852</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-07-06 10:14:00 -0700</bug_when>
    <thetext>Comment on attachment 282852
proposed patch.

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

r=me with comment.

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        In this patch, we will make the following changes:
&gt; +
&gt; +        1. Renamed VM::m_stackLimit to VM::m_jsCPUStackLimit.

Nit: You use the future tense for &quot;we will make&quot; then you use the past tense in the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208267</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-06 10:18:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Nit: You use the future tense for &quot;we will make&quot; then you use the past tense
&gt; in the list.

Thanks.  I fixed the tenses locally.  Will land soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208268</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-06 10:20:28 -0700</bug_when>
    <thetext>Landed in r202862: &lt;http://trac.webkit.org/r202862&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208271</commentid>
    <comment_count>5</comment_count>
      <attachid>282852</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-07-06 10:31:46 -0700</bug_when>
    <thetext>Comment on attachment 282852
proposed patch.

I find these names super confusing.

The CPU does not have a stack, so a &quot;CPU stack limit&quot; is a strange concept.

An &quot;emulated stack&quot; is an interesting concept, but nothing in the rest of the engine uses that phrase.

In general, solving a naming problem by adding more names is usually moving in the wrong direction.

My understanding is that we have three values:

(1) Stack limit. The true limit beyond which the OS will kill us.

(2) Stack limit with reserve. A more conservative limit we usually check in order to reserve some memory for host code.

(3) CLoop stack limit. A separate limit that only applies when we&apos;re running in LLInt and using the CLoop.

I think we should come up with names we like for (1), (2), and (3). We&apos;ll know that we have good names when the words we use to describe these things appear in their names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208272</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-07-06 10:32:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
...And appear elsewhere in our code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208612</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-07 07:37:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 282852 [details]
&gt; proposed patch.
&gt; 
&gt; I find these names super confusing.
&gt; 
&gt; The CPU does not have a stack, so a &quot;CPU stack limit&quot; is a strange concept.

I&apos;m not married to the term &quot;CPUStack&quot;.  My purpose is to distinguish it from the &quot;EmulatedStack&quot; in that one is used by the CPU natively, and one is emulated / non-native by the interpreter.  I had toyed with &quot;CStack&quot; (as in used by C/C++ code) vs &quot;CLoopStack&quot; (as in used by the CLoop) but didn&apos;t like the sound of those.

How about &quot;MachineStack&quot; instead?  We have a file MachineStackMarker.h/cpp that applies the concept of &quot;MachineStack&quot; being the one used by C/C++ code.  I can contrast that with &quot;EmulatedStack&quot; or &quot;CLoopStack&quot;.

 
&gt; An &quot;emulated stack&quot; is an interesting concept, but nothing in the rest of
&gt; the engine uses that phrase.

There is nothing in the rest of the engine that need to explicitly distinguish the CLoop / Emulated stack from the C++ / Machine stack.  Only this code does.  Hence, I don&apos;t think this should be a limiting factor.


&gt; In general, solving a naming problem by adding more names is usually moving
&gt; in the wrong direction.
&gt; 
&gt; My understanding is that we have three values:
&gt; 
&gt; (1) Stack limit. The true limit beyond which the OS will kill us.
&gt; 
&gt; (2) Stack limit with reserve. A more conservative limit we usually check in
&gt; order to reserve some memory for host code.
&gt; 
&gt; (3) CLoop stack limit. A separate limit that only applies when we&apos;re running
&gt; in LLInt and using the CLoop.

We have a term for (1) already.  It&apos;s the stack bounds.  Historically, we&apos;ve been using &quot;limit&quot; to mean (2) or (3) depending on whether we are using the CLoop or not.  We could change these to use &quot;ReserveLimit&quot; or &quot;AllowedLimit&quot; or some such term, but I think that is not necessary because this is the only limit concept we use for stacks in the majority of our code, and it is nicer to write &quot;Limit&quot; then &quot;ReserveLimit&quot; (especially when we&apos;re not normally contrasting between the 2).

So, how about we leave (1) to StackBounds, and use &quot;MachineStackLimit&quot; for (2) and &quot;EmulatedStackLimit&quot; / &quot;CLoopStackLimit&quot; for (3)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208821</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-07-07 15:17:52 -0700</bug_when>
    <thetext>Let&apos;s consider CLoop first.

Our name for the CLoop stack is &quot;JSStack&quot;. (See JSStack.h) That&apos;s why the limit was named &quot;JSStack limit&quot;.

You&apos;ve added a new name: EmulatedStack. So, now we have three names for the same thing: CLoop stack; JSStack; EmulatedStack.

As a matter of principle, I hope you&apos;ll agree that the point of a name is to identify a thing, and that having three names for the same thing contradicts that point and harms readability.

So, let&apos;s pick a name that we like and use it everywhere, so we can recover the value of naming things: identification.

I&apos;m sympathetic to not liking &quot;JSStack&quot; and &quot;JSStack limit&quot; since they&apos;re pretty abstract, and they doesn&apos;t really communicate their unique use in the CLoop.

I suggest renaming &quot;JSStack&quot; to &quot;CLoopStack&quot; and renaming &quot;JSStack limit&quot; -- which is now called &quot;emulated stack limit&quot; to &quot;CLoopStackLimit&quot;. 

You could also achieve one name by going the other way and renaming &quot;JSStack&quot; to &quot;EmulatedStack&quot; and &quot;JSStack limit&quot; to &quot;EmulatedStackLimit&quot;. But that retains the problem that &quot;emulated stack&quot; is an abstract phrase that doesn&apos;t really say what it&apos;s used for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208965</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-07 22:11:18 -0700</bug_when>
    <thetext>To follow up, Geoff and I talked thru the naming issue and the confusion with JSStack&apos;s role.  I&apos;ll address them in the following bugs:

https://bugs.webkit.org/show_bug.cgi?id=159544
Rename jsCPUStackLimit to osStackLimitWithReserve and jsEmulatedStackLimit to cloopStackLimit.

https://bugs.webkit.org/show_bug.cgi?id=159545
Refactor JSStack to only be the stack data structure for the C Loop.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282852</attachid>
            <date>2016-07-05 23:15:07 -0700</date>
            <delta_ts>2016-07-07 07:19:42 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-159451.patch</filename>
            <type>text/plain</type>
            <size>23142</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAyODQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBA
CisyMDE2LTA3LTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgVk0gc3RhY2sgbGltaXQgZmllbGRzIHRvIGJldHRlciBkZXNjcmliZSB0aGVpciBwdXJw
b3NlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5
NDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgYW4gdXBjb21pbmcgcGF0Y2ggdGhhdCBjaGFuZ2VzIHdo
YXQgc3RhY2sgbGltaXQgdmFsdWVzCisgICAgICAgIGFyZSB1c2VkIHVuZGVyIHZhcmlvdXMgY2ly
Y3Vtc3RhbmNlcy4gIFRoaXMgcGF0Y2ggYWltcyB0byBkbyBzb21lIG1pbmltYWwgd29yayB0bwor
ICAgICAgICByZW5hbWUgdGhlIGZpZWxkcyBzbyB0aGF0IGl0IHdpbGwgYmUgZWFzaWVyIHRvIHJl
YXNvbiBhYm91dCB0aGUgdXBjb21pbmcgcGF0Y2guCisgICAgCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIHdpbGwgbWFrZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisKKyAgICAgICAgMS4gUmVu
YW1lZCBWTTo6bV9zdGFja0xpbWl0IHRvIFZNOjptX2pzQ1BVU3RhY2tMaW1pdC4KKworICAgICAg
ICAyLiBWTTo6bV9qc1N0YWNrTGltaXQgdXNlZCB0byBoYXZlIGFuIG92ZXJsb2FkZWQgbWVhbmlu
ZzoKKyAgICAgICAgICAgYS4gRm9yIEpJVCBidWlsZHMsIG1fanNTdGFja0xpbWl0IGlzIHN5bm9u
eW1vdXMgd2l0aCBtX3N0YWNrTGltaXQuCisgICAgICAgICAgIGIuIEZvciBDIExvb3AgYnVpbGRz
LCBtX2pzU3RhY2tMaW1pdCBpcyBhIHNlcGFyYXRlIHBvaW50ZXIgdGhhdCBwb2ludHMgdG8gdGhl
CisgICAgICAgICAgICAgIGVtdWxhdGVkIEpTIHN0YWNrIHRoYXQgdGhlIEMgTG9vcCB1c2VzLgor
CisgICAgICAgICAgIEluIHBsYWNlIG9mIG1fanNTdGFja0xpbWl0LCB0aGlzIHBhdGNoIGludHJv
ZHVjZXMgMiBuZXcgZmllbGRzOgorICAgICAgICAgICBWTTo6bV9qc0VtdWxhdGVkU3RhY2tMaW1p
dCBhbmQgVk06Om1fbGxpbnRTdGFja0xpbWl0LgorCisgICAgICAgICAgIG1fbGxpbnRTdGFja0xp
bWl0IGlzIHRoZSBsaW1pdCB0aGF0IHRoZSBMTEludCBhc3NlbWJseSB1c2VzIGZvciBpdHMgc3Rh
Y2sKKyAgICAgICAgICAgY2hlY2suICBtX2xsaW50U3RhY2tMaW1pdCBiZWhhdmVzIGxpa2UgdGhl
IG9sZCBtX2pzU3RhY2tMaW1pdCBpbiB0aGF0OgorICAgICAgICAgICBhLiBGb3IgSklUIGJ1aWxk
cywgbV9sbGludFN0YWNrTGltaXQgaXMgc3lub255bW91cyB3aXRoIG1fanNDUFVTdGFja0xpbWl0
LgorICAgICAgICAgICBiLiBGb3IgQyBMb29wIGJ1aWxkcywgbV9sbGludFN0YWNrTGltaXQgaXMg
c3lub255bW91cyB3aXRoIG1fanNFbXVsYXRlZFN0YWNrTGltaXQuCisKKyAgICAgICAgICAgbV9q
c0VtdWxhdGVkU3RhY2tMaW1pdCBpcyB1c2VkIGZvciB0aGUgZW11bGF0ZWQgc3RhY2sgdGhhdCB0
aGUgQyBMb29wIHVzZXMuCisKKyAgICAgICAgMy4gUmVuYW1lZCB0aGUgZm9sbG93aW5nIG1ldGhv
ZHMgdG8gbWF0Y2ggdGhlIGFib3ZlOgorICAgICAgICAgICAgIFZNOjpzdGFja0xpbWl0KCkgPT0+
IFZNOjpqc0NQVVN0YWNrTGltaXQoKQorICAgICAgICAgICAgIFZNOjphZGRyZXNzT2ZTdGFja0xp
bWl0KCkgPT0+IFZNOjphZGRyZXNzT2ZKU0NQVVN0YWNrTGltaXQoKQorICAgICAgICAgICAgIFZN
Ojpqc1N0YWNrTGltaXQoKSA9PT4gVk06OmpzRW11bGF0ZWRTdGFja0xpbWl0KCkKKyAgICAgICAg
ICAgICBWTTo6c2V0SlNTdGFja0xpbWl0KCkgPT0+IFZNOjpzZXRKU0VtdWxhdGVkU3RhY2tMaW1p
dCgpCisgICAgICAgICAgICAgSlNTdGFjazo6c2V0U3RhY2tMaW1pdCgpID09PiBKU1N0YWNrOjpz
ZXRFbXVsYXRlZFN0YWNrTGltaXQoKQorCisgICAgICAgIDQuIFdpdGggY2hhbmdlICgyKSBhbmQg
KDMpLCB0aGUgbGltaXRzIHdpbGwgYmUgdXNlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICBhLiBW
TSBjb2RlIGRvaW5nIHN0YWNrIHJlY3Vyc2lvbiBjaGVja3Mgd2lsbCBvbmx5IHVzZSBtX2pzQ1BV
U3RhY2tMaW1pdC4KKyAgICAgICAgICAgYi4gSklUIGNvZGUgd2lsbCBvbmx5IHVzZSBtX2pzQ1BV
U3RhY2tMaW1pdC4KKyAgICAgICAgICAgYy4gQyBMb29wIGVtdWxhdGVkIHN0YWNrIGNvZGUgaW4g
SlNTdGFjayB3aWxsIG9ubHkgdXNlIG1fanNFbXVsYXRlZFN0YWNrTGltaXQuCisgICAgICAgICAg
ICAgIE5vdGU6IHRoZSBwYXJ0IG9mIEpTU3RhY2sgdGhhdCBvcGVyYXRlcyBvbiBhIEpJVCBidWls
ZCB3aWxsIHVzZQorICAgICAgICAgICAgICAgICAgICBtX2pzQ1BVU3RhY2tMaW1pdCBhcyBleHBl
Y3RlZC4KKyAgICAgICAgICAgZC4gTExJTlQgYXNzZW1ibHkgY29kZSB3aWxsIG9ubHkgdXNlIG1f
bGxpbnRTdGFja0xpbWl0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSBjb250YWluIHRoZSBh
Ym92ZSByZWZhY3RvcmluZyBjaGFuZ2VzLiAgVGhlcmUgaXMgbm8gYmVoYXZpb3IKKyAgICAgICAg
Y2hhbmdlLgorCisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6SlNT
dGFjayk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6Omdyb3dTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6Omxvd0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpoaWdoQWRk
cmVzcyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAgICAgICAqIGludGVy
cHJldGVyL0pTU3RhY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmVuc3VyZUNh
cGFjaXR5Rm9yKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6c2hyaW5rKToKKyAgICAgICAgKEpT
Qzo6SlNTdGFjazo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnNldEpTRW11bGF0ZWRT
dGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6c2V0U3RhY2tMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwOgorICAg
ICAgICAoSlNDOjplbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSk6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpSZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVNYXRjaE9u
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAoSlNDOjpWTTo6dXBkYXRlU3RhY2tMaW1pdCk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorICAgICAgICAoSlNDOjpWTTo6cmVzZXJ2ZWRab25lU2l6ZSk6CisgICAgICAgIChKU0M6
OlZNOjpqc0NQVVN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpWTTo6YWRkcmVzc09mSlNDUFVT
dGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6Vk06OmpzRW11bGF0ZWRTdGFja0xpbWl0KToKKyAg
ICAgICAgKEpTQzo6Vk06OnNldEpTRW11bGF0ZWRTdGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6
Vk06OmlzU2FmZVRvUmVjdXJzZSk6CisgICAgICAgIChKU0M6OlZNOjpqc1N0YWNrTGltaXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6c2V0SlNTdGFja0xpbWl0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Vk06OnN0YWNrTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6
YWRkcmVzc09mU3RhY2tMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rp
b25Db21waWxlci5oOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6c3RhcnRG
dW5jdGlvbik6CisKIDIwMTYtMDctMDUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgU3RhY2tWaXNpdG9yOjp1bndpbmRUb01hY2hpbmVDb2RlQmxvY2tGcmFtZSgp
IG1heSB1bndpbmQgcGFzdCBhIFZNIGVudHJ5IGZyYW1lIHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0
aW9uIGFuZCB0aGUgZnJhbWUgaGFzIGlubGluZWQgdGFpbCBjYWxscwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDIwMjg0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmNvbXBpbGUoKQogCiAgICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2Ug
aXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVj
dXRpb25BbmRFeGl0KCkgLSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwotICAgIEp1bXAgc3RhY2tPdmVy
ZmxvdyA9IGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZlN0
YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBKdW1wIHN0YWNrT3ZlcmZsb3cgPSBi
cmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZKU0NQVVN0YWNr
TGltaXQoKSksIEdQUkluZm86OnJlZ1QxKTsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9n
cmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6
Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBMYWJlbCBmcm9tQXJpdHlDaGVjayh0aGlzKTsKICAgICAv
LyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhl
IEpTU3RhY2suCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKSAtIDEp
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgSnVtcCBzdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFi
b3ZlLCBBYnNvbHV0ZUFkZHJlc3MobV92bS0+YWRkcmVzc09mU3RhY2tMaW1pdCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgIEp1bXAgc3RhY2tPdmVyZmxvdyA9IGJyYW5jaFB0cihBYm92ZSwgQWJz
b2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZkpTQ1BVU3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6
cmVnVDEpOwogCiAgICAgLy8gTW92ZSB0aGUgc3RhY2sgcG9pbnRlciBkb3duIHRvIGFjY29tbW9k
YXRlIGxvY2FscwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJP
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjAyODQ0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
NyArMTg5LDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNrLgog
ICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzIGFkZHJlc3NPZlN0YWNrTGltaXQodm0oKS5hZGRyZXNzT2ZTdGFj
a0xpbWl0KCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzIGFkZHJl
c3NPZlN0YWNrTGltaXQodm0oKS5hZGRyZXNzT2ZKU0NQVVN0YWNrTGltaXQoKSk7CiAgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0hhbmRsZXIgPSBtX291dC5wYXRjaHBvaW50
KFZvaWQpOwogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZUlu
ZGV4Rm9yQ29kZU9yaWdpbihtX2Z0bFN0YXRlLCBDb2RlT3JpZ2luKDApKTsKICAgICAgICAgc3Rh
Y2tPdmVyZmxvd0hhbmRsZXItPmFwcGVuZFNvbWVSZWdpc3RlcihtX2NhbGxGcmFtZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCShyZXZp
c2lvbiAyMDI4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBA
QCBKU1N0YWNrOjpKU1N0YWNrKFZNJiB2bSkKICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdl
QWxpZ25lZChjYXBhY2l0eSkpOwogCiAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlv
bjo6cmVzZXJ2ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoY29tbWl0U2l6ZSgpLCBjYXBhY2l0
eSksIE9TQWxsb2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7Ci0gICAgc2V0U3RhY2tMaW1pdChoaWdo
QWRkcmVzcygpKTsKKyAgICBzZXRKU0VtdWxhdGVkU3RhY2tMaW1pdChoaWdoQWRkcmVzcygpKTsK
ICAgICBtX2NvbW1pdFRvcCA9IGhpZ2hBZGRyZXNzKCk7CiAgICAgCiAgICAgbV9sYXN0U3RhY2tU
b3AgPSBiYXNlT2ZTdGFjaygpOwpAQCAtODcsNyArODcsNyBAQCBib29sIEpTU3RhY2s6Omdyb3dT
bG93Q2FzZShSZWdpc3RlciogbmV3CiAgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGNvbW1pdHRl
ZCBlbm91Z2ggbWVtb3J5IHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LAogICAgIC8vIGp1c3QgdXBk
YXRlIHRoZSBlbmQgcG9pbnRlciBhbmQgcmV0dXJuLgogICAgIGlmIChuZXdUb3BPZlN0YWNrV2l0
aFJlc2VydmVkWm9uZSA+PSBtX2NvbW1pdFRvcCkgewotICAgICAgICBzZXRTdGFja0xpbWl0KG5l
d1RvcE9mU3RhY2spOworICAgICAgICBzZXRKU0VtdWxhdGVkU3RhY2tMaW1pdChuZXdUb3BPZlN0
YWNrKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMDQsNyArMTA0LDcgQEAg
Ym9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ldwogICAgIG1fcmVzZXJ2YXRp
b24uY29tbWl0KG5ld0NvbW1pdFRvcCwgZGVsdGEpOwogICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNv
dW50KGRlbHRhKTsKICAgICBtX2NvbW1pdFRvcCA9IG5ld0NvbW1pdFRvcDsKLSAgICBzZXRTdGFj
a0xpbWl0KG5ld1RvcE9mU3RhY2spOworICAgIHNldEpTRW11bGF0ZWRTdGFja0xpbWl0KG5ld1Rv
cE9mU3RhY2spOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9p
ZCBKU1N0YWNrOjpzZXRSZXNlcnZlZFpvbmVTaXplKHNpemVfdAogUmVnaXN0ZXIqIEpTU3RhY2s6
Omxvd0FkZHJlc3MoKSBjb25zdAogewogICAgIEFTU0VSVCh3dGZUaHJlYWREYXRhKCkuc3RhY2so
KS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZWdp
c3Rlcio+KG1fdm0uc3RhY2tMaW1pdCgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxS
ZWdpc3Rlcio+KG1fdm0uanNDUFVTdGFja0xpbWl0KCkpOwogfQogCiBSZWdpc3RlciogSlNTdGFj
azo6aGlnaEFkZHJlc3MoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0pTU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSlNTdGFjay5oCShyZXZpc2lvbiAyMDI4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxMy0y
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTMwLDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwogICAgICAgICB2b2lkIGFkZFRvQ29t
bWl0dGVkQnl0ZUNvdW50KGxvbmcpOwogCi0gICAgICAgIHZvaWQgc2V0U3RhY2tMaW1pdChSZWdp
c3RlciogbmV3VG9wT2ZTdGFjayk7CisgICAgICAgIHZvaWQgc2V0SlNFbXVsYXRlZFN0YWNrTGlt
aXQoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spOwogI2VuZGlmIC8vICFFTkFCTEUoSklUKQogCiAg
ICAgICAgIFZNJiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0pTU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIwMjg0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5lIGJvb2wgSlNTdGFjazo6ZW5z
dXJlQ2FwYWNpdHlGb3IoUgogICAgIHJldHVybiBncm93KG5ld1RvcE9mU3RhY2spOwogI2Vsc2UK
ICAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7
Ci0gICAgcmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV92bS5zdGFja0xpbWl0KCk7CisgICAgcmV0
dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV92bS5qc0NQVVN0YWNrTGltaXQoKTsKICNlbmRpZgogfQog
CkBAIC02Miw3ICs2Miw3IEBAIGlubGluZSB2b2lkIEpTU3RhY2s6OnNocmluayhSZWdpc3Rlciog
bmUKICAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3VG9wT2ZTdGFjayAtIDE7CiAgICAgaWYgKG5l
d0VuZCA+PSBtX2VuZCkKICAgICAgICAgcmV0dXJuOwotICAgIHNldFN0YWNrTGltaXQobmV3VG9w
T2ZTdGFjayk7CisgICAgc2V0SlNFbXVsYXRlZFN0YWNrTGltaXQobmV3VG9wT2ZTdGFjayk7CiAg
ICAgLy8gTm90ZTogQ2xhbmcgY29tcGxhaW5zIG9mIGFuIHVucmVzb2x2ZWQgbGlua2FnZSB0byBt
YXhFeGNlc3NDYXBhY2l0eSBpZgogICAgIC8vIGludm9rZSBzdGQ6Om1heCgpIHdpdGggaXQgYXMg
YW4gYXJndW1lbnQuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdlIGZpcnN0CiAgICAgLy8gYXNzaWdu
IHRoZSBjb25zdGFudCB0byBhIGxvY2FsIHZhcmlhYmxlLCBhbmQgdXNlIHRoZSBsb2NhbCBpbnN0
ZWFkLgpAQCAtODAsMTEgKzgwLDExIEBAIGlubGluZSBib29sIEpTU3RhY2s6Omdyb3coUmVnaXN0
ZXIqIG5ld1QKICAgICByZXR1cm4gZ3Jvd1Nsb3dDYXNlKG5ld1RvcE9mU3RhY2spOwogfQogCi1p
bmxpbmUgdm9pZCBKU1N0YWNrOjpzZXRTdGFja0xpbWl0KFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNr
KQoraW5saW5lIHZvaWQgSlNTdGFjazo6c2V0SlNFbXVsYXRlZFN0YWNrTGltaXQoUmVnaXN0ZXIq
IG5ld1RvcE9mU3RhY2spCiB7CiAgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG5ld1RvcE9mU3RhY2sg
LSAxOwogICAgIG1fZW5kID0gbmV3RW5kOwotICAgIG1fdm0uc2V0SlNTdGFja0xpbWl0KG5ld1Rv
cE9mU3RhY2spOworICAgIG1fdm0uc2V0SlNFbXVsYXRlZFN0YWNrTGltaXQobmV3VG9wT2ZTdGFj
ayk7CiB9CiAKICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHJldmlzaW9uIDIwMjg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk5LDcgKzU5OSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICB9CiAKICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBKdW1wIHN0YWNrT3ZlcmZsb3cgPSBi
cmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZTdGFja0xpbWl0
KCkpLCByZWdUMSk7CisgICAgSnVtcCBzdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFib3ZlLCBB
YnNvbHV0ZUFkZHJlc3MobV92bS0+YWRkcmVzc09mSlNDUFVTdGFja0xpbWl0KCkpLCByZWdUMSk7
CiAKICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0
dXBWYXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAyMDI4NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3
ICs4Miw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKICAgICAK
ICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIHRydWUsIG51bVVzZWRT
bG90c0dQUiwgc2NyYXRjaEdQUjIpOwogCi0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moaml0
LnZtKCktPmFkZHJlc3NPZlN0YWNrTGltaXQoKSksIHNjcmF0Y2hHUFIyKSk7CisgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgQ0NhbGxIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3Moaml0LnZtKCktPmFkZHJlc3NPZkpTQ1BVU3RhY2tMaW1pdCgpKSwg
c2NyYXRjaEdQUjIpKTsKIAogICAgIC8vIEluaXRpYWxpemUgQXJndW1lbnRDb3VudC4KICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIy
LCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSArIFBheWxvYWRPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjAyODQ0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDg0LDkgKzQ4NCw5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0YWNrX2NoZWNrKQogICAgIGRh
dGFMb2dGKCJOdW0gdmFycyA9ICV1LlxuIiwgZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtVmFycyk7
CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGRhdGFMb2dGKCJDdXJyZW50IGVuZCBpcyBhdCAlcC5c
biIsIGV4ZWMtPnZtKCkuc3RhY2tMaW1pdCgpKTsKKyAgICBkYXRhTG9nRigiQ3VycmVudCBlbmQg
aXMgYXQgJXAuXG4iLCBleGVjLT52bSgpLmpzQ1BVU3RhY2tMaW1pdCgpKTsKICNlbHNlCi0gICAg
ZGF0YUxvZ0YoIkN1cnJlbnQgZW5kIGlzIGF0ICVwLlxuIiwgZXhlYy0+dm0oKS5qc1N0YWNrTGlt
aXQoKSk7CisgICAgZGF0YUxvZ0YoIkN1cnJlbnQgZW5kIGlzIGF0ICVwLlxuIiwgZXhlYy0+dm0o
KS5qc0VtdWxhdGVkU3RhY2tMaW1pdCgpKTsKICNlbmRpZgogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCShyZXZpc2lvbiAyMDI4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcg
KzE1Miw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICAjIEVuc3VyZSB0aGF0IHdl
IGhhdmUgZW5vdWdoIGFkZGl0aW9uYWwgc3RhY2sgY2FwYWNpdHkgZm9yIHRoZSBpbmNvbWluZyBh
cmdzLAogICAgICMgYW5kIHRoZSBmcmFtZSBmb3IgdGhlIEpTIGNvZGUgd2UncmUgZXhlY3V0aW5n
LiBXZSBuZWVkIHRvIGRvIHRoaXMgY2hlY2sKICAgICAjIGJlZm9yZSB3ZSBzdGFydCBjb3B5aW5n
IHRoZSBhcmdzIGZyb20gdGhlIHByb3RvQ2FsbEZyYW1lIGJlbG93LgotICAgIGJwYWVxIHQzLCBW
TTo6bV9qc1N0YWNrTGltaXRbdm1dLCAuc3RhY2tIZWlnaHRPSworICAgIGJwYWVxIHQzLCBWTTo6
bV9sbGludFN0YWNrTGltaXRbdm1dLCAuc3RhY2tIZWlnaHRPSwogCiAgICAgaWYgQ19MT09QCiAg
ICAgICAgIG1vdmUgZW50cnksIHQ0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjAyODQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNh
bGwpCiAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBhZGRpdGlvbmFsIHN0YWNrIGNh
cGFjaXR5IGZvciB0aGUgaW5jb21pbmcgYXJncywKICAgICAjIGFuZCB0aGUgZnJhbWUgZm9yIHRo
ZSBKUyBjb2RlIHdlJ3JlIGV4ZWN1dGluZy4gV2UgbmVlZCB0byBkbyB0aGlzIGNoZWNrCiAgICAg
IyBiZWZvcmUgd2Ugc3RhcnQgY29weWluZyB0aGUgYXJncyBmcm9tIHRoZSBwcm90b0NhbGxGcmFt
ZSBiZWxvdy4KLSAgICBicGFlcSB0MywgVk06Om1fanNTdGFja0xpbWl0W3ZtXSwgLnN0YWNrSGVp
Z2h0T0sKKyAgICBicGFlcSB0MywgVk06Om1fbGxpbnRTdGFja0xpbWl0W3ZtXSwgLnN0YWNrSGVp
Z2h0T0sKIAogICAgIGlmIENfTE9PUAogICAgICAgICBtb3ZlIGVudHJ5LCB0NApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkocmV2aXNpb24gMjAyODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05NTEsNyArOTUxLDcgQEAgbWFj
cm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGdldEZyYW1lUmVnaXN0
ZXJTaXplRm9yQ29kZUJsb2NrKHQxLCB0MCkKICAgICBzdWJwIGNmciwgdDAsIHQwCiAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDIKLSAgICBicGJlcSBWTTo6bV9qc1N0YWNrTGltaXRb
dDJdLCB0MCwgLnN0YWNrSGVpZ2h0T0sKKyAgICBicGJlcSBWTTo6bV9sbGludFN0YWNrTGltaXRb
dDJdLCB0MCwgLnN0YWNrSGVpZ2h0T0sKIAogICAgICMgU3RhY2sgaGVpZ2h0IGNoZWNrIGZhaWxl
ZCAtIG5lZWQgdG8gY2FsbCBhIHNsb3dfcGF0aC4KICAgICAjIFNldCB1cCB0ZW1wb3Jhcnkgc3Rh
Y2sgcG9pbnRlciBmb3IgY2FsbCBpbmNsdWRpbmcgY2FsbGVlIHNhdmVzCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDIwMjg0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyMiw3ICsyMjIsNyBAQCBSZWdFeHA6OlJlZ0V4cChWTSYgdm0sIGNvbnN0IFN0cmluZyYgcGF0
CiB2b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0
cmluZywgbV9mbGFncywgJm1fY29uc3RydWN0aW9uRXJyb3IsIHZtLnN0YWNrTGltaXQoKSk7Cisg
ICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsICZt
X2NvbnN0cnVjdGlvbkVycm9yLCB2bS5qc0NQVVN0YWNrTGltaXQoKSk7CiAgICAgaWYgKG1fY29u
c3RydWN0aW9uRXJyb3IpCiAgICAgICAgIG1fc3RhdGUgPSBQYXJzZUVycm9yOwogICAgIGVsc2UK
QEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZShWTSogdm0sIFlhcnI6Ollh
cnJDCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAg
ICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgJm1f
Y29uc3RydWN0aW9uRXJyb3IsIHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0
ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCAmbV9jb25zdHJ1Y3Rpb25FcnJv
ciwgdm0tPmpzQ1BVU3RhY2tMaW1pdCgpKTsKICAgICBpZiAobV9jb25zdHJ1Y3Rpb25FcnJvcikg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lmIENPTVBJTEVSX1FV
SVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQg
UmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWEKIHsKICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRl
cm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCAmbV9jb25zdHJ1Y3Rpb25FcnJvciwgdm0tPnN0
YWNrTGltaXQoKSk7CisgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJp
bmcsIG1fZmxhZ3MsICZtX2NvbnN0cnVjdGlvbkVycm9yLCB2bS0+anNDUFVTdGFja0xpbWl0KCkp
OwogICAgIGlmIChtX2NvbnN0cnVjdGlvbkVycm9yKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAjaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxF
X0NPREUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAy
MDI4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSwxMCArMTg1LDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9pbml0aWFsaXppbmdPYmplY3RDbGFzcygwKQogI2VuZGlmCiAg
ICAgLCBtX3N0YWNrUG9pbnRlckF0Vk1FbnRyeSgwKQotICAgICwgbV9zdGFja0xpbWl0KDApCi0j
aWYgIUVOQUJMRShKSVQpCi0gICAgLCBtX2pzU3RhY2tMaW1pdCgwKQotI2VuZGlmCiAgICAgLCBt
X2NvZGVDYWNoZShzdGQ6Om1ha2VfdW5pcXVlPENvZGVDYWNoZT4oKSkKICAgICAsIG1fYnVpbHRp
bkV4ZWN1dGFibGVzKHN0ZDo6bWFrZV91bmlxdWU8QnVpbHRpbkV4ZWN1dGFibGVzPigqdGhpcykp
CiAgICAgLCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudCgwKQpAQCAtNjU0LDIwICs2NTAsMjAg
QEAgc3RhdGljIHZvaWQgcHJlQ29tbWl0U3RhY2tNZW1vcnkodm9pZCogcwogaW5saW5lIHZvaWQg
Vk06OnVwZGF0ZVN0YWNrTGltaXQoKQogewogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkKiBs
YXN0U3RhY2tMaW1pdCA9IG1fc3RhY2tMaW1pdDsKKyAgICB2b2lkKiBsYXN0SlNDUFVTdGFja0xp
bWl0ID0gbV9qc0NQVVN0YWNrTGltaXQ7CiAjZW5kaWYKIAogICAgIGlmIChtX3N0YWNrUG9pbnRl
ckF0Vk1FbnRyeSkgewogICAgICAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNH
cm93aW5nRG93bndhcmQoKSk7CiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZTdGFjayA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG1fc3RhY2tQb2ludGVyQXRWTUVudHJ5KTsKLSAgICAgICAgbV9zdGFj
a0xpbWl0ID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkucmVjdXJzaW9uTGltaXQoc3RhcnRPZlN0
YWNrLCBPcHRpb25zOjptYXhQZXJUaHJlYWRTdGFja1VzYWdlKCksIG1fcmVzZXJ2ZWRab25lU2l6
ZSk7CisgICAgICAgIG1fanNDUFVTdGFja0xpbWl0ID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCku
cmVjdXJzaW9uTGltaXQoc3RhcnRPZlN0YWNrLCBPcHRpb25zOjptYXhQZXJUaHJlYWRTdGFja1Vz
YWdlKCksIG1fcmVzZXJ2ZWRab25lU2l6ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9zdGFj
a0xpbWl0ID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkucmVjdXJzaW9uTGltaXQobV9yZXNlcnZl
ZFpvbmVTaXplKTsKKyAgICAgICAgbV9qc0NQVVN0YWNrTGltaXQgPSB3dGZUaHJlYWREYXRhKCku
c3RhY2soKS5yZWN1cnNpb25MaW1pdChtX3Jlc2VydmVkWm9uZVNpemUpOwogICAgIH0KIAogI2lm
IFBMQVRGT1JNKFdJTikKLSAgICBpZiAobGFzdFN0YWNrTGltaXQgIT0gbV9zdGFja0xpbWl0KQot
ICAgICAgICBwcmVDb21taXRTdGFja01lbW9yeShtX3N0YWNrTGltaXQpOworICAgIGlmIChsYXN0
SlNDUFVTdGFja0xpbWl0ICE9IG1fanNDUFVTdGFja0xpbWl0KQorICAgICAgICBwcmVDb21taXRT
dGFja01lbW9yeShtX2pzQ1BVU3RhY2tMaW1pdCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDI4NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsMTggKzQ2MSwxOCBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IHJlc2VydmVkWm9uZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X3Jlc2VydmVkWm9uZVNpemU7IH0KICAgICBzaXplX3QgdXBkYXRlUmVzZXJ2ZWRab25lU2l6ZShz
aXplX3QgcmVzZXJ2ZWRab25lU2l6ZSk7CiAKKyAgICB2b2lkKiBqc0NQVVN0YWNrTGltaXQoKSB7
IHJldHVybiBtX2pzQ1BVU3RhY2tMaW1pdDsgfQorICAgIHZvaWQqKiBhZGRyZXNzT2ZKU0NQVVN0
YWNrTGltaXQoKSB7IHJldHVybiAmbV9qc0NQVVN0YWNrTGltaXQ7IH0KICNpZiAhRU5BQkxFKEpJ
VCkKLSAgICB2b2lkKiBqc1N0YWNrTGltaXQoKSB7IHJldHVybiBtX2pzU3RhY2tMaW1pdDsgfQot
ICAgIHZvaWQgc2V0SlNTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fanNTdGFja0xpbWl0ID0g
bGltaXQ7IH0KKyAgICB2b2lkKiBqc0VtdWxhdGVkU3RhY2tMaW1pdCgpIHsgcmV0dXJuIG1fanNF
bXVsYXRlZFN0YWNrTGltaXQ7IH0KKyAgICB2b2lkIHNldEpTRW11bGF0ZWRTdGFja0xpbWl0KHZv
aWQqIGxpbWl0KSB7IG1fanNFbXVsYXRlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQogI2VuZGlmCi0g
ICAgdm9pZCogc3RhY2tMaW1pdCgpIHsgcmV0dXJuIG1fc3RhY2tMaW1pdDsgfQotICAgIHZvaWQq
KiBhZGRyZXNzT2ZTdGFja0xpbWl0KCkgeyByZXR1cm4gJm1fc3RhY2tMaW1pdDsgfQogCiAgICAg
Ym9vbCBpc1NhZmVUb1JlY3Vyc2Uoc2l6ZV90IG5lZWRlZFN0YWNrSW5CeXRlcyA9IDApIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5n
RG93bndhcmQoKSk7CiAgICAgICAgIGludDhfdCogY3VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50
OF90Kj4oJmN1cnIpOwotICAgICAgICBpbnQ4X3QqIGxpbWl0ID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQ4X3QqPihtX3N0YWNrTGltaXQpOworICAgICAgICBpbnQ4X3QqIGxpbWl0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnQ4X3QqPihtX2pzQ1BVU3RhY2tMaW1pdCk7CiAgICAgICAgIHJldHVybiBjdXJy
ID49IGxpbWl0ICYmIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyciAtIGxpbWl0KSA+PSBuZWVkZWRT
dGFja0luQnl0ZXM7CiAgICAgfQogCkBAIC02NDIsMjAgKzY0MiwyMyBAQCBwcml2YXRlOgogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXpp
bmdPYmplY3RDbGFzczsKICNlbmRpZgorCiAgICAgdm9pZCogbV9zdGFja1BvaW50ZXJBdFZNRW50
cnk7CiAgICAgc2l6ZV90IG1fcmVzZXJ2ZWRab25lU2l6ZTsKLSNpZiAhRU5BQkxFKEpJVCkKLSAg
ICBzdHJ1Y3QgewotICAgICAgICB2b2lkKiBtX3N0YWNrTGltaXQ7Ci0gICAgICAgIHZvaWQqIG1f
anNTdGFja0xpbWl0OworI2lmIEVOQUJMRShKSVQpCisgICAgdW5pb24geworICAgICAgICB2b2lk
KiBtX2pzQ1BVU3RhY2tMaW1pdCB7IG51bGxwdHIgfTsKKyAgICAgICAgdm9pZCogbV9sbGludFN0
YWNrTGltaXQ7CiAgICAgfTsKICNlbHNlCisgICAgdm9pZCogbV9qc0NQVVN0YWNrTGltaXQgeyBu
dWxscHRyIH07CiAgICAgdW5pb24gewotICAgICAgICB2b2lkKiBtX3N0YWNrTGltaXQ7Ci0gICAg
ICAgIHZvaWQqIG1fanNTdGFja0xpbWl0OworICAgICAgICB2b2lkKiBtX2pzRW11bGF0ZWRTdGFj
a0xpbWl0IHsgbnVsbHB0ciB9OworICAgICAgICB2b2lkKiBtX2xsaW50U3RhY2tMaW1pdDsKICAg
ICB9OwogI2VuZGlmCiAgICAgdm9pZCogbV9sYXN0U3RhY2tUb3A7CisKICAgICBFeGNlcHRpb24q
IG1fZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIEV4Y2VwdGlvbiogbV9sYXN0RXhjZXB0aW9u
IHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNv
bXBpbGVyLmgJKHJldmlzaW9uIDIwMjg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01GdW5jdGlvbkNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM1LDcgKzEzNSw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9iZWdpbkxhYmVsID0gbGFiZWwoKTsKIAogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1tX2NhbGxlZVNhdmVTcGFjZSAtIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBtX3N0YWNrSGVpZ2h0KSAqIHNpemVvZihTdGFj
a1Nsb3QpIC0gbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBtX3N0YWNrT3ZlcmZsb3cgPSBi
cmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZTdGFja0xpbWl0
KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIG1fc3RhY2tPdmVyZmxvdyA9IGJyYW5jaFB0
cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZkpTQ1BVU3RhY2tMaW1pdCgp
KSwgR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
</data>
<flag name="review"
          id="306615"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>