<?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>74750</bug_id>
          
          <creation_ts>2011-12-16 14:35:50 -0800</creation_ts>
          <short_desc>WebAudio: Add support for AudioNode &quot;tailTime()&quot; and &quot;latencyTime()&quot;</short_desc>
          <delta_ts>2012-03-21 11:41:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (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>
          
          <blocked>74553</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>crogers</cc>
    
    <cc>rtoy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>523036</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-12-16 14:35:50 -0800</bug_when>
    <thetext>WebCore: Add support for AudioNode &quot;tailTime()&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523044</commentid>
    <comment_count>1</comment_count>
      <attachid>119674</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-12-16 14:41:21 -0800</bug_when>
    <thetext>Created attachment 119674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537435</commentid>
    <comment_count>2</comment_count>
      <attachid>122836</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-01-17 16:23:14 -0800</bug_when>
    <thetext>Created attachment 122836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573070</commentid>
    <comment_count>3</comment_count>
      <attachid>130663</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-07 11:43:12 -0800</bug_when>
    <thetext>Created attachment 130663
Patch

Updated patch to remove the dependency on bug #74553.  Will upload the remaining work to a new bug, TBD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573131</commentid>
    <comment_count>4</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-07 12:45:35 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Updated patch to remove the dependency on bug #74553.  Will upload the remaining work to a new bug, TBD.

Actually, the order of patch dependencies will just switch.  #74553 is now marked as depending on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573196</commentid>
    <comment_count>5</comment_count>
      <attachid>130686</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-07 13:43:11 -0800</bug_when>
    <thetext>Created attachment 130686
Patch

Added tailTime() overrides for more classes. (AudioDSPKernel, Biquad, EqualPowerPanner, HRTFPanner, Panner, BiquadDSPKernel, BiquadFilterNode, BiquadProcessor, DelayDSPKernel, WaveShaperDSPKernel.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574380</commentid>
    <comment_count>6</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-08 16:38:07 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=130686) [details]
&gt; Patch
&gt; 
&gt; Added tailTime() overrides for more classes. (AudioDSPKernel, Biquad, EqualPowerPanner, HRTFPanner, Panner, BiquadDSPKernel, BiquadFilterNode, BiquadProcessor, DelayDSPKernel, WaveShaperDSPKernel.)

Sounds good.  Haven&apos;t done a review of this code yet, but did notice a possible change that might be applied in this patch.  In AudioNode::finishDeref, there&apos;s a test for ConvolverNode and DelayNode so that their outputs are not disabled (along with a FIXME comment).  This patch should probably update the test to cover any node that has a non-zero tailTime().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575197</commentid>
    <comment_count>7</comment_count>
      <attachid>130686</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-09 14:01:56 -0800</bug_when>
    <thetext>Comment on attachment 130686
Patch

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

&gt; Source/WebCore/platform/audio/Biquad.h:85
&gt; +    int tailSamples() const { return 2; }

2 is not the correct number of tail samples. :-)  The theoretical value is infinity, but pragmatic actual value depends on the filter coefficients and also depends on when we might consider the output close enough to zero.  As a first cut maybe just use 128?

&gt; Source/WebCore/platform/audio/HRTFPanner.cpp:299
&gt; +    return MaxDelayTimeSeconds;

This is not quite right.  We also need to add some time for the HRTF filter impulse responses themselves, and also an additional value due to the fact that the filters are implemented using a convolver with its own latency.  Perhaps as a first cut we can just use 512 sample frames because that&apos;s how much noteGrainOn always adds to handle the HRTF filters.  If we do just use 512, we should probably add a comment about doing a better job of figuring out the correct value.

&gt; Source/WebCore/webaudio/AudioBasicProcessorNode.h:59
&gt; +    const AudioProcessor* processor() const { return m_processor.get(); }

Is it necessary to do the const-correctness in this patch?  It seems independent of adding tailTime().

&gt; Source/WebCore/webaudio/AudioContext.h:98
&gt; +    float sampleRate() const { return m_destinationNode-&gt;sampleRate(); }

Same comment about const-correcness in this patch instead of a different one.  Applies also to the changes in AudioDestinationNode.h, and AudioNode.h.

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:160
&gt; +

Shouldn&apos;t the tailTime be the max tail time of all the kernels?  Isn&apos;t each kernel applied to a different channel, and hence the tail times don&apos;t sum?

&gt; Source/WebCore/webaudio/ConvolverNode.cpp:156
&gt; +    return m_reverb ? m_reverb-&gt;impulseResponseLength() / sampleRate() : 0;

You have the correct expression in the patch for bug 74533 (silence hint).  I think this patch should use the correct expression instead of in 74533.

&gt; Source/WebCore/webaudio/DelayDSPKernel.cpp:139
&gt; +    return max(m_desiredDelayFrames, m_maxDelayTime) / sampleRate();

Can the max value ever NOT be m_maxDelayTime?

&gt; Source/WebCore/webaudio/DelayNode.cpp:48
&gt; +    return delayProcessor()-&gt;delayTime()-&gt;value();

Just curious.  The delay time can change, so you&apos;re allowing the tailTime to change with that?  Do you think there might be issues if the delay time is increasing and we&apos;ll always process enough to capture that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575348</commentid>
    <comment_count>8</comment_count>
      <attachid>130686</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-09 16:53:06 -0800</bug_when>
    <thetext>Comment on attachment 130686
Patch

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

&gt;&gt; Source/WebCore/platform/audio/Biquad.h:85
&gt;&gt; +    int tailSamples() const { return 2; }
&gt; 
&gt; 2 is not the correct number of tail samples. :-)  The theoretical value is infinity, but pragmatic actual value depends on the filter coefficients and also depends on when we might consider the output close enough to zero.  As a first cut maybe just use 128?

Yes, I&apos;m afraid I don&apos;t have the math necessary to calculate the tail time of a BiquadFilter.  It may be more correct to just return positive-infinity from BiquadFilter::tailTime().  This will cause a performance problem once silence propagation goes in, but some of that performance can be regained by modifying the Biquad processor to detect when it has generated silence and set the output bus as silent appropriately.

&gt;&gt; Source/WebCore/platform/audio/HRTFPanner.cpp:299
&gt;&gt; +    return MaxDelayTimeSeconds;
&gt; 
&gt; This is not quite right.  We also need to add some time for the HRTF filter impulse responses themselves, and also an additional value due to the fact that the filters are implemented using a convolver with its own latency.  Perhaps as a first cut we can just use 512 sample frames because that&apos;s how much noteGrainOn always adds to handle the HRTF filters.  If we do just use 512, we should probably add a comment about doing a better job of figuring out the correct value.

This one is going to be even more difficult given that the impulse responses will change based on what azimuth and elevation are provided (and what previous azimuth and elevation parameters were!).

It might be easier to ask the HRTFDatabase what the maximum delay of its kernels is.  Then add in whatever latency is introduced by the convolvers.

&gt;&gt; Source/WebCore/webaudio/AudioBasicProcessorNode.h:59
&gt;&gt; +    const AudioProcessor* processor() const { return m_processor.get(); }
&gt; 
&gt; Is it necessary to do the const-correctness in this patch?  It seems independent of adding tailTime().

We can pull the const-correctness issues into their own patch.

&gt;&gt; Source/WebCore/webaudio/AudioContext.h:98
&gt;&gt; +    float sampleRate() const { return m_destinationNode-&gt;sampleRate(); }
&gt; 
&gt; Same comment about const-correcness in this patch instead of a different one.  Applies also to the changes in AudioDestinationNode.h, and AudioNode.h.

Ditto.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:160
&gt;&gt; +
&gt; 
&gt; Shouldn&apos;t the tailTime be the max tail time of all the kernels?  Isn&apos;t each kernel applied to a different channel, and hence the tail times don&apos;t sum?

Whoops, yes that&apos;s right.  Changed.

&gt;&gt; Source/WebCore/webaudio/ConvolverNode.cpp:156
&gt;&gt; +    return m_reverb ? m_reverb-&gt;impulseResponseLength() / sampleRate() : 0;
&gt; 
&gt; You have the correct expression in the patch for bug 74533 (silence hint).  I think this patch should use the correct expression instead of in 74533.

Indeed, I&apos;ll pull it in.

&gt;&gt; Source/WebCore/webaudio/DelayDSPKernel.cpp:139
&gt;&gt; +    return max(m_desiredDelayFrames, m_maxDelayTime) / sampleRate();
&gt; 
&gt; Can the max value ever NOT be m_maxDelayTime?

Nope.  I&apos;ll get rid of the max().

&gt;&gt; Source/WebCore/webaudio/DelayNode.cpp:48
&gt;&gt; +    return delayProcessor()-&gt;delayTime()-&gt;value();
&gt; 
&gt; Just curious.  The delay time can change, so you&apos;re allowing the tailTime to change with that?  Do you think there might be issues if the delay time is increasing and we&apos;ll always process enough to capture that?

The alternative would be to ask the kernel what it&apos;s tailTime() is?  Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575373</commentid>
    <comment_count>9</comment_count>
      <attachid>130686</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-09 17:33:28 -0800</bug_when>
    <thetext>Comment on attachment 130686
Patch

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

&gt; Source/WebCore/platform/audio/AudioDSPKernel.h:66
&gt; +    virtual double tailTime() const = 0;

It&apos;s up to you how you want to stage the patches, but I think it would be a lot easier to kill two birds with one stone and also define the &quot;latency()&quot; method here and everywhere else since the changes are likely to occur in exactly the same places, and I think we&apos;ll need to have the latency() info (in addition to the tailTime) in order to implement silent hint propagation.

&gt;&gt;&gt; Source/WebCore/platform/audio/Biquad.h:85
&gt;&gt;&gt; +    int tailSamples() const { return 2; }
&gt;&gt; 
&gt;&gt; 2 is not the correct number of tail samples. :-)  The theoretical value is infinity, but pragmatic actual value depends on the filter coefficients and also depends on when we might consider the output close enough to zero.  As a first cut maybe just use 128?
&gt; 
&gt; Yes, I&apos;m afraid I don&apos;t have the math necessary to calculate the tail time of a BiquadFilter.  It may be more correct to just return positive-infinity from BiquadFilter::tailTime().  This will cause a performance problem once silence propagation goes in, but some of that performance can be regained by modifying the Biquad processor to detect when it has generated silence and set the output bus as silent appropriately.

At this time, I wouldn&apos;t even bother defining tailSamples in this class (and the other lower-level Biquad classes), and instead just hard-code an &quot;empirical&quot; tailTime() value in BiquadFilterNode of say 200ms which should be more than sufficient.  We can add a FIXME there about possibly refining it later on.

&gt; Source/WebCore/platform/audio/EqualPowerPanner.h:42
&gt; +    virtual double tailTime() const OVERRIDE { return 0; }

Is this needed, since the default impl already returns 0?

&gt;&gt;&gt; Source/WebCore/platform/audio/HRTFPanner.cpp:299
&gt;&gt;&gt; +    return MaxDelayTimeSeconds;
&gt;&gt; 
&gt;&gt; This is not quite right.  We also need to add some time for the HRTF filter impulse responses themselves, and also an additional value due to the fact that the filters are implemented using a convolver with its own latency.  Perhaps as a first cut we can just use 512 sample frames because that&apos;s how much noteGrainOn always adds to handle the HRTF filters.  If we do just use 512, we should probably add a comment about doing a better job of figuring out the correct value.
&gt; 
&gt; This one is going to be even more difficult given that the impulse responses will change based on what azimuth and elevation are provided (and what previous azimuth and elevation parameters were!).
&gt; 
&gt; It might be easier to ask the HRTFDatabase what the maximum delay of its kernels is.  Then add in whatever latency is introduced by the convolvers.

All the impulse responses for all azimuth and elevation values should be of length fftSize()/2, so I think we can do:

MaxDelayTimeSeconds + fftSize()/2

&gt; Source/WebCore/platform/audio/Panner.h:60
&gt; +    virtual double tailTime() const = 0;

Does this need to be pure virtual -- maybe return 0 by default and then we don&apos;t need to implement for EqualPowerPanner

&gt;&gt;&gt; Source/WebCore/webaudio/DelayNode.cpp:48
&gt;&gt;&gt; +    return delayProcessor()-&gt;delayTime()-&gt;value();
&gt;&gt; 
&gt;&gt; Just curious.  The delay time can change, so you&apos;re allowing the tailTime to change with that?  Do you think there might be issues if the delay time is increasing and we&apos;ll always process enough to capture that?
&gt; 
&gt; The alternative would be to ask the kernel what it&apos;s tailTime() is?  Sure.

We might just have to return maxDelayTime because of Raymond&apos;s point.  Could bring up tricky bugs otherwise...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576315</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 11:28:07 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 130686 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130686&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernel.h:66
&gt; &gt; +    virtual double tailTime() const = 0;
&gt; 
&gt; It&apos;s up to you how you want to stage the patches, but I think it would be a lot easier to kill two birds with one stone and also define the &quot;latency()&quot; method here and everywhere else since the changes are likely to occur in exactly the same places, and I think we&apos;ll need to have the latency() info (in addition to the tailTime) in order to implement silent hint propagation.

Sure.  I&apos;ve updated the title of the bug to match.  (Though, I chose the name &quot;latencyTime()&quot; to explicitly differentiate between that and &quot;latencySamples()&quot; and &quot;latencyFrames()&quot;.)

&gt; &gt;&gt;&gt; Source/WebCore/platform/audio/Biquad.h:85
&gt; &gt;&gt;&gt; +    int tailSamples() const { return 2; }
&gt; &gt;&gt; 
&gt; &gt;&gt; 2 is not the correct number of tail samples. :-)  The theoretical value is infinity, but pragmatic actual value depends on the filter coefficients and also depends on when we might consider the output close enough to zero.  As a first cut maybe just use 128?
&gt; &gt; 
&gt; &gt; Yes, I&apos;m afraid I don&apos;t have the math necessary to calculate the tail time of a BiquadFilter.  It may be more correct to just return positive-infinity from BiquadFilter::tailTime().  This will cause a performance problem once silence propagation goes in, but some of that performance can be regained by modifying the Biquad processor to detect when it has generated silence and set the output bus as silent appropriately.
&gt; 
&gt; At this time, I wouldn&apos;t even bother defining tailSamples in this class (and the other lower-level Biquad classes), and instead just hard-code an &quot;empirical&quot; tailTime() value in BiquadFilterNode of say 200ms which should be more than sufficient.  We can add a FIXME there about possibly refining it later on.

Done.

&gt; &gt; Source/WebCore/platform/audio/EqualPowerPanner.h:42
&gt; &gt; +    virtual double tailTime() const OVERRIDE { return 0; }
&gt; 
&gt; Is this needed, since the default impl already returns 0?

No, and I&apos;ve reorganized a lot of the headers to eliminate these extra declarations.

&gt; &gt;&gt;&gt; Source/WebCore/platform/audio/HRTFPanner.cpp:299
&gt; &gt;&gt;&gt; +    return MaxDelayTimeSeconds;
&gt; &gt;&gt; 
&gt; &gt;&gt; This is not quite right.  We also need to add some time for the HRTF filter impulse responses themselves, and also an additional value due to the fact that the filters are implemented using a convolver with its own latency.  Perhaps as a first cut we can just use 512 sample frames because that&apos;s how much noteGrainOn always adds to handle the HRTF filters.  If we do just use 512, we should probably add a comment about doing a better job of figuring out the correct value.
&gt; &gt; 
&gt; &gt; This one is going to be even more difficult given that the impulse responses will change based on what azimuth and elevation are provided (and what previous azimuth and elevation parameters were!).
&gt; &gt; 
&gt; &gt; It might be easier to ask the HRTFDatabase what the maximum delay of its kernels is.  Then add in whatever latency is introduced by the convolvers.
&gt; 
&gt; All the impulse responses for all azimuth and elevation values should be of length fftSize()/2, so I think we can do:
&gt; 
&gt; MaxDelayTimeSeconds + fftSize()/2

Changed.

&gt; &gt; Source/WebCore/platform/audio/Panner.h:60
&gt; &gt; +    virtual double tailTime() const = 0;
&gt; 
&gt; Does this need to be pure virtual -- maybe return 0 by default and then we don&apos;t need to implement for EqualPowerPanner

Again, the reorganization has fixed this one too.

&gt; &gt;&gt;&gt; Source/WebCore/webaudio/DelayNode.cpp:48
&gt; &gt;&gt;&gt; +    return delayProcessor()-&gt;delayTime()-&gt;value();
&gt; &gt;&gt; 
&gt; &gt;&gt; Just curious.  The delay time can change, so you&apos;re allowing the tailTime to change with that?  Do you think there might be issues if the delay time is increasing and we&apos;ll always process enough to capture that?
&gt; &gt; 
&gt; &gt; The alternative would be to ask the kernel what it&apos;s tailTime() is?  Sure.
&gt; 
&gt; We might just have to return maxDelayTime because of Raymond&apos;s point.  Could bring up tricky bugs otherwise...

Sure. Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576327</commentid>
    <comment_count>11</comment_count>
      <attachid>131366</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 11:36:28 -0700</bug_when>
    <thetext>Created attachment 131366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576331</commentid>
    <comment_count>12</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 11:38:12 -0700</bug_when>
    <thetext>The Biquad::latencySamples() might be wrong; I&apos;d like to get an opinion on that.  And I made the AudioNode::tailTime() and ::latencyTime() functions pure virtual, which means a lot more boilerplate for subclasses, but with the benefit of ensuring new nodes have the correct values for those functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576410</commentid>
    <comment_count>13</comment_count>
      <attachid>131366</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-12 12:54:29 -0700</bug_when>
    <thetext>Comment on attachment 131366
Patch

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

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:118
&gt; +double AudioDSPKernelProcessor::tailTime() const

I think it will be sufficient to consider that the tailTime of each kernel is identical, so we can simply return the first kernel&apos;s tailTime()

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:129
&gt; +double AudioDSPKernelProcessor::latencyTime() const

ditto

&gt; Source/WebCore/platform/audio/Biquad.cpp:585
&gt; +size_t Biquad::latencySamples() const

Normally a biquad&apos;s latency is considered to be 0.  Any tiny delays (group delays caused by phase response) are considered part of the effect itself and *not* actual latency (similar to DelayNode and ConvolverNode)

So I think we can remove this method, and simply return 0 in BiquadDSPKernel::latencyTime()

&gt; Source/WebCore/platform/audio/Biquad.h:85
&gt; +    size_t latencySamples() const;

as mentioned above, don&apos;t worry about adding this method

&gt; Source/WebCore/platform/audio/HRTFPanner.cpp:299
&gt; +    return MaxDelayTimeSeconds;

The HRTF processing is divided into two parts: a delay line, plus an FFTConvolver.  They each contribute to the tailTime, so we have:

MaxDelayTimeSeconds + (fftSize() / 2) / sampleRate();

It seems strange to see this value appear as part of the tailTime *and* for the latencyTime, but that&apos;s the nature of convolution as implemented by an FFTConvolver:
* FFTConvolver has a latency of fftSize()/2 because it uses overlap-add algorithm with FFT (but direct convolution algorithm has no latency)
* convolution in general has a tailTime equal to the length of the impulse response (which happens to equal fftSize()/2)

I think this is tricky enough that we should add comments here and in the latencyTime() method below to explain what&apos;s going on.

&gt; Source/WebCore/platform/audio/Reverb.cpp:231
&gt; +size_t Reverb::latencySamples() const

It shouldn&apos;t be necessary to find the max latency of all the convolvers because they should always all be equal.  It&apos;s sufficient to query the first one...

&gt; Source/WebCore/platform/audio/ReverbConvolver.h:65
&gt; +    size_t latencySamples() const { return m_minFFTSize / 2; }

I&apos;d add a FIXME that the latency *should* be zero, and add a link to the bug:
https://bugs.webkit.org/show_bug.cgi?id=75564

&gt; Source/WebCore/webaudio/AudioNode.h:139
&gt;  

I think it would be worth adding short comments for each of these methods to make sure the definitions are clear.  You can probably improve the wording, but something like:

// tailTime() is the length of time (not counting latency time) where non-zero output may occur after continuous silent input.
// latencyTime() is the length of time it takes for non-zero output to appear after non-zero input is provided.  This only applies to processing delay
// which is an artifact of the processing algorithm chosen and is *not* part of the intrinsic desired effect.  For example, a &quot;delay&quot; effect is expected
// to delay the signal, and thus would not be considered latency.

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:142
&gt; +    // an infinite tailTime. In practice, Biquad filters will not have a tailTime of longer

&quot;will not&quot; -&gt; &quot;will not usually (except for very high resonance values)&quot;
We may consider detecting high-resonance cases in the future...

I&apos;d move this comment to above line 37 (where you define MaxBiquadDelayTime)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576417</commentid>
    <comment_count>14</comment_count>
      <attachid>131366</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-12 12:57:42 -0700</bug_when>
    <thetext>Comment on attachment 131366
Patch

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

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:123
&gt; +        if (kernelTailTime &gt; maxTailTime)

Maybe use std::max()?

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:134
&gt; +        if (kernelLatencyTime &gt; maxLatencyTime)

Maybe use std::max()?

&gt; Source/WebCore/platform/audio/DynamicsCompressor.h:82
&gt; +    double latencyTime() const { return m_compressor.latencyFrames()  / sampleRate(); }

Round-off error when dividing by float sampleRate().

&gt; Source/WebCore/platform/audio/HRTFPanner.cpp:304
&gt; +    return (fftSize() / 2) / sampleRate();

Maybe add MaxDelayTimeSeconds here?

Plus round-off issue when dividing by sampleRate() which is a float.

&gt; Source/WebCore/platform/audio/Panner.h:61
&gt; +    virtual double latencyTime() const = 0;

As Chris mentioned earlier, should these default to returning zero so that nothing needs to be done for the equal-power panner?  Only the HRTF panner would have a special implementation.

&gt; Source/WebCore/platform/audio/Reverb.cpp:236
&gt; +        if (maxLatency &lt; convolverLatency)

Use std::max() here?

&gt; Source/WebCore/webaudio/AudioNode.h:142
&gt; +

Can we have some comments here to describe exactly what we mean by tailTime and latencyTime?

Also, is there a reason we don&apos;t define defaults here to return 0?  Do we really want to specify the implementation in every subclass? (Just curious.)

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:150
&gt; +    return m_biquad.latencySamples() / sampleRate();

Round-off error here because sampleRate() is a float.  Probably want to cast this to a double.

Same issue in ConvolverNode.cpp for both tailTime() and latencyTime().

&gt; Source/WebCore/webaudio/ConvolverNode.cpp:156
&gt; +    return m_reverb ? m_reverb-&gt;impulseResponseLength() / sampleRate() : 0;

Round-off issue dividing by sampleRate() which is a float.

&gt; Source/WebCore/webaudio/ConvolverNode.cpp:161
&gt; +    return m_reverb ? m_reverb-&gt;latencySamples() / sampleRate() : 0;

Round-off issue dividing by sampleRate() which is a float.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576446</commentid>
    <comment_count>15</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 13:15:49 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 131366 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131366&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:118
&gt; &gt; +double AudioDSPKernelProcessor::tailTime() const
&gt; 
&gt; I think it will be sufficient to consider that the tailTime of each kernel is identical, so we can simply return the first kernel&apos;s tailTime()

Changed.

&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:129
&gt; &gt; +double AudioDSPKernelProcessor::latencyTime() const
&gt; 
&gt; ditto

Ditto. :)

&gt; &gt; Source/WebCore/platform/audio/Biquad.cpp:585
&gt; &gt; +size_t Biquad::latencySamples() const
&gt; 
&gt; Normally a biquad&apos;s latency is considered to be 0.  Any tiny delays (group delays caused by phase response) are considered part of the effect itself and *not* actual latency (similar to DelayNode and ConvolverNode)
&gt; 
&gt; So I think we can remove this method, and simply return 0 in BiquadDSPKernel::latencyTime()

Okay, I had though that might be the case.  Changed.

&gt; &gt; Source/WebCore/platform/audio/Biquad.h:85
&gt; &gt; +    size_t latencySamples() const;
&gt; 
&gt; as mentioned above, don&apos;t worry about adding this method

Ditto.

&gt; &gt; Source/WebCore/platform/audio/HRTFPanner.cpp:299
&gt; &gt; +    return MaxDelayTimeSeconds;
&gt; 
&gt; The HRTF processing is divided into two parts: a delay line, plus an FFTConvolver.  They each contribute to the tailTime, so we have:
&gt; 
&gt; MaxDelayTimeSeconds + (fftSize() / 2) / sampleRate();
&gt; 
&gt; It seems strange to see this value appear as part of the tailTime *and* for the latencyTime, but that&apos;s the nature of convolution as implemented by an FFTConvolver:
&gt; * FFTConvolver has a latency of fftSize()/2 because it uses overlap-add algorithm with FFT (but direct convolution algorithm has no latency)
&gt; * convolution in general has a tailTime equal to the length of the impulse response (which happens to equal fftSize()/2)
&gt; 
&gt; I think this is tricky enough that we should add comments here and in the latencyTime() method below to explain what&apos;s going on.

It might be more self-explanitory if we passed the tailTime() and latencyTime() calls down to FFTConvolver, where the explanation above makes more sense.

&gt; &gt; Source/WebCore/platform/audio/Reverb.cpp:231
&gt; &gt; +size_t Reverb::latencySamples() const
&gt; 
&gt; It shouldn&apos;t be necessary to find the max latency of all the convolvers because they should always all be equal.  It&apos;s sufficient to query the first one...

Changed.

