<?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>151406</bug_id>
          
          <creation_ts>2015-11-18 14:03:57 -0800</creation_ts>
          <short_desc>OSR exits that are exception handlers should emit less code eagerly in the thunk generator, and instead, should defer as much code generation as possible to be lazily generated in the exit itself</short_desc>
          <delta_ts>2016-01-27 00:33:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1142971</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-18 14:03:57 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145090</commentid>
    <comment_count>1</comment_count>
      <attachid>266320</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-30 19:01:18 -0800</bug_when>
    <thetext>Created attachment 266320
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145282</commentid>
    <comment_count>2</comment_count>
      <attachid>266320</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-01 11:00:46 -0800</bug_when>
    <thetext>Comment on attachment 266320
patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp:120
&gt; +        // This means that our frame isn&apos;t set to the actual frame of the function
&gt; +        // we&apos;re exiting from, but to some callee down the call stack. This is fine,

I would just say, &quot;When this happens, exec is the frame pointer for the callee that threw, and not for the caller that will do the OSR exit.&quot;

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:549
&gt; +        // We may arrive at this OSR exit compilation from genericUnwind.
&gt; +        // This means that our frame isn&apos;t set to the actual frame of the function
&gt; +        // we&apos;re exiting from, but to some callee down the call stack. This is fine,

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145285</commentid>
    <comment_count>3</comment_count>
      <attachid>266320</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-01 11:03:42 -0800</bug_when>
    <thetext>Comment on attachment 266320
patch

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

&gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:813
&gt; -                        exit-&gt;spillRegistersToSpillSlot(slowPathJIT, jsCallThatMightThrowSpillOffset);
&gt; +                        exit-&gt;spillRegistersToSpillSlot(slowPathJIT, osrExitFromGenericUnwindStackSpillSlot);

This appears to spill a ton of stuff, and we emit this code eagerly.  Why can&apos;t this be emitted lazily?  Do you have a bug for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145288</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-01 11:07:15 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 266320 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266320&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:813
&gt; &gt; -                        exit-&gt;spillRegistersToSpillSlot(slowPathJIT, jsCallThatMightThrowSpillOffset);
&gt; &gt; +                        exit-&gt;spillRegistersToSpillSlot(slowPathJIT, osrExitFromGenericUnwindStackSpillSlot);
&gt; 
&gt; This appears to spill a ton of stuff, and we emit this code eagerly.  Why
&gt; can&apos;t this be emitted lazily?  Do you have a bug for that?

Never mind, I think I get it now.  These are the volatile registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145524</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-01 21:52:24 -0800</bug_when>
    <thetext>Im holding off on landing this because it&apos;s currently breaking 
32-bit. I&apos;ve found out why. For some reason (I don&apos;t know why yet)
some path that runs jumpToExceptionHandler after genericUnwind has
a stack pointer that isn&apos;t 16-byte aligned. This makes us crash in
the actual compileOSRExit C call.
This was working before because we reset the stack pointer before 
the C call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145815</commentid>
    <comment_count>6</comment_count>
      <attachid>266495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-02 19:07:35 -0800</bug_when>
    <thetext>Created attachment 266495
patch

Back up for review because I&apos;ve changed the architecture of the patch to do frame/stack pointer resetting in
the exit generation thunk generation before the compileOSRExit C call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145817</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-02 19:09:07 -0800</bug_when>
    <thetext>Attachment 266495 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGThunks.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGThunks.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146370</commentid>
    <comment_count>8</comment_count>
      <attachid>266495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-04 12:58:24 -0800</bug_when>
    <thetext>Comment on attachment 266495
patch

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

&gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:124
&gt; -        vm, compileFTLOSRExit, &quot;FTL OSR exit generation thunk&quot;, extraPopsToRestore);
&gt; +        vm, compileFTLOSRExit, &quot;FTL OSR exit generation thunk&quot;, extraPopsToRestore, true);

WebKit style doesn&apos;t take kindly to passing true or false like this.  You should either use an enum, or name the variable like:

bool doFrameAndStackAdjustment = true;
return genericGenerationThunkGenerator(
    vm, compileFTLOSRExit, &quot;FTL OSR exit generation thunk&quot;, extraPopsToRestore, doFrameAndStackAdjustment);

&gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:131
&gt; -        vm, compileFTLLazySlowPath, &quot;FTL lazy slow path generation thunk&quot;, extraPopsToRestore);
&gt; +        vm, compileFTLLazySlowPath, &quot;FTL lazy slow path generation thunk&quot;, extraPopsToRestore, false);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146426</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-04 15:16:33 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 266495 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266495&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:124
&gt; &gt; -        vm, compileFTLOSRExit, &quot;FTL OSR exit generation thunk&quot;, extraPopsToRestore);
&gt; &gt; +        vm, compileFTLOSRExit, &quot;FTL OSR exit generation thunk&quot;, extraPopsToRestore, true);
&gt; 
&gt; WebKit style doesn&apos;t take kindly to passing true or false like this.  You
&gt; should either use an enum, or name the variable like:
&gt; 
&gt; bool doFrameAndStackAdjustment = true;
&gt; return genericGenerationThunkGenerator(
&gt;     vm, compileFTLOSRExit, &quot;FTL OSR exit generation thunk&quot;,
&gt; extraPopsToRestore, doFrameAndStackAdjustment);
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:131
&gt; &gt; -        vm, compileFTLLazySlowPath, &quot;FTL lazy slow path generation thunk&quot;, extraPopsToRestore);
&gt; &gt; +        vm, compileFTLLazySlowPath, &quot;FTL lazy slow path generation thunk&quot;, extraPopsToRestore, false);
&gt; 
&gt; Ditto.
Thanks for the review. I&apos;ll go with an enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146427</commentid>
    <comment_count>10</comment_count>
      <attachid>266495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-04 15:19:28 -0800</bug_when>
    <thetext>Comment on attachment 266495
patch

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

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.h:44
&gt; +void adjustFrameAndStackInOSRExitCompilerThunk(MacroAssembler&amp; jit, VM* vm, bool isFTLOSRExit)

I&apos;ll enum this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146464</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-04 16:05:47 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/193485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159191</commentid>
    <comment_count>12</comment_count>
      <attachid>266495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 19:36:53 -0800</bug_when>
    <thetext>Comment on attachment 266495
patch

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

&gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:52
&gt; +
&gt; +    if (doFrameAndStackAdjustment) {
&gt; +        // This needs to happen before we use the scratch buffer because this function also uses the scratch buffer.
&gt; +        adjustFrameAndStackInOSRExitCompilerThunk&lt;FTL::JITCode&gt;(jit, vm, true);
&gt; +    }

This is a problem.  adjustFrameAndStackInOSRExitCompilerThunk() clobbers scratch registers.

Why can&apos;t it happen after saving all registers, below?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159194</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 19:42:31 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 266495 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266495&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:52
&gt; &gt; +
&gt; &gt; +    if (doFrameAndStackAdjustment) {
&gt; &gt; +        // This needs to happen before we use the scratch buffer because this function also uses the scratch buffer.
&gt; &gt; +        adjustFrameAndStackInOSRExitCompilerThunk&lt;FTL::JITCode&gt;(jit, vm, true);
&gt; &gt; +    }
&gt; 
&gt; This is a problem.  adjustFrameAndStackInOSRExitCompilerThunk() clobbers
&gt; scratch registers.
&gt; 
&gt; Why can&apos;t it happen after saving all registers, below?

Actually, why do we do this for all OSR exits?  Isn&apos;t this only needed for those OSR exits that are reached by generic unwind?