&gt; &gt; Source/WebCore/platform/audio/ReverbConvolver.h:65
&gt; &gt; +    size_t latencySamples() const { return m_minFFTSize / 2; }
&gt; 
&gt; I&apos;d add a FIXME that the latency *should* be zero, and add a link to the bug:
&gt; https://bugs.webkit.org/show_bug.cgi?id=75564

Sure thing.

&gt; &gt; Source/WebCore/webaudio/AudioNode.h:139
&gt; &gt;  
&gt; 
&gt; I think it would be worth adding short comments for each of these methods to make sure the definitions are clear.  You can probably improve the wording, but something like:
&gt; 
&gt; // tailTime() is the length of time (not counting latency time) where non-zero output may occur after continuous silent input.
&gt; // latencyTime() is the length of time it takes for non-zero output to appear after non-zero input is provided.  This only applies to processing delay
&gt; // which is an artifact of the processing algorithm chosen and is *not* part of the intrinsic desired effect.  For example, a &quot;delay&quot; effect is expected
&gt; // to delay the signal, and thus would not be considered latency.

This sounds fine to me. :)

&gt; &gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:142
&gt; &gt; +    // an infinite tailTime. In practice, Biquad filters will not have a tailTime of longer
&gt; 
&gt; &quot;will not&quot; -&gt; &quot;will not usually (except for very high resonance values)&quot;
&gt; We may consider detecting high-resonance cases in the future...
&gt; 
&gt; I&apos;d move this comment to above line 37 (where you define MaxBiquadDelayTime)

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576460</commentid>
    <comment_count>16</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 13:29:46 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 131366 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131366&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:123
&gt; &gt; +        if (kernelTailTime &gt; maxTailTime)
&gt; 
&gt; Maybe use std::max()?

As per Chris&apos;s suggestion, this is no longer doing a max.

&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:134
&gt; &gt; +        if (kernelLatencyTime &gt; maxLatencyTime)
&gt; 
&gt; Maybe use std::max()?

Ditto.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.h:82
&gt; &gt; +    double latencyTime() const { return m_compressor.latencyFrames()  / sampleRate(); }
&gt; 
&gt; Round-off error when dividing by float sampleRate().

Changed.

&gt; &gt; Source/WebCore/platform/audio/HRTFPanner.cpp:304
&gt; &gt; +    return (fftSize() / 2) / sampleRate();
&gt; 
&gt; Maybe add MaxDelayTimeSeconds here?
&gt; 
&gt; Plus round-off issue when dividing by sampleRate() which is a float.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/Panner.h:61
&gt; &gt; +    virtual double latencyTime() const = 0;
&gt; 
&gt; As Chris mentioned earlier, should these default to returning zero so that nothing needs to be done for the equal-power panner?  Only the HRTF panner would have a special implementation.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/Reverb.cpp:236
&gt; &gt; +        if (maxLatency &lt; convolverLatency)
&gt; 
&gt; Use std::max() here?
&gt; 
&gt; &gt; Source/WebCore/webaudio/AudioNode.h:142
&gt; &gt; +
&gt; 
&gt; Can we have some comments here to describe exactly what we mean by tailTime and latencyTime?
&gt; 
&gt; Also, is there a reason we don&apos;t define defaults here to return 0?  Do we really want to specify the implementation in every subclass? (Just curious.)

Originally, I made them pure virtual to ensure that all the subclasses had the correct values (in that leaving a node unspecified would be a compile-time error).  I think that&apos;s still a good idea.

&gt; &gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:150
&gt; &gt; +    return m_biquad.latencySamples() / sampleRate();
&gt; 
&gt; Round-off error here because sampleRate() is a float.  Probably want to cast this to a double.
&gt; 
&gt; Same issue in ConvolverNode.cpp for both tailTime() and latencyTime().

Changed in all places.

&gt; &gt; Source/WebCore/webaudio/ConvolverNode.cpp:156
&gt; &gt; +    return m_reverb ? m_reverb-&gt;impulseResponseLength() / sampleRate() : 0;
&gt; 
&gt; Round-off issue dividing by sampleRate() which is a float.
&gt; 
&gt; &gt; Source/WebCore/webaudio/ConvolverNode.cpp:161
&gt; &gt; +    return m_reverb ? m_reverb-&gt;latencySamples() / sampleRate() : 0;
&gt; 
&gt; Round-off issue dividing by sampleRate() which is a float.

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576523</commentid>
    <comment_count>17</comment_count>
      <attachid>131411</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 14:26:41 -0700</bug_when>
    <thetext>Created attachment 131411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576550</commentid>
    <comment_count>18</comment_count>
      <attachid>131411</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-12 14:44:09 -0700</bug_when>
    <thetext>Comment on attachment 131411
Patch

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

Other than the one (or two) nits, this looks really nice.

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:120
&gt; +    return !m_kernels.isEmpty() ? m_kernels.first()-&gt;tailTime() : 0;

nit: Add comment here that we expect all the kernels to have the same tailTime.  Same for line 125.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576553</commentid>
    <comment_count>19</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-12 14:46:17 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; 
&gt; Originally, I made them pure virtual to ensure that all the subclasses had the correct values (in that leaving a node unspecified would be a compile-time error).  I think that&apos;s still a good idea.

Yes, this makes it obvious when something new is added that the latency and tail times need to be considered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576559</commentid>
    <comment_count>20</comment_count>
      <attachid>131411</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-12 14:48:50 -0700</bug_when>
    <thetext>Comment on attachment 131411
Patch

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

Looks almost ready - just some nits:

&gt; Source/WebCore/platform/audio/DynamicsCompressor.h:82
&gt; +    double latencyTime() const { return m_compressor.latencyFrames()  / static_cast&lt;double&gt;(sampleRate()); }

nit: extra space before /

&gt; Source/WebCore/platform/audio/Reverb.cpp:231
&gt; +size_t Reverb::latencySamples() const

&quot;frames&quot; is more accurate than &quot;samples&quot;

latencySamples() -&gt; latencyFrames()

here and in similar places

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:40
&gt; +// not have a tailTime of longer than approx. 200ms. This value could possibly be calculated based

nit: fix funny wording here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576631</commentid>
    <comment_count>21</comment_count>
      <attachid>131428</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 15:42:38 -0700</bug_when>
    <thetext>Created attachment 131428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576682</commentid>
    <comment_count>22</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 16:17:44 -0700</bug_when>
    <thetext>Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576757</commentid>
    <comment_count>23</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-12 17:09:35 -0700</bug_when>
    <thetext>Committed r110507: &lt;http://trac.webkit.org/changeset/110507&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119674</attachid>
            <date>2011-12-16 14:41:21 -0800</date>
            <delta_ts>2012-01-17 16:23:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20111216144120.patch</filename>
            <type>text/plain</type>
            <size>7128</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVmOGZlOTI4MzY4OGY1
NWJmOWZlMDU5YTk2OTJjOGQ4NmYzMmNjZi4uN2IyNmE2NGMwZGI2NGVjN2U3YzkxNjc1MDU1NWIy
ZGVhNmZjMDc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTE2ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgb3B0aW1pemF0aW9uIG9mIGV4aXN0
aW5nIGNvZGUgcGF0aCwgc28gY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBU
byBhY2NvdW50IGZvciBBdWRpb05vZGVzIHdoaWNoIG1heSBnZW5lcmF0ZSBub24tc2lsZW50IGF1
ZGlvIHdoZW4gZmVkIHNpbGVudCBpbnB1dAorICAgICAgICBmb3IgYSBjZXJ0YWluIGFtb3VudCBv
ZiB0aW1lIGFmdGVyIHRoZSBsYXN0IG5vbi1zaWxlbnQgYXVkaW8gZGF0YSwgYWRkIGEgbmV3IHZp
cnR1YWwKKyAgICAgICAgZnVuY3Rpb24gdGFpbFRpbWUoKSwgdXNlZCBieSBwcm9wYWdhdGVzU2ls
ZW5jZSgpIHRvIGRldGVybWluZSB3aGV0aGVyIHNpbGVudCBpbnB1dHMKKyAgICAgICAgc2hvdWxk
IGJlIHByb2Nlc3NlZCBieSBhIGdpdmVuIEF1ZGlvTm9kZS4KKworICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OkF1ZGlvTm9kZSk6
IEluaXRpYWxpemUgbV9sYXN0Tm9uU2lsZW50VGltZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Tm9kZTo6cHJvY2Vzc0lmTmVjZXNzYXJ5KTogU2V0IG1fbGFzdE5vblNpbGVudFRpbWUgd2hlbiBp
bnB1dHMgYXJlIG5vbi1zaWxlbnQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnByb3Bh
Z2F0ZXNTaWxlbmNlKTogQ2FsY3VsYXRlIHdoZXRoZXIgdGhlIGN1cnJlbnQgdGltZSBpcyBwYXN0
IHRoZSB0YWlsIHRpbWUuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIERlZmF1bHRzIHRvIDAuCisg
ICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b252b2x2ZXJOb2RlOjp0YWlsVGltZSk6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuaDoKKworICAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZXJlIG1hZGUg
Y29uc3QtY29ycmVjdDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0OjpzYW1wbGVSYXRlKToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6
OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvTm9kZTo6Y29udGV4dCk6CisKKwogMjAxMS0xMi0xNCAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBdWRpbzogcHJvcGFnYXRlIGEg
c2lsZW5jZSBoaW50IHRocm91Z2ggdGhlIEF1ZGlvTm9kZSBncmFwaC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggMmRkMGU5MmU4Nzg2MmM0NTYzZTU3Njc5YjI1Yjkw
ZTRmMTFkMTRiNS4uOGFmMmRlNGFhNmJjYWE5ZWQ5OTk5MGNhYzg3MzJiZWZmMWJmOTI5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTkzLDggKzkzLDggQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzRG9jdW1lbnQoKTsKIAogICAgIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
KiBkZXN0aW5hdGlvbigpIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLmdldCgpOyB9Ci0gICAg
ZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRU
aW1lKCk7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5v
ZGUtPnNhbXBsZVJhdGUoKTsgfQorICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpOyB9CisgICAgZmxvYXQgc2FtcGxl
UmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCk7IH0K
IAogICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOwog
ICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciogYXJy
YXlCdWZmZXIsIGJvb2wgbWl4VG9Nb25vKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oCmluZGV4IGQ3YmM3YmMxMmQ3OTAyNmViNWFmYjU3ZjRlZmU3
MjQ2OGI1MzdkNTIuLjU3NzZjN2IzMDA1YWUyMGI5MGYxYmJkMGExYzQxMTMzNzE0ZmMxNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaApAQCAt
NDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIGhl
cmUgcGVyaW9kaWNhbGx5IHRvIGdldHMgaXRzIGlucHV0IHN0cmVhbS4KICAgICB2aXJ0dWFsIHZv
aWQgcHJvdmlkZUlucHV0KEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKIAotICAg
IGRvdWJsZSBjdXJyZW50VGltZSgpIHsgcmV0dXJuIG1fY3VycmVudFRpbWU7IH0KKyAgICBkb3Vi
bGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUaW1lOyB9CiAKICAgICB2
aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb05vZGUuY3BwCmluZGV4IDg3YjgzN2RhOWNmMTE3YjIwYzliZjVkYjU3NTdmMTNmOTNi
OTNhZTIuLmFhNjNiZTYwYjI0OTE2OTMxODE0MmE4MGY0MWFhZjk3NzU1ZWU0MjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApAQCAtNDIsNiArNDIsNyBAQCBBdWRpb05vZGU6
OkF1ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogICAg
ICwgbV9sYXN0UHJvY2Vzc2luZ1RpbWUoLTEuMCkKKyAgICAsIG1fbGFzdE5vblNpbGVudFRpbWUo
LTEpCiAgICAgLCBtX25vcm1hbFJlZkNvdW50KDEpIC8vIHN0YXJ0IG91dCB3aXRoIG5vcm1hbCBy
ZWZDb3VudCA9PSAxIChsaWtlIFdURjo6UmVmQ291bnRlZCBjbGFzcykKICAgICAsIG1fY29ubmVj
dGlvblJlZkNvdW50KDApCiAgICAgLCBtX2Rpc2FibGVkUmVmQ291bnQoMCkKQEAgLTE2Niw2ICsx
NjcsMTAgQEAgdm9pZCBBdWRpb05vZGU6OnByb2Nlc3NJZk5lY2Vzc2FyeShzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKQogICAgIGlmIChtX2xhc3RQcm9jZXNzaW5nVGltZSAhPSBjdXJyZW50VGltZSkg
ewogICAgICAgICBtX2xhc3RQcm9jZXNzaW5nVGltZSA9IGN1cnJlbnRUaW1lOyAvLyBpbXBvcnRh
bnQgdG8gZmlyc3QgdXBkYXRlIHRoaXMgdGltZSBiZWNhdXNlIG9mIGZlZWRiYWNrIGxvb3BzIGlu
IHRoZSByZW5kZXJpbmcgZ3JhcGgKICAgICAgICAgcHVsbElucHV0cyhmcmFtZXNUb1Byb2Nlc3Mp
OworCisgICAgICAgIGlmICghaW5wdXRzQXJlU2lsZW50KCkpCisgICAgICAgICAgICBtX2xhc3RO
b25TaWxlbnRUaW1lID0gY3VycmVudFRpbWU7CisKICAgICAgICAgaWYgKGlucHV0c0FyZVNpbGVu
dCgpICYmIHByb3BhZ2F0ZXNTaWxlbmNlKCkpCiAgICAgICAgICAgICBzaWxlbmNlT3V0cHV0cygp
OwogICAgICAgICBlbHNlIHsKQEAgLTE3NSw2ICsxODAsMTEgQEAgdm9pZCBBdWRpb05vZGU6OnBy
b2Nlc3NJZk5lY2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgIH0KIH0KIAorYm9v
bCBBdWRpb05vZGU6OnByb3BhZ2F0ZXNTaWxlbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXN0Tm9uU2lsZW50VGltZSArIHRhaWxUaW1lKCkgPCBjb250ZXh0KCktPmN1cnJlbnRUaW1lKCk7
Cit9CisKIHZvaWQgQXVkaW9Ob2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
CiB7CiAgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmgKaW5kZXggMjBhZmIwZmU3YzUwMmNmNDJjMDhmYmMxNzk0MzFhOTI0
MTI1MmJmOC4uMWJjYjI5Y2U2MmYxNjAzOThlY2RkNjFjNDYzNzgxZjg4OTMyYmE5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfkF1ZGlvTm9kZSgpOwogCiAgICAgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgY29uc3QgQXVkaW9Db250ZXh0KiBjb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBlbnVtIE5vZGVUeXBl
IHsKICAgICAgICAgTm9kZVR5cGVVbmtub3duLApAQCAtMTM2LDExICsxMzcsMTMgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc01hcmtlZEZvckRlbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc01h
cmtlZEZvckRlbGV0aW9uOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1NpbGVuY2Uo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHByb3BhZ2F0ZXNTaWxl
bmNlKCkgY29uc3Q7CiAgICAgYm9vbCBpbnB1dHNBcmVTaWxlbnQoKTsKICAgICB2b2lkIHNpbGVu
Y2VPdXRwdXRzKCk7CiAgICAgdm9pZCB1bnNpbGVuY2VPdXRwdXRzKCk7CiAKKyAgICB2aXJ0dWFs
IGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAg
IC8vIElucHV0cyBhbmQgb3V0cHV0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBBdWRpb05v
ZGUgaXMgaW5pdGlhbGl6ZWQuCiAgICAgdm9pZCBhZGRJbnB1dChQYXNzT3duUHRyPEF1ZGlvTm9k
ZUlucHV0Pik7CkBAIC0xNjAsNiArMTYzLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8T3duUHRy
PEF1ZGlvTm9kZU91dHB1dD4gPiBtX291dHB1dHM7CiAKICAgICBkb3VibGUgbV9sYXN0UHJvY2Vz
c2luZ1RpbWU7CisgICAgZG91YmxlIG1fbGFzdE5vblNpbGVudFRpbWU7CiAKICAgICAvLyBSZWYt
Y291bnRpbmcKICAgICB2b2xhdGlsZSBpbnQgbV9ub3JtYWxSZWZDb3VudDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5kZXggMzE1ODM1NjE5NzFhNjk5YmIzMGM1
YTI4YzFhZmMyYWFjYjFkNjNmNC4uZmVjODQwMzY2YzkwNmVmMjdjNDA2MWRmNDdkZTFkMTA3OTBk
YzU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKQEAgLTE1
MCw2ICsxNTAsMTEgQEAgQXVkaW9CdWZmZXIqIENvbnZvbHZlck5vZGU6OmJ1ZmZlcigpCiAgICAg
cmV0dXJuIG1fYnVmZmVyLmdldCgpOwogfQogCitkb3VibGUgQ29udm9sdmVyTm9kZTo6dGFpbFRp
bWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JldmVyYiA/IG1fcmV2ZXJiLT5pbXB1bHNlUmVz
cG9uc2VMZW5ndGgoKSAvIHNhbXBsZVJhdGUoKSA6IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmgKaW5kZXggZmIyOWQ1YzVkMjg3YjkwYmU0NTA2Njc1ZjM1NWJmYmJi
Nzg0M2Q5ZS4uNjMzNWVjNzlmZWViMzc2NjQzNzkyMzNhY2M0MzZmM2IzOTBhMmI5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKICAgICBBdWRpb0J1ZmZlciog
YnVmZmVyKCk7CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIENvbnZvbHZlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122836</attachid>
            <date>2012-01-17 16:23:14 -0800</date>
            <delta_ts>2012-03-07 11:43:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20120117162312.patch</filename>
            <type>text/plain</type>
            <size>9656</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjYzYjUxNTk1ZjVlNWJm
NzhkY2VhNTYwN2U1NWUyNWFhZjQwNGYwMi4uOGVlODA4OTQxOWUxNjE1ZDU5YzIxZGU4MzA3Njdj
MDZjNTFjOTc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDExLTEyLTE2ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgb3B0aW1pemF0aW9uIG9mIGV4aXN0
aW5nIGNvZGUgcGF0aCwgc28gY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBU
byBhY2NvdW50IGZvciBBdWRpb05vZGVzIHdoaWNoIG1heSBnZW5lcmF0ZSBub24tc2lsZW50IGF1
ZGlvIHdoZW4gZmVkIHNpbGVudCBpbnB1dAorICAgICAgICBmb3IgYSBjZXJ0YWluIGFtb3VudCBv
ZiB0aW1lIGFmdGVyIHRoZSBsYXN0IG5vbi1zaWxlbnQgYXVkaW8gZGF0YSwgYWRkIGEgbmV3IHZp
cnR1YWwKKyAgICAgICAgZnVuY3Rpb24gdGFpbFRpbWUoKSwgdXNlZCBieSBwcm9wYWdhdGVzU2ls
ZW5jZSgpIHRvIGRldGVybWluZSB3aGV0aGVyIHNpbGVudCBpbnB1dHMKKyAgICAgICAgc2hvdWxk
IGJlIHByb2Nlc3NlZCBieSBhIGdpdmVuIEF1ZGlvTm9kZS4KKworICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OkF1ZGlvTm9kZSk6
IEluaXRpYWxpemUgbV9sYXN0Tm9uU2lsZW50VGltZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Tm9kZTo6cHJvY2Vzc0lmTmVjZXNzYXJ5KTogU2V0IG1fbGFzdE5vblNpbGVudFRpbWUgd2hlbiBp
bnB1dHMgYXJlIG5vbi1zaWxlbnQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnByb3Bh
Z2F0ZXNTaWxlbmNlKTogQ2FsY3VsYXRlIHdoZXRoZXIgdGhlIGN1cnJlbnQgdGltZSBpcyBwYXN0
IHRoZSB0YWlsIHRpbWUuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIERlZmF1bHRzIHRvIDAuCisg
ICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b252b2x2ZXJOb2RlOjp0YWlsVGltZSk6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheU5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVsYXlOb2RlOjp0YWlsVGltZSk6IEFkZGVkLgorCisgICAgICAgIFRoZSBmb2xs
b3dpbmcgZnVuY3Rpb25zIHdlcmUgbWFkZSBjb25zdC1jb3JyZWN0OgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnNhbXBsZVJhdGUpOgor
ICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpjb250ZXh0KToK
KyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnByb2Nlc3Nvcik6CisgICAgICAgICog
d2ViYXVkaW8vRGVsYXlOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWxheU5vZGU6OmRlbGF5
UHJvY2Vzc29yKToKKwogMjAxMS0xMi0xNCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWJBdWRpbzogcHJvcGFnYXRlIGEgc2lsZW5jZSBoaW50IHRocm91Z2gg
dGhlIEF1ZGlvTm9kZSBncmFwaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZS5oCmluZGV4IDVhNTU1ZGFmYmEwYWM5ODRmMTkzOWUzYWU2ZDJh
NDdlY2QzYjkwNDEuLjkzNDVmNTYyZjE5YWI3NmU3ZjYzZDlkNjZhZmFiYzUyYmY1NWE5OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
aApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBBdWRpb1Byb2Nl
c3NvciogcHJvY2Vzc29yKCkgeyByZXR1cm4gbV9wcm9jZXNzb3IuZ2V0KCk7IH0KKyAgICBjb25z
dCBBdWRpb1Byb2Nlc3NvciogcHJvY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzb3Iu
Z2V0KCk7IH0KICAgICBPd25QdHI8QXVkaW9Qcm9jZXNzb3I+IG1fcHJvY2Vzc29yOwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCBjNGVlYzA4YzA0
ZGE3NmIwM2U1NTAxMmMyODg3Y2RmYTNjMTRhZDRmLi42OTlmYjc2Mzc3MTNlZmQ1YWU1YjI5ZmYw
NTdhNDM0OTgzMWNkMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApA
QCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNEb2N1bWVudCgpOwogCiAgICAg
QXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bk5vZGUuZ2V0KCk7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKTsgfQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpOyB9CisgICAgZG91YmxlIGN1cnJl
bnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRUaW1lKCk7
IH0KKyAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5v
ZGUtPnNhbXBsZVJhdGUoKTsgfQogCiAgICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRl
QnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywg
ZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9C
dWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciosIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRp
b25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAppbmRleCBkN2JjN2JjMTJkNzkwMjZlYjVhZmI1N2Y0ZWZlNzI0NjhiNTM3ZDUyLi41Nzc2
YzdiMzAwNWFlMjBiOTBmMWJiZDBhMWM0MTEzMzcxNGZjMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogICAgIC8vIFRoZSBhdWRpbyBoYXJkd2FyZSBjYWxscyBoZXJlIHBlcmlvZGljYWxseSB0
byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCiAgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChB
dWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7CiAKLSAgICBkb3VibGUgY3VycmVudFRp
bWUoKSB7IHJldHVybiBtX2N1cnJlbnRUaW1lOyB9CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGltZTsgfQogCiAgICAgdmlydHVhbCBmbG9hdCBzYW1w
bGVSYXRlKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApp
bmRleCBiNzViMjkzN2M4ZTA2YzY3MjhhYzQ1ODc5NTQyNjQ4YzBhMTFjZmY3Li4wNzI3YmViZmEw
N2U4MzY2ZjNlZDdmZTNjZTFjMDdjMDY3NjdmY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5jcHAKQEAgLTQzLDYgKzQzLDcgQEAgQXVkaW9Ob2RlOjpBdWRpb05vZGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCiAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKICAgICAsIG1fbGFzdFByb2Nlc3Np
bmdUaW1lKC0xLjApCisgICAgLCBtX2xhc3ROb25TaWxlbnRUaW1lKC0xKQogICAgICwgbV9ub3Jt
YWxSZWZDb3VudCgxKSAvLyBzdGFydCBvdXQgd2l0aCBub3JtYWwgcmVmQ291bnQgPT0gMSAobGlr
ZSBXVEY6OlJlZkNvdW50ZWQgY2xhc3MpCiAgICAgLCBtX2Nvbm5lY3Rpb25SZWZDb3VudCgwKQog
ICAgICwgbV9kaXNhYmxlZFJlZkNvdW50KDApCkBAIC0xNzgsNiArMTc5LDEwIEBAIHZvaWQgQXVk
aW9Ob2RlOjpwcm9jZXNzSWZOZWNlc3Nhcnkoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBp
ZiAobV9sYXN0UHJvY2Vzc2luZ1RpbWUgIT0gY3VycmVudFRpbWUpIHsKICAgICAgICAgbV9sYXN0
UHJvY2Vzc2luZ1RpbWUgPSBjdXJyZW50VGltZTsgLy8gaW1wb3J0YW50IHRvIGZpcnN0IHVwZGF0
ZSB0aGlzIHRpbWUgYmVjYXVzZSBvZiBmZWVkYmFjayBsb29wcyBpbiB0aGUgcmVuZGVyaW5nIGdy
YXBoCiAgICAgICAgIHB1bGxJbnB1dHMoZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgICAgICBpZiAo
IWlucHV0c0FyZVNpbGVudCgpKQorICAgICAgICAgICAgbV9sYXN0Tm9uU2lsZW50VGltZSA9IGN1
cnJlbnRUaW1lOworCiAgICAgICAgIGlmIChpbnB1dHNBcmVTaWxlbnQoKSAmJiBwcm9wYWdhdGVz
U2lsZW5jZSgpKQogICAgICAgICAgICAgc2lsZW5jZU91dHB1dHMoKTsKICAgICAgICAgZWxzZSB7
CkBAIC0xODcsNiArMTkyLDExIEBAIHZvaWQgQXVkaW9Ob2RlOjpwcm9jZXNzSWZOZWNlc3Nhcnko
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICB9CiB9CiAKK2Jvb2wgQXVkaW9Ob2RlOjpwcm9w
YWdhdGVzU2lsZW5jZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGFzdE5vblNpbGVudFRpbWUg
KyB0YWlsVGltZSgpIDwgY29udGV4dCgpLT5jdXJyZW50VGltZSgpOworfQorCiB2b2lkIEF1ZGlv
Tm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogewogICAgIEFTU0VSVChj
b250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5o
CmluZGV4IDQ1MTA2OTUzZDBkMDAyNjkwZDU5NWUyY2ExYzRiNTE1NWVlYTEwNWUuLjc1NGQyNjM4
MjYwZDViNDBiNTcyZTQwNGYzNjkzZWExMTJjODFiYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5oCkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BdWRpb05v
ZGUoKTsKIAogICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5n
ZXQoKTsgfQorICAgIGNvbnN0IEF1ZGlvQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQogCiAgICAgZW51bSBOb2RlVHlwZSB7CiAgICAgICAgIE5vZGVU
eXBlVW5rbm93biwKQEAgLTEzNywxMSArMTM4LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNN
YXJrZWRGb3JEZWxldGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJrZWRGb3JEZWxldGlvbjsg
fQogCi0gICAgdmlydHVhbCBib29sIHByb3BhZ2F0ZXNTaWxlbmNlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwcm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0OwogICAg
IGJvb2wgaW5wdXRzQXJlU2lsZW50KCk7CiAgICAgdm9pZCBzaWxlbmNlT3V0cHV0cygpOwogICAg
IHZvaWQgdW5zaWxlbmNlT3V0cHV0cygpOwogCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUo
KSBjb25zdCB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICAvLyBJbnB1dHMgYW5kIG91
dHB1dHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgQXVkaW9Ob2RlIGlzIGluaXRpYWxpemVk
LgogICAgIHZvaWQgYWRkSW5wdXQoUGFzc093blB0cjxBdWRpb05vZGVJbnB1dD4pOwpAQCAtMTYx
LDYgKzE2NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE93blB0cjxBdWRpb05vZGVPdXRwdXQ+
ID4gbV9vdXRwdXRzOwogCiAgICAgZG91YmxlIG1fbGFzdFByb2Nlc3NpbmdUaW1lOworICAgIGRv
dWJsZSBtX2xhc3ROb25TaWxlbnRUaW1lOwogCiAgICAgLy8gUmVmLWNvdW50aW5nCiAgICAgdm9s
YXRpbGUgaW50IG1fbm9ybWFsUmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuY3BwCmluZGV4IDZhZmMwOTViY2RiMGI0ZDNiYTlkYzY5NTZiNWE4MGY5NDMyNGU5
M2YuLjYwNzEzYmIzNDMxYWY1MzYwYmMxNTc4MTA5NWRkZGJkMmIxYTg2NmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCkBAIC0xNTEsNiArMTUxLDExIEBAIEF1
ZGlvQnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZmZXIoKQogICAgIHJldHVybiBtX2J1ZmZlci5n
ZXQoKTsKIH0KIAorZG91YmxlIENvbnZvbHZlck5vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZXZlcmIgPyBtX3JldmVyYi0+aW1wdWxzZVJlc3BvbnNlTGVuZ3RoKCkgLyBz
YW1wbGVSYXRlKCkgOiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5o
CmluZGV4IDQyNTYwNGQ0YzkxZDliOTUxYTlmNjlkYTMxMTAwYmIyYzY4ZWM3MGEuLjgzMDAzNjI2
MjE5N2UxMGJlODIxYzE3NzFjMWY1ZGY0YmE4ZjdiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmgKQEAgLTU2LDEyICs1NiwxMSBAQCBwdWJsaWM6CiAKICAgICBib29s
IG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9CiAgICAgdm9pZCBzZXRO
b3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KKwog
cHJpdmF0ZToKICAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwogCi0gICAgLy8gV2l0aG91dCB0aGUgY29uY2VwdCBvZiAidGFpbFRpbWUiLCBkaXNhYmxl
IHNpbGVuY2UgcHJvcGFnYXRpb24sIGFzIHRoZSBub2RlIG1heSBnZW5lcmF0ZQotICAgIC8vIGF1
ZGlvIGV2ZW4gd2hlbiBnaXZlbiBzaWxlbnQgaW5wdXRzLgotICAgIHZpcnR1YWwgYm9vbCBwcm9w
YWdhdGVzU2lsZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBkb3Vi
bGUgdGFpbFRpbWUoKSBjb25zdDsKIAogICAgIE93blB0cjxSZXZlcmI+IG1fcmV2ZXJiOwogICAg
IFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlO
b2RlLmNwcAppbmRleCAyYTUyNWRkMWE2YzE4YjlkZDVjNDRhN2UzNDRiNzBlOWIxNDlmOTAxLi5m
ZmE0YzI2ZTEzYTg3M2JmODkwZmVmNjFmYjM0ZWU1MmM4MWI3ZDNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0RlbGF5Tm9kZS5jcHAKQEAgLTQzLDYgKzQzLDExIEBAIEF1ZGlvUGFyYW0qIERlbGF5
Tm9kZTo6ZGVsYXlUaW1lKCkKICAgICByZXR1cm4gZGVsYXlQcm9jZXNzb3IoKS0+ZGVsYXlUaW1l
KCk7CiB9CiAKK2RvdWJsZSBEZWxheU5vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZGVsYXlQcm9jZXNzb3IoKS0+ZGVsYXlUaW1lKCktPnZhbHVlKCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0RlbGF5Tm9kZS5oCmluZGV4IDg3NGQ5MWUwYTkyOWQ2ZDMxYTliZjhmZDdmOWQ0OTVj
NjQwYTk2NmUuLmQ3ZjlmYWM3MjQ3MDIxMzE3MjBhNTQ2MTMzYTA0MGRjMThjYTE5ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCkBAIC00NSwxMSArNDUsMTAgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBEZWxheU5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7
CiAKLSAgICAvLyBXaXRob3V0IHRoZSBjb25jZXB0IG9mICJ0YWlsVGltZSIsIGRpc2FibGUgc2ls
ZW5jZSBwcm9wYWdhdGlvbiwgYXMgdGhlIG5vZGUgbWF5IGdlbmVyYXRlCi0gICAgLy8gYXVkaW8g
ZXZlbiB3aGVuIGdpdmVuIHNpbGVudCBpbnB1dHMuCi0gICAgdmlydHVhbCBib29sIHByb3BhZ2F0
ZXNTaWxlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSB0
YWlsVGltZSgpIGNvbnN0OwogCiAgICAgRGVsYXlQcm9jZXNzb3IqIGRlbGF5UHJvY2Vzc29yKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RGVsYXlQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KKyAg
ICBjb25zdCBEZWxheVByb2Nlc3NvciogZGVsYXlQcm9jZXNzb3IoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBEZWxheVByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130663</attachid>
            <date>2012-03-07 11:43:12 -0800</date>
            <delta_ts>2012-03-07 13:43:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20120307114310.patch</filename>
            <type>text/plain</type>
            <size>7497</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc0NTBjNDE2ZmI0Njcw
ODYyMDBlZmMxNjI3OGM0NTA2MGE3YTNiOS4uMTdlYzgyOTYxYWNhNmFhZmFiNzgyMDJhOGJjNmMx
OWY3NGVhNjczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTE2ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgb3B0aW1pemF0aW9uIG9mIGV4aXN0
aW5nIGNvZGUgcGF0aCwgc28gY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBU
byBhY2NvdW50IGZvciBBdWRpb05vZGVzIHdoaWNoIG1heSBnZW5lcmF0ZSBub24tc2lsZW50IGF1
ZGlvIHdoZW4gZmVkIHNpbGVudCBpbnB1dAorICAgICAgICBmb3IgYSBjZXJ0YWluIGFtb3VudCBv
ZiB0aW1lIGFmdGVyIHRoZSBsYXN0IG5vbi1zaWxlbnQgYXVkaW8gZGF0YSwgYWRkIGEgbmV3IHZp
cnR1YWwKKyAgICAgICAgZnVuY3Rpb24gdGFpbFRpbWUoKS4KKworICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHA6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIERlZmF1bHRzIHRvIDAuCisg
ICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b252b2x2ZXJOb2RlOjp0YWlsVGltZSk6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheU5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVsYXlOb2RlOjp0YWlsVGltZSk6IEFkZGVkLgorCisgICAgICAgIFRoZSBmb2xs
b3dpbmcgZnVuY3Rpb25zIHdlcmUgbWFkZSBjb25zdC1jb3JyZWN0OgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnNhbXBsZVJhdGUpOgor
ICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpjb250ZXh0KToK
KyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnByb2Nlc3Nvcik6CisgICAgICAgICog
d2ViYXVkaW8vRGVsYXlOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWxheU5vZGU6OmRlbGF5
UHJvY2Vzc29yKToKKwogMjAxMi0wMy0wNSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBOZXZlciBkaXNwYXRjaCBtdXRhdGlvbiBldmVudHMgaW4gc2hhZG93IERP
TQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
LmgKaW5kZXggMzZjZjJiNDE1MzNjYzkyZjNmZDYzOTliOWQxZjNlMTgwNGVkMWJiMy4uZDE1Nzgx
OGM0ODkyMThlN2MzNGVhNmE1YTA3YTE2ZGVkNmNiOTllYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCkBAIC01Niw2ICs1Niw3IEBA
IHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEF1ZGlvUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSB7
IHJldHVybiBtX3Byb2Nlc3Nvci5nZXQoKTsgfQorICAgIGNvbnN0IEF1ZGlvUHJvY2Vzc29yKiBw
cm9jZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3Nvci5nZXQoKTsgfQogICAgIE93blB0
cjxBdWRpb1Byb2Nlc3Nvcj4gbV9wcm9jZXNzb3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCmluZGV4IGI0MmEwNzVmMmE2OTY4NzE0MDEzNjQ1NmY1MmI0N2NiMDcx
YTgxZWUuLjMzNDU2ZDZlNWZjOTc4MTJiOWIyZTg1MTI2ODkwNjQzYmViNGMwMGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC05Myw5ICs5Myw5IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0RvY3VtZW50KCk7CiAKICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVz
dGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS5nZXQoKTsgfQotICAgIHNpemVf
dCBjdXJyZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVu
dFNhbXBsZUZyYW1lKCk7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKTsgfQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpOyB9CisgICAgc2l6ZV90IGN1
cnJlbnRTYW1wbGVGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJy
ZW50U2FtcGxlRnJhbWUoKTsgfQorICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpOyB9CisgICAgZmxvYXQgc2FtcGxl
UmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCk7IH0K
IAogICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIo
QXJyYXlCdWZmZXIqLCBib29sIG1peFRvTW9ubywgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXggZDA3ODMzZGE5
MDc2YzJjOWU4ZTMxN2RhZmNhMzZiM2EyNTViMjI2My4uYjA1ZTk2OWQ1YTRjNjg3MWFhOWFmYzYx
MjMwOTZiZWRhNDZjN2JlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgYXVk
aW8gaGFyZHdhcmUgY2FsbHMgaGVyZSBwZXJpb2RpY2FsbHkgdG8gZ2V0cyBpdHMgaW5wdXQgc3Ry
ZWFtLgogICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgbnVt
YmVyT2ZGcmFtZXMpOwogCi0gICAgc2l6ZV90IGN1cnJlbnRTYW1wbGVGcmFtZSgpIHsgcmV0dXJu
IG1fY3VycmVudFNhbXBsZUZyYW1lOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1
cm4gY3VycmVudFNhbXBsZUZyYW1lKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHNhbXBsZVJhdGUo
KSk7IH0KKyAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50U2FtcGxlRnJhbWU7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJl
dHVybiBjdXJyZW50U2FtcGxlRnJhbWUoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0
ZSgpKTsgfQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3Qg
eyByZXR1cm4gMjsgfSAvLyBGSVhNRTogdXBkYXRlIHdoZW4gbXVsdGktY2hhbm5lbCAobW9yZSB0
aGFuIHN0ZXJlbykgaXMgc3VwcG9ydGVkCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgK
aW5kZXggZGZmZDcxMThlYzcxOWVkMTVlZTQzZjk4Mzk0MWY0OGEwYWRlNTE3Yy4uNjk1NTM1YWUw
ZDJhNTUyOTdmY2I2YjhlNTRhNDViZTg4ZmUwYjg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9Ob2RlLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1ZGlvTm9k
ZSgpOwogCiAgICAgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0Lmdl
dCgpOyB9CisgICAgY29uc3QgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBlbnVtIE5vZGVUeXBlIHsKICAgICAgICAgTm9kZVR5
cGVVbmtub3duLApAQCAtMTM3LDYgKzEzOCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNNYXJr
ZWRGb3JEZWxldGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJrZWRGb3JEZWxldGlvbjsgfQog
CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHBy
b3RlY3RlZDoKICAgICAvLyBJbnB1dHMgYW5kIG91dHB1dHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9y
ZSB0aGUgQXVkaW9Ob2RlIGlzIGluaXRpYWxpemVkLgogICAgIHZvaWQgYWRkSW5wdXQoUGFzc093
blB0cjxBdWRpb05vZGVJbnB1dD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmNwcAppbmRleCA2YWZjMDk1YmNkYjBiNGQzYmE5ZGM2OTU2YjVhODBmOTQzMjRlOTNmLi42
MDcxM2JiMzQzMWFmNTM2MGJjMTU3ODEwOTVkZGRiZDJiMWE4NjZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcApAQCAtMTUxLDYgKzE1MSwxMSBAQCBBdWRpb0J1
ZmZlciogQ29udm9sdmVyTm9kZTo6YnVmZmVyKCkKICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCk7
CiB9CiAKK2RvdWJsZSBDb252b2x2ZXJOb2RlOjp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmltcHVsc2VSZXNwb25zZUxlbmd0aCgpIC8gc2FtcGxl
UmF0ZSgpIDogMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAppbmRl
eCAxMmY0MTcyODE5YTAwZTVmMDg3YWQ5OTY2YTIzNDRkYTZkNDIyZmIyLi44MzAwMzYyNjIxOTdl
MTBiZTgyMWMxNzcxYzFmNWRmNGJhOGY3YjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5oCkBAIC01Niw5ICs1NiwxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIG5vcm1h
bGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9CiAgICAgdm9pZCBzZXROb3JtYWxp
emUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KKwogcHJpdmF0
ZToKICAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwog
CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdDsKKwogICAgIE93blB0cjxSZXZl
cmI+IG1fcmV2ZXJiOwogICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwCmluZGV4IDU5MzQxYWJmNWNlZjJiNTMxNzIyZjMz
M2IyYzljZGI0OTFiNWYzNjIuLjlkZGNjZDgzMzcyMTk4NWM4ODBmZTE1YjllNDc1ZWFjYzA2YTcz
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcApAQCAtNDMsNiArNDMsMTEg
QEAgQXVkaW9QYXJhbSogRGVsYXlOb2RlOjpkZWxheVRpbWUoKQogICAgIHJldHVybiBkZWxheVBy
b2Nlc3NvcigpLT5kZWxheVRpbWUoKTsKIH0KIAorZG91YmxlIERlbGF5Tm9kZTo6dGFpbFRpbWUo
KSBjb25zdAoreworICAgIHJldHVybiBkZWxheVByb2Nlc3NvcigpLT5kZWxheVRpbWUoKS0+dmFs
dWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5o
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmgKaW5kZXggOTJiMWUwNTYyNDQ3
OTU5YzY3ZGRjYWRlYjBjMGVhNGI3MTM4MGE1Zi4uZDA4Y2M0Y2Y5M2RhYWE4MGIwYmRkMzMwZjE0
OWUxNDc1YWQxNWUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlO
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmgKQEAgLTQ1LDcg
KzQ1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRGVsYXlOb2RlKEF1ZGlvQ29udGV4dCos
IGZsb2F0IHNhbXBsZVJhdGUsIGRvdWJsZSBtYXhEZWxheVRpbWUpOwogCisgICAgdmlydHVhbCBk
b3VibGUgdGFpbFRpbWUoKSBjb25zdDsKKwogICAgIERlbGF5UHJvY2Vzc29yKiBkZWxheVByb2Nl
c3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkp
OyB9CisgICAgY29uc3QgRGVsYXlQcm9jZXNzb3IqIGRlbGF5UHJvY2Vzc29yKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRGVsYXlQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0K
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130686</attachid>
            <date>2012-03-07 13:43:11 -0800</date>
            <delta_ts>2012-03-12 11:36:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20120307134310.patch</filename>
            <type>text/plain</type>
            <size>16524</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc0NTBjNDE2ZmI0Njcw