It&apos;s important that we are very precise about when this is needed.  Getting this to not use a scratch register is going to be very tricky.  We could get around this problem if we only did this when the OSR exit is reached from generic unwind, since those will have volatile registers available anyway.

Also, is it really the case that the purpose of this function is to ensure that the stack is not clobbered by the OSR exit compiler?  If so, then this function appears to fail at this, because by the time we get here, the FTL would have pushed something onto the stack.  So, if the stack height was not as big as it should be, then this store would clobber something that OSR exit would want.

But, I could be completely wrong about what this function actually does.  I don&apos;t think that its name says anything about why it exists, and it&apos;s not clear to me what invariant it ensures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159238</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-27 00:33:19 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Comment on attachment 266495 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=266495&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:52
&gt; &gt; &gt; +
&gt; &gt; &gt; +    if (doFrameAndStackAdjustment) {
&gt; &gt; &gt; +        // This needs to happen before we use the scratch buffer because this function also uses the scratch buffer.
&gt; &gt; &gt; +        adjustFrameAndStackInOSRExitCompilerThunk&lt;FTL::JITCode&gt;(jit, vm, true);
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; This is a problem.  adjustFrameAndStackInOSRExitCompilerThunk() clobbers
&gt; &gt; scratch registers.
&gt; &gt; 
&gt; &gt; Why can&apos;t it happen after saving all registers, below?
&gt; 
&gt; Actually, why do we do this for all OSR exits?  Isn&apos;t this only needed for
&gt; those OSR exits that are reached by generic unwind?
It&apos;s only needed for those particular unwind exits.

&gt; It&apos;s important that we are very precise about when this is needed.  Getting
&gt; this to not use a scratch register is going to be very tricky.  We could get
&gt; around this problem if we only did this when the OSR exit is reached from
&gt; generic unwind, since those will have volatile registers available anyway.
Correct. We could be way more precise here. I remember us discussing a while
ago when I wrote this patch if this should be done always or just when strictly
necessary, and we came to the consensus that it&apos;s better to do it all the time
because we have complete control. But given that we&apos;ve found a bug, maybe that&apos;s
a fragile design. I also vaguely remember that we thought that it&apos;s safe
to always increment SP from FP to what the FTL call frame excepts because
we could theoretically get here from some other side code that did threw
an exception and didn&apos;t reset SP if it happened to store things to the
stack (I could totally be making this up). 
 
&gt; Also, is it really the case that the purpose of this function is to ensure
&gt; that the stack is not clobbered by the OSR exit compiler?  If so, then this
&gt; function appears to fail at this, because by the time we get here, the FTL
&gt; would have pushed something onto the stack.  So, if the stack height was not
&gt; as big as it should be, then this store would clobber something that OSR
&gt; exit would want.
After this code executes, we will strictly decrease the stack (or maintain its original value), we never increase it. We could theoretically reuse the SP from where the
exception was thrown, but this seems shady/incorrect especially when the exception
was a stack overflow error.

This codes job was to ensure that FP/SP are always at the frame
where we&apos;re exiting from. Most importantly, it is at the frame that&apos;s
catching the exception. This is needed because when we make the C call to
compile the OSR exit, we read CodeBlock, etc, from the ExecState* argument,
so we must make sure FP is at callFrameForCatch. In the case where an exception
is not thrown, we end up just moving SP back to where it already should have been.

&gt; 
&gt; But, I could be completely wrong about what this function actually does.  I
&gt; don&apos;t think that its name says anything about why it exists, and it&apos;s not
&gt; clear to me what invariant it ensures.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266320</attachid>
            <date>2015-11-30 19:01:18 -0800</date>
            <delta_ts>2015-12-02 19:07:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15115</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyODUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDE1LTExLTMwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE9TUiBleGl0cyB0aGF0IGFyZSBleGNlcHRpb24gaGFuZGxlcnMgc2hvdWxkIGVtaXQgbGVzcyBj
b2RlIGVhZ2VybHkgaW4gdGhlIHRodW5rIGdlbmVyYXRvciwgYW5kIGluc3RlYWQsIHNob3VsZCBk
ZWZlciBhcyBtdWNoIGNvZGUgZ2VuZXJhdGlvbiBhcyBwb3NzaWJsZSB0byBiZSBsYXppbHkgZ2Vu
ZXJhdGVkIGluIHRoZSBleGl0IGl0c2VsZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2Ugbm8gbG9uZ2VyIGVtaXQgYW55IGV4dHJhIGNvZGUgZWFnZXJs
eSBmb3IgYW4gT1NSRXhpdCB0aGF0CisgICAgICAgIGlzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLiBX
ZSBlbWl0IGFsbCBjb2RlIGxhemlseSBpbiB0aGUgZXhpdAorICAgICAgICBpdHNlbGYuIFRoaXMg
aGFzIG9uZSBpbnRlcmVzdGluZyBjb25zZXF1ZW5zZSB3aGljaCBpcyB0aGF0IHRoZQorICAgICAg
ICBhY3R1YWwgQyBjYWxsIHRvIGNvbXBpbGUgdGhlIGV4aXQgd29uJ3Qgc3RhcnQgd2l0aCB0aGUg
cHJvcGVyIEV4ZWNTdGF0ZSoKKyAgICAgICAgZm9yIGV4aXRzIHRoYXQgYXJyaXZlIGZyb20gZ2Vu
ZXJpY1Vud2luZC4gVGhhdCdzIGJlY2F1c2UgZ2VuZXJpY1Vud2luZAorICAgICAgICBzZXRzIFZN
J3MgY2FsbEZyYW1lRm9yQ2F0Y2ggcHJvcGVydHkgdGhhdCBvcF9jYXRjaCBpcyBzdXBwb3NlZCB0
byBzdG9yZSBpbnRvIHRoZSBmcmFtZQorICAgICAgICBwb2ludGVyLiBCZWN1YXNlIHdlJ3JlIG1v
ZGVsaW5nIG9wX2NhdGNoLCB3ZSBtdXN0IHRha2UgdGhlIGluaXRpYXRpdmUgaW4gdGhlCisgICAg
ICAgIGFjdHVhbCBDIGNhbGwgdG8gZ2V0IHRoZSByaWdodCBFeGVjU3RhdGUqLiBUaGlzIG1lYW5z
IHRoYXQgd2Ugbm90IG9ubHkgc2V0IHRoZQorICAgICAgICBmcmFtZSBwb2ludGVyIGluIGVtaXR0
ZWQgSklUIGNvZGUsIGJ1dCB3ZSBhbHNvIHNldCBpdCBpbiBDIGNvZGUuIE5vdGUgdGhhdCB0aGUg
CisgICAgICAgIEV4ZWNTdGF0ZSogd2UgZmlyc3Qgc2VlIGlzIGEgdmFsaWQgZnJhbWUsIGJ1dCBp
dCBqdXN0IGRvZXNuJ3QgY29ycmVzcG9uZCB0bworICAgICAgICB0aGUgZnVuY3Rpb24gd2UncmUg
ZXhpdGluZyBmcm9tLiBUaGlzIG1lYW5zIHdlIGNhbiByZWFkIFZNIGZyb20gdGhlIG9yaWdpbmFs
CisgICAgICAgIEV4ZWNTdGF0ZSosIGJ1dCB3ZSBzaG91bGRuJ3QgdHJ1c3QgdGhhdCB0aGUgQ29k
ZUJsb2NrIGNvcnJlc3BvbmRzIHRvIHRoZQorICAgICAgICBDb2RlQmxvY2sgd2UncmUgZXhpdGlu
ZyBmcm9tLCBpdCB3aWxsIGNvcnJlc3BvbmQgdG8gYSBDb2RlQmxvY2sgc29tZXdoZXJlCisgICAg
ICAgIGRvd24gdGhlIGNhbGwgc3RhY2suCisKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGZ0bC9GVExDb21w
aWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlRGF0YVNlY3Rpb24pOgorICAg
ICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRUaHVua0dlbmVyYXRvcjo6fkV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmspOgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rcyk6CisgICAgICAgICogZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6
ZGlkVGhpbmdzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgorICAgICAgICAqIGZ0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToK
KyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6CisKIDIwMTUtMTEtMzAgIEJl
bmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gU3Bl
ZWQgdXAgQWlyIExpdmVuZXNzIEFuYWx5c2lzIG9uIFRtcHMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTI4NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsMTQgKzg2LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24gPSBs
YWJlbCgpOwogCi0gICAgICAgIGlmIChleGl0Lm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5l
cmljVW53aW5kKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBv
cF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAg
ICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sg
cG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUNhbGxlZVNhdmVz
QnVmZmVyKCk7Ci0gICAgICAgICAgICBsb2FkUHRyKHZtKCktPmFkZHJlc3NPZkNhbGxGcmFtZUZv
ckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICB9Ci0KICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLT5vc3JFeGl0SW5kZXgpOwogICAg
ICAgICBleGl0LnNldFBhdGNoYWJsZUNvZGVPZmZzZXQocGF0Y2hhYmxlSnVtcCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE5Mjg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxNiBAQCBleHRlcm4g
IkMiIHsKIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEV4aXQgQ29tcGlsYXRpb24iKTsKKwor
ICAgIGlmIChleGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoKSB7CisgICAgICAgIC8vIFdlIG1h
eSBhcnJpdmUgYXQgdGhpcyBPU1IgZXhpdCBjb21waWxhdGlvbiBmcm9tIGdlbmVyaWNVbndpbmQu
CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBvdXIgZnJhbWUgaXNuJ3Qgc2V0IHRvIHRoZSBh
Y3R1YWwgZnJhbWUgb2YgdGhlIGZ1bmN0aW9uCisgICAgICAgIC8vIHdlJ3JlIGV4aXRpbmcgZnJv
bSwgYnV0IHRvIHNvbWUgY2FsbGVlIGRvd24gdGhlIGNhbGwgc3RhY2suIFRoaXMgaXMgZmluZSwK
KyAgICAgICAgLy8gdGhlIHZlcnkgZmlyc3Qgaml0IGNvZGUgd2UgZW1pdCBpcyB0byByZXNldCB0
aGUgRlAgYW5kIFNQIHRvIGJlIHRoZSBwcm9wZXIKKyAgICAgICAgLy8gdmFsdWVzLiBCdXQsIGJl
Y2F1c2UgdGhlIGZpcnN0IHRpbWUgd2UgdGFrZSBhbiBleGl0LCB3ZSBtdXN0IGNvbXBpbGUgaXQs
CisgICAgICAgIC8vIHdlIG11c3QgYWxzbyByZXNldCBvdXIgZnJhbWUgaW4gQyBjb2RlLgorICAg
ICAgICBleGVjID0gZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaDsKKyAgICB9CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrKTsKQEAgLTE0Nyw2ICsxNTcsMTUgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CiAg
ICAgICAgIE9TUkV4aXRDb21waWxlciBleGl0Q29tcGlsZXIoaml0KTsKIAorICAgICAgICBpZiAo
ZXhpdC5tX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCkgeworICAgICAgICAg
ICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJp
dmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KKyAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0
IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCisgICAgICAgICAgICBq
aXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIH0KKwogICAgICAg
ICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+Y29tcGlsYXRpb24pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkocmV2aXNpb24gMTkyODQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY2LDcgKzU2Niw4IEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAKICAgICBpbnQgbG9j
YWxzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLmNhcHR1cmVk
U3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CiAgICAgaW50IHZhcmFyZ3NT
cGlsbFNsb3RzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZh
cmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCk7Ci0gICAgaW50IGpzQ2FsbFRoYXRNaWdodFRocm93
U3BpbGxPZmZzZXQgPSBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUuZXhjZXB0
aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFja21hcElEKTsKKyAgICBpbnQgb3NyRXhpdEZyb21HZW5l
cmljVW53aW5kU3RhY2tTcGlsbFNsb3QgID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAs
IHN0YXRlLmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCk7CisgICAgaml0Q29k
ZS0+b3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QgPSBvc3JFeGl0RnJvbUdl
bmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBn
cmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtp
XS5pbmxpbmVDYWxsRnJhbWU7CkBAIC03MDUsNyArNzA2LDcgQEAgc3RhdGljIHZvaWQgZml4RnVu
Y3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICB9CiAgICAgfQogICAgIEV4aXRUaHVua0dl
bmVyYXRvciBleGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpOwotICAgIGV4aXRUaHVua0dlbmVyYXRv
ci5lbWl0VGh1bmtzKGpzQ2FsbFRoYXRNaWdodFRocm93U3BpbGxPZmZzZXQpOworICAgIGV4aXRU
aHVua0dlbmVyYXRvci5lbWl0VGh1bmtzKCk7CiAgICAgaWYgKGV4aXRUaHVua0dlbmVyYXRvci5k
aWRUaGluZ3MoKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5maW5hbGl6ZXItPm9z
ckV4aXQuc2l6ZSgpKTsKICAgICAgICAgCkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgICAgICAvLyB0YWtp
bmcgcGxhY2UgYnkgZW5zdXJpbmcgd2Ugc3BpbGwgdGhlIG9yaWdpbmFsIGJhc2UgdmFsdWUgYW5k
IHRoZW4gcmVjb3ZlciBpdCBmcm9tCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzcGlsbCBz
bG90IGFzIHRoZSBmaXJzdCBzdGVwIGluIE9TUiBleGl0LgogICAgICAgICAgICAgICAgICAgICBp
ZiAoT1NSRXhpdCogZXhpdCA9IGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNhbGxPcGVyYXRpb25P
U1JFeGl0KGl0ZXItPnZhbHVlW2ldLmluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4
aXQtPnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIGpzQ2FsbFRoYXRNaWdo
dFRocm93U3BpbGxPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZXhpdC0+c3BpbGxS
ZWdpc3RlcnNUb1NwaWxsU2xvdChzbG93UGF0aEpJVCwgb3NyRXhpdEZyb21HZW5lcmljVW53aW5k
U3RhY2tTcGlsbFNsb3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVu
aXF1ZUV4Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDog
JmV4Y2VwdGlvblRhcmdldCwKQEAgLTkyOCw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2l0dWF0
aW9uIGhhcyBhIHJlYWxseSBpbnRlcmVzdGluZyByZWdpc3RlciBwcmVzZXJ2YXRpb24gc3Rvcnku
CiAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGZvciBHZXRCeUlkcy4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKE9TUkV4aXQqIGV4aXQgPSBleGNlcHRpb25IYW5kbGVy
TWFuYWdlci5jYWxsT3BlcmF0aW9uT1NSRXhpdChpdGVyLT52YWx1ZVtpXS5pbmRleCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNsb3dQ
YXRoSklULCBqc0NhbGxUaGF0TWlnaHRUaHJvd1NwaWxsT2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4aXQtPnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIG9z
ckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBz
bG93UGF0aEpJVCwgY29kZU9yaWdpbiwgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID8gJmV4Y2Vw
dGlvbkp1bXBzVG9MaW5rLmxhc3QoKS5maXJzdCA6ICZleGNlcHRpb25UYXJnZXQsCkBAIC0xMDUw
LDcgKzEwNTEsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CiAKICAgICAgICAgQ0NhbGxI
ZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgY2FsbC5lbWl0KGZh
c3RQYXRoSklULCBzdGF0ZSwganNDYWxsVGhhdE1pZ2h0VGhyb3dTcGlsbE9mZnNldCk7CisgICAg
ICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgc3RhdGUsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2lu
ZFN0YWNrU3BpbGxTbG90KTsKIAogICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsK
IApAQCAtMTA2NSw3ICsxMDY2LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICBKU0NhbGxWYXJhcmdzJiBjYWxsID0gc3RhdGUuanNDYWxsVmFyYXJn
c2VzW2ldOwogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwg
Y29kZUJsb2NrKTsKLSAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklULCBzdGF0ZSwgdmFyYXJn
c1NwaWxsU2xvdHNPZmZzZXQsIGpzQ2FsbFRoYXRNaWdodFRocm93U3BpbGxPZmZzZXQpOworICAg
ICAgICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIHN0YXRlLCB2YXJhcmdzU3BpbGxTbG90c09mZnNl
dCwgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwogCiAgICAgICAgIGNo
YXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsg
Y2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OwogICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXpl
T2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRUaHVua0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTI4NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDM1ICs0NiwyNCBAQCBFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1
bmtHZW5lcmF0b3IoCiB7CiB9CiAKLXZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmso
dW5zaWduZWQgaW5kZXgsIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGls
bFNsb3QpCit2b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4
KQogewotICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXpl
ci0+b3NyRXhpdFtpbmRleF07CiAgICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUuaml0Q29kZS0+
b3NyRXhpdFtpbmRleF07CisgICAgQVNTRVJUX1VOVVNFRChleGl0LCAhKGV4aXQud2lsbEFycml2
ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkgJiYgZXhpdC53aWxsQXJyaXZlQXRPU1JFeGl0
RnJvbUNhbGxPcGVyYXRpb24oKSkpOwogICAgIAorICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8m
IGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtpbmRleF07CiAgICAgaW5mby5tX3Ro
dW5rTGFiZWwgPSBsYWJlbCgpOwogCi0gICAgQVNTRVJUKCEoZXhpdC53aWxsQXJyaXZlQXRPU1JF
eGl0RnJvbUdlbmVyaWNVbndpbmQoKSAmJiBleGl0LndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2Fs
bE9wZXJhdGlvbigpKSk7Ci0gICAgaWYgKGV4aXQud2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5l
cmljVW53aW5kKCkpIHsKLSAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNQ2FsbGVlU2F2
ZXNCdWZmZXIoKTsKLSAgICAgICAgbG9hZFB0cih2bSgpLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JD
YXRjaCgpLCBmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLSBzdGF0aWNfY2FzdDxpbnQ2NF90PihtX3N0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5zdGFj
a1NpemVGb3JMb2NhbHMoKSkpLCAKLSAgICAgICAgICAgIGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgaWYgKGV4aXQubmVlZHNSZWdpc3RlclJl
Y292ZXJ5T25HZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSkKLSAgICAgICAgICAgIGV4aXQucmVj
b3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoKnRoaXMsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2lu
ZFN0YWNrU3BpbGxTbG90KTsKLSAgICB9IGVsc2UgaWYgKGV4aXQud2lsbEFycml2ZUF0T1NSRXhp
dEZyb21DYWxsT3BlcmF0aW9uKCkpCi0gICAgICAgIGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21T
cGlsbFNsb3QoKnRoaXMsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsK
LSAgICAKICAgICBwdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKFRy
dXN0ZWRJbW0zMihpbmRleCkpOwogICAgIGluZm8ubV90aHVua0p1bXAgPSBwYXRjaGFibGVKdW1w
KCk7CiAgICAgCiAgICAgbV9kaWRUaGluZ3MgPSB0cnVlOwogfQogCi12b2lkIEV4aXRUaHVua0dl
bmVyYXRvcjo6ZW1pdFRodW5rcyhpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNr
U3BpbGxTbG90KQordm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVua3MoKQogewogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXpl
KCk7ICsraSkKLSAgICAgICAgZW1pdFRodW5rKGksIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0
YWNrU3BpbGxTbG90KTsKKyAgICAgICAgZW1pdFRodW5rKGkpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVu
a0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE5Mjg0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDggKzQwLDggQEAgcHVibGljOgogICAgIEV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUp
OwogICAgIH5FeGl0VGh1bmtHZW5lcmF0b3IoKTsKICAgICAKLSAgICB2b2lkIGVtaXRUaHVuayh1
bnNpZ25lZCBpbmRleCwgaW50MzJfdCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxs
U2xvdCk7Ci0gICAgdm9pZCBlbWl0VGh1bmtzKGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53
aW5kU3RhY2tTcGlsbFNsb3QpOworICAgIHZvaWQgZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4KTsK
KyAgICB2b2lkIGVtaXRUaHVua3MoKTsKICAgICAKICAgICBib29sIGRpZFRoaW5ncygpIGNvbnN0
IHsgcmV0dXJuIG1fZGlkVGhpbmdzOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCShyZXZpc2lvbiAxOTI4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCBwdWJsaWM6
CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXREZXNjcmlwdG9yLCA4PiBvc3JFeGl0RGVzY3Jp
cHRvcnM7CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93UGF0aHM7CisgICAgaW50MzJfdCBvc3JFeGl0RnJv
bUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdDsKICAgICAKIHByaXZhdGU6CiAgICAgQ29kZVB0
ciBtX2FkZHJlc3NGb3JDYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTkyODQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODUsNiArMTg1LDI0IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogCiAgICAgQ0NhbGxI
ZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKIAorICAgIC8vIFRoZSBmaXJzdCB0aGluZyB3ZSBu
ZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFuIGV4Y2Vw
dGlvbi4KKyAgICBpZiAoZXhpdC53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQo
KSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOyAvLyBU
aGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhpcyBleGl0LCBsaWtlIGF0IGFsbCBvdGhlciB0aW1lcywg
dGhpcyBmaWVsZCBzaG91bGQgYmUgbm9uLW51bGwuCisgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1DYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICBqaXQubG9hZFB0cih2bS0+
YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChleGl0Lm5lZWRzUmVn
aXN0ZXJSZWNvdmVyeU9uR2VuZXJpY1Vud2luZE9TUkV4aXRQYXRoKCkpCisgICAgICAgICAgICBl
eGl0LnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KGppdCwgaml0Q29kZS0+b3NyRXhpdEZy
b21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOworCisgICAgICAgIC8vIERvIGEgcHVzaFRv
U2F2ZSBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBleGl0IGNvbXBpbGVyIGJlbG93IGV4cGVjdHMg
dGhlIHN0YWNrCisgICAgICAgIC8vIHRvIGxvb2sgbGlrZSBiZWNhdXNlIHRoYXQncyB0aGUgbGFz
dCB0aGluZyB0aGUgRXhpdFRodW5rR2VuZXJhdG9yIGRvZXMuCisgICAgICAgIGppdC5wdXNoVG9T
YXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDB4YmFkYmVlZikpOworICAgIH0gZWxzZSBpZiAoZXhpdC53aWxsQXJyaXZlQXRPU1JF
eGl0RnJvbUNhbGxPcGVyYXRpb24oKSkKKyAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJv
bVNwaWxsU2xvdChqaXQsIGppdENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3Bp
bGxTbG90KTsKKyAgICAKKwogICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFs
bCByZWdpc3RlcnMsIHRvIGJ1aWxkIHVwIHRoZSBKUyBzdGFjaywgdG8gZGVhbCB3aXRoIHVud2lu
ZAogICAgIC8vIGZpeHVwLCBwb2ludGVycyB0byBhbGwgb2YgdGhlIG9iamVjdHMgd2UgbWF0ZXJp
YWxpemUsIGFuZCB0aGUgZWxlbWVudHMgaW5zaWRlIHRob3NlIG9iamVjdHMKICAgICAvLyB0aGF0
IHdlIG1hdGVyaWFsaXplLgpAQCAtNTI0LDYgKzU0MiwxNiBAQCBleHRlcm4gIkMiIHZvaWQqIGNv
bXBpbGVGVExPU1JFeGl0KEV4ZWNTCiAKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkg
fHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExPU1JFeGl0KCkp
CiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyBPU1IgZXhpdCB3aXRoIGV4aXRJRCA9ICIsIGV4
aXRJRCwgIlxuIik7CisKKyAgICBpZiAoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkgewor
ICAgICAgICAvLyBXZSBtYXkgYXJyaXZlIGF0IHRoaXMgT1NSIGV4aXQgY29tcGlsYXRpb24gZnJv
bSBnZW5lcmljVW53aW5kLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgb3VyIGZyYW1lIGlz
bid0IHNldCB0byB0aGUgYWN0dWFsIGZyYW1lIG9mIHRoZSBmdW5jdGlvbgorICAgICAgICAvLyB3
ZSdyZSBleGl0aW5nIGZyb20sIGJ1dCB0byBzb21lIGNhbGxlZSBkb3duIHRoZSBjYWxsIHN0YWNr
LiBUaGlzIGlzIGZpbmUsCisgICAgICAgIC8vIHRoZSB2ZXJ5IGZpcnN0IGppdCBjb2RlIHdlIGVt
aXQgaXMgdG8gcmVzZXQgdGhlIEZQIGFuZCBTUCB0byBiZSB0aGUgcHJvcGVyCisgICAgICAgIC8v
IHZhbHVlcy4gQnV0LCBiZWNhdXNlIHRoZSBmaXJzdCB0aW1lIHdlIHRha2UgYW4gZXhpdCwgd2Ug
bXVzdCBjb21waWxlIGl0LAorICAgICAgICAvLyB3ZSBtdXN0IGFsc28gcmVzZXQgb3VyIGZyYW1l
IGluIEMgY29kZS4KKyAgICAgICAgZXhlYyA9IGV4ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2g7
CisgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CiAgICAgCg==
</data>
<flag name="review"
          id="291331"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="291386"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266495</attachid>
            <date>2015-12-02 19:07:35 -0800</date>
            <delta_ts>2015-12-04 12:58:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>23366</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyOTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE1LTEyLTAyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE9TUiBleGl0cyB0aGF0IGFyZSBleGNlcHRpb24gaGFuZGxlcnMgc2hvdWxkIGVtaXQgbGVzcyBj
b2RlIGVhZ2VybHkgaW4gdGhlIHRodW5rIGdlbmVyYXRvciwgYW5kIGluc3RlYWQsIHNob3VsZCBk
ZWZlciBhcyBtdWNoIGNvZGUgZ2VuZXJhdGlvbiBhcyBwb3NzaWJsZSB0byBiZSBsYXppbHkgZ2Vu
ZXJhdGVkIGluIHRoZSBleGl0IGl0c2VsZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2Ugbm8gbG9uZ2VyIGVtaXQgYW55IGV4dHJhIGNvZGUgZWFnZXJs
eSBmb3IgYW4gT1NSRXhpdCB0aGF0CisgICAgICAgIGlzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLiBX
ZSBlbWl0IGFsbCBjb2RlIGxhemlseSBpbiB0aGUgZXhpdAorICAgICAgICBpdHNlbGYuIFRoaXMg
aGFzIG9uZSBpbnRlcmVzdGluZyBjb25zZXF1ZW5jZSB3aGljaCBpcyB0aGF0IHRoZQorICAgICAg
ICBhY3R1YWwgQyBjYWxsIHRvIGNvbXBpbGUgdGhlIGV4aXQgZ29lcyB0aHJvdWdoIGFuIE9TUiBl
eGl0IGdlbmVyYXRpb24KKyAgICAgICAgdGh1bmsgdGhhdCBtdXN0IG5vdyBiZSBhd2FyZSBvZiBy
ZXNldHRpbmcgdGhlIGNhbGwgZnJhbWUgYW5kIHRoZSBzdGFjaworICAgICAgICBwb2ludGVyIHRv
IHRoZWlyIHByb3BlciB2YWx1ZXMgYmVmb3JlIG1ha2luZyB0aGUgY29tcGlsZU9TUkV4aXQgQwor
ICAgICAgICBjYWxsLiBUaGlzIGhhcyBvbmUgaW50ZXJlc3RpbmcgY29uc2VxdWVuY2UgaW4gdGhl
IEZUTCBiZWNhdXNlIHRoZQorICAgICAgICBGVEwgd2lsbCBkbyBhIHB1c2hUb1NhdmVJbW1lZGlh
dGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMgd2l0aCB0aGUKKyAgICAgICAgT1NSIGV4aXQgaW5k
ZXguIFdlIG11c3QgdGFrZSBjYXJlIHRvIHByZXNlcnZlIHRoaXMgZXhpdCBpbmRleCB3aGVuCisg
ICAgICAgIHdlIHJlc2V0IHRoZSBzdGFjayBwb2ludGVyIGJ5IHJlLXB1c2hpbmcgaXQgb250byB0
aGUgc3RhY2suCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRUeXBlKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5o
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmZyYW1lUmVnaXN0ZXJDb3VudE9mZnNl
dCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b2RlOjpzZXRPU1JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjbGVh
ck9TUkVudHJ5QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNvbW1vbkRhdGFP
ZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
OgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxl
clRodW5rKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAg
ICAgICAgKiBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVua3MpOgorICAgICAgICAqIGZ0bC9GVExFeGl0
VGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6
OmRpZFRoaW5ncyk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpjb21tb25EYXRhT2Zmc2V0KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpGVEw6OmxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkZUTDo6cmVnaXN0ZXJDbG9iYmVyQ2hlY2spOgorCiAyMDE1LTEyLTAy
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbSlND
XSBSZW1vdmUgaW5zZXJ0RWxlbWVudCgpIGZyb20gRlRMQjNPdXRwdXQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5Mjk4NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzAyLDYgKzMwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsK
ICAgICB9CiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1cm4gbV9qaXRD
b2RlOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBqaXRDb2RlT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRDb2RlKTsgfQogICAgIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSgpIGNvbnN0CiAgICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9q
aXRDb2RlLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHJldmlzaW9uIDE5Mjk4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYp
OwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBmcmFtZVJlZ2lzdGVyQ291bnRPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29tbW9uRGF0YSwgZnJhbWVSZWdpc3RlckNvdW50KTsgfQor
CiAgICAgUmVmUHRyPElubGluZUNhbGxGcmFtZVNldD4gaW5saW5lQ2FsbEZyYW1lczsKICAgICBW
ZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGNvZGVPcmlnaW5zOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9u
IDE5Mjk4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0T1NSRW50
cnlCbG9jayhWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIENvZGVCbG9jayogb3NyRW50cnlC
bG9jaykgeyBtX29zckVudHJ5QmxvY2suc2V0KHZtLCBvd25lciwgb3NyRW50cnlCbG9jayk7IH0K
ICAgICB2b2lkIGNsZWFyT1NSRW50cnlCbG9jaygpIHsgbV9vc3JFbnRyeUJsb2NrLmNsZWFyKCk7
IH0KICNlbmRpZgorCisgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25EYXRhT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0KICAgICAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBj
YWxsIHNldENvZGVSZWYoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTI5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTQgKzg2LDYg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24gPSBsYWJlbCgpOwogCi0gICAgICAg
IGlmIChleGl0Lm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKSB7Ci0gICAg
ICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdl
IGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAgICAgICAgLy8gU28sIHdl
IG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAg
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAg
ICAgICBsb2FkUHRyKHZtKCktPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZ3Jh
cGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICB9Ci0KICAg
ICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoaSksICZ2bSgpLT5vc3JFeGl0SW5kZXgpOwogICAgICAgICBleGl0LnNldFBhdGNo
YWJsZUNvZGVPZmZzZXQocGF0Y2hhYmxlSnVtcCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5Mjk4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw5IEBAIGV4dGVybiAiQyIgewogdm9pZCBjb21waWxl
T1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oIkRGRyBPU1IgRXhpdCBDb21waWxhdGlvbiIpOworCisgICAgaWYgKGV4ZWMtPnZtKCku
Y2FsbEZyYW1lRm9yQ2F0Y2gpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY2Fs
bEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKQEAgLTE0Nyw2ICsx
NTAsMTUgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIEND
YWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgIE9TUkV4aXRDb21waWxlciBl
eGl0Q29tcGlsZXIoaml0KTsKIAorICAgICAgICBpZiAoZXhpdC5tX3dpbGxBcnJpdmVBdE9TUkV4
aXRGcm9tR2VuZXJpY1Vud2luZCkgeworICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBh
IGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndp
bmQoKS4KKyAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUg
YW5kIHN0YWNrIHBvaW50ZXIuCisgICAgICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRy
ZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9j
ay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgIH0KKwogICAgICAgICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRD
YWxsRnJhbWUoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uaAkocmV2aXNpb24gMTkyOTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsOSBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhp
dC5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKQEAgLTM3LDYgKzQwLDYwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBl
cnMmLCBjb24KIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmLCBjb25z
dCBPU1JFeGl0QmFzZSYpOwogdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJz
JiwgY29uc3QgT1NSRXhpdEJhc2UmLCBib29sIGlzRXhpdGluZ1RvT3BDYXRjaCk7CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBKSVRDb2RlVHlwZT4KK3ZvaWQgYWRqdXN0RnJhbWVBbmRTdGFja0luT1NS
RXhpdENvbXBpbGVyVGh1bmsoTWFjcm9Bc3NlbWJsZXImIGppdCwgVk0qIHZtLCBib29sIGlzRlRM
T1NSRXhpdCkKK3sKKyAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2Yodm9pZCopOworICAg
IGlmIChpc0ZUTE9TUkV4aXQpCisgICAgICAgIHNjcmF0Y2hTaXplICs9IHNpemVvZih2b2lkKik7
CisKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJG
b3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIGJ1ZmZlcik7CisKKyAgICBpZiAoaXNGVExPU1JFeGl0KSB7CisgICAgICAgIC8v
IEZUTCBPU1JFeGl0cyBhcmUgZW50ZXJlZCB2aWEgdGhlIGNvZGUgRlRMRXhpdFRodW5rR2VuZXJh
dG9yIGVtaXRzIHdoaWNoIGRvZXMKKyAgICAgICAgLy8gcHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhv
dXRUb3VjaFJlZ2lzdGVycyB3aXRoIHRoZSBPU1IgZXhpdCBpbmRleC4gV2UgbmVlZCB0byBsb2Fk
CisgICAgICAgIC8vIHRoYXQgdG9wIHZhbHVlIGFuZCB0aGVuIHB1c2ggaXQgYmFjayB3aGVuIHdl
IHJlc2V0IG91ciBTUC4KKyAgICAgICAgaml0LnBlZWsoR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGJ1ZmZlciArIHNpemVvZih2b2lkKikpOwor
ICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgRlAgaW4gdGhlIGNhc2Ugb2YgYW4gZXhj
ZXB0aW9uLgorICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZGlkTm90SGF2ZUV4
Y2VwdGlvbiA9IGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICBkaWROb3RIYXZlRXhjZXB0aW9uLmxpbmsoJmppdCk7CisgICAgLy8g
V2UgbmVlZCB0byBtYWtlIHN1cmUgU1AgaXMgY29ycmVjdCBpbiBjYXNlIG9mIGFuIGV4Y2VwdGlv
bi4KKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgSlNTdGFjazo6Q29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpqaXRDb2RlT2Zmc2V0
KCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpJVENvZGVUeXBlOjpjb21tb25EYXRhT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgQ29tbW9uRGF0YTo6ZnJhbWVSZWdpc3RlckNvdW50T2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgLy8gVGhpcyBkb2VzIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0
ZXJDb3VudCAtIDEpKnNpemVvZihSZWdpc3Rlcikgd2hlcmU6CisgICAgLy8gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50IC0gMSkKKyAgICAvLyAgICAgPSBWaXJ0dWFs
UmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGZyYW1lUmVnaXN0ZXJDb3VudCAtIDEpCisgICAgLy8g
ICAgID0gLTEgLSAoZnJhbWVSZWdpc3RlckNvdW50IC0gMSkKKyAgICAvLyAgICAgPSAtZnJhbWVS
ZWdpc3RlckNvdW50CisgICAgaml0Lm5lZzMyKEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQubXVs
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5z
aWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOworI2VuZGlm
CisgICAgaml0LmFkZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVn
VDApOworICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworCisgICAgaWYgKGlzRlRMT1NSRXhpdCkgeworICAgICAgICAvLyBG
VEwgT1NSRXhpdHMgYXJlIGVudGVyZWQgdmlhIEZUTEV4aXRUaHVua0dlbmVyYXRvciBjb2RlIHdp
dGggZG9lcworICAgICAgICAvLyBwdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoUmVnaXN0
ZXJzLiBXZSBuZWVkIHRvIGxvYWQgdGhhdCB0b3AKKyAgICAgICAgLy8gcmVnaXN0ZXIgYW5kIHRo
ZW4gc3RvcmUgaXQgYmFjayB3aGVuIHdlIGhhdmUgb3VyIFNQIGJhY2sgdG8gYSBzYWZlIHZhbHVl
LgorICAgICAgICBqaXQubG9hZFB0cihidWZmZXIgKyBzaXplb2Yodm9pZCopLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIGppdC5wdXNoVG9TYXZlKEdQUkluZm86OnJlZ1QwKTsKKyAgICB9CisK
KyAgICBqaXQubG9hZFB0cihidWZmZXIsIEdQUkluZm86OnJlZ1QwKTsKK30KKworCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDE5Mjk4NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTcgKzMwLDIyIEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKwor
ICAgIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB3ZSB1c2UgdGhlIHNjcmF0Y2ggYnVm
ZmVyIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBhbHNvIHVzZXMgdGhlIHNjcmF0Y2ggYnVmZmVyLgor
ICAgIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5rPERGRzo6SklUQ29k
ZT4oaml0LCB2bSwgZmFsc2UpOwogICAgIAogICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyk7CiAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5Mjk4NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
Niw3ICs0MzYsOCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgCiAgICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFw
LCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwog
ICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVj
b3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpOwotICAgIGludCBqc0Nh
bGxUaGF0TWlnaHRUaHJvd1NwaWxsT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRN
YXAsIHN0YXRlLmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCk7CisgICAgaW50
IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90ICA9IG9mZnNldE9mU3RhY2tS
ZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5leGNlcHRpb25IYW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFw
SUQpOworICAgIGppdENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90
ID0gb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3Q7CiAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9pbmxp
bmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2FsbEZyYW1lOwpAQCAtNTc1LDcgKzU3Niw3IEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfQogICAgIH0K
ICAgICBFeGl0VGh1bmtHZW5lcmF0b3IgZXhpdFRodW5rR2VuZXJhdG9yKHN0YXRlKTsKLSAgICBl
eGl0VGh1bmtHZW5lcmF0b3IuZW1pdFRodW5rcyhqc0NhbGxUaGF0TWlnaHRUaHJvd1NwaWxsT2Zm
c2V0KTsKKyAgICBleGl0VGh1bmtHZW5lcmF0b3IuZW1pdFRodW5rcygpOwogICAgIGlmIChleGl0
VGh1bmtHZW5lcmF0b3IuZGlkVGhpbmdzKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
dGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIApAQCAtNjc5LDcgKzY4MCw3
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICAgICAgLy8gdGFraW5nIHBsYWNlIGJ5IGVuc3VyaW5nIHdlIHNwaWxsIHRoZSBvcmlnaW5h
bCBiYXNlIHZhbHVlIGFuZCB0aGVuIHJlY292ZXIgaXQgZnJvbQogICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgc3BpbGwgc2xvdCBhcyB0aGUgZmlyc3Qgc3RlcCBpbiBPU1IgZXhpdC4KICAgICAg
ICAgICAgICAgICAgICAgaWYgKE9TUkV4aXQqIGV4aXQgPSBleGNlcHRpb25IYW5kbGVyTWFuYWdl
ci5jYWxsT3BlcmF0aW9uT1NSRXhpdChpdGVyLT52YWx1ZVtpXS5pbmRleCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNsb3dQYXRoSklU
LCBqc0NhbGxUaGF0TWlnaHRUaHJvd1NwaWxsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4aXQtPnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIG9zckV4aXRG
cm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCiAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY29k
ZU9yaWdpbiwgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID8gJmV4Y2VwdGlvbkp1bXBzVG9MaW5r
Lmxhc3QoKS5maXJzdCA6ICZleGNlcHRpb25UYXJnZXQsCkBAIC03OTgsNyArNzk5LDcgQEAgc3Rh
dGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIHNpdHVhdGlvbiBoYXMgYSByZWFsbHkgaW50ZXJlc3RpbmcgcmVnaXN0ZXIgcHJl
c2VydmF0aW9uIHN0b3J5LgogICAgICAgICAgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBhYm92
ZSBmb3IgR2V0QnlJZHMuCiAgICAgICAgICAgICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0g
ZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbk9TUkV4aXQoaXRlci0+dmFsdWVb
aV0uaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhpdC0+c3BpbGxSZWdpc3RlcnNU
b1NwaWxsU2xvdChzbG93UGF0aEpJVCwganNDYWxsVGhhdE1pZ2h0VGhyb3dTcGlsbE9mZnNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90
KHNsb3dQYXRoSklULCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7CiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihzdGF0ZSwg
dXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sIGFkZGVkVW5pcXVlRXhjZXB0
aW9uSnVtcCA/ICZleGNlcHRpb25KdW1wc1RvTGluay5sYXN0KCkuZmlyc3QgOiAmZXhjZXB0aW9u
VGFyZ2V0LApAQCAtOTIwLDcgKzkyMSw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcygKICAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKIAog
ICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOwotICAgICAg
ICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIHN0YXRlLCBqc0NhbGxUaGF0TWlnaHRUaHJvd1NwaWxs
T2Zmc2V0KTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklULCBzdGF0ZSwgb3NyRXhpdEZy
b21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwogCiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJ
QyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3Ry
dWN0aW9uT2Zmc2V0OwogCkBAIC05MzUsNyArOTM2LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rp
b25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBKU0NhbGxWYXJhcmdzJiBjYWxsID0gc3RhdGUu
anNDYWxsVmFyYXJnc2VzW2ldOwogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQ
YXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklULCBz
dGF0ZSwgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQsIGpzQ2FsbFRoYXRNaWdodFRocm93U3BpbGxP
ZmZzZXQpOworICAgICAgICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIHN0YXRlLCB2YXJhcmdzU3Bp
bGxTbG90c09mZnNldCwgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwog
CiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVk
RnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OwogICAgICAgICBzaXplX3Qgc2l6
ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAx
OTI5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDM1ICs0NiwyNCBAQCBFeGl0VGh1bmtHZW5lcmF0
b3I6On5FeGl0VGh1bmtHZW5lcmF0b3IoCiB7CiB9CiAKLXZvaWQgRXhpdFRodW5rR2VuZXJhdG9y
OjplbWl0VGh1bmsodW5zaWduZWQgaW5kZXgsIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53
aW5kU3RhY2tTcGlsbFNsb3QpCit2b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVu
c2lnbmVkIGluZGV4KQogewotICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX3N0
YXRlLmZpbmFsaXplci0+b3NyRXhpdFtpbmRleF07CiAgICAgT1NSRXhpdCYgZXhpdCA9IG1fc3Rh
dGUuaml0Q29kZS0+b3NyRXhpdFtpbmRleF07CisgICAgQVNTRVJUX1VOVVNFRChleGl0LCAhKGV4
aXQud2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkgJiYgZXhpdC53aWxsQXJy
aXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSkpOwogICAgIAorICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtpbmRleF07CiAg
ICAgaW5mby5tX3RodW5rTGFiZWwgPSBsYWJlbCgpOwogCi0gICAgQVNTRVJUKCEoZXhpdC53aWxs
QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSAmJiBleGl0LndpbGxBcnJpdmVBdE9T
UkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKSk7Ci0gICAgaWYgKGV4aXQud2lsbEFycml2ZUF0T1NS
RXhpdEZyb21HZW5lcmljVW53aW5kKCkpIHsKLSAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKLSAgICAgICAgbG9hZFB0cih2bSgpLT5hZGRyZXNzT2ZD
YWxsRnJhbWVGb3JDYXRjaCgpLCBmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLSBzdGF0aWNfY2FzdDxpbnQ2NF90PihtX3N0YXRlLmppdENvZGUtPnN0
YWNrbWFwcy5zdGFja1NpemVGb3JMb2NhbHMoKSkpLCAKLSAgICAgICAgICAgIGZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgaWYgKGV4aXQubmVl
ZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSkKLSAgICAgICAg
ICAgIGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoKnRoaXMsIG9zckV4aXRGcm9t
R2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLSAgICB9IGVsc2UgaWYgKGV4aXQud2lsbEFy
cml2ZUF0T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkpCi0gICAgICAgIGV4aXQucmVjb3ZlclJl
Z2lzdGVyc0Zyb21TcGlsbFNsb3QoKnRoaXMsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNr
U3BpbGxTbG90KTsKLSAgICAKICAgICBwdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5n
UmVnaXN0ZXJzKFRydXN0ZWRJbW0zMihpbmRleCkpOwogICAgIGluZm8ubV90aHVua0p1bXAgPSBw
YXRjaGFibGVKdW1wKCk7CiAgICAgCiAgICAgbV9kaWRUaGluZ3MgPSB0cnVlOwogfQogCi12b2lk
IEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rcyhpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJp
Y1Vud2luZFN0YWNrU3BpbGxTbG90KQordm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVu
a3MoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0YXRlLmZpbmFsaXplci0+
b3NyRXhpdC5zaXplKCk7ICsraSkKLSAgICAgICAgZW1pdFRodW5rKGksIG9zckV4aXRGcm9tR2Vu
ZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKKyAgICAgICAgZW1pdFRodW5rKGkpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE5Mjk4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogICAgIEV4aXRUaHVua0dlbmVyYXRvcihT
dGF0ZSYgc3RhdGUpOwogICAgIH5FeGl0VGh1bmtHZW5lcmF0b3IoKTsKICAgICAKLSAgICB2b2lk
IGVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCwgaW50MzJfdCBvc3JFeGl0RnJvbUdlbmVyaWNVbndp
bmRTdGFja1NwaWxsU2xvdCk7Ci0gICAgdm9pZCBlbWl0VGh1bmtzKGludDMyX3Qgb3NyRXhpdEZy
b21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOworICAgIHZvaWQgZW1pdFRodW5rKHVuc2ln
bmVkIGluZGV4KTsKKyAgICB2b2lkIGVtaXRUaHVua3MoKTsKICAgICAKICAgICBib29sIGRpZFRo
aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZGlkVGhpbmdzOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxOTI5ODcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTIgKzkx
LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBKSVRDb2RlKiBmdGwoKSBvdmVycmlkZTsKICAgICBE
Rkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOworICAgIHN0YXRpYyBwdHJkaWZm
X3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBj
b21tb24pOyB9CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBTZWdtZW50
ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhp
dERlc2NyaXB0b3IsIDg+IG9zckV4aXREZXNjcmlwdG9yczsKICAgICBTdGFja01hcHMgc3RhY2tt
YXBzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoPj4gbGF6eVNsb3dQ
YXRoczsKKyAgICBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90
OwogICAgIAogcHJpdmF0ZToKICAgICBDb2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxOTI5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMjYgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwog
CisgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVzdGFibGlzaCBvdXIg
ZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgorICAgIGlmIChleGl0LndpbGxBcnJp
dmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCgpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7IC8vIFRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0aGlzIGV4
aXQsIGxpa2UgYXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGZpZWxkIHNob3VsZCBiZSBub24tbnVs
bC4KKyAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUNhbGxlZVNhdmVzQnVmZmVy
KCk7CisgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAgICAgaWYgKGV4aXQubmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmljVW53aW5k
T1NSRXhpdFBhdGgoKSkKKyAgICAgICAgICAgIGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGls
bFNsb3Qoaml0LCBqaXRDb2RlLT5vc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xv
dCk7CisKKyAgICAgICAgLy8gRG8gYSBwdXNoVG9TYXZlIGJlY2F1c2UgdGhhdCdzIHdoYXQgdGhl
IGV4aXQgY29tcGlsZXIgYmVsb3cgZXhwZWN0cyB0aGUgc3RhY2sKKyAgICAgICAgLy8gdG8gbG9v
ayBsaWtlIGJlY2F1c2UgdGhhdCdzIHRoZSBsYXN0IHRoaW5nIHRoZSBFeGl0VGh1bmtHZW5lcmF0
b3IgZG9lcy4gVGhlIGNvZGUKKyAgICAgICAgLy8gYmVsb3cgZG9lc24ndCBhY3R1YWxseSB1c2Ug
dGhlIHZhbHVlIHRoYXQgd2FzIHB1c2hlZCwgYnV0IGl0IGRvZXMgcmVseSBvbiB0aGUKKyAgICAg
ICAgLy8gZ2VuZXJhbCBzaGFwZSBvZiB0aGUgc3RhY2sgYmVpbmcgYXMgaXQgaXMgaW4gdGhlIG5v
bi1leGNlcHRpb24gT1NSIGNhc2UuCisgICAgICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0
aG91dFRvdWNoaW5nUmVnaXN0ZXJzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4YmFkYmVl
ZikpOworICAgIH0gZWxzZSBpZiAoZXhpdC53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVy
YXRpb24oKSkKKyAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChqaXQs
IGppdENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKKyAgICAK
KwogICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMsIHRv
IGJ1aWxkIHVwIHRoZSBKUyBzdGFjaywgdG8gZGVhbCB3aXRoIHVud2luZAogICAgIC8vIGZpeHVw
LCBwb2ludGVycyB0byBhbGwgb2YgdGhlIG9iamVjdHMgd2UgbWF0ZXJpYWxpemUsIGFuZCB0aGUg
ZWxlbWVudHMgaW5zaWRlIHRob3NlIG9iamVjdHMKICAgICAvLyB0aGF0IHdlIG1hdGVyaWFsaXpl
LgpAQCAtNTI0LDYgKzU0NCw5IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQo
RXhlY1MKIAogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJi
b3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSkKICAgICAgICAgZGF0YUxv
ZygiQ29tcGlsaW5nIE9TUiBleGl0IHdpdGggZXhpdElEID0gIiwgZXhpdElELCAiXG4iKTsKKwor
ICAgIGlmIChleGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoKQorICAgICAgICBSRUxFQVNFX0FT
U0VSVChleGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOwogICAgIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAxOTI5ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkFzc2VtYmx5
SGVscGVycy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1
ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsZXIuaCIKICNpbmNsdWRl
ICJGVExPcGVyYXRpb25zLmgiCkBAIC00MSw5ICs0MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBG
dW5jdGlvblB0ciBnZW5lcmF0aW9uRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVk
IGV4dHJhUG9wc1RvUmVzdG9yZSkKKyAgICBWTSogdm0sIEZ1bmN0aW9uUHRyIGdlbmVyYXRpb25G
dW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBi
b29sIGRvRnJhbWVBbmRTdGFja0FkanVzdG1lbnQpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGpp
dCh2bSwgMCk7CisKKyAgICBpZiAoZG9GcmFtZUFuZFN0YWNrQWRqdXN0bWVudCkgeworICAgICAg
ICAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgd2UgdXNlIHRoZSBzY3JhdGNoIGJ1ZmZl
ciBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gYWxzbyB1c2VzIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAg
ICAgICAgYWRqdXN0RnJhbWVBbmRTdGFja0luT1NSRXhpdENvbXBpbGVyVGh1bms8RlRMOjpKSVRD
b2RlPihqaXQsIHZtLCB0cnVlKTsKKyAgICB9CiAgICAgCiAgICAgLy8gTm90ZSB0aGF0IHRoZSAi
cmV0dXJuIGFkZHJlc3MiIHdpbGwgYmUgdGhlIElEIHRoYXQgd2UgcGFzcyB0byB0aGUgZ2VuZXJh
dGlvbiBmdW5jdGlvbi4KICAgICAKQEAgLTExNSwxNCArMTIxLDE0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKIHsKICAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jl
c3RvcmUgPSAwOwogICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAot
ICAgICAgICB2bSwgY29tcGlsZUZUTE9TUkV4aXQsICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0
aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSk7CisgICAgICAgIHZtLCBjb21waWxlRlRMT1NSRXhp
dCwgIkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCB0
cnVlKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxhenlTbG93UGF0aEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3Jl
ID0gMTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICAg
ICAgdm0sIGNvbXBpbGVGVExMYXp5U2xvd1BhdGgsICJGVEwgbGF6eSBzbG93IHBhdGggZ2VuZXJh
dGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSk7CisgICAgICAgIHZtLCBjb21waWxlRlRM
TGF6eVNsb3dQYXRoLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBleHRy
YVBvcHNUb1Jlc3RvcmUsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVy
Q2hlY2soQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyKQo=
</data>
<flag name="review"
          id="291510"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>