ODYyMDBlZmMxNjI3OGM0NTA2MGE3YTNiOS4uZTEzNTY5MWQ2NjBlMzliNjMyNWFhNTUyMTZiNWFj
ZDJjYTNiMmUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTAzLTA3ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgb3B0aW1pemF0aW9uIG9mIGV4aXN0
aW5nIGNvZGUgcGF0aCwgc28gY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBU
byBhY2NvdW50IGZvciBBdWRpb05vZGVzIHdoaWNoIG1heSBnZW5lcmF0ZSBub24tc2lsZW50IGF1
ZGlvIHdoZW4gZmVkIHNpbGVudCBpbnB1dAorICAgICAgICBmb3IgYSBjZXJ0YWluIGFtb3VudCBv
ZiB0aW1lIGFmdGVyIHRoZSBsYXN0IG5vbi1zaWxlbnQgYXVkaW8gZGF0YSwgYWRkIGEgbmV3IHZp
cnR1YWwKKyAgICAgICAgZnVuY3Rpb24gdGFpbFRpbWUoKS4KKworICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHA6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIERlZmF1bHRzIHRvIDAuCisK
KyAgICAgICAgQWRkZWQgdGFpbFRpbWUoKSBvdmVycmlkZXMgdG8gdGhlIGZvbGxvd2luZyBjbGFz
c2VzOgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udm9sdmVyTm9kZTo6dGFpbFRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheU5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVsYXlOb2RlOjp0YWlsVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8v
QXVkaW9EU1BLZXJuZWwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6dGFpbFNhbXBsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OnRhaWxUaW1lKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vUGFubmVyLmg6CisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXF1YWREU1BLZXJuZWw6OnRhaWxUaW1lKToKKyAgICAgICAgKiB3
ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0
ZXJOb2RlOjp0YWlsVGltZSk6CisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6dGFpbFRpbWUpOgorICAgICAg
ICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oOgorICAgICAgICAoQmlxdWFkUHJvY2Vzc29y
KToKKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEZWxheURTUEtlcm5lbDo6dGFpbFRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5
RFNQS2VybmVsLmg6CisgICAgICAgICogd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oOgor
ICAgICAgICAoV2ViQ29yZTo6V2F2ZVNoYXBlckRTUEtlcm5lbDo6dGFpbFRpbWUpOgorCisgICAg
ICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdlcmUgbWFkZSBjb25zdC1jb3JyZWN0OgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjpjdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnNh
bXBsZVJhdGUpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3VycmVudFRpbWUpOgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2Rl
Ojpjb250ZXh0KToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnByb2Nlc3Nvcik6
CisgICAgICAgICogd2ViYXVkaW8vRGVsYXlOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWxh
eU5vZGU6OmRlbGF5UHJvY2Vzc29yKToKKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRGaWx0ZXJO
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0ZXJOb2RlOjpiaXF1YWRQcm9jZXNz
b3IpOgorCiAyMDEyLTAzLTA1ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE5ldmVyIGRpc3BhdGNoIG11dGF0aW9uIGV2ZW50cyBpbiBzaGFkb3cgRE9NCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWwuaAppbmRleCBmMzNj
OWVkZTRkM2MwYTEzNjM2MzJlNWMwODRlZDBlYmRhYjUyMmMwLi5iZWFkZGFmOWFhNWFiZmI5YTE1
ZDM1NjNiZGUxMDVmODhlMzhjOGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvRFNQS2VybmVsLmgKQEAgLTYzLDYgKzYzLDggQEAgcHVibGljOgogICAgIEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSB7IHJldHVybiBtX2tlcm5lbFByb2Nlc3Nv
cjsgfQogICAgIGNvbnN0IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFByb2Nlc3NvcjsgfQogCisgICAgdmlydHVhbCBkb3VibGUgdGFp
bFRpbWUoKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAgICBBdWRpb0RTUEtlcm5lbFByb2Nl
c3NvciogbV9rZXJuZWxQcm9jZXNzb3I7CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAppbmRleCA0OTRjMDMwOTI0NmM2NGY0ZmU3ZTFh
ZDdmZmY1NTNhNDA1MjI3NmVhLi5hOWUwNzk1N2ZlYzc3Y2ExZWYyOTJkYThiNTVlZGI3YjRkYzI4
YTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaApAQCAtODEsNiArODEs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCog
ZnJlcXVlbmN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3Bv
bnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2Up
OworCisgICAgaW50IHRhaWxTYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gMjsgfQogcHJpdmF0ZToK
ICAgICB2b2lkIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEs
IGRvdWJsZSBiMiwgZG91YmxlIGEwLCBkb3VibGUgYTEsIGRvdWJsZSBhMik7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgKaW5kZXgg
MDE2Y2Q0YWExNGM3ZmY2ZGU1MGM0MThjMjk5MDA3MmMwYWM4YzBkZS4uMTQzZDFkYWM5MmY0Nzgy
NTZkM2YzMDMxNTgzOGIxNjcyZDEyMWUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuaApAQCAtMzksNiArMzksOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IG1faXNGaXJzdFJlbmRlciA9IHRydWU7IH0KIAor
ICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsg
fQorCiBwcml2YXRlOgogICAgIC8vIEZvciBzbW9vdGhpbmcgLyBkZS16aXBwZXJpbmcKICAgICBi
b29sIG1faXNGaXJzdFJlbmRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZQYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJU
RlBhbm5lci5jcHAKaW5kZXggNGM2OTkzMmVkMDIxMzQzYTQ4NTNjNWM0ZDM4YTBmODQwMzAwMmY0
ZC4uNjg0ZjgzYzI1NDZhYTNmMjM0Y2YyNTc5ZDA5OGRlYjllZmY1NTIwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5jcHAKQEAgLTI5NCw2ICsyOTQsMTEg
QEAgdm9pZCBIUlRGUGFubmVyOjpwYW4oZG91YmxlIGRlc2lyZWRBemltdXRoLCBkb3VibGUgZWxl
dmF0aW9uLCBjb25zdCBBdWRpb0J1cyogaW4KICAgICB9CiB9CiAKK2RvdWJsZSBIUlRGUGFubmVy
Ojp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1heERlbGF5VGltZVNlY29uZHM7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgKaW5kZXggZjVhZjFk
MTUyOWJkNDhmMjMwN2U3ZmViY2NiNzNhMDE2YTk0NTJjMi4uNmM3ZDNiNjc1NTIxYTgxM2M5YmQy
NjEwMmU0YTQ2Yzk3YjE3MzM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vSFJURlBhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZQYW5uZXIuaApAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBzYW1wbGVS
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJs
ZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIC8vIEdpdmVuIGFu
IGF6aW11dGggYW5nbGUgaW4gdGhlIHJhbmdlIC0xODAgLT4gKzE4MCwgcmV0dXJucyB0aGUgY29y
cmVzcG9uZGluZyBhemltdXRoIGluZGV4IGZvciB0aGUgZGF0YWJhc2UsCiAgICAgLy8gYW5kIGF6
aW11dGhCbGVuZCB3aGljaCBpcyBhbiBpbnRlcnBvbGF0aW9uIHZhbHVlIGZyb20gMCAtPiAxLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUGFubmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QYW5uZXIuaAppbmRleCBkOGI4ZGQwZjFhZDRmOGU2
MjkwY2QwNmVkYjk2MGQzYTc5NWMwNTIxLi5mMWEzYzYwNjJlZWExNzI0YzE1ZTM4M2FiYWM1Y2Y1
MzQ0ZGQwYjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QYW5u
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QYW5uZXIuaApAQCAtNTcs
NiArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSA9IDA7CiAKKyAg
ICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAg
IFBhbm5lcihQYW5uaW5nTW9kZWwgbW9kZWwpIDogbV9wYW5uaW5nTW9kZWwobW9kZWwpIHsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
aAppbmRleCAzNmNmMmI0MTUzM2NjOTJmM2ZkNjM5OWI5ZDFmM2UxODA0ZWQxYmIzLi5kMTU3ODE4
YzQ4OTIxOGU3YzM0ZWE2YTVhMDdhMTZkZWQ2Y2I5OWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgKQEAgLTU2LDYgKzU2LDcgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQXVkaW9Qcm9jZXNzb3IqIHByb2Nlc3NvcigpIHsg
cmV0dXJuIG1fcHJvY2Vzc29yLmdldCgpOyB9CisgICAgY29uc3QgQXVkaW9Qcm9jZXNzb3IqIHBy
b2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc29yLmdldCgpOyB9CiAgICAgT3duUHRy
PEF1ZGlvUHJvY2Vzc29yPiBtX3Byb2Nlc3NvcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmgKaW5kZXggYjQyYTA3NWYyYTY5Njg3MTQwMTM2NDU2ZjUyYjQ3Y2IwNzFh
ODFlZS4uMzM0NTZkNmU1ZmM5NzgxMmI5YjJlODUxMjY4OTA2NDNiZWI0YzAwZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTkzLDkgKzkzLDkgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzRG9jdW1lbnQoKTsKIAogICAgIEF1ZGlvRGVzdGluYXRpb25Ob2RlKiBkZXN0
aW5hdGlvbigpIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLmdldCgpOyB9Ci0gICAgc2l6ZV90
IGN1cnJlbnRTYW1wbGVGcmFtZSgpIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50
U2FtcGxlRnJhbWUoKTsgfQotICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIHsgcmV0dXJuIG1fZGVz
dGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpOyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgpIHsg
cmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCk7IH0KKyAgICBzaXplX3QgY3Vy
cmVudFNhbXBsZUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJl
bnRTYW1wbGVGcmFtZSgpOyB9CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRUaW1lKCk7IH0KKyAgICBmbG9hdCBzYW1wbGVS
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKTsgfQog
CiAgICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihB
cnJheUJ1ZmZlciosIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCBkMDc4MzNkYTkw
NzZjMmM5ZThlMzE3ZGFmY2EzNmIzYTI1NWIyMjYzLi5iMDVlOTY5ZDVhNGM2ODcxYWE5YWZjNjEy
MzA5NmJlZGE0NmM3YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVz
dGluYXRpb25Ob2RlLmgKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIC8vIFRoZSBhdWRp
byBoYXJkd2FyZSBjYWxscyBoZXJlIHBlcmlvZGljYWxseSB0byBnZXRzIGl0cyBpbnB1dCBzdHJl
YW0uCiAgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBudW1i
ZXJPZkZyYW1lcyk7CiAKLSAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgeyByZXR1cm4g
bV9jdXJyZW50U2FtcGxlRnJhbWU7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVy
biBjdXJyZW50U2FtcGxlRnJhbWUoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgp
KTsgfQorICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRTYW1wbGVGcmFtZTsgfQorICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIGNvbnN0IHsgcmV0
dXJuIGN1cnJlbnRTYW1wbGVGcmFtZSgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRl
KCkpOyB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7
IHJldHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hlbiBtdWx0aS1jaGFubmVsIChtb3JlIHRo
YW4gc3RlcmVvKSBpcyBzdXBwb3J0ZWQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaApp
bmRleCBkZmZkNzExOGVjNzE5ZWQxNWVlNDNmOTgzOTQxZjQ4YTBhZGU1MTdjLi42OTU1MzVhZTBk
MmE1NTI5N2ZjYjZiOGU1NGE0NWJlODhmZTBiODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b05vZGUuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXVkaW9Ob2Rl
KCk7CiAKICAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7IH0KKyAgICBjb25zdCBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIGVudW0gTm9kZVR5cGUgewogICAgICAgICBOb2RlVHlw
ZVVua25vd24sCkBAIC0xMzcsNiArMTM4LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtl
ZEZvckRlbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtlZEZvckRlbGV0aW9uOyB9CiAK
KyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJv
dGVjdGVkOgogICAgIC8vIElucHV0cyBhbmQgb3V0cHV0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3Jl
IHRoZSBBdWRpb05vZGUgaXMgaW5pdGlhbGl6ZWQuCiAgICAgdm9pZCBhZGRJbnB1dChQYXNzT3du
UHRyPEF1ZGlvTm9kZUlucHV0Pik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtl
cm5lbC5oCmluZGV4IGEyMWUyNGMwZDBjODRkODk0MDAzMzg5YmU3NWZjNGNlOGQyOWIwZGIuLjJj
NGZjZmQwM2RmMGU3ZDRiYTA5MjQ1MGQ4MmJmYWMzMzdmNmI2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCkBAIC01Miw2ICs1Miw5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsKKworICAgIGRvdWJs
ZSB0YWlsVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmlxdWFkLnRhaWxTYW1wbGVzKCkgLyBzYW1w
bGVSYXRlKCk7IH0KKwogcHJvdGVjdGVkOgogICAgIEJpcXVhZCBtX2JpcXVhZDsKICAgICBCaXF1
YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpcXVh
ZFByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5oCmluZGV4IDU0NWIwNjBiZWVlNmExOTk4NDQ4ZmJjYjM4YjgzYmYwMjcy
ZDY5NjcuLmNlY2NjYTQxNzUxMjM1ZmJmODI5N2I5MmQ2NjRjMGExZThjNDllMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgKQEAgLTYzLDEwICs2MywxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShjb25zdCBGbG9hdDMyQXJy
YXkqIGZyZXF1ZW5jeUh6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFy
cmF5KiBtYWdSZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJB
cnJheSogcGhhc2VSZXNwb25zZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT50YWlsVGltZSgpOyB9CisKIHByaXZhdGU6
CiAgICAgQmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsK
IAogICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9CisgICAgY29uc3QgQmlxdWFk
UHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFBy
b2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3Bw
CmluZGV4IGUxYWVjNzU4ODE1NjIwYzlhNmJiMDhlMGI2NzVmNTE2MTFlYmY1N2IuLjM4MDg3OWRm
YjA4NmU3Zjg5MTlkNzYwZjE2MmYyZTM5OTIxY2QyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcApAQCAtMTUwLDYgKzE1MCwxNCBAQCB2b2lkIEJpcXVh
ZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKICAgICBy
ZXNwb25zZUtlcm5lbC0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVu
Y3lIeiwgbWFnUmVzcG9uc2UsIHBoYXNlUmVzcG9uc2UpOwogfQogCitkb3VibGUgQmlxdWFkUHJv
Y2Vzc29yOjp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgZG91YmxlIHRvdGFsVGFpbFRpbWUgPSAw
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHRvdGFsVGFpbFRpbWUgKz0gbV9rZXJuZWxzW2ldLT50YWlsVGltZSgpOworICAgIHJl
dHVybiB0b3RhbFRhaWxUaW1lOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkUHJvY2Vzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9j
ZXNzb3IuaAppbmRleCA5MWExY2NjZDE3MDQ5ZDE0ODg4MWQwMDQ2Mzk2NzkwNzNiY2RkN2QwLi4z
Y2ZiZTdjOTFlNWZiYmNkMmMzMGY1M2E0N2JlOGMzODYwNTQ1ZWY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgRmlsdGVyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdm9pZCBz
ZXRUeXBlKEZpbHRlclR5cGUpOwogCisgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Q7CiBwcml2
YXRlOgogICAgIEZpbHRlclR5cGUgbV90eXBlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuY3BwCmluZGV4IDZhZmMwOTViY2RiMGI0ZDNiYTlkYzY5NTZiNWE4MGY5NDMy
NGU5M2YuLjYwNzEzYmIzNDMxYWY1MzYwYmMxNTc4MTA5NWRkZGJkMmIxYTg2NmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCkBAIC0xNTEsNiArMTUxLDExIEBA
IEF1ZGlvQnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZmZXIoKQogICAgIHJldHVybiBtX2J1ZmZl
ci5nZXQoKTsKIH0KIAorZG91YmxlIENvbnZvbHZlck5vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9yZXZlcmIgPyBtX3JldmVyYi0+aW1wdWxzZVJlc3BvbnNlTGVuZ3RoKCkg
LyBzYW1wbGVSYXRlKCkgOiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9k
ZS5oCmluZGV4IDEyZjQxNzI4MTlhMDBlNWYwODdhZDk5NjZhMjM0NGRhNmQ0MjJmYjIuLjgzMDAz
NjI2MjE5N2UxMGJlODIxYzE3NzFjMWY1ZGY0YmE4ZjdiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmgKQEAgLTU2LDkgKzU2LDEyIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgbm9ybWFsaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxpemU7IH0KICAgICB2b2lkIHNl
dE5vcm1hbGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQor
CiBwcml2YXRlOgogICAgIENvbnZvbHZlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxl
UmF0ZSk7CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0OworCiAgICAgT3du
UHRyPFJldmVyYj4gbV9yZXZlcmI7CiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1ZmZlcjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCmluZGV4IGZiMzFl
MmRkZDhlMzU4OTc1MGRiNzBjMDlmYWU3YWUxY2U1NjljYmEuLmMzMmIzYjA3OGIzZjllNzY0MDFi
OTc2YTU0MzA4NzQyYzk2OWI4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlbGF5RFNQS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURT
UEtlcm5lbC5jcHAKQEAgLTEzNCw2ICsxMzQsMTEgQEAgdm9pZCBEZWxheURTUEtlcm5lbDo6cmVz
ZXQoKQogICAgIG1fYnVmZmVyLnplcm8oKTsKIH0KIAorZG91YmxlIERlbGF5RFNQS2VybmVsOjp0
YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1heChtX2Rlc2lyZWREZWxheUZyYW1lcywg
bV9tYXhEZWxheVRpbWUpIC8gc2FtcGxlUmF0ZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlbGF5RFNQS2VybmVsLmgKaW5kZXggNzlhMzk1NjhiNzg4ZjE3MWYxMmY2N2YwYmZhZDczYWZk
MTZlODhiNC4uMjg3OWNmN2I1ZDZiYWZlMjdiNDViYWNlMjg0NTgxMGZiZGJkY2QzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oCkBAIC00NCw3ICs0NCw5IEBAIHB1
YmxpYzoKICAgICBkb3VibGUgbWF4RGVsYXlUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYXhEZWxh
eVRpbWU7IH0KICAgICAKICAgICB2b2lkIHNldERlbGF5RnJhbWVzKGRvdWJsZSBudW1iZXJPZkZy
YW1lcykgeyBtX2Rlc2lyZWREZWxheUZyYW1lcyA9IG51bWJlck9mRnJhbWVzOyB9Ci0gICAgCisK
KyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEF1
ZGlvRmxvYXRBcnJheSBtX2J1ZmZlcjsKICAgICBkb3VibGUgbV9tYXhEZWxheVRpbWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcAppbmRleCA1OTM0MWFiZjVjZWYyYjUzMTcyMmYz
MzNiMmM5Y2RiNDkxYjVmMzYyLi45ZGRjY2Q4MzM3MjE5ODVjODgwZmUxNWI5ZTQ3NWVhY2MwNmE3
MzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAKQEAgLTQzLDYgKzQzLDEx
IEBAIEF1ZGlvUGFyYW0qIERlbGF5Tm9kZTo6ZGVsYXlUaW1lKCkKICAgICByZXR1cm4gZGVsYXlQ
cm9jZXNzb3IoKS0+ZGVsYXlUaW1lKCk7CiB9CiAKK2RvdWJsZSBEZWxheU5vZGU6OnRhaWxUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGVsYXlQcm9jZXNzb3IoKS0+ZGVsYXlUaW1lKCktPnZh
bHVlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCmluZGV4IDkyYjFlMDU2MjQ0
Nzk1OWM2N2RkY2FkZWIwYzBlYTRiNzEzODBhNWYuLmQwOGNjNGNmOTNkYWFhODBiMGJkZDMzMGYx
NDllMTQ3NWFkMTVlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCkBAIC00NSw3
ICs0NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERlbGF5Tm9kZShBdWRpb0NvbnRleHQq
LCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsKIAorICAgIHZpcnR1YWwg
ZG91YmxlIHRhaWxUaW1lKCkgY29uc3Q7CisKICAgICBEZWxheVByb2Nlc3NvciogZGVsYXlQcm9j
ZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxEZWxheVByb2Nlc3Nvcio+KHByb2Nlc3Nvcigp
KTsgfQorICAgIGNvbnN0IERlbGF5UHJvY2Vzc29yKiBkZWxheVByb2Nlc3NvcigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9XYXZlU2hhcGVyRFNQS2VybmVsLmgKaW5kZXggYzcyNWY0ZGZlNDQwNWMyZTc3N2FmM2FkZWU0
N2Y4YmI1MGFiZTExNy4uMjk1YWE3Y2MzZGM0NDg1MTMwOGVjNDQ1MGUxMGIyMTg5YzgyYTQwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaApAQCAt
NDQsNiArNDQsNyBAQCBwdWJsaWM6CiAgICAgLy8gQXVkaW9EU1BLZXJuZWwKICAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdCwgc2l6ZV90IGZy
YW1lc1RvUHJvY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyB9CisgICAgdmlydHVh
bCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgCiBwcm90ZWN0ZWQ6
CiAgICAgV2F2ZVNoYXBlclByb2Nlc3Nvciogd2F2ZVNoYXBlclByb2Nlc3NvcigpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131366</attachid>
            <date>2012-03-12 11:36:28 -0700</date>
            <delta_ts>2012-03-12 14:26:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20120312113627.patch</filename>
            <type>text/plain</type>
            <size>29089</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4Mjk5NDhhZGI2YjA4
YzE1Yzk3ZTNlZmM3ZTIzMGVkNDhmNzk4Ni4uZmEwNDRhZTQ0NmI1ZDU1OTU5NTk4YTRhNDRkOGRk
MDQ2ZmE3NTEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAzLTEyICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiIGFuZCAibGF0ZW5jeVRpbWUoKSIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzUwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyBv
cHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgY29kZSBwYXRoLCBzbyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgIFRvIGFjY291bnQgZm9yIEF1ZGlvTm9kZXMgd2hpY2ggbWF5IGdl
bmVyYXRlIG5vbi1zaWxlbnQgYXVkaW8gd2hlbiBmZWQgc2lsZW50IGlucHV0CisgICAgICAgIGZv
ciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGxhc3Qgbm9uLXNpbGVudCBhdWRp
byBkYXRhLCBhZGQgdHdvIG5ldyB2aXJ0dWFsCisgICAgICAgIGZ1bmN0aW9ucyB0YWlsVGltZSgp
IGFuZCBsYXRlbmN5VGltZSgpLgorCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIFB1cmUgdmlydHVh
bC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUpOiBBZGRlZC4gUHVy
ZSB2aXJ0dWFsLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUHJvY2Vzc29yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1Byb2Nlc3Nvcjo6dGFpbFRpbWUpOiBBZGRlZC4gUHVyZSB2
aXJ0dWFsLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Qcm9jZXNzb3I6OmxhdGVuY3lUaW1lKTog
QWRkZWQuIFB1cmUgdmlydHVhbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtl
cm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWw6OnRhaWxUaW1lKTogQWRk
ZWQuIFB1cmUgdmlydHVhbC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsOjpsYXRl
bmN5VGltZSk6IEFkZGVkLiBQdXJlIHZpcnR1YWwuCisKKyAgICAgICAgQWRkZWQgdGFpbFRpbWUo
KSBhbmQgbGF0ZW5jeVRpbWUoKSBvdmVycmlkZXMgdG8gdGhlIGZvbGxvd2luZyBjbGFzc2VzOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjp0YWlsVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6bGF0ZW5jeVRpbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmg6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3I6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNzQ29tcHJlc3Nvcjo6bGF0ZW5jeVRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OnRhaWxUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkhSVEZQYW5uZXI6OmxhdGVuY3lUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9IUlRGUGFubmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUGFubmVyLmg6CisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpsYXRlbmN5VGltZSk6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRp
b0NoYW5uZWxNZXJnZXIuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oOgorICAgICAg
ICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWREU1BLZXJuZWw6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZERTUEtlcm5l
bDo6bGF0ZW5jeVRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oOgor
ICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnRh
aWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OmxhdGVuY3lUaW1lKToK
KyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6CisgICAgICAgICogd2ViYXVkaW8v
RGVsYXlEU1BLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsYXlEU1BLZXJuZWw6OnRh
aWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGF5RFNQS2VybmVsOjpsYXRlbmN5VGltZSk6
CisgICAgICAgICogd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDoKKyAgICAgICAgKiB3ZWJhdWRp
by9EZWxheVByb2Nlc3Nvci5oOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6dGFp
bFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6bGF0ZW5j
eVRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDoKKyAg
ICAgICAgKiB3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmxhdGVuY3lUaW1lKToKKyAgICAgICAgKiB3ZWJhdWRpby9KYXZh
U2NyaXB0QXVkaW9Ob2RlLmg6CisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6CisKKyAgICAg
ICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZCBhcyBzdXBwb3J0IGZvciB0aGUg
bmV3IEF1ZGlvTm9kZSBhbmQgQXVkaW9Qcm9jZXNzb3IgZnVuY3Rpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OmxhdGVu
Y3lTYW1wbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjps
YXRlbmN5U2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6OmxhdGVuY3lTYW1wbGVzKToK
KworICAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZXJlIG1hZGUgY29uc3QtY29ycmVj
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYjo6aW1wdWxzZVJlc3BvbnNlTGVuZ3RoKToK
KwogMjAxMi0wMy0wOCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVzZSBhbiBleHBsaWNpdCBhdHRyaWJ1dGUgdG8gc2lnbmFsIHRoYXQgYSBjb250ZXh0
IHByZWZlcnMgdG8gdXNlIGEgZGlzY3JldGUgR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9EU1BLZXJuZWwuaAppbmRleCBmMzNjOWVkZTRkM2MwYTEzNjM2MzJlNWMw
ODRlZDBlYmRhYjUyMmMwLi5mNTAxZDY1ODNhNDA5OWJjOTBmMGQ0NDA0MDQ0NjYwYWMzNzcyMjY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5l
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsLmgK
QEAgLTYzLDYgKzYzLDkgQEAgcHVibGljOgogICAgIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKiBw
cm9jZXNzb3IoKSB7IHJldHVybiBtX2tlcm5lbFByb2Nlc3NvcjsgfQogICAgIGNvbnN0IEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFBy
b2Nlc3NvcjsgfQogCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoK
ICAgICBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciogbV9rZXJuZWxQcm9jZXNzb3I7CiAgICAgZmxv
YXQgbV9zYW1wbGVSYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IDVmOTEzOWYwMzA4ODRjZDQ5
MmI1M2FhMDNkODBiM2U5ZmFjNDUzZGEuLjAzMGRkYzZkZDVjYjdhN2Q5NjZmNTJlMWYzZjFlNjQw
NWE3ZWQzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTExNSw2ICsxMTUsMjggQEAgdm9pZCBB
dWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzKQogICAgICAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5u
ZWxzOwogfQogCitkb3VibGUgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OnRhaWxUaW1lKCkgY29u
c3QKK3sKKyAgICBkb3VibGUgbWF4VGFpbFRpbWUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGtlcm5lbFRh
aWxUaW1lID0gbV9rZXJuZWxzW2ldLT50YWlsVGltZSgpOworICAgICAgICBpZiAoa2VybmVsVGFp
bFRpbWUgPiBtYXhUYWlsVGltZSkKKyAgICAgICAgICAgIG1heFRhaWxUaW1lID0ga2VybmVsVGFp
bFRpbWU7CisgICAgfQorICAgIHJldHVybiBtYXhUYWlsVGltZTsKK30KKworZG91YmxlIEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAgZG91YmxlIG1h
eExhdGVuY3lUaW1lID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9rZXJuZWxz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBrZXJuZWxMYXRlbmN5VGltZSA9IG1fa2Vy
bmVsc1tpXS0+bGF0ZW5jeVRpbWUoKTsKKyAgICAgICAgaWYgKGtlcm5lbExhdGVuY3lUaW1lID4g
bWF4TGF0ZW5jeVRpbWUpCisgICAgICAgICAgICBtYXhMYXRlbmN5VGltZSA9IGtlcm5lbExhdGVu
Y3lUaW1lOworICAgIH0KKyAgICByZXR1cm4gbWF4TGF0ZW5jeVRpbWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Iu
aAppbmRleCA3ZjhmODFkMmZkODZmZGI4YjQ1ZWE5NzJhY2YyZTY5NTg1MTgzMjU1Li5hNGZjMzNm
YWYyNDVmZDg4OTVlNTYxNTQ4YTgwMjc1MzhhMDA3OTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgKQEAgLTY1
LDYgKzY1LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZDaGFubmVsczsgfQogCisgICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGlt
ZSgpIGNvbnN0IE9WRVJSSURFOworCiBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9udW1iZXJP
ZkNoYW5uZWxzOwogICAgIFZlY3RvcjxPd25QdHI8QXVkaW9EU1BLZXJuZWw+ID4gbV9rZXJuZWxz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Qcm9jZXNz
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUHJvY2Vzc29yLmgKaW5k
ZXggNDY5ZjgzMzIyNDM2MDc4MWQ0MDIyYjAzZGU3Y2I1YTc2OGMwNDcyNS4uNGYyNDBjODMwNGRh
ZDNjZTY1N2U3ZGU5OGI4MzA1ZDhlNjYxM2NiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQXVkaW9Qcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb1Byb2Nlc3Nvci5oCkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKIAog
ICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KIAor
ICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91
YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2lu
aXRpYWxpemVkOwogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9CaXF1YWQuY3BwCmluZGV4IGQ2Nzk5YzY5ZDNmZDVkMjExNTRmMzc4MDkyOTAxOTcw
N2I3MGU2OWEuLmRhMWM1YWQ1NWRlOTc1MGVlM2E2NWE2YjMzYmEyYWI2ODI4MGZhMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcApAQCAtNTgyLDYgKzU4MiwxNiBA
QCB2b2lkIEJpcXVhZDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKICAg
ICB9CiB9CiAKK3NpemVfdCBCaXF1YWQ6OmxhdGVuY3lTYW1wbGVzKCkgY29uc3QKK3sKKyAgICAv
LyBUaGUgbGF0ZW5jeSBvZiBhIEJpcXVhZCBmaWx0ZXIgZGVwZW5kcyBvbiB0aGUgY29lZmZpY2ll
bnRzIG9mIHRoZSBmaWx0ZXIuCisgICAgaWYgKG1fYjApCisgICAgICAgIHJldHVybiAwOworICAg
IGlmIChtX2IxIHx8IG1fYTEpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAyOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAppbmRleCA0OTRjMDMwOTI0NmM2NGY0
ZmU3ZTFhZDdmZmY1NTNhNDA1MjI3NmVhLi5lNjJmMWMyMWQ4NjlkMmVhNzhlMjI1ZDljMGJiZGY4
ZjM5Yzc3ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1
YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaApAQCAtODEs
NiArODEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCogZnJlcXVlbmN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1h
Z1Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVz
cG9uc2UpOworCisgICAgc2l6ZV90IGxhdGVuY3lTYW1wbGVzKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91YmxlIGIx
LCBkb3VibGUgYjIsIGRvdWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaApp
bmRleCBiMzUyOTRkNmFiY2QzMTg0MDA1MjhjMjcyNzRhNzdmM2Q1NmQzMzJmLi43ODFiMTllMjJl
YWU3N2EyODBjZDAzYjgyNWUyMTlkNDkyMWU1Mzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaApAQCAtNzgsNiArNzgsOSBAQCBw
dWJsaWM6CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0
ZTsgfQogICAgIGZsb2F0IG55cXVpc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGUgLyAy
OyB9CiAKKyAgICBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgZG91
YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb21wcmVzc29yLmxhdGVuY3lGcmFt
ZXMoKSAgLyBzYW1wbGVSYXRlKCk7IH0KKwogcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZDaGFubmVsczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRXF1YWxQb3dlclBhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1
YWxQb3dlclBhbm5lci5oCmluZGV4IDAxNmNkNGFhMTRjN2ZmNmRlNTBjNDE4YzI5OTAwNzJjMGFj
OGMwZGUuLjAxMmUyMTRjYTNiMWJiZjU5OGRkM2JhOTAzMGRiZTEwZDA5M2E2ZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgKQEAgLTM5
LDYgKzM5LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyBtX2lzRmly
c3RSZW5kZXIgPSB0cnVlOyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKwogcHJpdmF0ZToKICAgICAvLyBGb3Igc21v
b3RoaW5nIC8gZGUtemlwcGVyaW5nCiAgICAgYm9vbCBtX2lzRmlyc3RSZW5kZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCmluZGV4IDRjNjk5MzJlZDAy
MTM0M2E0ODUzYzVjNGQzOGEwZjg0MDMwMDJmNGQuLmMxNTQ2MjVjYWFkYWIzNjc2N2Q3Mjg1Nzk4
ZWJmNmI3ODBjY2I0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0hSVEZQYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQ
YW5uZXIuY3BwCkBAIC0yOTQsNiArMjk0LDE2IEBAIHZvaWQgSFJURlBhbm5lcjo6cGFuKGRvdWJs
ZSBkZXNpcmVkQXppbXV0aCwgZG91YmxlIGVsZXZhdGlvbiwgY29uc3QgQXVkaW9CdXMqIGluCiAg
ICAgfQogfQogCitkb3VibGUgSFJURlBhbm5lcjo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBNYXhEZWxheVRpbWVTZWNvbmRzOworfQorCitkb3VibGUgSFJURlBhbm5lcjo6bGF0ZW5j
eVRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAoZmZ0U2l6ZSgpIC8gMikgLyBzYW1wbGVSYXRl
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFu
bmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgKaW5kZXgg
ZjVhZjFkMTUyOWJkNDhmMjMwN2U3ZmViY2NiNzNhMDE2YTk0NTJjMi4uNzg1Y2YwOTVhMmE3MDQw
OWZjN2Q2MjQ1OTY1ZDQwMGU3ZGRmOGFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0hSVEZQYW5uZXIuaApAQCAtNDAsMTEgKzQwLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcGFuKGRvdWJsZSBhemltdXRoLCBkb3VibGUgZWxldmF0aW9uLCBjb25zdCBBdWRpb0J1
cyogaW5wdXRCdXMsIEF1ZGlvQnVzKiBvdXRwdXRCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCi0gICAgc2l6ZV90IGZmdFNpemUoKSB7IHJl
dHVybiBmZnRTaXplRm9yU2FtcGxlUmF0ZShtX3NhbXBsZVJhdGUpOyB9CisgICAgc2l6ZV90IGZm
dFNpemUoKSBjb25zdCB7IHJldHVybiBmZnRTaXplRm9yU2FtcGxlUmF0ZShtX3NhbXBsZVJhdGUp
OyB9CiAgICAgc3RhdGljIHNpemVfdCBmZnRTaXplRm9yU2FtcGxlUmF0ZShmbG9hdCBzYW1wbGVS
YXRlKTsKIAogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJh
dGU7IH0KIAorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKKwogcHJpdmF0
ZToKICAgICAvLyBHaXZlbiBhbiBhemltdXRoIGFuZ2xlIGluIHRoZSByYW5nZSAtMTgwIC0+ICsx
ODAsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgYXppbXV0aCBpbmRleCBmb3IgdGhlIGRhdGFi
YXNlLAogICAgIC8vIGFuZCBhemltdXRoQmxlbmQgd2hpY2ggaXMgYW4gaW50ZXJwb2xhdGlvbiB2
YWx1ZSBmcm9tIDAgLT4gMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1Bhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUGFubmVyLmgKaW5k
ZXggZDhiOGRkMGYxYWQ0ZjhlNjI5MGNkMDZlZGI5NjBkM2E3OTVjMDUyMS4uZjhiMjQwZTYwODcx
ODQ5ZjYxYWE4MTE1ODg0MzQ5OGY0YTRkMzNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUGFubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUGFubmVyLmgKQEAgLTU3LDYgKzU3LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHJlc2V0KCkgPSAwOwogCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7CisKIHByb3RlY3Rl
ZDoKICAgICBQYW5uZXIoUGFubmluZ01vZGVsIG1vZGVsKSA6IG1fcGFubmluZ01vZGVsKG1vZGVs
KSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKaW5kZXggMTIy
ZTIxYjY4OTVlMGI0NzUyNGRkYTNmOTdmN2IxYmE4ZmE4YmRjNS4uYTUzMzhiNTA0NmUzMzRjMDYx
NzA4N2UzNDc4YjhjOGI5OTk3OTM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vUmV2ZXJiLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9S
ZXZlcmIuY3BwCkBAIC0yMjgsNiArMjI4LDE3IEBAIHZvaWQgUmV2ZXJiOjpyZXNldCgpCiAgICAg
ICAgIG1fY29udm9sdmVyc1tpXS0+cmVzZXQoKTsKIH0KIAorc2l6ZV90IFJldmVyYjo6bGF0ZW5j
eVNhbXBsZXMoKSBjb25zdAoreworICAgIHNpemVfdCBtYXhMYXRlbmN5ID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fY29udm9sdmVycy5zaXplKCk7ICsraSkgeworICAgICAgICBz
aXplX3QgY29udm9sdmVyTGF0ZW5jeSA9IG1fY29udm9sdmVyc1tpXS0+bGF0ZW5jeVNhbXBsZXMo
KTsKKyAgICAgICAgaWYgKG1heExhdGVuY3kgPCBjb252b2x2ZXJMYXRlbmN5KQorICAgICAgICAg
ICAgbWF4TGF0ZW5jeSA9IGNvbnZvbHZlckxhdGVuY3k7CisgICAgfQorICAgIHJldHVybiBtYXhM
YXRlbmN5OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRleCA3Nzll
N2JiYTQ5MzQ0YzgyZTQ1N2M3MjNlNmQwYTYxODg4MWRkZWM0Li5mYzEyMWIxY2NhM2E2M2FjYmI2
MTBiYzhlMGIwZDRiZmUwZDY3YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmIuaApAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcm9jZXNzKGNvbnN0IEF1
ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgdW5zaWduZWQgaW1wdWxzZVJl
c3BvbnNlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXB1bHNlUmVzcG9uc2VMZW5ndGg7IH0K
KyAgICBzaXplX3QgaW1wdWxzZVJlc3BvbnNlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXB1
bHNlUmVzcG9uc2VMZW5ndGg7IH0KKyAgICBzaXplX3QgbGF0ZW5jeVNhbXBsZXMoKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25z
ZUJ1ZmZlciwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKaW5kZXggMzcwYjg3
MjA2NDgyOWUxY2NlMjliNmVkMjU3MTI2YzkwZjU2OGJkZS4uODIzNDJjZDNkNGNiMDU3ZWY4YTQ0
ZTJiNTg5NjdmMzhiOTk5MTBmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyLmgKQEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
dXNlQmFja2dyb3VuZFRocmVhZHMoKSBjb25zdCB7IHJldHVybiBtX3VzZUJhY2tncm91bmRUaHJl
YWRzOyB9CiAgICAgdm9pZCBiYWNrZ3JvdW5kVGhyZWFkRW50cnkoKTsKIAorICAgIHNpemVfdCBs
YXRlbmN5U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWluRkZUU2l6ZSAvIDI7IH0KIHByaXZh
dGU6CiAgICAgVmVjdG9yPE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gPiBtX3N0YWdlczsK
ICAgICBWZWN0b3I8T3duUHRyPFJldmVyYkNvbnZvbHZlclN0YWdlPiA+IG1fYmFja2dyb3VuZFN0
YWdlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNz
b3JOb2RlLmNwcAppbmRleCA4MWI1ZDk2NWQxYmM0YzA4YjM1NjZiNTM2NDdkMGM5ODNmOWEyNjkw
Li4wODRkZDdiMTNmZDcyZWQ0NTNhNjhlMDBiYWNlNzFjNjYxMWMwNmE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCkBAIC0x
MzYsNiArMTM2LDE2IEBAIHVuc2lnbmVkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpudW1iZXJP
ZkNoYW5uZWxzKCkKICAgICByZXR1cm4gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCk7CiB9
CiAKK2RvdWJsZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3Byb2Nlc3Nvci0+dGFpbFRpbWUoKTsKK30KKworZG91YmxlIEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJv
Y2Vzc29yLT5sYXRlbmN5VGltZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgKaW5kZXggMzZjZjJiNDE1MzNjYzkyZjNmZDYzOTli
OWQxZjNlMTgwNGVkMWJiMy4uMTk3MzAyM2E1NTE0MjU0MGYwYmUwYmNmN2Q1MzEyMTlkM2NkYTQx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5oCkBAIC01NSw2ICs1NSw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzKCk7CiAKIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZF
UlJJREU7CisKICAgICBBdWRpb1Byb2Nlc3NvciogcHJvY2Vzc29yKCkgeyByZXR1cm4gbV9wcm9j
ZXNzb3IuZ2V0KCk7IH0KICAgICBPd25QdHI8QXVkaW9Qcm9jZXNzb3I+IG1fcHJvY2Vzc29yOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdl
ci5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgKaW5kZXgg
ZTc3M2RhZWI5MTNmNTJkMjY1NTRmYTYzOGY4Y2Q2MGEyMGNmZmEwYy4uMzVkZDA2ZGY1Mjg0MGJh
MDQzZmJmYTM1Mzc2MTAxODExNWRkYjNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9DaGFubmVsTWVyZ2VyLmgKQEAgLTUxLDYgKzUxLDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCopOwog
CiBwcml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gMDsgfQorCiAgICAgQXVkaW9DaGFubmVsTWVyZ2VyKEF1ZGlvQ29udGV4
dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgKaW5kZXggNzFiMGVmNDE1YmZkNDVlNjNjM2YwMTdmNzdi
ZGNjOWE2NDA2Y2NiZi4uYzgyNjUwYTczNDM0Y2ZlYTgyZGY0MGUzM2U1YWY4NTE1Yjc1YTMyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oCkBA
IC00NCw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKIAogcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIDA7IH0KKwogICAgIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyKEF1ZGlvQ29udGV4dCos
IGZsb2F0IHNhbXBsZVJhdGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXggZDA3ODMzZGE5MDc2YzJjOWU4ZTMxN2RhZmNhMzZi
M2EyNTViMjI2My4uNzYwYzYzODgxMTk3YjVlODAzMTg1YWY4MTZlMjNiMzc5YTY0ODZjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCkBAIC01
NCw2ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRSZW5kZXJpbmcoKSA9
IDA7CiAgICAgCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisKICAgICAvLyBDb3VudHMgdGhlIG51bWJl
ciBvZiBzYW1wbGUtZnJhbWVzIHByb2Nlc3NlZCBieSB0aGUgZGVzdGluYXRpb24uCiAgICAgc2l6
ZV90IG1fY3VycmVudFNhbXBsZUZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
R2Fpbk5vZGUuaAppbmRleCA2MjZlZjJjZjI2MDQ5YzhjNzRhOWU1ZTNhMjk5YzZmYjFlN2ZlNDMz
Li42OWE2NGI0NzFlMzY5NTgzMGZkYjUwNDdhZWU0OWIyMzI5NmRlZWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oCkBAIC01NSw2ICs1NSw5IEBAIHB1YmxpYzoKICAg
ICBBdWRpb0dhaW4qIGdhaW4oKSB7IHJldHVybiBtX2dhaW4uZ2V0KCk7IH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJs
ZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRv
dWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKwogICAgIEF1
ZGlvR2Fpbk5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICBmbG9h
dCBtX2xhc3RHYWluOyAvLyBmb3IgZGUtemlwcGVyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Tm9kZS5oCmluZGV4IGRmZmQ3MTE4ZWM3MTllZDE1ZWU0M2Y5ODM5NDFmNDhhMGFkZTUxN2MuLmU3
ZDIwZWVhNjA3ZTE3M2EzNmUxNDU5NDQ4NTI0ZmZlMzEzYzg5OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvTm9kZS5oCkBAIC0xMzcsNiArMTM3LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c01hcmtlZEZvckRlbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtlZEZvckRlbGV0aW9u
OyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIC8v
IElucHV0cyBhbmQgb3V0cHV0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBBdWRpb05vZGUg
aXMgaW5pdGlhbGl6ZWQuCiAgICAgdm9pZCBhZGRJbnB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZUlu
cHV0Pik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCmluZGV4IDE4
Mjc1ZjZlYmMxN2VmNjAzMWQ5NTZmMTE2ZDMwOWJhOTM1Zjc4ZGIuLjk2MWVmM2MyY2YwZmFiNTU4
ZTQ0N2YxN2ZjMTM4MDUwNzdkZjAwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
UGFubmVyTm9kZS5oCkBAIC0xMjQsNiArMTI0LDkgQEAgcHVibGljOgogICAgIEF1ZGlvR2Fpbiog
ZGlzdGFuY2VHYWluKCkgeyByZXR1cm4gbV9kaXN0YW5jZUdhaW4uZ2V0KCk7IH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgQXVkaW9HYWluKiBjb25lR2Fpbigp
IHsgcmV0dXJuIG1fY29uZUdhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPnRhaWxUaW1lKCkgOiAwOyB9CisgICAg
dmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Bh
bm5lciA/IG1fcGFubmVyLT5sYXRlbmN5VGltZSgpIDogMDsgfQorCiBwcml2YXRlOgogICAgIEF1
ZGlvUGFubmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmggYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaAppbmRleCBhNmJkZDQyN2I5OTIyM2U3
ODdjY2EzZmMwZWUyNzdmMTYxNmQzODg0Li45MmE5NWEwODM2Y2EzM2Q4YmE2ZmZjM2JjZGFmNjUx
YmVhZjgxYzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJj
ZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaApA
QCAtMzksNiArMzksOSBAQCBwdWJsaWM6CiAgICAgICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNh
bXBsZVJhdGUpCiAgICAgewogICAgIH0KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGRvdWJsZSB0
YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJs
ZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Jp
cXVhZERTUEtlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJu
ZWwuY3BwCmluZGV4IDlmYWFjNjU5ODk1Y2JkNTk3ZDE2MDdkNzMyYmY0NDQ2ZDRlMzQxNzEuLmYw
ZTQ2MWJlMjIyODdjNWU1MTNjNWIzNGUxNDQ4YzBjMGFkMWE4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcApAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBkb3VibGUgTWF4QmlxdWFkRGVsYXlUaW1l
ID0gMC4yOworCiB2b2lkIEJpcXVhZERTUEtlcm5lbDo6dXBkYXRlQ29lZmZpY2llbnRzSWZOZWNl
c3NhcnkoYm9vbCB1c2VTbW9vdGhpbmcsIGJvb2wgZm9yY2VVcGRhdGUpCiB7CiAgICAgaWYgKGZv
cmNlVXBkYXRlIHx8IGJpcXVhZFByb2Nlc3NvcigpLT5maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSgp
KSB7CkBAIC0xMzQsNiArMTM2LDIwIEBAIHZvaWQgQmlxdWFkRFNQS2VybmVsOjpnZXRGcmVxdWVu
Y3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAogICAgIG1fYmlxdWFkLmdldEZyZXF1ZW5jeVJl
c3BvbnNlKG5GcmVxdWVuY2llcywgZnJlcXVlbmN5LmRhdGEoKSwgbWFnUmVzcG9uc2UsIHBoYXNl
UmVzcG9uc2UpOwogfQogCitkb3VibGUgQmlxdWFkRFNQS2VybmVsOjp0YWlsVGltZSgpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IEFzIGEgcmVjdXJzaXZlIGxpbmVhciBmaWx0ZXIsIGRlcGVuZGlu
ZyBvbiBpdHMgcGFyYW1ldGVycywgYSBiaXF1YWQgZmlsdGVyIGNhbiBoYXZlCisgICAgLy8gYW4g
aW5maW5pdGUgdGFpbFRpbWUuIEluIHByYWN0aWNlLCBCaXF1YWQgZmlsdGVycyB3aWxsIG5vdCBo
YXZlIGEgdGFpbFRpbWUgb2YgbG9uZ2VyCisgICAgLy8gdGhhbiBhcHByb3guIDIwMG1zLiBUaGlz
IHZhbHVlIGNvdWxkIHBvc3NpYmx5IGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHNldHRpbmdz
CisgICAgLy8gb2YgdGhlIEJpcXVhZC4KKyAgICByZXR1cm4gTWF4QmlxdWFkRGVsYXlUaW1lOwor
fQorCitkb3VibGUgQmlxdWFkRFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYmlxdWFkLmxhdGVuY3lTYW1wbGVzKCkgLyBzYW1wbGVSYXRlKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCmluZGV4IGEyMWUyNGMwZDBjODRk
ODk0MDAzMzg5YmU3NWZjNGNlOGQyOWIwZGIuLjA3NzU1NTliNGJkNjRiYmJkY2Y5YWVmN2QxZGEy
MTMwNjY4YmU5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5o
CkBAIC01Miw2ICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogbWFnUmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCogcGhhc2VSZXNwb25zZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJ
REU7CisKIHByb3RlY3RlZDoKICAgICBCaXF1YWQgbV9iaXF1YWQ7CiAgICAgQmlxdWFkUHJvY2Vz
c29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNz
b3IqPihwcm9jZXNzb3IoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9k
ZS5jcHAKaW5kZXggNmFmYzA5NWJjZGIwYjRkM2JhOWRjNjk1NmI1YTgwZjk0MzI0ZTkzZi4uNGY5
ODBmYWU5ZGRlYzY4N2QyZjQ2MTU3MjNhYmExMWJlOThiMWIwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKQEAgLTE1MSw2ICsxNTEsMTYgQEAgQXVkaW9CdWZm
ZXIqIENvbnZvbHZlck5vZGU6OmJ1ZmZlcigpCiAgICAgcmV0dXJuIG1fYnVmZmVyLmdldCgpOwog
fQogCitkb3VibGUgQ29udm9sdmVyTm9kZTo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3JldmVyYiA/IG1fcmV2ZXJiLT5pbXB1bHNlUmVzcG9uc2VMZW5ndGgoKSAvIHNhbXBsZVJh
dGUoKSA6IDA7Cit9CisKK2RvdWJsZSBDb252b2x2ZXJOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmxhdGVuY3lTYW1wbGVzKCkgLyBz
YW1wbGVSYXRlKCkgOiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5o
CmluZGV4IDEyZjQxNzI4MTlhMDBlNWYwODdhZDk5NjZhMjM0NGRhNmQ0MjJmYjIuLjA5ZTY5ODc1
YTFkNzg1ZTNhMDllYzFiMzA4OWE2MDFkN2I2NTkzYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmgKQEAgLTU3LDYgKzU3LDkgQEAgcHVibGljOgogICAgIGJvb2wgbm9y
bWFsaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxpemU7IH0KICAgICB2b2lkIHNldE5vcm1h
bGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQogcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgCiAgICAgQ29u
dm9sdmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAogICAgIE93blB0
cjxSZXZlcmI+IG1fcmV2ZXJiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RGVsYXlEU1BLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJu
ZWwuY3BwCmluZGV4IGZiMzFlMmRkZDhlMzU4OTc1MGRiNzBjMDlmYWU3YWUxY2U1NjljYmEuLjJi
ZDU3NTllYTI2YTQyOGU4MjAzMGIwZGJmYWM5NzNkOWFhNzBhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAKQEAgLTEzNCw2ICsxMzQsMTYgQEAgdm9pZCBE
ZWxheURTUEtlcm5lbDo6cmVzZXQoKQogICAgIG1fYnVmZmVyLnplcm8oKTsKIH0KIAorZG91Ymxl
IERlbGF5RFNQS2VybmVsOjp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWF4RGVs
YXlUaW1lOworfQorCitkb3VibGUgRGVsYXlEU1BLZXJuZWw6OmxhdGVuY3lUaW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlbGF5RFNQS2VybmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5l
bC5oCmluZGV4IDc5YTM5NTY4Yjc4OGYxNzFmMTJmNjdmMGJmYWQ3M2FmZDE2ZTg4YjQuLjFkNTU2
ZWE0ZWQ1ODE0YmZmZmMyZGU1ODkxMmFiODI2YWJlMzRmZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRGVsYXlEU1BLZXJuZWwuaApAQCAtNDQsNyArNDQsMTAgQEAgcHVibGljOgogICAgIGRv
dWJsZSBtYXhEZWxheVRpbWUoKSBjb25zdCB7IHJldHVybiBtX21heERlbGF5VGltZTsgfQogICAg
IAogICAgIHZvaWQgc2V0RGVsYXlGcmFtZXMoZG91YmxlIG51bWJlck9mRnJhbWVzKSB7IG1fZGVz
aXJlZERlbGF5RnJhbWVzID0gbnVtYmVyT2ZGcmFtZXM7IH0KLSAgICAKKworICAgIHZpcnR1YWwg
ZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbGF0
ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0QXJy
YXkgbV9idWZmZXI7CiAgICAgZG91YmxlIG1fbWF4RGVsYXlUaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgKaW5kZXggNDNjNWUwY2JlYjE5Zjg1ZjJmYzE0ZjQzYjVk
NjQ2YTU1YTNkOTZlMS4uMzNmYjkzN2UwMGE4OTFiN2NkOGUwNmUxMjJkNTE0OWQ2MDY5NWM1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oCkBAIC00Niw2ICs0Niw3
IEBAIHB1YmxpYzoKIAogICAgIGRvdWJsZSBtYXhEZWxheVRpbWUoKSB7IHJldHVybiBtX21heERl
bGF5VGltZTsgfQogcHJpdmF0ZToKKwogICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX2RlbGF5VGlt
ZTsKICAgICBkb3VibGUgbV9tYXhEZWxheVRpbWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAppbmRleCA1YWZlMmQ2ODMxMTYz
ZmU2M2MwNDIyZDk0ZmU4NGFjNjVlOTVmOTIzLi5lZjcwNDc5MDcyY2MzNTA2NjczZDYxZTljY2Vm
YTQ4MDBmYTdmMDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmNwcApAQCAtMTA2LDYgKzEwNiwxNiBAQCB2b2lkIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgpCiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUo
KTsKIH0KIAorZG91YmxlIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnRhaWxUaW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9keW5hbWljc0NvbXByZXNzb3ItPnRhaWxUaW1lKCk7Cit9CisKK2Rv
dWJsZSBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZHluYW1pY3NDb21wcmVzc29yLT5sYXRlbmN5VGltZSgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCmluZGV4IDMyZDNj
YjE3MzVkMzA4MDJiYzMxYzAzNWZkZDFkMTkyNGQ5M2IxNDUuLmNmN2U2M2E0MjlmYmRkNDlhNjE3
YTdkMTZmMGZiNzJkZGVmZmZmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9E
eW5hbWljc0NvbXByZXNzb3JOb2RlLmgKQEAgLTU3LDYgKzU3LDkgQEAgcHVibGljOgogICAgIEF1
ZGlvUGFyYW0qIHJlZHVjdGlvbigpIHsgcmV0dXJuIG1fcmVkdWN0aW9uLmdldCgpOyB9CiAKIHBy
aXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCiAgICAgRHlu
YW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAog
ICAgIE93blB0cjxEeW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAppbmRleCBi
ZjgzMTQ3NTMzMTVkMGI1Y2FjYmFjOWRjYzgxMTQ1NDkxNDM4MTJmLi5lYTNkN2FhYWE3YzQ2YTdk
MjMyNWU2MzYxZDg2YmZiYWU3ZWI1MzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcApAQCAtMjY3LDYgKzI2NywxNiBAQCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QKICAgICByZXR1cm4gY29uc3RfY2FzdDxKYXZhU2NyaXB0QXVkaW9Ob2RlKj4odGhp
cyktPmNvbnRleHQoKS0+ZG9jdW1lbnQoKTsKIH0KIAorZG91YmxlIEphdmFTY3JpcHRBdWRpb05v
ZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOworfQorCitkb3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6bGF0
ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9K
YXZhU2NyaXB0QXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0
QXVkaW9Ob2RlLmgKaW5kZXggNTc0MzU4ODVkZDVlMTRmNTQ4NjI2ZjBiMmNhMjk2ZGY0ZmVmYWUw
YS4uNjUwNDljYjE0NDI4OGZhOWUyYzFjMDRiNDliOWY2NDdiODgwYWExNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaApAQCAtNzgsNiArNzgsOSBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQXVkaW9Ob2RlOjpkZXJlZjsKICAgICAKIHByaXZhdGU6Cisg
ICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCiAgICAgSmF2YVNjcmlwdEF1
ZGlvTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6
ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cyk7CiAK
ICAgICBzdGF0aWMgdm9pZCBmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2godm9pZCogdXNlckRhdGEp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKaW5k
ZXggYzM3YzZjMWI1Y2EzYmYwYjY1OGU5MDIyN2RjYzM5YTc4ODA3ZmZjMy4uMDIyMTc5ZmM2MWJl
YmM3ZTVjODRkMWYyZDAxNmU1OGI2MDU3NDIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFycmF5KiBhcnJheSkgeyBtX2FuYWx5
c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YShhcnJheSk7IH0KIAogcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0K
KwogICAgIFJlYWx0aW1lQW5hbHlzZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwogCiAgICAgUmVhbHRpbWVBbmFseXNlciBtX2FuYWx5c2VyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oCmluZGV4IGM3MjVmNGRmZTQ0MDVjMmU3
NzdhZjNhZGVlNDdmOGJiNTBhYmUxMTcuLjhkOGU0MTc2MDMwYWFmZWJiYmRlNWU4ZWJiZjI0N2Zl
MjQwNzBkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJE
U1BLZXJuZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2Vy
bmVsLmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIC8vIEF1ZGlvRFNQS2VybmVsCiAg
ICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3Qs
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQor
ICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gMDsgfQogICAgIAogcHJvdGVjdGVkOgogICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVT
aGFwZXJQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29y
Kj4ocHJvY2Vzc29yKCkpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131411</attachid>
            <date>2012-03-12 14:26:41 -0700</date>
            <delta_ts>2012-03-12 15:42:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20120312142640.patch</filename>
            <type>text/plain</type>
            <size>29632</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4Mjk5NDhhZGI2YjA4
YzE1Yzk3ZTNlZmM3ZTIzMGVkNDhmNzk4Ni4uZmEwNDRhZTQ0NmI1ZDU1OTU5NTk4YTRhNDRkOGRk
MDQ2ZmE3NTEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAzLTEyICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiIGFuZCAibGF0ZW5jeVRpbWUoKSIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzUwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyBv
cHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgY29kZSBwYXRoLCBzbyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgIFRvIGFjY291bnQgZm9yIEF1ZGlvTm9kZXMgd2hpY2ggbWF5IGdl
bmVyYXRlIG5vbi1zaWxlbnQgYXVkaW8gd2hlbiBmZWQgc2lsZW50IGlucHV0CisgICAgICAgIGZv
ciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGxhc3Qgbm9uLXNpbGVudCBhdWRp
byBkYXRhLCBhZGQgdHdvIG5ldyB2aXJ0dWFsCisgICAgICAgIGZ1bmN0aW9ucyB0YWlsVGltZSgp
IGFuZCBsYXRlbmN5VGltZSgpLgorCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIFB1cmUgdmlydHVh
bC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUpOiBBZGRlZC4gUHVy
ZSB2aXJ0dWFsLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUHJvY2Vzc29yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1Byb2Nlc3Nvcjo6dGFpbFRpbWUpOiBBZGRlZC4gUHVyZSB2
aXJ0dWFsLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Qcm9jZXNzb3I6OmxhdGVuY3lUaW1lKTog
QWRkZWQuIFB1cmUgdmlydHVhbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtl
cm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWw6OnRhaWxUaW1lKTogQWRk
ZWQuIFB1cmUgdmlydHVhbC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsOjpsYXRl
bmN5VGltZSk6IEFkZGVkLiBQdXJlIHZpcnR1YWwuCisKKyAgICAgICAgQWRkZWQgdGFpbFRpbWUo
KSBhbmQgbGF0ZW5jeVRpbWUoKSBvdmVycmlkZXMgdG8gdGhlIGZvbGxvd2luZyBjbGFzc2VzOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjp0YWlsVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6bGF0ZW5jeVRpbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmg6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3I6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNzQ29tcHJlc3Nvcjo6bGF0ZW5jeVRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OnRhaWxUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkhSVEZQYW5uZXI6OmxhdGVuY3lUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9IUlRGUGFubmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUGFubmVyLmg6CisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpsYXRlbmN5VGltZSk6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRp
b0NoYW5uZWxNZXJnZXIuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oOgorICAgICAg
ICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWREU1BLZXJuZWw6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZERTUEtlcm5l
bDo6bGF0ZW5jeVRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oOgor
ICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnRh
aWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OmxhdGVuY3lUaW1lKToK
KyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6CisgICAgICAgICogd2ViYXVkaW8v
RGVsYXlEU1BLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsYXlEU1BLZXJuZWw6OnRh
aWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGF5RFNQS2VybmVsOjpsYXRlbmN5VGltZSk6
CisgICAgICAgICogd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDoKKyAgICAgICAgKiB3ZWJhdWRp
by9EZWxheVByb2Nlc3Nvci5oOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6dGFp
bFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6bGF0ZW5j
eVRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDoKKyAg
ICAgICAgKiB3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmxhdGVuY3lUaW1lKToKKyAgICAgICAgKiB3ZWJhdWRpby9KYXZh
U2NyaXB0QXVkaW9Ob2RlLmg6CisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6CisKKyAgICAg
ICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZCBhcyBzdXBwb3J0IGZvciB0aGUg
bmV3IEF1ZGlvTm9kZSBhbmQgQXVkaW9Qcm9jZXNzb3IgZnVuY3Rpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OmxhdGVu
Y3lTYW1wbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjps
YXRlbmN5U2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6OmxhdGVuY3lTYW1wbGVzKToK
KworICAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZXJlIG1hZGUgY29uc3QtY29ycmVj
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYjo6aW1wdWxzZVJlc3BvbnNlTGVuZ3RoKToK
KwogMjAxMi0wMy0wOCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVzZSBhbiBleHBsaWNpdCBhdHRyaWJ1dGUgdG8gc2lnbmFsIHRoYXQgYSBjb250ZXh0
IHByZWZlcnMgdG8gdXNlIGEgZGlzY3JldGUgR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9EU1BLZXJuZWwuaAppbmRleCBmMzNjOWVkZTRkM2MwYTEzNjM2MzJlNWMw
ODRlZDBlYmRhYjUyMmMwLi5mNTAxZDY1ODNhNDA5OWJjOTBmMGQ0NDA0MDQ0NjYwYWMzNzcyMjY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5l
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsLmgK
QEAgLTYzLDYgKzYzLDkgQEAgcHVibGljOgogICAgIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKiBw
cm9jZXNzb3IoKSB7IHJldHVybiBtX2tlcm5lbFByb2Nlc3NvcjsgfQogICAgIGNvbnN0IEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFBy
b2Nlc3NvcjsgfQogCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoK
ICAgICBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciogbV9rZXJuZWxQcm9jZXNzb3I7CiAgICAgZmxv
YXQgbV9zYW1wbGVSYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IDVmOTEzOWYwMzA4ODRjZDQ5
MmI1M2FhMDNkODBiM2U5ZmFjNDUzZGEuLmRhMTM4MjA0NTRjNzUxOTg2NDI4YzE1YWJlZGU2NTcw
ODg0ZDkxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTExNSw2ICsxMTUsMTYgQEAgdm9pZCBB
dWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzKQogICAgICAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5u
ZWxzOwogfQogCitkb3VibGUgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OnRhaWxUaW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fa2VybmVscy5pc0VtcHR5KCkgPyBtX2tlcm5lbHMuZmlyc3Qo
KS0+dGFpbFRpbWUoKSA6IDA7Cit9CisKK2RvdWJsZSBBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6
bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAhbV9rZXJuZWxzLmlzRW1wdHkoKSA/
IG1fa2VybmVscy5maXJzdCgpLT5sYXRlbmN5VGltZSgpIDogMDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5oCmlu
ZGV4IDdmOGY4MWQyZmQ4NmZkYjhiNDVlYTk3MmFjZjJlNjk1ODUxODMyNTUuLmE0ZmMzM2ZhZjI0
NWZkODg5NWU1NjE1NDhhODAyNzUzOGEwMDc5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaApAQCAtNjUsNiAr
NjUsOSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1iZXJPZkNoYW5uZWxzOyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWls
VGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkg
Y29uc3QgT1ZFUlJJREU7CisKIHByb3RlY3RlZDoKICAgICB1bnNpZ25lZCBtX251bWJlck9mQ2hh
bm5lbHM7CiAgICAgVmVjdG9yPE93blB0cjxBdWRpb0RTUEtlcm5lbD4gPiBtX2tlcm5lbHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Byb2Nlc3Nvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Qcm9jZXNzb3IuaAppbmRleCA0
NjlmODMzMjI0MzYwNzgxZDQwMjJiMDNkZTdjYjVhNzY4YzA0NzI1Li40ZjI0MGM4MzA0ZGFkM2Nl
NjU3ZTdkZTk4YjgzMDVkOGU2NjEzY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb1Byb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvUHJvY2Vzc29yLmgKQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogCiAgICAg
ZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogCisgICAg
dmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUg
bGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAgICBib29sIG1faW5pdGlh
bGl6ZWQ7CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAppbmRleCBiMzUyOTRkNmFiY2QzMTg0
MDA1MjhjMjcyNzRhNzdmM2Q1NmQzMzJmLi43NGEzY2RhMWY4NDVlOTE5MjllNmM2MTZhMGQ3ZTVh
MzkxYTQzODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3IuaApAQCAtNzgsNiArNzgsOSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2Ft
cGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogICAgIGZsb2F0IG55cXVp
c3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGUgLyAyOyB9CiAKKyAgICBkb3VibGUgdGFp
bFRpbWUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29u
c3QgeyByZXR1cm4gbV9jb21wcmVzc29yLmxhdGVuY3lGcmFtZXMoKSAgLyBzdGF0aWNfY2FzdDxk
b3VibGU+KHNhbXBsZVJhdGUoKSk7IH0KKwogcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZDaGFubmVsczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRXF1YWxQb3dlclBhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1
YWxQb3dlclBhbm5lci5oCmluZGV4IDAxNmNkNGFhMTRjN2ZmNmRlNTBjNDE4YzI5OTAwNzJjMGFj
OGMwZGUuLjAxMmUyMTRjYTNiMWJiZjU5OGRkM2JhOTAzMGRiZTEwZDA5M2E2ZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgKQEAgLTM5
LDYgKzM5LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyBtX2lzRmly
c3RSZW5kZXIgPSB0cnVlOyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKwogcHJpdmF0ZToKICAgICAvLyBGb3Igc21v
b3RoaW5nIC8gZGUtemlwcGVyaW5nCiAgICAgYm9vbCBtX2lzRmlyc3RSZW5kZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCmluZGV4IDRjNjk5MzJlZDAy
MTM0M2E0ODUzYzVjNGQzOGEwZjg0MDMwMDJmNGQuLjFjYzlmZjg2M2FkYmIxNjAyYmY3ZTYxNzY2
ZmM1MjdjN2U5YzE5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0hSVEZQYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQ
YW5uZXIuY3BwCkBAIC0yOTQsNiArMjk0LDIxIEBAIHZvaWQgSFJURlBhbm5lcjo6cGFuKGRvdWJs
ZSBkZXNpcmVkQXppbXV0aCwgZG91YmxlIGVsZXZhdGlvbiwgY29uc3QgQXVkaW9CdXMqIGluCiAg
ICAgfQogfQogCitkb3VibGUgSFJURlBhbm5lcjo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIC8v
IEJlY2F1c2UgSFJURlBhbm5lciBpcyBpbXBsZW1lbnRlZCB3aXRoIGEgRGVsYXlLZXJuZWwgYW5k
IGEgRkZUQ29udm9sdmVyLCB0aGUgdGFpbFRpbWUgb2YgdGhlIEhSVEZQYW5uZXIKKyAgICAvLyBp
cyB0aGUgc3VtIG9mIHRoZSB0YWlsVGltZSBvZiB0aGUgRGVsYXlLZXJuZWwgYW5kIHRoZSB0YWls
VGltZSBvZiB0aGUgRkZUQ29udm9sdmVyLCB3aGljaCBpcyBNYXhEZWxheVRpbWVTZWNvbmRzCisg
ICAgLy8gYW5kIGZmdFNpemUoKSAvIDIsIHJlc3BlY3RpdmVseS4KKyAgICByZXR1cm4gTWF4RGVs
YXlUaW1lU2Vjb25kcyArIChmZnRTaXplKCkgLyAyKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2Ft
cGxlUmF0ZSgpKTsKK30KKworZG91YmxlIEhSVEZQYW5uZXI6OmxhdGVuY3lUaW1lKCkgY29uc3QK
K3sKKyAgICAvLyBUaGUgbGF0ZW5jeSBvZiBhIEZGVENvbnZvbHZlciBpcyBhbHNvIGZmdFNpemUo
KSAvIDIsIGFuZCBpcyBpbiBhZGRpdGlvbiB0byBpdHMgdGFpbFRpbWUgb2YgdGhlCisgICAgLy8g
c2FtZSB2YWx1ZS4KKyAgICByZXR1cm4gKGZmdFNpemUoKSAvIDIpIC8gc3RhdGljX2Nhc3Q8ZG91
YmxlPihzYW1wbGVSYXRlKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vSFJURlBhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJU
RlBhbm5lci5oCmluZGV4IGY1YWYxZDE1MjliZDQ4ZjIzMDdlN2ZlYmNjYjczYTAxNmE5NDUyYzIu
Ljc4NWNmMDk1YTJhNzA0MDlmYzdkNjI0NTk2NWQ0MDBlN2RkZjhhZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgKQEAgLTQwLDExICs0MCwxNCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIGVsZXZhdGlv
biwgY29uc3QgQXVkaW9CdXMqIGlucHV0QnVzLCBBdWRpb0J1cyogb3V0cHV0QnVzLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKIAotICAgIHNpemVf
dCBmZnRTaXplKCkgeyByZXR1cm4gZmZ0U2l6ZUZvclNhbXBsZVJhdGUobV9zYW1wbGVSYXRlKTsg
fQorICAgIHNpemVfdCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4gZmZ0U2l6ZUZvclNhbXBsZVJh
dGUobV9zYW1wbGVSYXRlKTsgfQogICAgIHN0YXRpYyBzaXplX3QgZmZ0U2l6ZUZvclNhbXBsZVJh
dGUoZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZF
UlJJREU7CisKIHByaXZhdGU6CiAgICAgLy8gR2l2ZW4gYW4gYXppbXV0aCBhbmdsZSBpbiB0aGUg
cmFuZ2UgLTE4MCAtPiArMTgwLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGF6aW11dGggaW5k
ZXggZm9yIHRoZSBkYXRhYmFzZSwKICAgICAvLyBhbmQgYXppbXV0aEJsZW5kIHdoaWNoIGlzIGFu
IGludGVycG9sYXRpb24gdmFsdWUgZnJvbSAwIC0+IDEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9QYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1Bhbm5lci5oCmluZGV4IGQ4YjhkZDBmMWFkNGY4ZTYyOTBjZDA2ZWRiOTYwZDNhNzk1YzA1
MjEuLmY4YjI0MGU2MDg3MTg0OWY2MWFhODExNTg4NDM0OThmNGE0ZDMzZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Bhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1Bhbm5lci5oCkBAIC01Nyw2ICs1Nyw5IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpID0gMDsKIAorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxU
aW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3Qg
PSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgUGFubmVyKFBhbm5pbmdNb2RlbCBtb2RlbCkgOiBtX3Bh
bm5pbmdNb2RlbChtb2RlbCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwCmluZGV4IDEyMmUyMWI2ODk1ZTBiNDc1MjRkZGEzZjk3ZjdiMWJhOGZhOGJkYzUuLjVm
YTUyYmYxYzFmMDM2MTFjZDE5NTE1NzdmYTlhOWYzYmUxMjhiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcApAQCAtMjI4LDYgKzIyOCwxMSBAQCB2b2lkIFJldmVy
Yjo6cmVzZXQoKQogICAgICAgICBtX2NvbnZvbHZlcnNbaV0tPnJlc2V0KCk7CiB9CiAKK3NpemVf
dCBSZXZlcmI6OmxhdGVuY3lTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fY29udm9s
dmVycy5pc0VtcHR5KCkgPyBtX2NvbnZvbHZlcnMuZmlyc3QoKS0+bGF0ZW5jeVNhbXBsZXMoKSA6
IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5oCmluZGV4IDc3OWU3YmJh
NDkzNDRjODJlNDU3YzcyM2U2ZDBhNjE4ODgxZGRlYzQuLmZjMTIxYjFjY2EzYTYzYWNiYjYxMGJj
OGUwYjBkNGJmZTBkNjdhNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5o
CkBAIC00OCw3ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9C
dXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICB1bnNpZ25lZCBpbXB1bHNlUmVzcG9u
c2VMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ltcHVsc2VSZXNwb25zZUxlbmd0aDsgfQorICAg
IHNpemVfdCBpbXB1bHNlUmVzcG9uc2VMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ltcHVsc2VS
ZXNwb25zZUxlbmd0aDsgfQorICAgIHNpemVfdCBsYXRlbmN5U2FtcGxlcygpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZShBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVm
ZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKaW5kZXggYzZhYjU0
ZThlZjdhNzkxOGZiNDk0NmU3MzIxYjY2OWFkNGY2NTA0MS4uNWUyNTMzZDI3MzA2Njk1NjIzN2Jm
ZDJmZWI4ZTRhOTdmOWJhMjc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCkBAIC0yMjQsNiArMjI0LDEzIEBAIHZvaWQgUmV2ZXJi
Q29udm9sdmVyOjpyZXNldCgpCiAgICAgbV9pbnB1dEJ1ZmZlci5yZXNldCgpOwogfQogCitzaXpl
X3QgUmV2ZXJiQ29udm9sdmVyOjpsYXRlbmN5U2FtcGxlcygpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IENvbnZvbHZlck5vZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAg
ICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0PgorICAg
IHJldHVybiBtX21pbkZGVFNpemUgLyAyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAppbmRleCAzNzBiODcyMDY0ODI5ZTFjY2UyOWI2ZWQy
NTcxMjZjOTBmNTY4YmRlLi5iNWFmZjk4NjA3NGQ0NzM1MmZjN2YxNzc5Nzg3NDhjMzAyMjc2MzIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFk
cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja2dyb3VuZFRocmVhZHM7IH0KICAgICB2b2lkIGJh
Y2tncm91bmRUaHJlYWRFbnRyeSgpOwogCisgICAgc2l6ZV90IGxhdGVuY3lTYW1wbGVzKCkgY29u
c3Q7CiBwcml2YXRlOgogICAgIFZlY3RvcjxPd25QdHI8UmV2ZXJiQ29udm9sdmVyU3RhZ2U+ID4g
bV9zdGFnZXM7CiAgICAgVmVjdG9yPE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gPiBtX2Jh
Y2tncm91bmRTdGFnZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZS5jcHAKaW5kZXggODFiNWQ5NjVkMWJjNGMwOGIzNTY2YjUzNjQ3ZDBj
OTgzZjlhMjY5MC4uMDg0ZGQ3YjEzZmQ3MmVkNDUzYTY4ZTAwYmFjZTcxYzY2MTFjMDZhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
LmNwcApAQCAtMTM2LDYgKzEzNiwxNiBAQCB1bnNpZ25lZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9k
ZTo6bnVtYmVyT2ZDaGFubmVscygpCiAgICAgcmV0dXJuIG91dHB1dCgwKS0+bnVtYmVyT2ZDaGFu
bmVscygpOwogfQogCitkb3VibGUgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnRhaWxUaW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9jZXNzb3ItPnRhaWxUaW1lKCk7Cit9CisKK2RvdWJs
ZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Byb2Nlc3Nvci0+bGF0ZW5jeVRpbWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCmluZGV4IDM2Y2YyYjQxNTMzY2M5
MmYzZmQ2Mzk5YjlkMWYzZTE4MDRlZDFiYjMuLjE5NzMwMjNhNTUxNDI1NDBmMGJlMGJjZjdkNTMx
MjE5ZDNjZGE0MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUuaApAQCAtNTUsNiArNTUsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscygpOwogCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBkb3VibGUgdGFp
bFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgp
IGNvbnN0IE9WRVJSSURFOworCiAgICAgQXVkaW9Qcm9jZXNzb3IqIHByb2Nlc3NvcigpIHsgcmV0
dXJuIG1fcHJvY2Vzc29yLmdldCgpOyB9CiAgICAgT3duUHRyPEF1ZGlvUHJvY2Vzc29yPiBtX3By
b2Nlc3NvcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0No
YW5uZWxNZXJnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdl
ci5oCmluZGV4IGU3NzNkYWViOTEzZjUyZDI2NTU0ZmE2MzhmOGNkNjBhMjBjZmZhMGMuLjM1ZGQw
NmRmNTI4NDBiYTA0M2ZiZmEzNTM3NjEwMTgxMTVkZGIzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oCkBAIC01MSw2ICs1MSw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2Rl
SW5wdXQqKTsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKwogICAgIEF1ZGlvQ2hhbm5lbE1lcmdlcihB
dWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oCmluZGV4IDcxYjBlZjQxNWJmZDQ1ZTYz
YzNmMDE3Zjc3YmRjYzlhNjQwNmNjYmYuLmM4MjY1MGE3MzQzNGNmZWE4MmRmNDBlMzNlNWFmODUx
NWI3NWEzMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bFNwbGl0dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3Bs
aXR0ZXIuaApAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0
KCk7CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiAwOyB9CisKICAgICBBdWRpb0NoYW5uZWxTcGxpdHRlcihBdWRp
b0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCmluZGV4IGQwNzgzM2RhOTA3NmMyYzllOGUz
MTdkYWZjYTM2YjNhMjU1YjIyNjMuLjc2MGM2Mzg4MTE5N2I1ZTgwMzE4NWFmODE2ZTIzYjM3OWE2
NDg2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRp
b25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaApAQCAtNTQsNiArNTQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UmVu
ZGVyaW5nKCkgPSAwOwogICAgIAogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxU
aW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxh
dGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorCiAgICAgLy8gQ291bnRz
IHRoZSBudW1iZXIgb2Ygc2FtcGxlLWZyYW1lcyBwcm9jZXNzZWQgYnkgdGhlIGRlc3RpbmF0aW9u
LgogICAgIHNpemVfdCBtX2N1cnJlbnRTYW1wbGVGcmFtZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0dhaW5Ob2RlLmgKaW5kZXggNjI2ZWYyY2YyNjA0OWM4Yzc0YTllNWUzYTI5OWM2
ZmIxZTdmZTQzMy4uNjlhNjRiNDcxZTM2OTU4MzBmZGI1MDQ3YWVlNDliMjMyOTZkZWVkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaApAQCAtNTUsNiArNTUsOSBAQCBw
dWJsaWM6CiAgICAgQXVkaW9HYWluKiBnYWluKCkgeyByZXR1cm4gbV9nYWluLmdldCgpOyB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAKIHByaXZhdGU6CisgICAgdmly
dHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9
CisKICAgICBBdWRpb0dhaW5Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwog
CiAgICAgZmxvYXQgbV9sYXN0R2FpbjsgLy8gZm9yIGRlLXppcHBlcmluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb05vZGUuaAppbmRleCBkZmZkNzExOGVjNzE5ZWQxNWVlNDNmOTgzOTQxZjQ4YTBh
ZGU1MTdjLi5iOWYyN2I0NjViYzMyMDA0OWFkZjIyMWZmYzdkZGQxYTdhNzQzNzJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb05vZGUuaApAQCAtMTM3LDYgKzEzNywxMyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzTWFya2VkRm9yRGVsZXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2Vk
Rm9yRGVsZXRpb247IH0KIAorICAgIC8vIHRhaWxUaW1lKCkgaXMgdGhlIGxlbmd0aCBvZiB0aW1l
IChub3QgY291bnRpbmcgbGF0ZW5jeSB0aW1lKSB3aGVyZSBub24temVybyBvdXRwdXQgbWF5IG9j
Y3VyIGFmdGVyIGNvbnRpbnVvdXMgc2lsZW50IGlucHV0LgorICAgIHZpcnR1YWwgZG91YmxlIHRh
aWxUaW1lKCkgY29uc3QgPSAwOworICAgIC8vIGxhdGVuY3lUaW1lKCkgaXMgdGhlIGxlbmd0aCBv
ZiB0aW1lIGl0IHRha2VzIGZvciBub24temVybyBvdXRwdXQgdG8gYXBwZWFyIGFmdGVyIG5vbi16
ZXJvIGlucHV0IGlzIHByb3ZpZGVkLiBUaGlzIG9ubHkgYXBwbGllcyB0bworICAgIC8vIHByb2Nl
c3NpbmcgZGVsYXkgd2hpY2ggaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIHByb2Nlc3NpbmcgYWxnb3Jp
dGhtIGNob3NlbiBhbmQgaXMgKm5vdCogcGFydCBvZiB0aGUgaW50cmluc2ljIGRlc2lyZWQgZWZm
ZWN0LiBGb3IgCisgICAgLy8gZXhhbXBsZSwgYSAiZGVsYXkiIGVmZmVjdCBpcyBleHBlY3RlZCB0
byBkZWxheSB0aGUgc2lnbmFsLCBhbmQgdGh1cyB3b3VsZCBub3QgYmUgY29uc2lkZXJlZCBsYXRl
bmN5LgorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgPSAwOworCiBwcm90
ZWN0ZWQ6CiAgICAgLy8gSW5wdXRzIGFuZCBvdXRwdXRzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUg
dGhlIEF1ZGlvTm9kZSBpcyBpbml0aWFsaXplZC4KICAgICB2b2lkIGFkZElucHV0KFBhc3NPd25Q
dHI8QXVkaW9Ob2RlSW5wdXQ+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvUGFubmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJO
b2RlLmgKaW5kZXggMTgyNzVmNmViYzE3ZWY2MDMxZDk1NmYxMTZkMzA5YmE5MzVmNzhkYi4uOTYx
ZWYzYzJjZjBmYWI1NThlNDQ3ZjE3ZmMxMzgwNTA3N2RmMDAyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKQEAgLTEyNCw2ICsxMjQsOSBAQCBwdWJsaWM6CiAg
ICAgQXVkaW9HYWluKiBkaXN0YW5jZUdhaW4oKSB7IHJldHVybiBtX2Rpc3RhbmNlR2Fpbi5nZXQo
KTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBBdWRpb0dh
aW4qIGNvbmVHYWluKCkgeyByZXR1cm4gbV9jb25lR2Fpbi5nZXQoKTsgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKIAorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1l
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wYW5uZXIgPyBtX3Bhbm5lci0+dGFpbFRpbWUo
KSA6IDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPmxhdGVuY3lUaW1lKCkgOiAwOyB9CisKIHBy
aXZhdGU6CiAgICAgQXVkaW9QYW5uZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oCmluZGV4IGE2
YmRkNDI3Yjk5MjIzZTc4N2NjYTNmYzBlZTI3N2YxNjE2ZDM4ODQuLjkyYTk1YTA4MzZjYTMzZDhi
YTZmZmMzYmNkYWY2NTFiZWFmODFjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
U291cmNlTm9kZS5oCkBAIC0zOSw2ICszOSw5IEBAIHB1YmxpYzoKICAgICAgICAgOiBBdWRpb05v
ZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKICAgICB7CiAgICAgfQorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0JpcXVhZERTUEtlcm5lbC5jcHAKaW5kZXggOWZhYWM2NTk4OTVjYmQ1OTdkMTYwN2Q3MzJiZjQ0
NDZkNGUzNDE3MS4uMzA2MmE4MDJiMDU3MjQxYmIyOTNiOTRlZWNiMjQ1MzJmMWMxZmVhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCkBAIC0zMCwxMCAr
MzAsMTcgQEAKIAogI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogQXMgYSByZWN1cnNpdmUgbGlu
ZWFyIGZpbHRlciwgZGVwZW5kaW5nIG9uIGl0cyBwYXJhbWV0ZXJzLCBhIGJpcXVhZCBmaWx0ZXIg
Y2FuIGhhdmUKKy8vIGFuIGluZmluaXRlIHRhaWxUaW1lLiBJbiBwcmFjdGljZSwgQmlxdWFkIGZp
bHRlcnMgbm90IHVzdWFsbHkgKGV4Y2VwdCBmb3IgdmVyeSBoaWdoIHJlc29uYW5jZSB2YWx1ZXMp
IAorLy8gbm90IGhhdmUgYSB0YWlsVGltZSBvZiBsb25nZXIgdGhhbiBhcHByb3guIDIwMG1zLiBU
aGlzIHZhbHVlIGNvdWxkIHBvc3NpYmx5IGJlIGNhbGN1bGF0ZWQgYmFzZWQKKy8vIG9uIHRoZSBz
ZXR0aW5ncyBvZiB0aGUgQmlxdWFkLgorc3RhdGljIGNvbnN0IGRvdWJsZSBNYXhCaXF1YWREZWxh
eVRpbWUgPSAwLjI7CisKIHZvaWQgQmlxdWFkRFNQS2VybmVsOjp1cGRhdGVDb2VmZmljaWVudHNJ
Zk5lY2Vzc2FyeShib29sIHVzZVNtb290aGluZywgYm9vbCBmb3JjZVVwZGF0ZSkKIHsKICAgICBp
ZiAoZm9yY2VVcGRhdGUgfHwgYmlxdWFkUHJvY2Vzc29yKCktPmZpbHRlckNvZWZmaWNpZW50c0Rp
cnR5KCkpIHsKQEAgLTEzNCw2ICsxNDEsMTYgQEAgdm9pZCBCaXF1YWREU1BLZXJuZWw6OmdldEZy
ZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCiAgICAgbV9iaXF1YWQuZ2V0RnJlcXVl
bmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3kuZGF0YSgpLCBtYWdSZXNwb25zZSwg
cGhhc2VSZXNwb25zZSk7CiB9CiAKK2RvdWJsZSBCaXF1YWREU1BLZXJuZWw6OnRhaWxUaW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gTWF4QmlxdWFkRGVsYXlUaW1lOworfQorCitkb3VibGUgQmlx
dWFkRFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCmluZGV4IGEyMWUyNGMwZDBj
ODRkODk0MDAzMzg5YmU3NWZjNGNlOGQyOWIwZGIuLjA3NzU1NTliNGJkNjRiYmJkY2Y5YWVmN2Qx
ZGEyMTMwNjY4YmU5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVh
ZERTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5l
bC5oCkBAIC01Miw2ICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCogcGhhc2VSZXNwb25zZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZF
UlJJREU7CisKIHByb3RlY3RlZDoKICAgICBCaXF1YWQgbV9iaXF1YWQ7CiAgICAgQmlxdWFkUHJv
Y2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9j
ZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZp
bHRlck5vZGUuaAppbmRleCA1NDViMDYwYmVlZTZhMTk5ODQ0OGZiY2IzOGI4M2JmMDI3MmQ2OTY3
Li5jY2Q2Y2RlMmUyNmYzYjJmYmNiMWRhMWFhYTVkOWFjODc2Njk5MThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oCkBAIC02Myw2ICs2Myw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGdldEZyZXF1ZW5jeVJlc3BvbnNlKGNvbnN0IEZsb2F0MzJBcnJheSogZnJl
cXVlbmN5SHosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1h
Z1Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBw
aGFzZVJlc3BvbnNlKTsKKwogcHJpdmF0ZToKICAgICBCaXF1YWRGaWx0ZXJOb2RlKEF1ZGlvQ29u
dGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuY3BwCmluZGV4IDZhZmMwOTViY2RiMGI0ZDNiYTlkYzY5NTZiNWE4MGY5NDMyNGU5
M2YuLjYzNjQ3NjNiNmYxYmRiZTNiOTQ4YTdlM2UzMzQ1NjhlNDNiMDI2ZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCkBAIC0xNTEsNiArMTUxLDE2IEBAIEF1
ZGlvQnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZmZXIoKQogICAgIHJldHVybiBtX2J1ZmZlci5n
ZXQoKTsKIH0KIAorZG91YmxlIENvbnZvbHZlck5vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZXZlcmIgPyBtX3JldmVyYi0+aW1wdWxzZVJlc3BvbnNlTGVuZ3RoKCkgLyBz
dGF0aWNfY2FzdDxkb3VibGU+KHNhbXBsZVJhdGUoKSkgOiAwOworfQorCitkb3VibGUgQ29udm9s
dmVyTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JldmVyYiA/IG1f
cmV2ZXJiLT5sYXRlbmN5U2FtcGxlcygpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRl
KCkpIDogMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAppbmRleCAx
MmY0MTcyODE5YTAwZTVmMDg3YWQ5OTY2YTIzNDRkYTZkNDIyZmIyLi42ZDU4OTE4Njg4NGM5MzVi
MmIyMGU3NzBlYjg0NWMwZDc1NDE2NGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5oCkBAIC01Niw5ICs1NiwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIG5vcm1hbGl6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9CiAgICAgdm9pZCBzZXROb3JtYWxpemUo
Ym9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KKwogcHJpdmF0ZToK
ICAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCisg
ICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCiAgICAgT3duUHRyPFJldmVy
Yj4gbV9yZXZlcmI7CiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1ZmZlcjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwIGIvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCmluZGV4IGZiMzFlMmRkZDhlMzU4
OTc1MGRiNzBjMDlmYWU3YWUxY2U1NjljYmEuLjJiZDU3NTllYTI2YTQyOGU4MjAzMGIwZGJmYWM5
NzNkOWFhNzBhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQ
S2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5j
cHAKQEAgLTEzNCw2ICsxMzQsMTYgQEAgdm9pZCBEZWxheURTUEtlcm5lbDo6cmVzZXQoKQogICAg
IG1fYnVmZmVyLnplcm8oKTsKIH0KIAorZG91YmxlIERlbGF5RFNQS2VybmVsOjp0YWlsVGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWF4RGVsYXlUaW1lOworfQorCitkb3VibGUgRGVsYXlE
U1BLZXJuZWw6OmxhdGVuY3lUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmggYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oCmluZGV4IDc5YTM5NTY4Yjc4OGYxNzFm
MTJmNjdmMGJmYWQ3M2FmZDE2ZTg4YjQuLjFkNTU2ZWE0ZWQ1ODE0YmZmZmMyZGU1ODkxMmFiODI2
YWJlMzRmZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2Vy
bmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaApAQCAt
NDQsNyArNDQsMTAgQEAgcHVibGljOgogICAgIGRvdWJsZSBtYXhEZWxheVRpbWUoKSBjb25zdCB7
IHJldHVybiBtX21heERlbGF5VGltZTsgfQogICAgIAogICAgIHZvaWQgc2V0RGVsYXlGcmFtZXMo
ZG91YmxlIG51bWJlck9mRnJhbWVzKSB7IG1fZGVzaXJlZERlbGF5RnJhbWVzID0gbnVtYmVyT2ZG
cmFtZXM7IH0KLSAgICAKKworICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsK
KwogcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9idWZmZXI7CiAgICAgZG91YmxlIG1f
bWF4RGVsYXlUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQ
cm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgKaW5k
ZXggNDNjNWUwY2JlYjE5Zjg1ZjJmYzE0ZjQzYjVkNjQ2YTU1YTNkOTZlMS4uMzNmYjkzN2UwMGE4
OTFiN2NkOGUwNmUxMjJkNTE0OWQ2MDY5NWM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9E
ZWxheVByb2Nlc3Nvci5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIGRvdWJsZSBt
YXhEZWxheVRpbWUoKSB7IHJldHVybiBtX21heERlbGF5VGltZTsgfQogcHJpdmF0ZToKKwogICAg
IFJlZlB0cjxBdWRpb1BhcmFtPiBtX2RlbGF5VGltZTsKICAgICBkb3VibGUgbV9tYXhEZWxheVRp
bWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmNwcAppbmRleCA1YWZlMmQ2ODMxMTYzZmU2M2MwNDIyZDk0ZmU4NGFjNjVlOTVmOTIz
Li5lZjcwNDc5MDcyY2MzNTA2NjczZDYxZTljY2VmYTQ4MDBmYTdmMDM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcApAQCAtMTA2
LDYgKzEwNiwxNiBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgp
CiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKIH0KIAorZG91YmxlIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keW5hbWljc0Nv
bXByZXNzb3ItPnRhaWxUaW1lKCk7Cit9CisKK2RvdWJsZSBEeW5hbWljc0NvbXByZXNzb3JOb2Rl
OjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHluYW1pY3NDb21wcmVzc29y
LT5sYXRlbmN5VGltZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RHluYW1pY3NDb21wcmVzc29yTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5oCmluZGV4IDMyZDNjYjE3MzVkMzA4MDJiYzMxYzAzNWZkZDFkMTky
NGQ5M2IxNDUuLmNmN2U2M2E0MjlmYmRkNDlhNjE3YTdkMTZmMGZiNzJkZGVmZmZmOTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKQEAg
LTU3LDYgKzU3LDkgQEAgcHVibGljOgogICAgIEF1ZGlvUGFyYW0qIHJlZHVjdGlvbigpIHsgcmV0
dXJuIG1fcmVkdWN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGlt
ZSgpIGNvbnN0IE9WRVJSSURFOworCiAgICAgRHluYW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0Nv
bnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAogICAgIE93blB0cjxEeW5hbWljc0NvbXByZXNz
b3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9K
YXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAppbmRleCBiZjgzMTQ3NTMzMTVkMGI1Y2FjYmFjOWRjYzgx
MTQ1NDkxNDM4MTJmLi5lYTNkN2FhYWE3YzQ2YTdkMjMyNWU2MzYxZDg2YmZiYWU3ZWI1MzU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcApA
QCAtMjY3LDYgKzI2NywxNiBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKYXZhU2NyaXB0QXVk
aW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxKYXZhU2NyaXB0QXVkaW9Ob2RlKj4odGhpcyktPmNvbnRleHQoKS0+ZG9jdW1lbnQoKTsK
IH0KIAorZG91YmxlIEphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworfQorCitk
b3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgKaW5kZXggNTc0MzU4ODVk
ZDVlMTRmNTQ4NjI2ZjBiMmNhMjk2ZGY0ZmVmYWUwYS4uNjUwNDljYjE0NDI4OGZhOWUyYzFjMDRi
NDliOWY2NDdiODgwYWExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2
YVNjcmlwdEF1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3Jp
cHRBdWRpb05vZGUuaApAQCAtNzgsNiArNzgsOSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQXVkaW9O
b2RlOjpkZXJlZjsKICAgICAKIHByaXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0
IE9WRVJSSURFOworCiAgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZShBdWRpb0NvbnRleHQqLCBmbG9h
dCBzYW1wbGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMs
IHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cyk7CiAKICAgICBzdGF0aWMgdm9pZCBmaXJlUHJvY2Vz
c0V2ZW50RGlzcGF0Y2godm9pZCogdXNlckRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKaW5kZXggYzM3YzZjMWI1Y2EzYmYwYjY1OGU5MDIy
N2RjYzM5YTc4ODA3ZmZjMy4uMDIyMTc5ZmM2MWJlYmM3ZTVjODRkMWYyZDAxNmU1OGI2MDU3NDIw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5o
CkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEJ5dGVUaW1lRG9tYWluRGF0
YShVaW50OEFycmF5KiBhcnJheSkgeyBtX2FuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YShh
cnJheSk7IH0KIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKwogICAgIFJlYWx0aW1lQW5hbHlzZXJOb2Rl
KEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCiAgICAgUmVhbHRpbWVBbmFseXNl
ciBtX2FuYWx5c2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNo
YXBlckRTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtl
cm5lbC5oCmluZGV4IGM3MjVmNGRmZTQ0MDVjMmU3NzdhZjNhZGVlNDdmOGJiNTBhYmUxMTcuLjhk
OGU0MTc2MDMwYWFmZWJiYmRlNWU4ZWJiZjI0N2ZlMjQwNzBkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVi
bGljOgogICAgIC8vIEF1ZGlvRFNQS2VybmVsCiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29u
c3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3QsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwog
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1l
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVu
Y3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQogICAgIAogcHJvdGVjdGVkOgog
ICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131428</attachid>
            <date>2012-03-12 15:42:38 -0700</date>
            <delta_ts>2012-03-12 16:00:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74750-20120312154237.patch</filename>
            <type>text/plain</type>
            <size>29760</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4Mjk5NDhhZGI2YjA4
YzE1Yzk3ZTNlZmM3ZTIzMGVkNDhmNzk4Ni4uNWE3MTE4NDViNmQ4ODQ0ZjRlZTIyYjFjYjY0NTcy
YjIzY2Q5ODQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAzLTEyICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNvcmU6IEFkZCBzdXBw
b3J0IGZvciBBdWRpb05vZGUgInRhaWxUaW1lKCkiIGFuZCAibGF0ZW5jeVRpbWUoKSIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzUwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyBv
cHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgY29kZSBwYXRoLCBzbyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgIFRvIGFjY291bnQgZm9yIEF1ZGlvTm9kZXMgd2hpY2ggbWF5IGdl
bmVyYXRlIG5vbi1zaWxlbnQgYXVkaW8gd2hlbiBmZWQgc2lsZW50IGlucHV0CisgICAgICAgIGZv
ciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGxhc3Qgbm9uLXNpbGVudCBhdWRp
byBkYXRhLCBhZGQgdHdvIG5ldyB2aXJ0dWFsCisgICAgICAgIGZ1bmN0aW9ucyB0YWlsVGltZSgp
IGFuZCBsYXRlbmN5VGltZSgpLgorCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnRhaWxUaW1lKTogQWRkZWQuIFB1cmUgdmlydHVh
bC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUpOiBBZGRlZC4gUHVy
ZSB2aXJ0dWFsLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUHJvY2Vzc29yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1Byb2Nlc3Nvcjo6dGFpbFRpbWUpOiBBZGRlZC4gUHVyZSB2
aXJ0dWFsLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Qcm9jZXNzb3I6OmxhdGVuY3lUaW1lKTog
QWRkZWQuIFB1cmUgdmlydHVhbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtl
cm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWw6OnRhaWxUaW1lKTogQWRk
ZWQuIFB1cmUgdmlydHVhbC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsOjpsYXRl
bmN5VGltZSk6IEFkZGVkLiBQdXJlIHZpcnR1YWwuCisKKyAgICAgICAgQWRkZWQgdGFpbFRpbWUo
KSBhbmQgbGF0ZW5jeVRpbWUoKSBvdmVycmlkZXMgdG8gdGhlIGZvbGxvd2luZyBjbGFzc2VzOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjp0YWlsVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6bGF0ZW5jeVRpbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmg6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3I6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNzQ29tcHJlc3Nvcjo6bGF0ZW5jeVRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OnRhaWxUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkhSVEZQYW5uZXI6OmxhdGVuY3lUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9IUlRGUGFubmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUGFubmVyLmg6CisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpsYXRlbmN5VGltZSk6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRp
b0NoYW5uZWxNZXJnZXIuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oOgorICAgICAg
ICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWREU1BLZXJuZWw6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZERTUEtlcm5l
bDo6bGF0ZW5jeVRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oOgor
ICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnRh
aWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OmxhdGVuY3lUaW1lKToK
KyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6CisgICAgICAgICogd2ViYXVkaW8v
RGVsYXlEU1BLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsYXlEU1BLZXJuZWw6OnRh
aWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGF5RFNQS2VybmVsOjpsYXRlbmN5VGltZSk6
CisgICAgICAgICogd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDoKKyAgICAgICAgKiB3ZWJhdWRp
by9EZWxheVByb2Nlc3Nvci5oOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6dGFp
bFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6bGF0ZW5j
eVRpbWUpOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDoKKyAg
ICAgICAgKiB3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmxhdGVuY3lUaW1lKToKKyAgICAgICAgKiB3ZWJhdWRpby9KYXZh
U2NyaXB0QXVkaW9Ob2RlLmg6CisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6CisKKyAgICAg
ICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZCBhcyBzdXBwb3J0IGZvciB0aGUg
bmV3IEF1ZGlvTm9kZSBhbmQgQXVkaW9Qcm9jZXNzb3IgZnVuY3Rpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OmxhdGVu
Y3lGcmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmI6Omxh
dGVuY3lGcmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpsYXRlbmN5RnJhbWVzKToKKwor
ICAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZXJlIG1hZGUgY29uc3QtY29ycmVjdDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYjo6aW1wdWxzZVJlc3BvbnNlTGVuZ3RoKToKKwog
MjAxMi0wMy0wOCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVzZSBhbiBleHBsaWNpdCBhdHRyaWJ1dGUgdG8gc2lnbmFsIHRoYXQgYSBjb250ZXh0IHBy
ZWZlcnMgdG8gdXNlIGEgZGlzY3JldGUgR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9EU1BLZXJuZWwuaAppbmRleCBmMzNjOWVkZTRkM2MwYTEzNjM2MzJlNWMwODRl
ZDBlYmRhYjUyMmMwLi5mNTAxZDY1ODNhNDA5OWJjOTBmMGQ0NDA0MDQ0NjYwYWMzNzcyMjY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsLmgKQEAg
LTYzLDYgKzYzLDkgQEAgcHVibGljOgogICAgIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKiBwcm9j
ZXNzb3IoKSB7IHJldHVybiBtX2tlcm5lbFByb2Nlc3NvcjsgfQogICAgIGNvbnN0IEF1ZGlvRFNQ
S2VybmVsUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFByb2Nl
c3NvcjsgfQogCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAg
ICBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciogbV9rZXJuZWxQcm9jZXNzb3I7CiAgICAgZmxvYXQg
bV9zYW1wbGVSYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IDVmOTEzOWYwMzA4ODRjZDQ5MmI1
M2FhMDNkODBiM2U5ZmFjNDUzZGEuLjAyODkwODk5YmQzNTA3N2UxNTdmY2E2N2YwMWUwZDRjNjE0
MGI0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQ
S2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTExNSw2ICsxMTUsMTggQEAgdm9pZCBBdWRp
b0RTUEtlcm5lbFByb2Nlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzKQogICAgICAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxz
OwogfQogCitkb3VibGUgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OnRhaWxUaW1lKCkgY29uc3QK
K3sKKyAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IGFsbCB0aGUga2VybmVscyBoYXZlIHRoZSBz
YW1lIHRhaWxUaW1lLgorICAgIHJldHVybiAhbV9rZXJuZWxzLmlzRW1wdHkoKSA/IG1fa2VybmVs
cy5maXJzdCgpLT50YWlsVGltZSgpIDogMDsKK30KKworZG91YmxlIEF1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhh
dCBhbGwgdGhlIGtlcm5lbHMgaGF2ZSB0aGUgc2FtZSBsYXRlbmN5VGltZS4KKyAgICByZXR1cm4g
IW1fa2VybmVscy5pc0VtcHR5KCkgPyBtX2tlcm5lbHMuZmlyc3QoKS0+bGF0ZW5jeVRpbWUoKSA6
IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RT
UEtlcm5lbFByb2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9E
U1BLZXJuZWxQcm9jZXNzb3IuaAppbmRleCA3ZjhmODFkMmZkODZmZGI4YjQ1ZWE5NzJhY2YyZTY5
NTg1MTgzMjU1Li5hNGZjMzNmYWYyNDVmZDg4OTVlNTYxNTQ4YTgwMjc1MzhhMDA3OTc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nl
c3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVs
UHJvY2Vzc29yLmgKQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZDaGFubmVsczsgfQogCisg
ICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCiBwcm90ZWN0ZWQ6CiAgICAg
dW5zaWduZWQgbV9udW1iZXJPZkNoYW5uZWxzOwogICAgIFZlY3RvcjxPd25QdHI8QXVkaW9EU1BL
ZXJuZWw+ID4gbV9rZXJuZWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9Qcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1
ZGlvUHJvY2Vzc29yLmgKaW5kZXggNDY5ZjgzMzIyNDM2MDc4MWQ0MDIyYjAzZGU3Y2I1YTc2OGMw
NDcyNS4uNGYyNDBjODMwNGRhZDNjZTY1N2U3ZGU5OGI4MzA1ZDhlNjYxM2NiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Qcm9jZXNzb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Byb2Nlc3Nvci5oCkBAIC02NSw2ICs2
NSw5IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X3NhbXBsZVJhdGU7IH0KIAorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgPSAwOworCiBwcm90ZWN0
ZWQ6CiAgICAgYm9vbCBtX2luaXRpYWxpemVkOwogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgK
aW5kZXggYjM1Mjk0ZDZhYmNkMzE4NDAwNTI4YzI3Mjc0YTc3ZjNkNTZkMzMyZi4uNTIwMTMyODk4
NDE5NDVkYTczZmRhNjYwYmUxZjJiN2NkNjE5MTM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKQEAgLTc4LDYgKzc4LDkgQEAg
cHVibGljOgogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJh
dGU7IH0KICAgICBmbG9hdCBueXF1aXN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlIC8g
MjsgfQogCisgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGRv
dWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHJlc3Nvci5sYXRlbmN5RnJh
bWVzKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHNhbXBsZVJhdGUoKSk7IH0KKwogcHJvdGVjdGVk
OgogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5oCmluZGV4IDAxNmNkNGFhMTRjN2Zm
NmRlNTBjNDE4YzI5OTAwNzJjMGFjOGMwZGUuLjAxMmUyMTRjYTNiMWJiZjU5OGRkM2JhOTAzMGRi
ZTEwZDA5M2E2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVh
bFBvd2VyUGFubmVyLmgKQEAgLTM5LDYgKzM5LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHJlc2V0KCkgeyBtX2lzRmlyc3RSZW5kZXIgPSB0cnVlOyB9CiAKKyAgICB2aXJ0dWFsIGRv
dWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKwogcHJp
dmF0ZToKICAgICAvLyBGb3Igc21vb3RoaW5nIC8gZGUtemlwcGVyaW5nCiAgICAgYm9vbCBtX2lz
Rmlyc3RSZW5kZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGUGFubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIu
Y3BwCmluZGV4IDRjNjk5MzJlZDAyMTM0M2E0ODUzYzVjNGQzOGEwZjg0MDMwMDJmNGQuLjFjYzlm
Zjg2M2FkYmIxNjAyYmY3ZTYxNzY2ZmM1MjdjN2U5YzE5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCkBAIC0yOTQsNiArMjk0LDIxIEBAIHZvaWQg
SFJURlBhbm5lcjo6cGFuKGRvdWJsZSBkZXNpcmVkQXppbXV0aCwgZG91YmxlIGVsZXZhdGlvbiwg
Y29uc3QgQXVkaW9CdXMqIGluCiAgICAgfQogfQogCitkb3VibGUgSFJURlBhbm5lcjo6dGFpbFRp
bWUoKSBjb25zdAoreworICAgIC8vIEJlY2F1c2UgSFJURlBhbm5lciBpcyBpbXBsZW1lbnRlZCB3
aXRoIGEgRGVsYXlLZXJuZWwgYW5kIGEgRkZUQ29udm9sdmVyLCB0aGUgdGFpbFRpbWUgb2YgdGhl
IEhSVEZQYW5uZXIKKyAgICAvLyBpcyB0aGUgc3VtIG9mIHRoZSB0YWlsVGltZSBvZiB0aGUgRGVs
YXlLZXJuZWwgYW5kIHRoZSB0YWlsVGltZSBvZiB0aGUgRkZUQ29udm9sdmVyLCB3aGljaCBpcyBN
YXhEZWxheVRpbWVTZWNvbmRzCisgICAgLy8gYW5kIGZmdFNpemUoKSAvIDIsIHJlc3BlY3RpdmVs
eS4KKyAgICByZXR1cm4gTWF4RGVsYXlUaW1lU2Vjb25kcyArIChmZnRTaXplKCkgLyAyKSAvIHN0
YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKTsKK30KKworZG91YmxlIEhSVEZQYW5uZXI6
OmxhdGVuY3lUaW1lKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgbGF0ZW5jeSBvZiBhIEZGVENvbnZv
bHZlciBpcyBhbHNvIGZmdFNpemUoKSAvIDIsIGFuZCBpcyBpbiBhZGRpdGlvbiB0byBpdHMgdGFp
bFRpbWUgb2YgdGhlCisgICAgLy8gc2FtZSB2YWx1ZS4KKyAgICByZXR1cm4gKGZmdFNpemUoKSAv
IDIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRlKCkpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCmluZGV4IGY1YWYxZDE1MjliZDQ4ZjIzMDdl
N2ZlYmNjYjczYTAxNmE5NDUyYzIuLjc4NWNmMDk1YTJhNzA0MDlmYzdkNjI0NTk2NWQ0MDBlN2Rk
ZjhhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5u
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgKQEAg
LTQwLDExICs0MCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhbihkb3VibGUgYXpp
bXV0aCwgZG91YmxlIGVsZXZhdGlvbiwgY29uc3QgQXVkaW9CdXMqIGlucHV0QnVzLCBBdWRpb0J1
cyogb3V0cHV0QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoKTsKIAotICAgIHNpemVfdCBmZnRTaXplKCkgeyByZXR1cm4gZmZ0U2l6ZUZvclNhbXBs
ZVJhdGUobV9zYW1wbGVSYXRlKTsgfQorICAgIHNpemVfdCBmZnRTaXplKCkgY29uc3QgeyByZXR1
cm4gZmZ0U2l6ZUZvclNhbXBsZVJhdGUobV9zYW1wbGVSYXRlKTsgfQogICAgIHN0YXRpYyBzaXpl
X3QgZmZ0U2l6ZUZvclNhbXBsZVJhdGUoZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICBmbG9hdCBz
YW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAKKyAgICB2aXJ0dWFs
IGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxh
dGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgLy8gR2l2ZW4gYW4g
YXppbXV0aCBhbmdsZSBpbiB0aGUgcmFuZ2UgLTE4MCAtPiArMTgwLCByZXR1cm5zIHRoZSBjb3Jy
ZXNwb25kaW5nIGF6aW11dGggaW5kZXggZm9yIHRoZSBkYXRhYmFzZSwKICAgICAvLyBhbmQgYXpp
bXV0aEJsZW5kIHdoaWNoIGlzIGFuIGludGVycG9sYXRpb24gdmFsdWUgZnJvbSAwIC0+IDEuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QYW5uZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Bhbm5lci5oCmluZGV4IGQ4YjhkZDBmMWFkNGY4ZTYy
OTBjZDA2ZWRiOTYwZDNhNzk1YzA1MjEuLmY4YjI0MGU2MDg3MTg0OWY2MWFhODExNTg4NDM0OThm
NGE0ZDMzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Bhbm5l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Bhbm5lci5oCkBAIC01Nyw2
ICs1Nyw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpID0gMDsKIAorICAg
IHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91Ymxl
IGxhdGVuY3lUaW1lKCkgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgUGFubmVyKFBhbm5p
bmdNb2RlbCBtb2RlbCkgOiBtX3Bhbm5pbmdNb2RlbChtb2RlbCkgeyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCmluZGV4IDEyMmUyMWI2ODk1ZTBiNDc1MjRkZGEz
Zjk3ZjdiMWJhOGZhOGJkYzUuLjQ3NDY4YTE3M2YyYWRkYzFiNGE1MWI4MmMxZDliZDdhNjBlOTcw
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcApAQCAtMjI4LDYg
KzIyOCwxMSBAQCB2b2lkIFJldmVyYjo6cmVzZXQoKQogICAgICAgICBtX2NvbnZvbHZlcnNbaV0t
PnJlc2V0KCk7CiB9CiAKK3NpemVfdCBSZXZlcmI6OmxhdGVuY3lGcmFtZXMoKSBjb25zdAorewor
ICAgIHJldHVybiAhbV9jb252b2x2ZXJzLmlzRW1wdHkoKSA/IG1fY29udm9sdmVycy5maXJzdCgp
LT5sYXRlbmN5RnJhbWVzKCkgOiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmIuaAppbmRleCA3NzllN2JiYTQ5MzQ0YzgyZTQ1N2M3MjNlNmQwYTYxODg4MWRkZWM0Li4wYWU1
MGQ2ZDE4MmU0ZGRmZDg5OWIzOGRjNTM2MGMyMmU1ZjE0N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmIuaApAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1
cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgdW5z
aWduZWQgaW1wdWxzZVJlc3BvbnNlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXB1bHNlUmVz
cG9uc2VMZW5ndGg7IH0KKyAgICBzaXplX3QgaW1wdWxzZVJlc3BvbnNlTGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXB1bHNlUmVzcG9uc2VMZW5ndGg7IH0KKyAgICBzaXplX3QgbGF0ZW5jeUZy
YW1lcygpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZShBdWRpb0J1cyog
aW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4
RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVh
ZHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29u
dm9sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5jcHAKaW5kZXggYzZhYjU0ZThlZjdhNzkxOGZiNDk0NmU3MzIxYjY2OWFkNGY2NTA0MS4uNzQ1
OWYzYjgzNTViNWM0MzBmY2M0YTY5YjRiNWEzYTM5NTQyMTVhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCkBAIC0yMjQsNiArMjI0
LDEzIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyOjpyZXNldCgpCiAgICAgbV9pbnB1dEJ1ZmZlci5y
ZXNldCgpOwogfQogCitzaXplX3QgUmV2ZXJiQ29udm9sdmVyOjpsYXRlbmN5RnJhbWVzKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogQ29udm9sdmVyTm9kZSBzaG91bGQgbm90IGluY3VyIHByb2Nl
c3NpbmcgbGF0ZW5jeQorICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzU1NjQ+CisgICAgcmV0dXJuIG1fbWluRkZUU2l6ZSAvIDI7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDM3MGI4NzIw
NjQ4MjllMWNjZTI5YjZlZDI1NzEyNmM5MGY1NjhiZGUuLmMzZDMwOWZmNTQ1NzQ5MzcxMGI1ZTAw
MjRmZjg1NzE4NzRlNTVkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5oCkBAIC02Miw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICBib29sIHVz
ZUJhY2tncm91bmRUaHJlYWRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNrZ3JvdW5kVGhyZWFk
czsgfQogICAgIHZvaWQgYmFja2dyb3VuZFRocmVhZEVudHJ5KCk7CiAKKyAgICBzaXplX3QgbGF0
ZW5jeUZyYW1lcygpIGNvbnN0OwogcHJpdmF0ZToKICAgICBWZWN0b3I8T3duUHRyPFJldmVyYkNv
bnZvbHZlclN0YWdlPiA+IG1fc3RhZ2VzOwogICAgIFZlY3RvcjxPd25QdHI8UmV2ZXJiQ29udm9s
dmVyU3RhZ2U+ID4gbV9iYWNrZ3JvdW5kU3RhZ2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCmluZGV4IDgxYjVkOTY1ZDFiYzRj
MDhiMzU2NmI1MzY0N2QwYzk4M2Y5YTI2OTAuLjA4NGRkN2IxM2ZkNzJlZDQ1M2E2OGUwMGJhY2U3
MWM2NjExYzA2YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZS5jcHAKQEAgLTEzNiw2ICsxMzYsMTYgQEAgdW5zaWduZWQgQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGU6Om51bWJlck9mQ2hhbm5lbHMoKQogICAgIHJldHVybiBvdXRwdXQo
MCktPm51bWJlck9mQ2hhbm5lbHMoKTsKIH0KIAorZG91YmxlIEF1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlOjp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvY2Vzc29yLT50YWlsVGlt
ZSgpOworfQorCitkb3VibGUgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OmxhdGVuY3lUaW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9jZXNzb3ItPmxhdGVuY3lUaW1lKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5o
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaAppbmRl
eCAzNmNmMmI0MTUzM2NjOTJmM2ZkNjM5OWI5ZDFmM2UxODA0ZWQxYmIzLi4xOTczMDIzYTU1MTQy
NTQwZjBiZTBiY2Y3ZDUzMTIxOWQzY2RhNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgKQEAgLTU1LDYgKzU1LDkgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKTsKIAogcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3Vi
bGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKKwogICAgIEF1ZGlvUHJvY2Vzc29yKiBw
cm9jZXNzb3IoKSB7IHJldHVybiBtX3Byb2Nlc3Nvci5nZXQoKTsgfQogICAgIE93blB0cjxBdWRp
b1Byb2Nlc3Nvcj4gbV9wcm9jZXNzb3I7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0NoYW5uZWxNZXJnZXIuaAppbmRleCBlNzczZGFlYjkxM2Y1MmQyNjU1NGZhNjM4ZjhjZDYw
YTIwY2ZmYTBjLi4zNWRkMDZkZjUyODQwYmEwNDNmYmZhMzUzNzYxMDE4MTE1ZGRiM2U1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaApAQCAtNTEsNiAr
NTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zv
cklucHV0KEF1ZGlvTm9kZUlucHV0Kik7CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3Vi
bGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisKICAgICBBdWRp
b0NoYW5uZWxNZXJnZXIoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5o
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaAppbmRleCA3
MWIwZWY0MTViZmQ0NWU2M2MzZjAxN2Y3N2JkY2M5YTY0MDZjY2JmLi5jODI2NTBhNzM0MzRjZmVh
ODJkZjQwZTMzZTVhZjg1MTViNzVhMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCByZXNldCgpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxU
aW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxh
dGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorCiAgICAgQXVkaW9DaGFu
bmVsU3BsaXR0ZXIoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCBkMDc4
MzNkYTkwNzZjMmM5ZThlMzE3ZGFmY2EzNmIzYTI1NWIyMjYzLi43NjBjNjM4ODExOTdiNWU4MDMx
ODVhZjgxNmUyM2IzNzlhNjQ4NmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTU0LDYgKzU0LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzdGFydFJlbmRlcmluZygpID0gMDsKICAgICAKIHByb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0K
KwogICAgIC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHNhbXBsZS1mcmFtZXMgcHJvY2Vzc2VkIGJ5
IHRoZSBkZXN0aW5hdGlvbi4KICAgICBzaXplX3QgbV9jdXJyZW50U2FtcGxlRnJhbWU7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oCmluZGV4IDYyNmVmMmNmMjYwNDlj
OGM3NGE5ZTVlM2EyOTljNmZiMWU3ZmU0MzMuLjY5YTY0YjQ3MWUzNjk1ODMwZmRiNTA0N2FlZTQ5
YjIzMjk2ZGVlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fp
bk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmgKQEAg
LTU1LDYgKzU1LDkgQEAgcHVibGljOgogICAgIEF1ZGlvR2FpbiogZ2FpbigpIHsgcmV0dXJuIG1f
Z2Fpbi5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgCiBw
cml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gMDsgfQorCiAgICAgQXVkaW9HYWluTm9kZShBdWRpb0NvbnRleHQqLCBmbG9h
dCBzYW1wbGVSYXRlKTsKIAogICAgIGZsb2F0IG1fbGFzdEdhaW47IC8vIGZvciBkZS16aXBwZXJp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKaW5kZXggZGZmZDcxMThlYzcxOWVkMTVl
ZTQzZjk4Mzk0MWY0OGEwYWRlNTE3Yy4uYjlmMjdiNDY1YmMzMjAwNDlhZGYyMjFmZmM3ZGRkMWE3
YTc0MzcyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAgLTEzNyw2ICsxMzcs
MTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZEZvckRlbGV0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc01hcmtlZEZvckRlbGV0aW9uOyB9CiAKKyAgICAvLyB0YWlsVGltZSgpIGlzIHRo
ZSBsZW5ndGggb2YgdGltZSAobm90IGNvdW50aW5nIGxhdGVuY3kgdGltZSkgd2hlcmUgbm9uLXpl
cm8gb3V0cHV0IG1heSBvY2N1ciBhZnRlciBjb250aW51b3VzIHNpbGVudCBpbnB1dC4KKyAgICB2
aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0ID0gMDsKKyAgICAvLyBsYXRlbmN5VGltZSgp
IGlzIHRoZSBsZW5ndGggb2YgdGltZSBpdCB0YWtlcyBmb3Igbm9uLXplcm8gb3V0cHV0IHRvIGFw
cGVhciBhZnRlciBub24temVybyBpbnB1dCBpcyBwcm92aWRlZC4gVGhpcyBvbmx5IGFwcGxpZXMg
dG8KKyAgICAvLyBwcm9jZXNzaW5nIGRlbGF5IHdoaWNoIGlzIGFuIGFydGlmYWN0IG9mIHRoZSBw
cm9jZXNzaW5nIGFsZ29yaXRobSBjaG9zZW4gYW5kIGlzICpub3QqIHBhcnQgb2YgdGhlIGludHJp
bnNpYyBkZXNpcmVkIGVmZmVjdC4gRm9yIAorICAgIC8vIGV4YW1wbGUsIGEgImRlbGF5IiBlZmZl
Y3QgaXMgZXhwZWN0ZWQgdG8gZGVsYXkgdGhlIHNpZ25hbCwgYW5kIHRodXMgd291bGQgbm90IGJl
IGNvbnNpZGVyZWQgbGF0ZW5jeS4KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNv
bnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIC8vIElucHV0cyBhbmQgb3V0cHV0cyBtdXN0IGJl
IGNyZWF0ZWQgYmVmb3JlIHRoZSBBdWRpb05vZGUgaXMgaW5pdGlhbGl6ZWQuCiAgICAgdm9pZCBh
ZGRJbnB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZUlucHV0Pik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCmluZGV4IDE4Mjc1ZjZlYmMxN2VmNjAzMWQ5NTZmMTE2ZDMw
OWJhOTM1Zjc4ZGIuLjk2MWVmM2MyY2YwZmFiNTU4ZTQ0N2YxN2ZjMTM4MDUwNzdkZjAwMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCkBAIC0xMjQsNiArMTI0
LDkgQEAgcHVibGljOgogICAgIEF1ZGlvR2FpbiogZGlzdGFuY2VHYWluKCkgeyByZXR1cm4gbV9k
aXN0YW5jZUdhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgQXVkaW9HYWluKiBjb25lR2FpbigpIHsgcmV0dXJuIG1fY29uZUdhaW4uZ2V0KCk7
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAKKyAgICB2aXJ0dWFs
IGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9w
YW5uZXItPnRhaWxUaW1lKCkgOiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Bhbm5lciA/IG1fcGFubmVyLT5sYXRlbmN5VGlt
ZSgpIDogMDsgfQorCiBwcml2YXRlOgogICAgIEF1ZGlvUGFubmVyTm9kZShBdWRpb0NvbnRleHQq
LCBmbG9hdCBzYW1wbGVSYXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Tb3VyY2VOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJj
ZU5vZGUuaAppbmRleCBhNmJkZDQyN2I5OTIyM2U3ODdjY2EzZmMwZWUyNzdmMTYxNmQzODg0Li45
MmE5NWEwODM2Y2EzM2Q4YmE2ZmZjM2JjZGFmNjUxYmVhZjgxYzc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaApAQCAtMzksNiArMzksOSBAQCBwdWJsaWM6CiAg
ICAgICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiAgICAgewogICAgIH0KK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIDA7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCmluZGV4IDlmYWFjNjU5ODk1Y2Jk
NTk3ZDE2MDdkNzMyYmY0NDQ2ZDRlMzQxNzEuLmNmZWQxZGE0ZDBjZDU0YzIwZTI0ZTBhN2U1YTU3
ZjkwODAxODhiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVs
LmNwcApAQCAtMzAsMTAgKzMwLDE3IEBACiAKICNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IEFz
IGEgcmVjdXJzaXZlIGxpbmVhciBmaWx0ZXIsIGRlcGVuZGluZyBvbiBpdHMgcGFyYW1ldGVycywg
YSBiaXF1YWQgZmlsdGVyIGNhbiBoYXZlCisvLyBhbiBpbmZpbml0ZSB0YWlsVGltZS4gSW4gcHJh
Y3RpY2UsIEJpcXVhZCBmaWx0ZXJzIGRvIG5vdCB1c3VhbGx5IChleGNlcHQgZm9yIHZlcnkgaGln
aCByZXNvbmFuY2UgdmFsdWVzKSAKKy8vIGhhdmUgYSB0YWlsVGltZSBvZiBsb25nZXIgdGhhbiBh
cHByb3guIDIwMG1zLiBUaGlzIHZhbHVlIGNvdWxkIHBvc3NpYmx5IGJlIGNhbGN1bGF0ZWQgYmFz
ZWQgb24gdGhlCisvLyBzZXR0aW5ncyBvZiB0aGUgQmlxdWFkLgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBNYXhCaXF1YWREZWxheVRpbWUgPSAwLjI7CisKIHZvaWQgQmlxdWFkRFNQS2VybmVsOjp1cGRh
dGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeShib29sIHVzZVNtb290aGluZywgYm9vbCBmb3JjZVVw
ZGF0ZSkKIHsKICAgICBpZiAoZm9yY2VVcGRhdGUgfHwgYmlxdWFkUHJvY2Vzc29yKCktPmZpbHRl
ckNvZWZmaWNpZW50c0RpcnR5KCkpIHsKQEAgLTEzNCw2ICsxNDEsMTYgQEAgdm9pZCBCaXF1YWRE
U1BLZXJuZWw6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCiAgICAgbV9i
aXF1YWQuZ2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3kuZGF0YSgp
LCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7CiB9CiAKK2RvdWJsZSBCaXF1YWREU1BLZXJu
ZWw6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWF4QmlxdWFkRGVsYXlUaW1lOwor
fQorCitkb3VibGUgQmlxdWFkRFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRE
U1BLZXJuZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCmlu
ZGV4IGEyMWUyNGMwZDBjODRkODk0MDAzMzg5YmU3NWZjNGNlOGQyOWIwZGIuLjA3NzU1NTliNGJk
NjRiYmJkY2Y5YWVmN2QxZGEyMTMwNjY4YmU5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0JpcXVhZERTUEtlcm5lbC5oCkBAIC01Miw2ICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJs
ZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lU
aW1lKCkgY29uc3QgT1ZFUlJJREU7CisKIHByb3RlY3RlZDoKICAgICBCaXF1YWQgbV9iaXF1YWQ7
CiAgICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAppbmRleCA1NDViMDYwYmVlZTZhMTk5ODQ0OGZiY2Iz
OGI4M2JmMDI3MmQ2OTY3Li5jY2Q2Y2RlMmUyNmYzYjJmYmNiMWRhMWFhYTVkOWFjODc2Njk5MThm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oCkBAIC02Myw2
ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEZyZXF1ZW5jeVJlc3BvbnNlKGNvbnN0IEZs
b2F0MzJBcnJheSogZnJlcXVlbmN5SHosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
bG9hdDMyQXJyYXkqIG1hZ1Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmxvYXQzMkFycmF5KiBwaGFzZVJlc3BvbnNlKTsKKwogcHJpdmF0ZToKICAgICBCaXF1YWRGaWx0
ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCmluZGV4IDZhZmMwOTViY2RiMGI0ZDNiYTlkYzY5
NTZiNWE4MGY5NDMyNGU5M2YuLmFiNzU5M2VhNzJjM2YyOTQyMTM5ZWQ3NTYxOTBkMWQ3NGNkZjkw
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCkBAIC0xNTEs
NiArMTUxLDE2IEBAIEF1ZGlvQnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZmZXIoKQogICAgIHJl
dHVybiBtX2J1ZmZlci5nZXQoKTsKIH0KIAorZG91YmxlIENvbnZvbHZlck5vZGU6OnRhaWxUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXZlcmIgPyBtX3JldmVyYi0+aW1wdWxzZVJlc3Bv
bnNlTGVuZ3RoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHNhbXBsZVJhdGUoKSkgOiAwOworfQor
Citkb3VibGUgQ29udm9sdmVyTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3JldmVyYiA/IG1fcmV2ZXJiLT5sYXRlbmN5RnJhbWVzKCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHNhbXBsZVJhdGUoKSkgOiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQ29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5oCmluZGV4IDEyZjQxNzI4MTlhMDBlNWYwODdhZDk5NjZhMjM0NGRhNmQ0MjJmYjIuLjZk
NTg5MTg2ODg0YzkzNWIyYjIwZTc3MGViODQ1YzBkNzU0MTY0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKQEAgLTU2LDkgKzU2LDEzIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgbm9ybWFsaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxpemU7IH0KICAgICB2b2lk
IHNldE5vcm1hbGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsg
fQorCiBwcml2YXRlOgogICAgIENvbnZvbHZlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKICAg
ICBPd25QdHI8UmV2ZXJiPiBtX3JldmVyYjsKICAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fYnVm
ZmVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5l
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAKaW5kZXgg
ZmIzMWUyZGRkOGUzNTg5NzUwZGI3MGMwOWZhZTdhZTFjZTU2OWNiYS4uMmJkNTc1OWVhMjZhNDI4
ZTgyMDMwYjBkYmZhYzk3M2Q5YWE3MGFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Rl
bGF5RFNQS2VybmVsLmNwcApAQCAtMTM0LDYgKzEzNCwxNiBAQCB2b2lkIERlbGF5RFNQS2VybmVs
OjpyZXNldCgpCiAgICAgbV9idWZmZXIuemVybygpOwogfQogCitkb3VibGUgRGVsYXlEU1BLZXJu
ZWw6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYXhEZWxheVRpbWU7Cit9CisK
K2RvdWJsZSBEZWxheURTUEtlcm5lbDo6bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJldHVy
biAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJu
ZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgKaW5kZXggNzlh
Mzk1NjhiNzg4ZjE3MWYxMmY2N2YwYmZhZDczYWZkMTZlODhiNC4uMWQ1NTZlYTRlZDU4MTRiZmZm
YzJkZTU4OTEyYWI4MjZhYmUzNGZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vRGVsYXlEU1BLZXJuZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURT
UEtlcm5lbC5oCkBAIC00NCw3ICs0NCwxMCBAQCBwdWJsaWM6CiAgICAgZG91YmxlIG1heERlbGF5
VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RGVsYXlUaW1lOyB9CiAgICAgCiAgICAgdm9pZCBz
ZXREZWxheUZyYW1lcyhkb3VibGUgbnVtYmVyT2ZGcmFtZXMpIHsgbV9kZXNpcmVkRGVsYXlGcmFt
ZXMgPSBudW1iZXJPZkZyYW1lczsgfQotICAgIAorCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRp
bWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNv
bnN0IE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIEF1ZGlvRmxvYXRBcnJheSBtX2J1ZmZlcjsK
ICAgICBkb3VibGUgbV9tYXhEZWxheVRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQ
cm9jZXNzb3IuaAppbmRleCA0M2M1ZTBjYmViMTlmODVmMmZjMTRmNDNiNWQ2NDZhNTVhM2Q5NmUx
Li4zM2ZiOTM3ZTAwYTg5MWI3Y2Q4ZTA2ZTEyMmQ1MTQ5ZDYwNjk1YzU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgog
CiAgICAgZG91YmxlIG1heERlbGF5VGltZSgpIHsgcmV0dXJuIG1fbWF4RGVsYXlUaW1lOyB9CiBw
cml2YXRlOgorCiAgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fZGVsYXlUaW1lOwogICAgIGRvdWJs
ZSBtX21heERlbGF5VGltZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCmluZGV4IDVhZmUyZDY4MzExNjNmZTYzYzA0MjJkOTRm
ZTg0YWM2NWU5NWY5MjMuLmVmNzA0NzkwNzJjYzM1MDY2NzNkNjFlOWNjZWZhNDgwMGZhN2YwMzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwCkBAIC0xMDYsNiArMTA2LDE2IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6
dW5pbml0aWFsaXplKCkKICAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwogfQogCitkb3Vi
bGUgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+dGFpbFRpbWUoKTsKK30KKworZG91YmxlIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keW5h
bWljc0NvbXByZXNzb3ItPmxhdGVuY3lUaW1lKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKaW5kZXggMzJkM2NiMTczNWQzMDgwMmJj
MzFjMDM1ZmRkMWQxOTI0ZDkzYjE0NS4uY2Y3ZTYzYTQyOWZiZGQ0OWE2MTdhN2QxNmYwZmI3MmRk
ZWZmZmY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaApAQCAtNTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgQXVkaW9QYXJhbSogcmVk
dWN0aW9uKCkgeyByZXR1cm4gbV9yZWR1Y3Rpb24uZ2V0KCk7IH0KIAogcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91
YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKICAgICBEeW5hbWljc0NvbXByZXNz
b3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCiAgICAgT3duUHRyPER5
bmFtaWNzQ29tcHJlc3Nvcj4gbV9keW5hbWljc0NvbXByZXNzb3I7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwCmluZGV4IGJmODMxNDc1MzMxNWQw
YjVjYWNiYWM5ZGNjODExNDU0OTE0MzgxMmYuLmVhM2Q3YWFhYTdjNDZhN2QyMzI1ZTYzNjFkODZi
ZmJhZTdlYjUzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3Jp
cHRBdWRpb05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRB
dWRpb05vZGUuY3BwCkBAIC0yNjcsNiArMjY3LDE2IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IEphdmFTY3JpcHRBdWRpb05vZGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogICAg
IHJldHVybiBjb25zdF9jYXN0PEphdmFTY3JpcHRBdWRpb05vZGUqPih0aGlzKS0+Y29udGV4dCgp
LT5kb2N1bWVudCgpOwogfQogCitkb3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6dGFpbFRpbWUo
KSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Cit9CisKK2RvdWJsZSBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpsYXRlbmN5VGltZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHko
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRp
b05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaApp
bmRleCA1NzQzNTg4NWRkNWUxNGY1NDg2MjZmMGIyY2EyOTZkZjRmZWZhZTBhLi42NTA0OWNiMTQ0
Mjg4ZmE5ZTJjMWMwNGI0OWI5ZjY0N2I4ODBhYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oCkBAIC03OCw2ICs3OCw5IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBBdWRpb05vZGU6OmRlcmVmOwogICAgIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRv
dWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVu
Y3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKICAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKEF1ZGlv
Q29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBu
dW1iZXJPZklucHV0cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKTsKIAogICAgIHN0YXRpYyB2
b2lkIGZpcmVQcm9jZXNzRXZlbnREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAppbmRleCBjMzdjNmMxYjVj
YTNiZjBiNjU4ZTkwMjI3ZGNjMzlhNzg4MDdmZmMzLi4wMjIxNzlmYzYxYmViYzdlNWM4NGQxZjJk
MDE2ZTU4YjYwNTc0MjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFs
dGltZUFuYWx5c2VyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXJOb2RlLmgKQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0Qnl0
ZVRpbWVEb21haW5EYXRhKFVpbnQ4QXJyYXkqIGFycmF5KSB7IG1fYW5hbHlzZXIuZ2V0Qnl0ZVRp
bWVEb21haW5EYXRhKGFycmF5KTsgfQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRh
aWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91Ymxl
IGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorCiAgICAgUmVhbHRp
bWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICBS
ZWFsdGltZUFuYWx5c2VyIG1fYW5hbHlzZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9X
YXZlU2hhcGVyRFNQS2VybmVsLmgKaW5kZXggYzcyNWY0ZGZlNDQwNWMyZTc3N2FmM2FkZWU0N2Y4
YmI1MGFiZTExNy4uOGQ4ZTQxNzYwMzBhYWZlYmJiZGU1ZThlYmJmMjQ3ZmUyNDA3MGQ0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaApAQCAtNDQs
NiArNDQsOCBAQCBwdWJsaWM6CiAgICAgLy8gQXVkaW9EU1BLZXJuZWwKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdCwgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyB9CisgICAgdmlydHVhbCBk
b3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CiAgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgV2F2ZVNoYXBlclByb2Nlc3Nvciogd2F2ZVNoYXBlclByb2Nlc3Nv
cigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFdhdmVTaGFwZXJQcm9jZXNzb3IqPihwcm9jZXNzb3Io
KSk7IH0K
</data>
<flag name="review"
          id="134744"
          type_id="1"
          status="+"
          setter="crogers"
    />
          </attachment>
      

    </bug>

</bugzilla>