<?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>77515</bug_id>
          
          <creation_ts>2012-01-31 23:35:20 -0800</creation_ts>
          <short_desc>Modify RealtimeAnalyserNode pull mechanism</short_desc>
          <delta_ts>2012-05-01 20:37:51 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond">rgbbones</reporter>
          <assigned_to name="Raymond">rgbbones</assigned_to>
          <cc>crogers</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>546831</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-01-31 23:35:20 -0800</bug_when>
    <thetext>Hi 

Per description on https://bugs.webkit.org/show_bug.cgi?id=76431 and webaudio spec : 4.17. The RealtimeAnalyserNode Interface, it will be good that some inspector Node like RealtimeAnalyserNode can pull without connect to downstream node which ultimately connect to an audio destination.

As Chris have mentioned at https://bugs.webkit.org/show_bug.cgi?id=76431#c5 , this task must be done carefully to handle audionode&apos;s life time well.

Here I propose an approaching as below :

--------------------------

= Goal: =

1. Eliminate the need of RealtimeAnalyserNode to be connected to (direcly or indirectly) the DestinationNode in order to make itself get pumped and retrieve the data. Actually this apply to other potential nodes with similar requirement ( which don&apos;t necessary need to have a NodeOutput  and wish to inspect the audio stream)

2. Try to minimize the impact on current APP already using RealtimeAnalyserNode.

= Overall Design =

Provide a base node class who&apos;s numberOfOutputs might be 0 or 1.
Subclass RealtimeAnalyserNode from it.
When this kind of node&apos;s numberOfOutputs is 0, add it to extraPullNodes, otherwise, remove it from extraPullNodes. And these node with go through normal process path.
In Render process, have the context process these nodes in just before handlePostRenderTasks.
The node will also be removed from the pull list when it&apos;s uninitialized, since a node only get uninitialized at the end of each render quantum,  so it won&apos;t be a issue.

= current status =

I will attach a patch which do work without issue.

= Todo  =

This first patch is just try to show the conception, Makefile related files other then chromium build and Layout test case not yet added.


----------------------------

Any comments on this approaching is welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546844</commentid>
    <comment_count>1</comment_count>
      <attachid>124890</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-01-31 23:57:45 -0800</bug_when>
    <thetext>Created attachment 124890
patch for design review

This Patch just for review the conception. If the idea is ok, I will update it with Layout Test case together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546846</commentid>
    <comment_count>2</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-01 00:01:16 -0800</bug_when>
    <thetext>(In reply to comment #0)

Oh, sorry that the overall design on comment #0 is somehow out of date compare with the patch. Please ignore it and here&apos;s the more accurate version :

-----------

Overall Design

Provide a base node class who&apos;s numberOfOutputs is 1, while it does not necessary require an output connection to make a pull.  Subclass RealtimeAnalyserNode from it.

When this kind of node&apos;s numberOfOutputConnections is 0, add it to extraPullNodes list. In audio thread, have the context process these nodes in just before handlePostRenderTasks.  

If  numberOfOutputConnections is not 0,  remove it from extraPullNodes. And these node with go through normal process path.

The extraPullNodes will be maintained as current rending list, and target list which will be sync with the rendering one upon handle pre/post task in audio thread. Just like AudioNodeInput handle it&apos;s rendering connections.

The node will also be removed from the list when it&apos;s marked for delete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547680</commentid>
    <comment_count>3</comment_count>
      <attachid>125083</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-01 23:27:23 -0800</bug_when>
    <thetext>Created attachment 125083
sample layout test for design review

And attach a sample layout test here also for design review.
It should be point out that, this layout test will crash on debug mode due to another bug I reported at:

https://bugs.webkit.org/show_bug.cgi?id=77609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548331</commentid>
    <comment_count>4</comment_count>
      <attachid>125229</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-02 18:37:58 -0800</bug_when>
    <thetext>Created attachment 125229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548348</commentid>
    <comment_count>5</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-02 19:03:50 -0800</bug_when>
    <thetext>Hi

I have updated patches to include the code and layout test in one single patch. Please help to take a review ;) And btw, it won&apos;t crash the layout test anymore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549705</commentid>
    <comment_count>6</comment_count>
      <attachid>125560</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-05 21:12:54 -0800</bug_when>
    <thetext>Created attachment 125560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549707</commentid>
    <comment_count>7</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-05 21:16:32 -0800</bug_when>
    <thetext>Hi Chris

I update the patch again to include the changes for Build related files on various platform. Now this should be a complete patch for this issue. Please help to review on this :) Thanks.

Btw, where is those HASH like string(FD315FF612B0267600C1A359 etc.) in project.pbxproj come from ? Is there any doc on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597163</commentid>
    <comment_count>8</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-05 20:05:59 -0700</bug_when>
    <thetext>Hi Chris

I noticed that in the latest minutes of w3c audio group. It is agreed that RealTimeAnalyserNode should be able to work without an output, So, Come back to this patch, what do you think about the overall idea? If the overall idea looks good, I can rebase this patch to the latest trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599813</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-10 17:09:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Hi Chris
&gt; 
&gt; I noticed that in the latest minutes of w3c audio group. It is agreed that RealTimeAnalyserNode should be able to work without an output, So, Come back to this patch, what do you think about the overall idea? If the overall idea looks good, I can rebase this patch to the latest trunk.

Hi Raymond, yes I think the overall idea is good.  I&apos;ve already had a quick look.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602932</commentid>
    <comment_count>10</comment_count>
      <attachid>137287</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-15 23:59:33 -0700</bug_when>
    <thetext>Created attachment 137287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602948</commentid>
    <comment_count>11</comment_count>
      <attachid>137287</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-16 00:49:43 -0700</bug_when>
    <thetext>Comment on attachment 137287
Patch

Attachment 137287 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12409835</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602954</commentid>
    <comment_count>12</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-16 01:06:48 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Hi Chris
&gt; &gt; 
&gt; &gt; I noticed that in the latest minutes of w3c audio group. It is agreed that RealTimeAnalyserNode should be able to work without an output, So, Come back to this patch, what do you think about the overall idea? If the overall idea looks good, I can rebase this patch to the latest trunk.
&gt; 
&gt; Hi Raymond, yes I think the overall idea is good.  I&apos;ve already had a quick look.  Thanks!

Hi Chris,

Patch updated. However, for mac build. I have no idea how those HEX ID in .pbxproj is generated? Since I duplicate them from the nearest neighbor AudioBasicProcessor, it lead to a build failure. Could you help to address this issue? Which ID I should put in there for the new file? I don&apos;t have a Mac machine which can run say XCode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605283</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-18 18:34:16 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Hi Chris
&gt; &gt; &gt; 
&gt; &gt; &gt; I noticed that in the latest minutes of w3c audio group. It is agreed that RealTimeAnalyserNode should be able to work without an output, So, Come back to this patch, what do you think about the overall idea? If the overall idea looks good, I can rebase this patch to the latest trunk.
&gt; &gt; 
&gt; &gt; Hi Raymond, yes I think the overall idea is good.  I&apos;ve already had a quick look.  Thanks!
&gt; 
&gt; Hi Chris,
&gt; 
&gt; Patch updated. However, for mac build. I have no idea how those HEX ID in .pbxproj is generated? Since I duplicate them from the nearest neighbor AudioBasicProcessor, it lead to a build failure. Could you help to address this issue? Which ID I should put in there for the new file? I don&apos;t have a Mac machine which can run say XCode?

Hi Chris.

Or I can just ignore Mac build. and adding an expected fail on mac&apos;s layout test. So that you or someone with right tools/IDE can fix the .pbxproj file later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608274</commentid>
    <comment_count>14</comment_count>
      <attachid>137287</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-23 18:22:18 -0700</bug_when>
    <thetext>Comment on attachment 137287
Patch

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

Thanks Raymond.  I&apos;m sorry it&apos;s taken so long to get to this review (it&apos;s a big one).  It looks reasonable, but I have a number of comments.  Once the patch is ready, then I can help fix the Xcode project...

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:2
&gt; + * Copyright (C) 2012, Google Inc. All rights reserved.

I think you may wish to change &quot;Google&quot; -&gt; &quot;Intel&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:39
&gt; +    , m_needExtraPull(false)

I think &quot;automatic&quot; might be a better name than &quot;extra&quot;

m_needExtraPull -&gt; m_needsAutomaticPull

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:59
&gt; +    AudioContext::AutoLocker locker(context());

I would move the locker to just after the ASSERT on line 56.  I think the code is a little cleaner that way, and since the AutoLocker uses a recursive lock, it&apos;s a little more
efficient since it doesn&apos;t have to acquire and release the lock twice in a row.

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:69
&gt; +    AudioContext::AutoLocker locker(context());

I would move the locker to just after the ASSERT on line 66.  I think the code is a little cleaner that way, and since the AutoLocker uses a recursive lock, it&apos;s a little more
efficient since it doesn&apos;t have to acquire and release the lock twice in a row.

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:100
&gt; +        // downstream node, thus remove it from the context&apos;s extra pull list.

extra -&gt; automatic

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:107
&gt; +        // some upstream nodes, add it to the context&apos;s extra pull list.

&quot;still be connected by some upstream&quot; -&gt; &quot;still connected *from* upstream node(s)&quot;

extra -&gt; automatic

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:108
&gt; +        unsigned numberOfInputConnections = input(0)-&gt;numberOfRenderingConnections();

numberOfRenderingConnections() -&gt; numberOfConnections()

since numberOfRenderingConnections() is only meant to be called from inside the audio thread while processing and is a less up-to-date version of numberOfConnections()

The one part I still don&apos;t understand is how you&apos;re handling the case when before some input connections existed for this node, but those connections no longer exist (since the upstream nodes disconnected from us)
It seems like nobody is calling this method (updatePullStatus()) when that case happens.

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h:2
&gt; + * Copyright (C) 2012, Google Inc. All rights reserved.

I think you may wish to change &quot;Google&quot; -&gt; &quot;Intel&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h:32
&gt; +// AudioBasicInspectorNode is an AudioNode with one input and one output where the output might not necesary connect to another node&apos;s input.

&quot;might not necesary&quot; -&gt; &quot;might not necessarily&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h:33
&gt; +// If the output is not connect to any input, then the AudioBasicInspectorNode&apos;s processIfNecessary function will be called by AudioContext before

&quot;output is not connect to any input&quot; -&gt; &quot;not connected to any other node&quot;

&quot;will be called by AudioContext&quot; -&gt; &quot;will be called automatically by AudioContext&quot;

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:717
&gt; +    // the renderingExtraPullNodes.

Ideally we would be able to remove it from the pull list earlier than this time (when there are no more up-stream nodes connected to the inspector node).
Otherwise, it could be quite some time before garbage collection happens and this node continues to get pulled.

&gt; Source/WebCore/Modules/webaudio/AudioContext.h:151
&gt; +

Extra -&gt; Automatic

&gt; Source/WebCore/Modules/webaudio/AudioContext.h:290
&gt; +    HashSet&lt;AudioNode*&gt; m_extraPullNodes;

I would add a comment describing that for thread safety, we maintain a separate Vector for rendering which is copied from here when it changes in updateExtraPullNodes().

&gt; Source/WebCore/Modules/webaudio/AudioDestinationNode.cpp:84
&gt; +    context()-&gt;processExtraPullNodes(numberOfFrames);

&quot;Process extra nodes which need to pull data by themselves.&quot; -&gt; &quot;Process nodes which need a little extra help because they are not connected to anything, but still need to process.&quot;
&quot;Extra&quot; -&gt; &quot;Automatic&quot;

&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.h:75
&gt; +    bool isConnected() { return fanOutCount() &gt; 0; }

Needs to be updated to be:
{ return fanOutCount() &gt; 0 || paramFanOutCount() &gt; 0; }

&gt; LayoutTests/webaudio/extra-pull-node.html:15
&gt; +description(&quot;This test verifies that the AudioBasicInspectorNode based nodes working correctly.&quot;);

&quot;working correctly&quot; -&gt; &quot;work correctly&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:18
&gt; +// We carefully arrange the renderLengthInFrames to be multi times of the audio processing frame,

&quot;be multi times&quot; -&gt; &quot;be a multiple&quot;

&quot;audio processing frame&quot; -&gt; &quot;AudioNode rendering quantum (AudioNode::ProcessingSizeInFrames)&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:28
&gt; +function createDataBuffer(context, length) {

audio-testing.js now has a cool new function called &quot;createConstantBuffer()&quot; you can use instead of this one...

&gt; LayoutTests/webaudio/extra-pull-node.html:56
&gt; +    var arr = new Uint8Array(fftSize);

can we rename all of these variables called &quot;arr&quot; -&gt; &quot;timeDomainData&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:60
&gt; +        testPassed(&quot;RealtimeAnalyser got pulled when connected to upstream node but not downstream node.&quot;);

&quot;RealtimeAnalyser&quot; -&gt; &quot;RealtimeAnalyserNode&quot; here and elsewhere

&quot;to upstream node&quot; -&gt; &quot;from upstream node&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:62
&gt; +        testFailed(&quot;RealtimeAnalyser failed to get pulled when connected to upstream node but not downstream node.&quot;);

ditto

&gt; LayoutTests/webaudio/extra-pull-node.html:67
&gt; +// To verify the realtimeAnalyser can pull data when there is upstream node connect to it

RealtimeAnalyserNode

&quot;there is upstream node connect&quot; -&gt; &quot;there is an upstream node connected&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:68
&gt; +// at the same time it don&apos;t connect to a downstream node.

&quot;at the same time it don&apos;t connect to a downstream node&quot; -&gt; &quot;but it&apos;s not connected to a downstream node&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:83
&gt; +        testPassed(&quot;RealtimeAnalyser got pulled when connected by upstream node and to destination node.&quot;);

&quot;by upstream&quot; -&gt; &quot;from upstream&quot;

&gt; LayoutTests/webaudio/extra-pull-node.html:91
&gt; +// at the same time it also connect to a downstream node which ultimately connect to audio destination

Similar changes to wording as for test1

&gt; LayoutTests/webaudio/extra-pull-node.html:107
&gt; +    // If realtimeAnalyser hadn&apos;t pulled any data, the data here will be 128.

RealtimeAnalyserNode hasn&apos;t

&gt; LayoutTests/webaudio/extra-pull-node.html:130
&gt; +

nit: extra blank line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608367</commentid>
    <comment_count>15</comment_count>
      <attachid>138496</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-23 22:53:00 -0700</bug_when>
    <thetext>Created attachment 138496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608370</commentid>
    <comment_count>16</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-23 22:58:26 -0700</bug_when>
    <thetext>(In reply to comment #14)
Hi Chris
Thanks for the review in great detail. Patch updated.

&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:108
&gt; &gt; +        unsigned numberOfInputConnections = input(0)-&gt;numberOfRenderingConnections();
&gt; 
&gt; numberOfRenderingConnections() -&gt; numberOfConnections()
&gt; 
&gt; since numberOfRenderingConnections() is only meant to be called from inside the audio thread while processing and is a less up-to-date version of numberOfConnections()

Because numberOfRenderingConnections is public one and numberOfConnections is private one ;) And when this branch is called numberOfRenderingConnections is already synced with numberOfConnections. So It doesn&apos;t matter.

&gt; 
&gt; The one part I still don&apos;t understand is how you&apos;re handling the case when before some input connections existed for this node, but those connections no longer exist (since the upstream nodes disconnected from us)
&gt; It seems like nobody is calling this method (updatePullStatus()) when that case happens.
&gt; 

I don&apos;t quite catch you here, do you mean the case of this node is disconnected by other nodes? then it will be called from audionodeinput::updateRenderingState -&gt; audiobasicinspectornode::checkNumberOfChannelsForInput -&gt; updatePullStatus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608384</commentid>
    <comment_count>17</comment_count>
      <attachid>138496</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-23 23:37:33 -0700</bug_when>
    <thetext>Comment on attachment 138496
Patch

Attachment 138496 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12523149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609365</commentid>
    <comment_count>18</comment_count>
      <attachid>138496</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-24 18:45:47 -0700</bug_when>
    <thetext>Comment on attachment 138496
Patch

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

Thanks Raymond, this is starting to look pretty good.

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:99
&gt; +        // When a AudioBasicInspectorNode is connected to a downstream node, it will get pulled by the

&quot;When a&quot; -&gt; &quot;When an&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:106
&gt; +        // When a AudioBasicInspectorNode is not connected to any downstream node while still connected from

&quot;When a&quot; -&gt; &quot;When an&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:112
&gt; +        }

I&apos;m still not sure how we handle the case when numberOfInputConnections==0 (where all our input connections have gone away).  Don&apos;t we need something like:

if (!numberOfInputConnections &amp;&amp; m_needAutomaticPull) {
    context()-&gt;removeAutomaticPullNode(this);
    m_needAutomaticPull = false;
}

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h:33
&gt; +// If the output is not connect to any other node, then the AudioBasicInspectorNode&apos;s processIfNecessary function will be called automatically by

&quot;not connect&quot; -&gt; &quot;not connected&quot;

&quot;processIfNecessary function&quot; -&gt; &quot;processIfNecessary() method&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h:34
&gt; +// AudioContext before the end of each render quantum to pull data from its input(s) so that it can inspect the audio stream.

I would just remove the text &quot;to pull data from its input(s)&quot;

&gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h:46
&gt; +    bool m_needAutomaticPull;

I would move this bool variable after the method updatePullStatus() and add a short comment for this instance variable describing what it is.

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:726
&gt; +    removeAutomaticPullNode(node);

I believe it should be impossible for this node to still be in the m_automaticPullNodes list because AudioBasicInspectorNode::updatePullStatus() should have already removed it (since all input connections to it should be gone by now).
So we don&apos;t need this code - does this make sense? 

Also, please check the ASSERTS that we have in AudioContext::~AudioContext() -- I think we need to add an extra ASSERT for m_automaticPullNodes and m_renderingAutomaticPullNodes

&gt; Source/WebCore/Modules/webaudio/AudioContext.h:151
&gt; +

Please add short comment describing these two methods (how they&apos;re used with inspector nodes, etc.)

&gt; Source/WebCore/Modules/webaudio/AudioContext.h:155
&gt; +    // Called right before handlePostRenderTasks();

No need for &quot;;&quot; at end of line :)

Also, I&apos;d make this comment a little longer saying&quot;

// Called right before handlePostRenderTasks() to handle inspector nodes which aren&apos;t connected to anything.

&gt; Source/WebCore/Modules/webaudio/AudioContext.h:291
&gt; +    // It will be copied from m_automaticPullNodes by updateAutomaticPullNodes at the very start or end of the rendering quantum.

&quot;updateAutomaticPullNodes&quot; -&gt; &quot;updateAutomaticPullNodes()&quot;

&gt; LayoutTests/webaudio/automatic-pull-node.html:31
&gt; +    toneBuffer = createConstantBuffer(context, renderLengthInFrames, 1);

nit: this isn&apos;t really a &quot;tone&quot; since it&apos;s a constant buffer, so I would rename this &quot;constantBuffer&quot;, otherwise people might get confused

&gt; LayoutTests/webaudio/automatic-pull-node.html:46
&gt; +    if (timeDomainData[0] &gt;= 255)

255 is a &quot;magic&quot; constant.  Can we define a constant variable for this after line 21, with a comment describing why its value is 255.

&gt; LayoutTests/webaudio/automatic-pull-node.html:95
&gt; +    if (timeDomainData[0] == 128)

Magic constant value needs to be defined around line 21 along with comment describing why its value is 128

&gt; LayoutTests/webaudio/automatic-pull-node.html:103
&gt; +// To verify the realtimeAnalyser will stop pull if it is connected to a downstream node

&quot;realtimeAnalyser will stop pull&quot; -&gt;&quot;RealtimeAnalyserNode will stop pulling&quot;

&gt; LayoutTests/webaudio/automatic-pull-node.html:104
&gt; +// which do not ultimatly connect to any audio destination

&quot;do not ultimatly connect&quot; -&gt; &quot;is not ultimately connected&quot;

nit: Period &quot;.&quot; after end of sentence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610390</commentid>
    <comment_count>19</comment_count>
      <attachid>138945</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-26 00:05:32 -0700</bug_when>
    <thetext>Created attachment 138945
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610395</commentid>
    <comment_count>20</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-26 00:12:44 -0700</bug_when>
    <thetext>(In reply to comment #18)
Hi Chris, patch updated.

&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp:112
&gt; &gt; +        }
&gt; 
&gt; I&apos;m still not sure how we handle the case when numberOfInputConnections==0 (where all our input connections have gone away).  Don&apos;t we need something like:
&gt; 
&gt; if (!numberOfInputConnections &amp;&amp; m_needAutomaticPull) {
&gt;     context()-&gt;removeAutomaticPullNode(this);
&gt;     m_needAutomaticPull = false;
&gt; }

You are right. I have thought that when this is no input nor output connection, the node will be removed and markForDeletion will handle this case. But now I realized that there are case that it&apos;s disabled and might be connected again. So this case should be handled here.

&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:726
&gt; &gt; +    removeAutomaticPullNode(node);
&gt; 
&gt; I believe it should be impossible for this node to still be in the m_automaticPullNodes list because AudioBasicInspectorNode::updatePullStatus() should have already removed it (since all input connections to it should be gone by now).
&gt; So we don&apos;t need this code - does this make sense? 

Hmm, I think we do need this code, for updatePullStatus might be triggered later, since in handlePostRenderTasks(), derefFinishedSoruceNodes come before handleDirtyAudioNodeInputs(). And then in audioNodeInput::updateRenderingState() if the node is mark for deletion, it will do nothing and return, thus updatePullStatus() won&apos;t be called at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610405</commentid>
    <comment_count>21</comment_count>
      <attachid>138945</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-26 00:33:33 -0700</bug_when>
    <thetext>Comment on attachment 138945
Patch

Attachment 138945 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12520777</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612072</commentid>
    <comment_count>22</comment_count>
      <attachid>139316</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-27 18:58:49 -0700</bug_when>
    <thetext>Created attachment 139316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612073</commentid>
    <comment_count>23</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-27 18:59:51 -0700</bug_when>
    <thetext>Hi Chris

Thanks for the help on fix .pbxproj file. Patch updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612074</commentid>
    <comment_count>24</comment_count>
      <attachid>139316</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-27 19:06:34 -0700</bug_when>
    <thetext>Comment on attachment 139316
Patch

Attachment 139316 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12550431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612084</commentid>
    <comment_count>25</comment_count>
      <attachid>139321</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-27 19:18:31 -0700</bug_when>
    <thetext>Created attachment 139321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612105</commentid>
    <comment_count>26</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-27 20:01:32 -0700</bug_when>
    <thetext>finally, pass mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613087</commentid>
    <comment_count>27</comment_count>
      <attachid>139321</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-30 17:23:50 -0700</bug_when>
    <thetext>Comment on attachment 139321
Patch

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

Raymond, looks great.  I have a couple of tiny nits.  Also, you can see that the &quot;cr-linux&quot; and &quot;efl&quot; EWS bots are purple.  This because the patch is out-of-date.  You need to update your source, and try to fix the merge problems, then re-upload the patch.  I also tried to apply your latest patch to a fresh checkout and could see the patch did not apply cleanly.  Once this is done, I can approve the patch.

&gt; Source/WebCore/ChangeLog:10
&gt; +        This commit also includes a patch from Chris Rogers for WebCore.xcodeproj/project.pbxproj.

Raymond, no need to credit me for this small part of the patch in the ChangeLog...

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:725
&gt; +    // since all connections are gone and we hold the graph lock. Then when handlePostRenderTasks

handlePostRenderTasks -&gt; handlePostRenderTasks()

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:726
&gt; +    // get chance to schedule the deletion work, the updateAutomaticPullNodes() also get chance to modify

&quot;get chance&quot; -&gt; &quot;gets a chance&quot;   in two places in this sentence

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:727
&gt; +    // the renderingAutomaticPullNodes.

&quot;the renderingAutomaticPullNodes &quot; -&gt; &quot;m_renderingAutomaticPullNodes&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613853</commentid>
    <comment_count>28</comment_count>
      <attachid>139721</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-05-01 18:30:47 -0700</bug_when>
    <thetext>Created attachment 139721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613868</commentid>
    <comment_count>29</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-05-01 18:54:11 -0700</bug_when>
    <thetext>Hi Chris
Thanks for the review. Patch is updated ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613911</commentid>
    <comment_count>30</comment_count>
      <attachid>139721</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-05-01 20:16:10 -0700</bug_when>
    <thetext>Comment on attachment 139721
Patch

Thanks Raymond!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613927</commentid>
    <comment_count>31</comment_count>
      <attachid>139721</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-01 20:37:40 -0700</bug_when>
    <thetext>Comment on attachment 139721
Patch

Clearing flags on attachment: 139721

Committed r115787: &lt;http://trac.webkit.org/changeset/115787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613929</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-01 20:37:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124890</attachid>
            <date>2012-01-31 23:57:45 -0800</date>
            <delta_ts>2012-02-02 18:46:30 -0800</delta_ts>
            <desc>patch for design review</desc>
            <filename>0001-Modify-RealtimeAnalyserNode-pull-mechanism.patch</filename>
            <type>text/plain</type>
            <size>16462</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">RnJvbSAwODFmNjkwNjYzYWUwZmIyYWUzZTUzYzgxNzcwMjJlY2I0ZmRjZmY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYXltb25kIExpdSA8cmF5bW9uZC5saXVAaW50ZWwuY29tPgpE
YXRlOiBXZWQsIDEgRmViIDIwMTIgMTU6MjA6MjEgKzA4MDAKU3ViamVjdDogW1BBVENIXSBNb2Rp
ZnkgUmVhbHRpbWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KCi0tLQogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIC4uLi9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCAgIHwgIDEyNyArKysrKysr
KysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGUuaCAgfCAgIDU0ICsrKysrKysrCiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwICAgICAgICAgICB8ICAgNjIgKysrKysrKysrLQogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmggICAgICAgICAgICAgfCAgIDE0ICsrLQogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICAgfCAgICAzICsKIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCAgIHwgICAxMSArLS0KIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmggICAgIHwgICAgNSAr
LQogOCBmaWxlcyBjaGFuZ2VkLCAyNjIgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDFjODdmLi45
MWEzMDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NzA0LDYgKzQ3MDQsOCBAQAogICAgICAgICAg
ICAgJ3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL3dpbmNlL0xvY2FsU3RvcmFnZVRocmVhZFdpbkNFLmNwcCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS93aW5jZS9Mb2NhbFN0b3JhZ2VUaHJlYWRXaW5DRS5oJywKKyAgICAgICAgICAgICd3
ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAnLAorICAgICAgICAgICAgJ3dlYmF1
ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VjOGRlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJB
dWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBB
dWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKKyAgICAsIG1fbmVlZEV4dHJhUHVsbChmYWxz
ZSkKK3sKKyAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsK
KyAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOwor
fQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjppbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBdWRpb05vZGU6Omlu
aXRpYWxpemUoKTsKK30KKwordm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dW5pbml0aWFs
aXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRml4bWU6IFNob3VsZG4ndCBiZSBuZWVkZWQgaGVyZSBzaW5jZSB3ZSBoYXZlIGRvbmUg
dGhlIHdvcmsgaW4gQXVkaW9Db250ZXh0OjptYXJrRm9yRGVsZXRpb24sCisgICAgLy8ganVzdCBr
ZWVwIGl0IGhlcmUgZm9yIGd1YXJkLiBjb25zaWRlciB0byByZW1vdmUgaXQgbGF0ZXIgYWZ0ZXIg
cmV2aWV3LgorICAgIGNvbnRleHQoKS0+cmVtb3ZlRXh0cmFQdWxsTm9kZSh0aGlzKTsKKworICAg
IEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Cit9CisKKworLy8gV2Ugb3ZlcnJpZGUgcHVsbElu
cHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZh
bnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywKKy8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1w
bHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQgdG8gdGhlIG91dHB1dC4KKy8vIE5vdGU6IHRo
aXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1h
dGNoLgordm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQoreworICAgIC8vIFJlbmRlciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVu
ZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcg
d2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4uLgorICAgIGlucHV0
KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQg
QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmNvbm5lY3QoQXVkaW9Ob2RlKiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IAorICAgIEF1ZGlvTm9kZTo6Y29u
bmVjdChkZXN0aW5hdGlvbiwgb3V0cHV0SW5kZXgsIGlucHV0SW5kZXgsIGVjKTsKKworICAgIEF1
ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKyAgICAKKyAgICB1cGRh
dGVQdWxsU3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmRpc2Nv
bm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQXVkaW9Ob2RlOjpkaXNjb25uZWN0KG91dHB1dElu
ZGV4LCBlYyk7CisKKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQo
KSk7CisKKyAgICB1cGRhdGVQdWxsU3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBp
bnB1dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisgICAgCisgICAgQVNTRVJUKGlucHV0ID09IHRoaXMtPmlu
cHV0KDApKTsKKyAgICBpZiAoaW5wdXQgIT0gdGhpcy0+aW5wdXQoMCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9pZCBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNH
cmFwaE93bmVyKCkpOworCisgICAgaWYgKG91dHB1dCgwKS0+ZmFuT3V0Q291bnQoKSkgeworICAg
ICAgICBpZiAobV9uZWVkRXh0cmFQdWxsKSB7CisgICAgICAgICAgICBjb250ZXh0KCktPnJlbW92
ZUV4dHJhUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRFeHRyYVB1bGwgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mSW5w
dXRDb25uZWN0aW9ucyA9IGlucHV0KDApLT5udW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCk7
CisKKyAgICAgICAgaWYgKG51bWJlck9mSW5wdXRDb25uZWN0aW9ucyAmJiAhbV9uZWVkRXh0cmFQ
dWxsKSB7CisgICAgICAgICAgICBjb250ZXh0KCktPmFkZEV4dHJhUHVsbE5vZGUodGhpcyk7Cisg
ICAgICAgICAgICBtX25lZWRFeHRyYVB1bGwgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjNjY5YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGVfaAorI2RlZmluZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisKKyNpbmNsdWRlICJB
dWRpb05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hl
cmUgdGhlIG91dHB1dCBtaWdodCBub3QgbmVjZXNhcnkgY29ubmVjdCB0byBhbm90aGVyIG5vZGUn
cyBpbnB1dC4KKy8vIElmIHRoZSBvdXRwdXQgaXMgbm90IGNvbm5lY3QgdG8gYW55IGlucHV0LCB0
aGVuIHRoZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSdzIHByb2Nlc3NJZk5lY2Vzc2FyeSBmdW5j
dGlvbiB3aWxsIGJlIGNhbGxlZCBieSBBdWRpb0NvbnRleHQgYmVmb3JlCisvLyB0aGUgZW5kIG9m
IGVhY2ggcmVuZGVyIHF1YW50dW0gdG8gcHVsbCBkYXRhIGZyb20gaXRzIGlucHV0KHMpIHNvIHRo
YXQgaXQgY2FuIGluc3BlY3QgdGhlIGF1ZGlvIHN0cmVhbS4KK2NsYXNzIEF1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAgQXVkaW9CYXNpY0lu
c3BlY3Rvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgCisgICAg
Ly8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1Rv
UHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQg
b3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHVu
aW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJ
bnB1dChBdWRpb05vZGVJbnB1dCopOworCitwcml2YXRlOgorICAgIGJvb2wgbV9uZWVkRXh0cmFQ
dWxsOworICAgIHZvaWQgdXBkYXRlUHVsbFN0YXR1cygpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggMGMxNjY0Zi4uN2I4NDZkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC0xMjksNiArMTI5LDcg
QEAgQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwg
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCiAgICAgLCBt
X2lzRGVsZXRpb25TY2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX2V4dHJhUHVsbE5vZGVzTmVlZFVw
ZGF0aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXVkaW9U
aHJlYWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlm
aWVyKQpAQCAtMTUyLDYgKzE1Myw3IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3Vt
ZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90CiAgICAgLCBt
X2lzQXVkaW9UaHJlYWRGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQp
CiAgICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgwKQorICAgICwgbV9leHRyYVB1bGxOb2Rlc05lZWRV
cGRhdGluZyhmYWxzZSkKICAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCiAgICAgLCBtX2F1ZGlv
VGhyZWFkKDApCiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRp
ZmllcikKQEAgLTU5NCw3ICs1OTYsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUHJlUmVu
ZGVyVGFza3MoKQogICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlv
Tm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KICAgICAgICAgaGFuZGxlRGlydHlBdWRp
b05vZGVJbnB1dHMoKTsKICAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0g
ICAgICAgIAorCisgICAgICAgIHVwZGF0ZUV4dHJhUHVsbE5vZGVzKCk7CisKICAgICAgICAgaWYg
KG11c3RSZWxlYXNlTG9jaykKICAgICAgICAgICAgIHVubG9jaygpOwogICAgIH0KQEAgLTYyMiw3
ICs2MjYsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKICAg
ICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMgYW5k
IEF1ZGlvTm9kZU91dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7
CiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotICAgICAgICAKKworICAg
ICAgICB1cGRhdGVFeHRyYVB1bGxOb2RlcygpOworCiAgICAgICAgIGlmIChtdXN0UmVsZWFzZUxv
Y2spCiAgICAgICAgICAgICB1bmxvY2soKTsKICAgICB9CkBAIC02NDQsNiArNjUwLDEyIEBAIHZv
aWQgQXVkaW9Db250ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlKiBub2RlKQogewogICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CiAgICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVuZChub2Rl
KTsKKworICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdGhlIGJlc3QgdGltZSBmb3IgdXMgdG8gcmVt
b3ZlIHRoZSBub2RlIGZyb20gZXh0cmEgcHVsbCBsaXN0LAorICAgIC8vIHNpbmNlIGFsbCBjb25u
ZWN0aW9ucyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhh
bmRsZVBvc3RSZW5kZXJUYXNrcworICAgIC8vIGdldCBjaGFuY2UgdG8gc2NoZWR1bGUgdGhlIGRl
bGV0aW9uIHdvcmssIHRoZSB1cGRhdGVFeHRyYVB1bGxOb2RlcygpIGFsc28gZ2V0IGNoYW5jZSB0
byBtb2RpZnkKKyAgICAvLyB0aGUgcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXMuCisgICAgcmVtb3Zl
RXh0cmFQdWxsTm9kZShub2RlKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnNjaGVkdWxlTm9k
ZURlbGV0aW9uKCkKQEAgLTczNSw2ICs3NDcsNTIgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRs
ZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCiAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xl
YXIoKTsKIH0KIAordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEV4dHJhUHVsbE5vZGUoQXVkaW9Ob2Rl
KiBub2RlKQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAoIW1fZXh0
cmFQdWxsTm9kZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgbV9leHRyYVB1bGxOb2Rlcy5h
ZGQobm9kZSk7CisgICAgICAgIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOwor
ICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUV4dHJhUHVsbE5vZGUoQXVkaW9O
b2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAobV9l
eHRyYVB1bGxOb2Rlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICBtX2V4dHJhUHVsbE5vZGVz
LnJlbW92ZShub2RlKTsKKyAgICAgICAgbV9leHRyYVB1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRy
dWU7CisgICAgfQorfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6dXBkYXRlRXh0cmFQdWxsTm9kZXMo
KQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAobV9leHRyYVB1bGxO
b2Rlc05lZWRVcGRhdGluZykgeworICAgICAgICAvLyBDb3B5IGZyb20gbV9leHRyYVB1bGxOb2Rl
cyB0byBtX3JlbmRlcmluZ0V4dHJhUHVsbE5vZGVzLgorICAgICAgICBtX3JlbmRlcmluZ0V4dHJh
UHVsbE5vZGVzLnJlc2l6ZShtX2V4dHJhUHVsbE5vZGVzLnNpemUoKSk7CisKKyAgICAgICAgdW5z
aWduZWQgaiA9IDA7CisgICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGUqPjo6aXRlcmF0b3Ig
aSA9IG1fZXh0cmFQdWxsTm9kZXMuYmVnaW4oKTsgaSAhPSBtX2V4dHJhUHVsbE5vZGVzLmVuZCgp
OyArK2ksICsraikgeworICAgICAgICAgICAgQXVkaW9Ob2RlKiBvdXRwdXQgPSAqaTsKKyAgICAg
ICAgICAgIG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXNbal0gPSBvdXRwdXQ7CisgICAgICAgIH0K
KworICAgICAgICBtX2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gZmFsc2U7CisgICAgfQor
fQorCit2b2lkIEF1ZGlvQ29udGV4dDo6cHJvY2Vzc0V4dHJhUHVsbE5vZGVzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdFeHRyYVB1bGxOb2Rlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9yZW5kZXJpbmdFeHRyYVB1bGxOb2Rlc1tpXS0+cHJvY2Vzc0lmTmVjZXNz
YXJ5KGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgQXVkaW9Db250
ZXh0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvckF1ZGlvQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmgKaW5kZXggNzkxMTUxOS4uZTdkNDc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKQEAgLTEzOSw3ICsxMzksMTMgQEAgcHVibGljOgogICAgIC8vIFdlIHNjaGVkdWxl
IGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1l
IHJlbmRlciBxdWFudHVtLgogICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSopOwog
ICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMoKTsKLSAgICAKKworICAgIHZvaWQgYWRkRXh0cmFQ
dWxsTm9kZShBdWRpb05vZGUqKTsKKyAgICB2b2lkIHJlbW92ZUV4dHJhUHVsbE5vZGUoQXVkaW9O
b2RlKik7CisKKyAgICAvLyBDYWxsZWQgcmlnaHQgYmVmb3JlIGhhbmRsZVBvc3RSZW5kZXJUYXNr
cygpOworICAgIHZvaWQgcHJvY2Vzc0V4dHJhUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpOworCiAgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBt
YWRlLgogICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlvbkNvdW50KCkKICAgICB7CkBAIC0yNjks
NiArMjc1LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0
cygpOwogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CiAKKyAgICBIYXNo
U2V0PEF1ZGlvTm9kZSo+IG1fZXh0cmFQdWxsTm9kZXM7CisgICAgVmVjdG9yPEF1ZGlvTm9kZSo+
IG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXM7CisgICAgLy8gbV9leHRyYVB1bGxOb2Rlc05lZWRV
cGRhdGluZyBrZWVwcyB0cmFjayBpZiBtX2V4dHJhUHVsbE5vZGVzIGlzIG1vZGlmaWVkLgorICAg
IGJvb2wgbV9leHRyYVB1bGxOb2Rlc05lZWRVcGRhdGluZzsKKyAgICB2b2lkIHVwZGF0ZUV4dHJh
UHVsbE5vZGVzKCk7CisKICAgICB1bnNpZ25lZCBtX2Nvbm5lY3Rpb25Db3VudDsKIAogICAgIC8v
IEdyYXBoIGxvY2tpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAKaW5kZXggNmU1MjdiYi4uNmE2NGQwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtODAsNiArODAsOSBA
QCB2b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3Rp
bmF0aW9uQnVzLCBzaXplX3QgbnVtYmVyTwogICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+Y29weUZy
b20oKnJlbmRlcmVkQnVzKTsKICAgICB9CiAKKyAgICAvLyBQcm9jZXNzIGV4dHJhIG5vZGVzIHdo
aWNoIG5lZWQgdG8gcHVsbCBkYXRhIGJ5IHRoZW1zZWx2ZXMuCisgICAgY29udGV4dCgpLT5wcm9j
ZXNzRXh0cmFQdWxsTm9kZXMobnVtYmVyT2ZGcmFtZXMpOworCiAgICAgLy8gTGV0IHRoZSBjb250
ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBx
dWFudHVtLgogICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRhc2tzKCk7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKaW5k
ZXggOGQ3NGE2Ny4uY2UwNDc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
UmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXJOb2RlLmNwcApAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBSZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVhbHRpbWVBbmFseXNlck5vZGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRl
eHQsIHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShjb250ZXh0LCBz
YW1wbGVSYXRlKQogewogICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0
aGlzKSkpOwogICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMs
IDIpKSk7CkBAIC02OSwxNSArNjksNiBAQCB2b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9j
ZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgICAgIG91dHB1dEJ1cy0+Y29weUZyb20o
KmlucHV0QnVzKTsKIH0KIAotLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGlt
aXphdGlvbiBhbGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2Ug
cHJvY2Vzc2luZywKLS8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2gg
dW5wcm9jZXNzZWQgdG8gdGhlIG91dHB1dC4KLS8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlm
IHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1hdGNoLgotdm9pZCBSZWFsdGlt
ZUFuYWx5c2VyTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAg
IC8vIFJlbmRlciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0
cHV0IGJ1cyBmb3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNu
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4uLgotICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+
YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KIHZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6
OnJlc2V0KCkKIHsKICAgICBtX2FuYWx5c2VyLnJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAppbmRleCBjMzdjNmMxLi4wNTZjNzI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKQEAg
LTI1LDEzICsyNSwxMyBAQAogI2lmbmRlZiBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCiAjZGVmaW5l
IFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gKIAotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1
ZGUgIkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNl
ci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgUmVhbHRpbWVBbmFseXNlck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK2NsYXNzIFJl
YWx0aW1lQW5hbHlzZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9kZT4gY3JlYXRl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICB7CkBAIC00Miw3
ICs0Miw2IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBBdWRpb05vZGUKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVs
bElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQo
KTsKIAogICAgIC8vIEphdmFzY3JpcHQgYmluZGluZ3MKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125083</attachid>
            <date>2012-02-01 23:27:23 -0800</date>
            <delta_ts>2012-02-02 18:46:14 -0800</delta_ts>
            <desc>sample layout test for design review</desc>
            <filename>0001-add-layout-test-file.patch</filename>
            <type>text/plain</type>
            <size>4102</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">RnJvbSA0YmZmODU4YzBhYTNmOGViOWFkZTY4MjVkZTkwZDI4ZGY0MGYyNDVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYXltb25kIExpdSA8cmF5bW9uZC5saXVAaW50ZWwuY29tPgpE
YXRlOiBUaHUsIDIgRmViIDIwMTIgMTQ6MzM6MjAgKzA4MDAKU3ViamVjdDogW1BBVENIXSBhZGQg
bGF5b3V0IHRlc3QgZmlsZQoKLS0tCiBMYXlvdXRUZXN0cy93ZWJhdWRpby9leHRyYS1wdWxsLW5v
ZGUuaHRtbCB8ICAxNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZXMgY2hh
bmdlZCwgMTQ4IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgTGF5b3V0VGVzdHMvd2ViYXVkaW8vZXh0cmEtcHVsbC1ub2RlLmh0bWwKCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9leHRyYS1wdWxsLW5vZGUuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2V4dHJhLXB1bGwtbm9kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmZiNTYwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9leHRyYS1wdWxsLW5vZGUuaHRtbApAQCAtMCwwICsxLDE0OCBAQAorPCFET0NUWVBFIGh0bWw+
CisKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHdoZXRoZXIgdGhlIEF1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlIGJhc2VkIG5vZGVzIHdvcmtpbmcgd2VsbC4iKTsKKwordmFyIHNhbXBsZVJhdGUg
PSA0NDEwMC4wOwordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSAwLjE7Cit2YXIgZmZ0U2l6ZSA9
IDMyOworCit2YXIgY29udGV4dDsKK3ZhciB0b25lQnVmZmVyOwordmFyIGJ1ZmZlclNvdXJjZTsK
K3ZhciBhbmFseXNlcjsKKworZnVuY3Rpb24gY3JlYXRlRGF0YUJ1ZmZlcihjb250ZXh0LCBsZW5n
dGhJblNlY29uZHMpIHsKKyAgICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZl
cigxLCBsZW5ndGhJblNlY29uZHMgKiBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTsKKworICAgIHZh
ciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOworICAgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0
Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAg
ICAgICBkYXRhW2ldID0gMS4wOworICAgIH0KKworICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30K
KworZnVuY3Rpb24gY29uc3RydWN0Q29tbW9uR3JhcGgoKSB7CisgICAgLy8gQ3JlYXRlIG9mZmxp
bmUgYXVkaW8gY29udGV4dC4KKyAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgx
LCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisgICAgdG9u
ZUJ1ZmZlciA9IGNyZWF0ZURhdGFCdWZmZXIoY29udGV4dCwgcmVuZGVyTGVuZ3RoU2Vjb25kcyk7
CisKKyAgICBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAg
IGJ1ZmZlclNvdXJjZS5idWZmZXIgPSB0b25lQnVmZmVyOworCisgICAgYW5hbHlzZXIgPSBjb250
ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7CisgICAgYW5hbHlzZXIuZmZ0U2l6ZSA9IGZmdFNpemU7CisK
KyAgICBidWZmZXJTb3VyY2UuY29ubmVjdChhbmFseXNlcik7Cit9CisKK2Z1bmN0aW9uIHRlc3Qx
RmluaXNoZWQoKSB7CisgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGZmdFNpemUpOworICAg
IGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YShhcnIpOworCisgICAgaWYgKGFyclswXSA+
PSAyNTUpCisgICAgICAgIHRlc3RQYXNzZWQoInRlc3QxLiIpOworICAgIGVsc2UKKyAgICAgICAg
dGVzdEZhaWxlZCgidGVzdDEuIik7CisKKyAgICB0ZXN0MigpOworfQorCisvLyBUbyB2ZXJpZnkg
dGhlIHJlYWx0aW1lQW5hbHlzZXIgY2FuIHB1bGwgZGF0YSB3aGVuIHRoZXJlIGlzIHVwc3RyZWFt
IG5vZGUgY29ubmVjdCB0byBpdAorLy8gYXQgdGhlIHNhbWUgdGltZSBpdCBkb24ndCBjb25uZWN0
IHRvIGEgZG93bnN0cmVhbSBub2RlLgorZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgY29uc3RydWN0
Q29tbW9uR3JhcGgoKTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7CisKKyAgICBjb250
ZXh0Lm9uY29tcGxldGUgPSB0ZXN0MUZpbmlzaGVkOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJp
bmcoKTsKK30KKworZnVuY3Rpb24gdGVzdDJGaW5pc2hlZCgpIHsKKyAgICB2YXIgYXJyID0gbmV3
IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRh
KGFycik7CisKKyAgICBpZiAoYXJyWzBdID49IDI1NSkKKyAgICAgICAgdGVzdFBhc3NlZCgidGVz
dDIuIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCJ0ZXN0Mi4iKTsKKworICAgIHRl
c3QzKCk7Cit9CisKKy8vIFRvIHZlcmlmeSB0aGUgcmVhbHRpbWVBbmFseXNlciBjYW4gcHJvY2Vz
cyBub3JtYWxseSB3aGVuIHRoZXJlIGlzIHVwc3RyZWFtIG5vZGUgY29ubmVjdCB0byBpdAorLy8g
YXQgdGhlIHNhbWUgdGltZSBpdCBhbHNvIGNvbm5lY3QgdG8gYSBkb3duc3RyZWFtIG5vZGUgd2hp
Y2ggdWx0aW1hdGVseSBjb25uZWN0IHRvIGF1ZGlvIGRlc3RpbmF0aW9uCitmdW5jdGlvbiB0ZXN0
MigpIHsKKyAgICBjb25zdHJ1Y3RDb21tb25HcmFwaCgpOworCisgICAgYW5hbHlzZXIuY29ubmVj
dChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7CisK
KyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0ZXN0MkZpbmlzaGVkOworICAgIGNvbnRleHQuc3Rh
cnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rpb24gdGVzdDNGaW5pc2hlZCgpIHsKKyAgICB2YXIg
YXJyID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVE
b21haW5EYXRhKGFycik7CisKKyAgICAvLyBJZiByZWFsdGltZUFuYWx5c2VyIGhhZG4ndCBwdWxs
ZWQgYW55IGRhdGEsIHRoZSBkYXRhIGhlcmUgd2lsbCBiZSAxMjguCisgICAgaWYgKGFyclswXSA9
PSAxMjgpCisgICAgICAgIHRlc3RQYXNzZWQoInRlc3QzLiIpOworICAgIGVsc2UKKyAgICAgICAg
dGVzdEZhaWxlZCgidGVzdDMuIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gVG8g
dmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIHdpbGwgc3RvcCBwdWxsIGlmIGl0IGlzIGNvbm5l
Y3QgdG8gYSBkb3duc3RyZWFtIG5vZGUKKy8vIHdoaWNoIGRvIG5vdCB1bHRpbWF0bHkgY29ubmVj
dCB0byBhbnkgYXVkaW8gZGVzdGluYXRpb24KKworZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgY29u
c3RydWN0Q29tbW9uR3JhcGgoKTsKKworICAgIHZhciBnYWluID0gY29udGV4dC5jcmVhdGVHYWlu
Tm9kZSgpOworICAgIGFuYWx5c2VyLmNvbm5lY3QoZ2Fpbik7CisKKyAgICBidWZmZXJTb3VyY2Uu
bm90ZU9uKDApOworCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gdGVzdDNGaW5pc2hlZDsKKyAg
ICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViQXVkaW9FbmFibGVkIiwg
IjEiKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgdGVzdDEoKTsKK30KKworCitydW5UZXN0
KCk7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125229</attachid>
            <date>2012-02-02 18:37:58 -0800</date>
            <delta_ts>2012-02-05 21:08:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120203104232.patch</filename>
            <type>text/plain</type>
            <size>22838</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2QxMGI0ZjY0M2E2YTY5
NjQ0ODZiYTQ0MzQ3YmZhYTk4Yzg5ZGRlYi4uNWUzYWM3N2UzNjVjNDA3ZjM2Zjc3ZTBiMjFlYjFk
ZGEzZmZlNGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAyLTAyICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vZXh0cmEtcHVsbC1ub2RlLmh0bWwK
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnB1bGxJbnB1dHMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmNvbm5lY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmRpc2Nvbm5lY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmNoZWNrTnVtYmVyT2ZD
aGFubmVsc0ZvcklucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjp1cGRhdGVQdWxsU3RhdHVzKToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9C
YXNpY0luc3BlY3Rvck5vZGUpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tzKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6YWRkRXh0cmFQdWxsTm9kZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6cmVtb3ZlRXh0cmFQdWxsTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnVwZGF0ZUV4dHJhUHVsbE5vZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6cHJvY2Vzc0V4dHJhUHVsbE5vZGVzKToKKyAg
ICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OnByb3ZpZGVJbnB1dCk6CisgICAgICAgICog
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5hbHlzZXJOb2RlKToKKyAgICAgICAgKiB3ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oOgorICAgICAgICAoUmVhbHRpbWVBbmFseXNlck5v
ZGUpOgorCiAyMDEyLTAyLTAyICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUdXJuIG9uIENTUyBGaWx0ZXJzIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAxMDFjODdmNjlkY2E4MWNjMGVjNDA0ZTFmYzhhMDY0YTg1MjNkMzgzLi45MWEzMDRkMDc1Mjk2
OTM1ODAzYTkzOTAxMThlMDI0OWI2YzM0MDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NzA0LDYg
KzQ3MDQsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5D
RS5oJywKICAgICAgICAgICAgICdzdG9yYWdlL3dpbmNlL0xvY2FsU3RvcmFnZVRocmVhZFdpbkNF
LmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS93aW5jZS9Mb2NhbFN0b3JhZ2VUaHJlYWRXaW5D
RS5oJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAn
LAorICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgnLAogICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAg
ICAgICAnd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAn
d2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzNlYjI5MDUwNGVh
OGNmZWU2MDYxOTE5ZmJmMDRkNTNhOWIwNzY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCkBAIC0wLDAgKzEsMTE1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgiCisKKyNpbmNsdWRl
ICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUg
IkF1ZGlvTm9kZU91dHB1dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlOjpBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShBdWRpb0NvbnRleHQqIGNvbnRl
eHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0
ZSkKKyAgICAsIG1fbmVlZEV4dHJhUHVsbChmYWxzZSkKK3sKKyAgICBhZGRJbnB1dChhZG9wdFB0
cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3
IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOworfQorCisvLyBXZSBvdmVycmlkZSBwdWxsSW5w
dXRzKCkgYXMgYW4gb3B0aW1pemF0aW9uIGFsbG93aW5nIHRoaXMgbm9kZSB0byB0YWtlIGFkdmFu
dGFnZSBvZiBpbi1wbGFjZSBwcm9jZXNzaW5nLAorLy8gd2hlcmUgdGhlIGlucHV0IGlzIHNpbXBs
eSBwYXNzZWQgdGhyb3VnaCB1bnByb2Nlc3NlZCB0byB0aGUgb3V0cHV0LgorLy8gTm90ZTogdGhp
cyBvbmx5IGFwcGxpZXMgaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbCBjb3VudHMgbWF0
Y2guCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAtIHRyeSB0byByZW5k
ZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVzIGZvciBwYXNzLXRocm91Z2ggcHJvY2Vzc2luZyB3
aGVyZSBwcm9jZXNzKCkgZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLi4uCisgICAgaW5wdXQo
MCktPnB1bGwob3V0cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwordm9pZCBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6Y29ubmVjdChBdWRpb05vZGUqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgCisgICAgQXVkaW9Ob2RlOjpjb25u
ZWN0KGRlc3RpbmF0aW9uLCBvdXRwdXRJbmRleCwgaW5wdXRJbmRleCwgZWMpOworCisgICAgQXVk
aW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworICAgIAorICAgIHVwZGF0
ZVB1bGxTdGF0dXMoKTsKK30KKwordm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6ZGlzY29u
bmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBdWRpb05vZGU6OmRpc2Nvbm5lY3Qob3V0cHV0SW5k
ZXgsIGVjKTsKKworICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgp
KTsKKworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9pZCBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChpbnB1dCA9PSB0aGlzLT5pbnB1dCgw
KSk7CisgICAgaWYgKGlucHV0ICE9IHRoaXMtPmlucHV0KDApKQorICAgICAgICByZXR1cm47CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gaW5wdXQtPm51bWJlck9mQ2hhbm5lbHMo
KTsgICAgCisKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyAhPSBvdXRwdXQoMCktPm51bWJlck9m
Q2hhbm5lbHMoKSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFubmVs
IGNvdW50IHRvIGFueSBub2RlcyBjb25uZWN0ZWQgZnVydGhlciBkb3duc3RyZWFtIGluIHRoZSBn
cmFwaC4KKyAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hh
bm5lbHMpOworICAgIH0KKworICAgIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9y
SW5wdXQoaW5wdXQpOworCisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAob3V0cHV0KDApLT5mYW5PdXRDb3Vu
dCgpKSB7CisgICAgICAgIGlmIChtX25lZWRFeHRyYVB1bGwpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQoKS0+cmVtb3ZlRXh0cmFQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIG1fbmVlZEV4dHJh
UHVsbCA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zID0gaW5wdXQoMCktPm51bWJlck9mUmVuZGVyaW5nQ29u
bmVjdGlvbnMoKTsKKworICAgICAgICBpZiAobnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zICYmICFt
X25lZWRFeHRyYVB1bGwpIHsKKyAgICAgICAgICAgIGNvbnRleHQoKS0+YWRkRXh0cmFQdWxsTm9k
ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fbmVlZEV4dHJhUHVsbCA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2JlODg5NmQzYzk4NTRkMGIzY2I3NzhkY2ZiNzY1MzBj
Y2JmYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
YXNpY0luc3BlY3Rvck5vZGUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisjZGVmaW5lIEF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlX2gKKworI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1
dCBhbmQgb25lIG91dHB1dCB3aGVyZSB0aGUgb3V0cHV0IG1pZ2h0IG5vdCBuZWNlc2FyeSBjb25u
ZWN0IHRvIGFub3RoZXIgbm9kZSdzIGlucHV0LgorLy8gSWYgdGhlIG91dHB1dCBpcyBub3QgY29u
bmVjdCB0byBhbnkgaW5wdXQsIHRoZW4gdGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlJ3MgcHJv
Y2Vzc0lmTmVjZXNzYXJ5IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IEF1ZGlvQ29udGV4dCBi
ZWZvcmUKKy8vIHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSB0byBwdWxsIGRhdGEgZnJv
bSBpdHMgaW5wdXQocykgc28gdGhhdCBpdCBjYW4gaW5zcGVjdCB0aGUgYXVkaW8gc3RyZWFtLgor
Y2xhc3MgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1Ymxp
YzoKKyAgICBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1w
bGVSYXRlKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHVsbElu
cHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChB
dWRpb05vZGUqLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1
dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZD
aGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0Kik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBt
X25lZWRFeHRyYVB1bGw7CisgICAgdm9pZCB1cGRhdGVQdWxsU3RhdHVzKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCAwYzE2NjRmYjg0
ODljNzY4NDM5ZmVlODdjY2YyMGI5OWZlZWYzMjNhLi43Yjg0NmRkZTA4Y2VjZjA3ODczMjZjNGIw
OWE0NDAyNzYwNWY4NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKQEAgLTEyOSw2ICsxMjksNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVu
dCogZG9jdW1lbnQpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9kZXN0aW5h
dGlvbk5vZGUoMCkKICAgICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxzZSkKKyAgICAsIG1f
ZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmcoZmFsc2UpCiAgICAgLCBtX2Nvbm5lY3Rpb25Db3Vu
dCgwKQogICAgICwgbV9hdWRpb1RocmVhZCgwKQogICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVu
ZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCkBAIC0xNTIsNiArMTUzLDcgQEAgQXVkaW9Db250ZXh0
OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBudW1iZXJPZkNoYW5u
ZWxzLCBzaXplX3QKICAgICAsIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkKGZhbHNlKQogICAgICwg
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCisgICAgLCBt
X2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291
bnQoMCkKICAgICAsIG1fYXVkaW9UaHJlYWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChV
bmRlZmluZWRUaHJlYWRJZGVudGlmaWVyKQpAQCAtNTk0LDcgKzU5Niw5IEBAIHZvaWQgQXVkaW9D
b250ZXh0OjpoYW5kbGVQcmVSZW5kZXJUYXNrcygpCiAgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0
ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVPdXRwdXRzLgogICAg
ICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOwogICAgICAgICBoYW5kbGVEaXJ0eUF1
ZGlvTm9kZU91dHB1dHMoKTsKLSAgICAgICAgCisKKyAgICAgICAgdXBkYXRlRXh0cmFQdWxsTm9k
ZXMoKTsKKwogICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQogICAgICAgICAgICAgdW5sb2Nr
KCk7CiAgICAgfQpAQCAtNjIyLDcgKzYyNiw5IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVQ
b3N0UmVuZGVyVGFza3MoKQogICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5
IEF1ZGlvTm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KICAgICAgICAgaGFuZGxlRGly
dHlBdWRpb05vZGVJbnB1dHMoKTsKICAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRz
KCk7Ci0gICAgICAgIAorCisgICAgICAgIHVwZGF0ZUV4dHJhUHVsbE5vZGVzKCk7CisKICAgICAg
ICAgaWYgKG11c3RSZWxlYXNlTG9jaykKICAgICAgICAgICAgIHVubG9jaygpOwogICAgIH0KQEAg
LTY0NCw2ICs2NTAsMTIgQEAgdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtGb3JEZWxldGlvbihBdWRp
b05vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKICAgICBtX25vZGVz
VG9EZWxldGUuYXBwZW5kKG5vZGUpOworCisgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVz
dCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5vZGUgZnJvbSBleHRyYSBwdWxsIGxpc3QsCisg
ICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFw
aCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzCisgICAgLy8gZ2V0IGNoYW5j
ZSB0byBzY2hlZHVsZSB0aGUgZGVsZXRpb24gd29yaywgdGhlIHVwZGF0ZUV4dHJhUHVsbE5vZGVz
KCkgYWxzbyBnZXQgY2hhbmNlIHRvIG1vZGlmeQorICAgIC8vIHRoZSByZW5kZXJpbmdFeHRyYVB1
bGxOb2Rlcy4KKyAgICByZW1vdmVFeHRyYVB1bGxOb2RlKG5vZGUpOwogfQogCiB2b2lkIEF1ZGlv
Q29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRpb24oKQpAQCAtNzM1LDYgKzc0Nyw1MiBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBtX2RpcnR5
QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCit2b2lkIEF1ZGlvQ29udGV4dDo6YWRkRXh0
cmFQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigp
KTsKKworICAgIGlmICghbV9leHRyYVB1bGxOb2Rlcy5jb250YWlucyhub2RlKSkgeworICAgICAg
ICBtX2V4dHJhUHVsbE5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgbV9leHRyYVB1bGxOb2Rlc05l
ZWRVcGRhdGluZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6cmVtb3Zl
RXh0cmFQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25l
cigpKTsKKworICAgIGlmIChtX2V4dHJhUHVsbE5vZGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAg
ICAgIG1fZXh0cmFQdWxsTm9kZXMucmVtb3ZlKG5vZGUpOworICAgICAgICBtX2V4dHJhUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojp1
cGRhdGVFeHRyYVB1bGxOb2RlcygpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKwor
ICAgIGlmIChtX2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nKSB7CisgICAgICAgIC8vIENvcHkg
ZnJvbSBtX2V4dHJhUHVsbE5vZGVzIHRvIG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXMuCisgICAg
ICAgIG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXMucmVzaXplKG1fZXh0cmFQdWxsTm9kZXMuc2l6
ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBqID0gMDsKKyAgICAgICAgZm9yIChIYXNoU2V0PEF1
ZGlvTm9kZSo+OjppdGVyYXRvciBpID0gbV9leHRyYVB1bGxOb2Rlcy5iZWdpbigpOyBpICE9IG1f
ZXh0cmFQdWxsTm9kZXMuZW5kKCk7ICsraSwgKytqKSB7CisgICAgICAgICAgICBBdWRpb05vZGUq
IG91dHB1dCA9ICppOworICAgICAgICAgICAgbV9yZW5kZXJpbmdFeHRyYVB1bGxOb2Rlc1tqXSA9
IG91dHB1dDsKKyAgICAgICAgfQorCisgICAgICAgIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRp
bmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzRXh0cmFQ
dWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1Ro
cmVhZCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlbmRlcmluZ0V4dHJh
UHVsbE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRlcmluZ0V4dHJhUHVsbE5vZGVz
W2ldLT5wcm9jZXNzSWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwogY29uc3QgQXRv
bWljU3RyaW5nJiBBdWRpb0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAogewogICAgIHJl
dHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Db250ZXh0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA3OTExNTE5YjM4MDNkZDlhNzJiZDkyNWY4ODFh
ZWMyMWY2NDkyMmIzLi5lN2Q0NzUwM2E1MDkyNDYyYjg1YTczYWRhYzZkYjA3MDU2NzNhNTdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApAQCAtMTM5LDcgKzEzOSwxMyBA
QCBwdWJsaWM6CiAgICAgLy8gV2Ugc2NoZWR1bGUgZGVsZXRpb24gb2YgYWxsIG1hcmtlZCBub2Rl
cyBhdCB0aGUgZW5kIG9mIGVhY2ggcmVhbHRpbWUgcmVuZGVyIHF1YW50dW0uCiAgICAgdm9pZCBt
YXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlKik7CiAgICAgdm9pZCBkZWxldGVNYXJrZWROb2Rlcygp
OwotICAgIAorCisgICAgdm9pZCBhZGRFeHRyYVB1bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZv
aWQgcmVtb3ZlRXh0cmFQdWxsTm9kZShBdWRpb05vZGUqKTsKKworICAgIC8vIENhbGxlZCByaWdo
dCBiZWZvcmUgaGFuZGxlUG9zdFJlbmRlclRhc2tzKCk7CisgICAgdm9pZCBwcm9jZXNzRXh0cmFQ
dWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKICAgICAvLyBLZWVwcyB0cmFjayBv
ZiB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1hZGUuCiAgICAgdm9pZCBpbmNyZW1lbnRDb25u
ZWN0aW9uQ291bnQoKQogICAgIHsKQEAgLTI2OSw2ICsyNzUsMTIgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1
ZGlvTm9kZU91dHB1dHMoKTsKIAorICAgIEhhc2hTZXQ8QXVkaW9Ob2RlKj4gbV9leHRyYVB1bGxO
b2RlczsKKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9yZW5kZXJpbmdFeHRyYVB1bGxOb2RlczsK
KyAgICAvLyBtX2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nIGtlZXBzIHRyYWNrIGlmIG1fZXh0
cmFQdWxsTm9kZXMgaXMgbW9kaWZpZWQuCisgICAgYm9vbCBtX2V4dHJhUHVsbE5vZGVzTmVlZFVw
ZGF0aW5nOworICAgIHZvaWQgdXBkYXRlRXh0cmFQdWxsTm9kZXMoKTsKKwogICAgIHVuc2lnbmVk
IG1fY29ubmVjdGlvbkNvdW50OwogCiAgICAgLy8gR3JhcGggbG9ja2luZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA2ZTUyN2Ji
ZWUzNzE0MGQwNzNhMzEwMTljZWI0MzEzZjZhNGMzMzI0Li42YTY0ZDBlM2QyNDViNWQxNTRlNmJk
YzhmMDk0Y2QwMWE2ZWI2NmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC04MCw2ICs4MCw5IEBAIHZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBu
dW1iZXJPCiAgICAgICAgIGRlc3RpbmF0aW9uQnVzLT5jb3B5RnJvbSgqcmVuZGVyZWRCdXMpOwog
ICAgIH0KIAorICAgIC8vIFByb2Nlc3MgZXh0cmEgbm9kZXMgd2hpY2ggbmVlZCB0byBwdWxsIGRh
dGEgYnkgdGhlbXNlbHZlcy4KKyAgICBjb250ZXh0KCktPnByb2Nlc3NFeHRyYVB1bGxOb2Rlcyhu
dW1iZXJPZkZyYW1lcyk7CisKICAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBjYXJlIG9mIGFu
eSBidXNpbmVzcyBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCiAgICAgY29udGV4
dCgpLT5oYW5kbGVQb3N0UmVuZGVyVGFza3MoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcAppbmRleCA4ZDc0YTY3YTgwYTcyNzY3
ZDc4YTA2ZWRkODZmYTcyN2I2M2RkN2VmLi5jZTA0NzU1Y2Q5YjQ4ZTE5YjEzY2JmMjY3MDE4NzA3
NWRlMzc0YTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFu
YWx5c2VyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFs
eXNlck5vZGUuY3BwCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJl
YWx0aW1lQW5hbHlzZXJOb2RlOjpSZWFsdGltZUFuYWx5c2VyTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxl
UmF0ZSkKKyAgICA6IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
CiB7CiAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CiAg
ICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKQEAg
LTY5LDE1ICs2OSw2IEBAIHZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnByb2Nlc3Moc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgb3V0cHV0QnVzLT5jb3B5RnJvbSgqaW5wdXRCdXMp
OwogfQogCi0vLyBXZSBvdmVycmlkZSBwdWxsSW5wdXRzKCkgYXMgYW4gb3B0aW1pemF0aW9uIGFs
bG93aW5nIHRoaXMgbm9kZSB0byB0YWtlIGFkdmFudGFnZSBvZiBpbi1wbGFjZSBwcm9jZXNzaW5n
LAotLy8gd2hlcmUgdGhlIGlucHV0IGlzIHNpbXBseSBwYXNzZWQgdGhyb3VnaCB1bnByb2Nlc3Nl
ZCB0byB0aGUgb3V0cHV0LgotLy8gTm90ZTogdGhpcyBvbmx5IGFwcGxpZXMgaWYgdGhlIGlucHV0
IGFuZCBvdXRwdXQgY2hhbm5lbCBjb3VudHMgbWF0Y2guCi12b2lkIFJlYWx0aW1lQW5hbHlzZXJO
b2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gUmVuZGVy
IGlucHV0IHN0cmVhbSAtIHRyeSB0byByZW5kZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVzIGZv
ciBwYXNzLXRocm91Z2ggcHJvY2Vzc2luZyB3aGVyZSBwcm9jZXNzKCkgZG9lc24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nLi4uCi0gICAgaW5wdXQoMCktPnB1bGwob3V0cHV0KDApLT5idXMoKSwgZnJh
bWVzVG9Qcm9jZXNzKTsKLX0KLQogdm9pZCBSZWFsdGltZUFuYWx5c2VyTm9kZTo6cmVzZXQoKQog
ewogICAgIG1fYW5hbHlzZXIucmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5oCmluZGV4IGMzN2M2YzFiNWNhM2JmMGI2NThlOTAyMjdkY2Mz
OWE3ODgwN2ZmYzMuLjA1NmM3MjY3YzA1ZTZlNmUzYTE0ZTEyNTBlNWE1MDg3NWMxYzU2ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaApAQCAt
MjUsMTMgKzI1LDEzIEBACiAjaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gKICNkZWZpbmUg
UmVhbHRpbWVBbmFseXNlck5vZGVfaAogCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVk
ZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKICNpbmNsdWRlICJSZWFsdGltZUFuYWx5c2Vy
LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworY2xhc3MgUmVh
bHRpbWVBbmFseXNlck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKQEAgLTQyLDcg
KzQyLDYgQEAgcHVibGljOgogICAgIAogICAgIC8vIEF1ZGlvTm9kZQogICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCBwdWxs
SW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgp
OwogCiAgICAgLy8gSmF2YXNjcmlwdCBiaW5kaW5ncwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY0NmZjNjRlYzdhYmRjODJk
NGNhYTE5ZmYzOTllY2I0NDJmMzVjZjEuLjUzN2RiNjE5YWIxYWY3YTRhZGY3MjMzYTE5NmU0NWUx
NjQ5MjI5NzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMi0wMiAgUmF5bW9uZCBMaXUg
IDxyYXltb25kLmxpdUBpbnRlbC5jb20+CisKKyAgICAgICAgTW9kaWZ5IFJlYWx0aW1lQW5hbHlz
ZXJOb2RlIHB1bGwgbWVjaGFuaXNtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzUxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd2ViYXVkaW8vZXh0cmEtcHVsbC1ub2RlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogd2ViYXVkaW8vZXh0cmEtcHVsbC1ub2RlLmh0bWw6IEFkZGVkLgorCiAy
MDEyLTAyLTAyICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBU
dXJuIG9uIENTUyBGaWx0ZXJzIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2V4dHJhLXB1bGwtbm9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9leHRyYS1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjYjAzMDY1NjNkOGNk
YmUzMTlhMTU1ODE2MzZlNDE4ZWI4Y2QxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9leHRyYS1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAK
K1RoaXMgdGVzdCB2ZXJpZmllcyB3aGV0aGVyIHRoZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBi
YXNlZCBub2RlcyB3b3JraW5nIHdlbGwuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyB0ZXN0MS4KK1BBU1MgdGVzdDIuCitQQVNTIHRlc3QzLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2V4dHJhLXB1bGwtbm9kZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZXh0
cmEtcHVsbC1ub2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI1NjAzNDM3MTgyNWY5NTZkNTQ2OTIwNWNl
NzZjYjI5MjI0MzU1YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2V4
dHJhLXB1bGwtbm9kZS5odG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKwor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlw
dGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2Ny
aXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgd2hldGhlciB0aGUgQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGUgYmFzZWQgbm9kZXMgd29ya2luZyB3ZWxsLiIpOworCit2YXIgc2FtcGxlUmF0ZSA9IDQ0
MTAwLjA7Cit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDAuMTsKK3ZhciBmZnRTaXplID0gMzI7
CisKK3ZhciBjb250ZXh0OwordmFyIHRvbmVCdWZmZXI7Cit2YXIgYnVmZmVyU291cmNlOwordmFy
IGFuYWx5c2VyOworCitmdW5jdGlvbiBjcmVhdGVEYXRhQnVmZmVyKGNvbnRleHQsIGxlbmd0aElu
U2Vjb25kcykgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEs
IGxlbmd0aEluU2Vjb25kcyAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOworCisgICAgdmFyIG4g
PSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFu
bmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAg
IGRhdGFbaV0gPSAxLjA7CisgICAgfQorCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCitm
dW5jdGlvbiBjb25zdHJ1Y3RDb21tb25HcmFwaCgpIHsKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBh
dWRpbyBjb250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDEsIHNh
bXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKyAgICB0b25lQnVm
ZmVyID0gY3JlYXRlRGF0YUJ1ZmZlcihjb250ZXh0LCByZW5kZXJMZW5ndGhTZWNvbmRzKTsKKwor
ICAgIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVm
ZmVyU291cmNlLmJ1ZmZlciA9IHRvbmVCdWZmZXI7CisKKyAgICBhbmFseXNlciA9IGNvbnRleHQu
Y3JlYXRlQW5hbHlzZXIoKTsKKyAgICBhbmFseXNlci5mZnRTaXplID0gZmZ0U2l6ZTsKKworICAg
IGJ1ZmZlclNvdXJjZS5jb25uZWN0KGFuYWx5c2VyKTsKK30KKworZnVuY3Rpb24gdGVzdDFGaW5p
c2hlZCgpIHsKKyAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5h
bHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGFycik7CisKKyAgICBpZiAoYXJyWzBdID49IDI1
NSkKKyAgICAgICAgdGVzdFBhc3NlZCgidGVzdDEuIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0
RmFpbGVkKCJ0ZXN0MS4iKTsKKworICAgIHRlc3QyKCk7Cit9CisKKy8vIFRvIHZlcmlmeSB0aGUg
cmVhbHRpbWVBbmFseXNlciBjYW4gcHVsbCBkYXRhIHdoZW4gdGhlcmUgaXMgdXBzdHJlYW0gbm9k
ZSBjb25uZWN0IHRvIGl0CisvLyBhdCB0aGUgc2FtZSB0aW1lIGl0IGRvbid0IGNvbm5lY3QgdG8g
YSBkb3duc3RyZWFtIG5vZGUuCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBjb25zdHJ1Y3RDb21t
b25HcmFwaCgpOworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKworICAgIGNvbnRleHQu
b25jb21wbGV0ZSA9IHRlc3QxRmluaXNoZWQ7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygp
OworfQorCitmdW5jdGlvbiB0ZXN0MkZpbmlzaGVkKCkgeworICAgIHZhciBhcnIgPSBuZXcgVWlu
dDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5nZXRCeXRlVGltZURvbWFpbkRhdGEoYXJy
KTsKKworICAgIGlmIChhcnJbMF0gPj0gMjU1KQorICAgICAgICB0ZXN0UGFzc2VkKCJ0ZXN0Mi4i
KTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoInRlc3QyLiIpOworCisgICAgdGVzdDMo
KTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIGNhbiBwcm9jZXNzIG5v
cm1hbGx5IHdoZW4gdGhlcmUgaXMgdXBzdHJlYW0gbm9kZSBjb25uZWN0IHRvIGl0CisvLyBhdCB0
aGUgc2FtZSB0aW1lIGl0IGFsc28gY29ubmVjdCB0byBhIGRvd25zdHJlYW0gbm9kZSB3aGljaCB1
bHRpbWF0ZWx5IGNvbm5lY3QgdG8gYXVkaW8gZGVzdGluYXRpb24KK2Z1bmN0aW9uIHRlc3QyKCkg
eworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBhbmFseXNlci5jb25uZWN0KGNv
bnRleHQuZGVzdGluYXRpb24pOworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKworICAg
IGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QyRmluaXNoZWQ7CisgICAgY29udGV4dC5zdGFydFJl
bmRlcmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0M0ZpbmlzaGVkKCkgeworICAgIHZhciBhcnIg
PSBuZXcgVWludDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5nZXRCeXRlVGltZURvbWFp
bkRhdGEoYXJyKTsKKworICAgIC8vIElmIHJlYWx0aW1lQW5hbHlzZXIgaGFkbid0IHB1bGxlZCBh
bnkgZGF0YSwgdGhlIGRhdGEgaGVyZSB3aWxsIGJlIDEyOC4KKyAgICBpZiAoYXJyWzBdID09IDEy
OCkKKyAgICAgICAgdGVzdFBhc3NlZCgidGVzdDMuIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0
RmFpbGVkKCJ0ZXN0My4iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBUbyB2ZXJp
ZnkgdGhlIHJlYWx0aW1lQW5hbHlzZXIgd2lsbCBzdG9wIHB1bGwgaWYgaXQgaXMgY29ubmVjdCB0
byBhIGRvd25zdHJlYW0gbm9kZQorLy8gd2hpY2ggZG8gbm90IHVsdGltYXRseSBjb25uZWN0IHRv
IGFueSBhdWRpbyBkZXN0aW5hdGlvbgorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBjb25zdHJ1
Y3RDb21tb25HcmFwaCgpOworCisgICAgdmFyIGdhaW4gPSBjb250ZXh0LmNyZWF0ZUdhaW5Ob2Rl
KCk7CisgICAgYW5hbHlzZXIuY29ubmVjdChnYWluKTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3Rl
T24oMCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0ZXN0M0ZpbmlzaGVkOworICAgIGNv
bnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJBdWRpb0VuYWJsZWQiLCAiMSIp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICB0ZXN0MSgpOworfQorCisKK3J1blRlc3QoKTsK
KworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125560</attachid>
            <date>2012-02-05 21:12:54 -0800</date>
            <delta_ts>2012-04-15 23:59:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120206131731.patch</filename>
            <type>text/plain</type>
            <size>28544</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA0YjYyYzBkYzBmNGE1
Yjc2NDA5ODJjMWJmODUxYTdkOGU3MmY0Mi4uNTdjN2IyYWRhMWRlZGFiNzc1MWNlN2Y3ZDMyYmY5
ZGI0MmY0N2IyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAyLTA1ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vZXh0cmEtcHVsbC1ub2RlLmh0bWwK
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cyk6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKToKKyAgICAgICAgKiB3ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpBdWRp
b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpoYW5kbGVQcmVSZW5k
ZXJUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmhhbmRsZVBvc3RSZW5k
ZXJUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Om1hcmtGb3JEZWxldGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmFkZEV4dHJhUHVsbE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnJlbW92
ZUV4dHJhUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVF
eHRyYVB1bGxOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnByb2Nlc3NF
eHRyYVB1bGxOb2Rlcyk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAg
ICAgIChBdWRpb0NvbnRleHQpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRl
SW5wdXQpOgorICAgICAgICAqIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lQW5hbHlzZXJOb2RlOjpSZWFsdGltZUFuYWx5c2VyTm9k
ZSk6CisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaDoKKyAgICAgICAg
KFJlYWx0aW1lQW5hbHlzZXJOb2RlKToKKwogMjAxMi0wMi0wNSAgQW5kcmVhcyBLbGluZyAgPGF3
ZXNvbWVrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU3dlZGlzaCBidWlsZGZpeC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDY3ZmFjMGY5ZTQ1NTE5YjQ0ODM0ZTA2MmQ0MzIz
OTkwNDdmNDBkM2UuLjZlYmQ3ODQ2MGQ1OWI1YWFkMTNlZDE5OTFmNGI4ODJmNjQ2NjJmNzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTI3MSw2ICs1MjcxLDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dhdmVTaGFwZXJO
b2RlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggXAogCVNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCBcCiAJU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBj
ZTIwMjIxMDdjZjYwYjE1YWJjYTJmMzM0N2EzOTBmYzI3OGY3ZGFlLi43N2ViY2M3YjVjY2ZjMjE3
OGRmNGMwNTUwMzBlZTRjNjIyNjU2OTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NzA1LDYgKzQ3
MDUsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL3dpbmNlL0xvY2FsU3RvcmFnZVRocmVhZFdpbkNFLmNw
cCcsCiAgICAgICAgICAgICAnc3RvcmFnZS93aW5jZS9Mb2NhbFN0b3JhZ2VUaHJlYWRXaW5DRS5o
JywKKyAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAnLAor
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAg
ICAnd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9CdWZmZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMjE0ZTkwOTM4OTdlZmE1ZDA5MGNiYmY3ZjFk
YmRiYjMzYWZlNTUwLi5mNjJiMTJmZjRmMTM0ZDAwOGM3NTU3NjFmZTcyNTAyNTBlNGYwOWM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01OTk3LDYgKzU5OTcsOCBAQAogCQlGRDJEQkYxMzEyQjA0OEEzMDBFRDk4QzYgLyogQXVk
aW9Ub29sYm94LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZEMkRCRjBGMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1Rvb2xib3guZnJh
bWV3b3JrICovOyB9OwogCQlGRDJEQkYxNDEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Vbml0LmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEMkRCRjEwMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrICovOyB9Owog
CQlGRDJEQkYxNTEyQjA0OEEzMDBFRDk4QzYgLyogQ29yZUF1ZGlvLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMkRCRjExMTJCMDQ4
QTMwMEVEOThDNiAvKiBDb3JlQXVkaW8uZnJhbWV3b3JrICovOyB9OworCQlGRDMxNUZGNjEyQjAy
Njc2MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTVGQUMxMkIwMjY3NTAwQzFBMzU5
IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCAqLzsgfTsKKwkJRkQzMTVGRjcxMkIwMjY3
NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDMxNUZBRDEyQjAyNjc1MDBDMUEzNTkgLyog
QXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCAqLzsgfTsKIAkJRkQzMTVGRjYxMkIwMjY3NjAwQzFB
MzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE1RkFDMTJCMDI2NzUwMEMxQTM1OSAvKiBBdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAgKi87IH07CiAJCUZEMzE1RkY3MTJCMDI2NzYwMEMxQTM1
OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTVGQUQxMkIwMjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmggKi87IH07CiAJCUZEMzE1RkY4MTJCMDI2NzYwMEMxQTM1OSAvKiBB
dWRpb0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRDMxNUZBRTEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CdWZmZXIuY3BwICovOyB9OwpA
QCAtMTI5ODYsNiArMTI5ODgsOCBAQAogCQlGRDJEQkYwRjEyQjA0OEEzMDBFRDk4QzYgLyogQXVk
aW9Ub29sYm94LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXVkaW9Ub29sYm94LmZyYW1l
d29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVG9vbGJveC5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUZEMkRCRjEwMTJCMDQ4QTMw
MEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBBdWRpb1Vu
aXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXVkaW9Vbml0
LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJRkQyREJGMTExMkIw
NDhBMzAwRUQ5OEM2IC8qIENvcmVBdWRpby5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENv
cmVBdWRpby5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3Jl
QXVkaW8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQlGRDMxNUZB
QzEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDMxNUZBRDEyQjAyNjc1MDBDMUEzNTkg
LyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkQzMTVGQUMxMkIwMjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQzMTVGQUQxMkIw
MjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZEMzE1RkFFMTJCMDI2NzUwMEMxQTM1OSAvKiBBdWRpb0J1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb0J1ZmZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc0MSw2ICsyMDc0NSw4IEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQlGRDU2ODZDNzEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRp
b0RlY29kZXIuY3BwICovLAogCQkJCUZENTY4NkM4MTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1
ZGlvRGVjb2Rlci5oICovLAorCQkJCUZEMzE1RkFDMTJCMDI2NzUwMEMxQTM1OSAvKiBBdWRpb0Jh
c2ljSW5zcGVjdG9yTm9kZS5jcHAgKi8sCisJCQkJRkQzMTVGQUQxMkIwMjY3NTAwQzFBMzU5IC8q
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggKi8sCiAJCQkJRkQzMTVGQUMxMkIwMjY3NTAwQzFB
MzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCAqLywKIAkJCQlGRDMxNUZBRDEyQjAy
Njc1MDBDMUEzNTkgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCAqLywKIAkJCQlGRDMxNUZB
RTEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CdWZmZXIuY3BwICovLApAQCAtMjEwNzAsNiArMjEw
NzYsNyBAQAogCQkJCUE4QzRBODBEMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEM0QTgwQjA5RDU2MzI3MDAwM0FDOEQgLyogQXR0cmlidXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjA3QTEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9BcnJheS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkQzMTVGRjcxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNUZGNzEyQjAyNjc2MDBDMUEz
NTkgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE1
RkY5MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQ1Njg2Q0MxM0FDMTgxNDAwQjY5QzY4IC8qIEF1ZGlvQnVmZmVyQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLApAQCAtMjQ1MTQsNiArMjQ1MjEsNyBAQAogCQkJCTg5RDA4RDlGMTIyMjg0NTEwMDEy
NDFERiAvKiBBc3luY0ZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDNEE4MEUw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDNEE4MEMw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDMx
NUZGNjEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQzMTVGRjYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE1RkY4MTJCMDI2NzYwMEMxQTM1
OSAvKiBBdWRpb0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNUZGQjEyQjAyNjc2
MDBDMUEzNTkgLyogQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIzM2ViMjkwNTA0ZWE4Y2ZlZTYwNjE5MTlmYmYwNGQ1M2E5YjA3NjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZS5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CYXNpY0lu
c3BlY3Rvck5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1
ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1
ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9uZWVkRXh0cmFQdWxsKGZhbHNl
KQoreworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwor
ICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7Cit9
CisKKy8vIFdlIG92ZXJyaWRlIHB1bGxJbnB1dHMoKSBhcyBhbiBvcHRpbWl6YXRpb24gYWxsb3dp
bmcgdGhpcyBub2RlIHRvIHRha2UgYWR2YW50YWdlIG9mIGluLXBsYWNlIHByb2Nlc3NpbmcsCisv
LyB3aGVyZSB0aGUgaW5wdXQgaXMgc2ltcGx5IHBhc3NlZCB0aHJvdWdoIHVucHJvY2Vzc2VkIHRv
IHRoZSBvdXRwdXQuCisvLyBOb3RlOiB0aGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgaW5wdXQgYW5k
IG91dHB1dCBjaGFubmVsIGNvdW50cyBtYXRjaC4KK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBSZW5kZXIg
aW5wdXQgc3RyZWFtIC0gdHJ5IHRvIHJlbmRlciBkaXJlY3RseSBpbnRvIG91dHB1dCBidXMgZm9y
IHBhc3MtdGhyb3VnaCBwcm9jZXNzaW5nIHdoZXJlIHByb2Nlc3MoKSBkb2Vzbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcuLi4KKyAgICBpbnB1dCgwKS0+cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFt
ZXNUb1Byb2Nlc3MpOworfQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjb25uZWN0
KEF1ZGlvTm9kZSogZGVzdGluYXRpb24sIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBp
bnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOyAKKyAgICBBdWRpb05vZGU6OmNvbm5lY3QoZGVzdGluYXRpb24sIG91dHB1dEluZGV4LCBp
bnB1dEluZGV4LCBlYyk7CisKKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNv
bnRleHQoKSk7CisgICAgCisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlOjpkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEF1ZGlv
Tm9kZTo6ZGlzY29ubmVjdChvdXRwdXRJbmRleCwgZWMpOworCisgICAgQXVkaW9Db250ZXh0OjpB
dXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworCisgICAgdXBkYXRlUHVsbFN0YXR1cygpOwor
fQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNG
b3JJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+
aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNT
RVJUKGlucHV0ID09IHRoaXMtPmlucHV0KDApKTsKKyAgICBpZiAoaW5wdXQgIT0gdGhpcy0+aW5w
dXQoMCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMg
PSBpbnB1dC0+bnVtYmVyT2ZDaGFubmVscygpOyAgICAKKworICAgIGlmIChudW1iZXJPZkNoYW5u
ZWxzICE9IG91dHB1dCgwKS0+bnVtYmVyT2ZDaGFubmVscygpKSB7CisgICAgICAgIC8vIFRoaXMg
d2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBm
dXJ0aGVyIGRvd25zdHJlYW0gaW4gdGhlIGdyYXBoLgorICAgICAgICBvdXRwdXQoMCktPnNldE51
bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CisgICAgfQorCisgICAgQXVkaW9Ob2Rl
OjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7CisKKyAgICB1cGRhdGVQdWxs
U3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0ZVB1bGxT
dGF0dXMoKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAg
IGlmIChvdXRwdXQoMCktPmZhbk91dENvdW50KCkpIHsKKyAgICAgICAgaWYgKG1fbmVlZEV4dHJh
UHVsbCkgeworICAgICAgICAgICAgY29udGV4dCgpLT5yZW1vdmVFeHRyYVB1bGxOb2RlKHRoaXMp
OworICAgICAgICAgICAgbV9uZWVkRXh0cmFQdWxsID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgPSBpbnB1
dCgwKS0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOworCisgICAgICAgIGlmIChudW1i
ZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgIW1fbmVlZEV4dHJhUHVsbCkgeworICAgICAgICAgICAg
Y29udGV4dCgpLT5hZGRFeHRyYVB1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgbV9uZWVkRXh0
cmFQdWxsID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYmU4ODk2
ZDNjOTg1NGQwYjNjYjc3OGRjZmI3NjUzMGNjYmZiODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlX2gKKyNk
ZWZpbmUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMg
YW4gQXVkaW9Ob2RlIHdpdGggb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IHdoZXJlIHRoZSBvdXRw
dXQgbWlnaHQgbm90IG5lY2VzYXJ5IGNvbm5lY3QgdG8gYW5vdGhlciBub2RlJ3MgaW5wdXQuCisv
LyBJZiB0aGUgb3V0cHV0IGlzIG5vdCBjb25uZWN0IHRvIGFueSBpbnB1dCwgdGhlbiB0aGUgQXVk
aW9CYXNpY0luc3BlY3Rvck5vZGUncyBwcm9jZXNzSWZOZWNlc3NhcnkgZnVuY3Rpb24gd2lsbCBi
ZSBjYWxsZWQgYnkgQXVkaW9Db250ZXh0IGJlZm9yZQorLy8gdGhlIGVuZCBvZiBlYWNoIHJlbmRl
ciBxdWFudHVtIHRvIHB1bGwgZGF0YSBmcm9tIGl0cyBpbnB1dChzKSBzbyB0aGF0IGl0IGNhbiBp
bnNwZWN0IHRoZSBhdWRpbyBzdHJlYW0uCitjbGFzcyBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSA6
IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
KEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIAorICAgIC8vIEF1ZGlvTm9k
ZQorICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVuc2lnbmVkIG91dHB1dEluZGV4
LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lk
IGRpc2Nvbm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQq
KTsKKworcHJpdmF0ZToKKyAgICBib29sIG1fbmVlZEV4dHJhUHVsbDsKKyAgICB2b2lkIHVwZGF0
ZVB1bGxTdGF0dXMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwCmluZGV4IDBjMTY2NGZiODQ4OWM3Njg0MzlmZWU4N2NjZjIwYjk5ZmVlZjMyM2Eu
LjdiODQ2ZGRlMDhjZWNmMDc4NzMyNmM0YjA5YTQ0MDI3NjA1Zjg1MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMTI5LDYgKzEyOSw3IEBAIEF1ZGlvQ29u
dGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAsIG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCiAgICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgwKQogICAgICwgbV9pc0RlbGV0aW9u
U2NoZWR1bGVkKGZhbHNlKQorICAgICwgbV9leHRyYVB1bGxOb2Rlc05lZWRVcGRhdGluZyhmYWxz
ZSkKICAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCiAgICAgLCBtX2F1ZGlvVGhyZWFkKDApCiAg
ICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKQEAgLTE1
Miw2ICsxNTMsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1l
bnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdAogICAgICwgbV9pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9k
ZXN0aW5hdGlvbk5vZGUoMCkKKyAgICAsIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmcoZmFs
c2UpCiAgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQogICAgICwgbV9hdWRpb1RocmVhZCgwKQog
ICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCkBAIC01
OTQsNyArNTk2LDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKCkK
ICAgICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMg
YW5kIEF1ZGlvTm9kZU91dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRz
KCk7CiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotICAgICAgICAKKwor
ICAgICAgICB1cGRhdGVFeHRyYVB1bGxOb2RlcygpOworCiAgICAgICAgIGlmIChtdXN0UmVsZWFz
ZUxvY2spCiAgICAgICAgICAgICB1bmxvY2soKTsKICAgICB9CkBAIC02MjIsNyArNjI2LDkgQEAg
dm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpCiAgICAgICAgIC8vIEZp
eHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVP
dXRwdXRzLgogICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOwogICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKLSAgICAgICAgCisKKyAgICAgICAgdXBkYXRl
RXh0cmFQdWxsTm9kZXMoKTsKKwogICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQogICAgICAg
ICAgICAgdW5sb2NrKCk7CiAgICAgfQpAQCAtNjQ0LDYgKzY1MCwxMiBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoaXNH
cmFwaE93bmVyKCkpOwogICAgIG1fbm9kZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7CisKKyAgICAv
LyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRpbWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9k
ZSBmcm9tIGV4dHJhIHB1bGwgbGlzdCwKKyAgICAvLyBzaW5jZSBhbGwgY29ubmVjdGlvbnMgYXJl
IGdvbmUgYW5kIHdlIGhvbGQgdGhlIGdyYXBoIGxvY2suIFRoZW4gd2hlbiBoYW5kbGVQb3N0UmVu
ZGVyVGFza3MKKyAgICAvLyBnZXQgY2hhbmNlIHRvIHNjaGVkdWxlIHRoZSBkZWxldGlvbiB3b3Jr
LCB0aGUgdXBkYXRlRXh0cmFQdWxsTm9kZXMoKSBhbHNvIGdldCBjaGFuY2UgdG8gbW9kaWZ5Cisg
ICAgLy8gdGhlIHJlbmRlcmluZ0V4dHJhUHVsbE5vZGVzLgorICAgIHJlbW92ZUV4dHJhUHVsbE5v
ZGUobm9kZSk7CiB9CiAKIHZvaWQgQXVkaW9Db250ZXh0OjpzY2hlZHVsZU5vZGVEZWxldGlvbigp
CkBAIC03MzUsNiArNzQ3LDUyIEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlv
Tm9kZU91dHB1dHMoKQogICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7CiB9CiAK
K3ZvaWQgQXVkaW9Db250ZXh0OjphZGRFeHRyYVB1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKCFtX2V4dHJhUHVsbE5vZGVz
LmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgIG1fZXh0cmFQdWxsTm9kZXMuYWRkKG5vZGUpOwor
ICAgICAgICBtX2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgQXVkaW9Db250ZXh0OjpyZW1vdmVFeHRyYVB1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkK
K3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1fZXh0cmFQdWxsTm9k
ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgbV9leHRyYVB1bGxOb2Rlcy5yZW1vdmUobm9k
ZSk7CisgICAgICAgIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOworICAgIH0K
K30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUV4dHJhUHVsbE5vZGVzKCkKK3sKKyAgICBB
U1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBk
YXRpbmcpIHsKKyAgICAgICAgLy8gQ29weSBmcm9tIG1fZXh0cmFQdWxsTm9kZXMgdG8gbV9yZW5k
ZXJpbmdFeHRyYVB1bGxOb2Rlcy4KKyAgICAgICAgbV9yZW5kZXJpbmdFeHRyYVB1bGxOb2Rlcy5y
ZXNpemUobV9leHRyYVB1bGxOb2Rlcy5zaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIGogPSAw
OworICAgICAgICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlKj46Oml0ZXJhdG9yIGkgPSBtX2V4dHJh
UHVsbE5vZGVzLmJlZ2luKCk7IGkgIT0gbV9leHRyYVB1bGxOb2Rlcy5lbmQoKTsgKytpLCArK2op
IHsKKyAgICAgICAgICAgIEF1ZGlvTm9kZSogb3V0cHV0ID0gKmk7CisgICAgICAgICAgICBtX3Jl
bmRlcmluZ0V4dHJhUHVsbE5vZGVzW2pdID0gb3V0cHV0OworICAgICAgICB9CisKKyAgICAgICAg
bV9leHRyYVB1bGxOb2Rlc05lZWRVcGRhdGluZyA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBB
dWRpb0NvbnRleHQ6OnByb2Nlc3NFeHRyYVB1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KQoreworICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXNbaV0tPnByb2Nlc3NJZk5lY2Vzc2FyeShmcmFtZXNU
b1Byb2Nlc3MpOworfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvQ29udGV4dDo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JB
dWRpb0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDc5
MTE1MTliMzgwM2RkOWE3MmJkOTI1Zjg4MWFlYzIxZjY0OTIyYjMuLmU3ZDQ3NTAzYTUwOTI0NjJi
ODVhNzNhZGFjNmRiMDcwNTY3M2E1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5oCkBAIC0xMzksNyArMTM5LDEzIEBAIHB1YmxpYzoKICAgICAvLyBXZSBzY2hlZHVsZSBk
ZWxldGlvbiBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSBy
ZW5kZXIgcXVhbnR1bS4KICAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKICAg
ICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0gICAgCisKKyAgICB2b2lkIGFkZEV4dHJhUHVs
bE5vZGUoQXVkaW9Ob2RlKik7CisgICAgdm9pZCByZW1vdmVFeHRyYVB1bGxOb2RlKEF1ZGlvTm9k
ZSopOworCisgICAgLy8gQ2FsbGVkIHJpZ2h0IGJlZm9yZSBoYW5kbGVQb3N0UmVuZGVyVGFza3Mo
KTsKKyAgICB2b2lkIHByb2Nlc3NFeHRyYVB1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKKwogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFk
ZS4KICAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpCiAgICAgewpAQCAtMjY5LDYg
KzI3NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVJbnB1dHMo
KTsKICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwogCisgICAgSGFzaFNl
dDxBdWRpb05vZGUqPiBtX2V4dHJhUHVsbE5vZGVzOworICAgIFZlY3RvcjxBdWRpb05vZGUqPiBt
X3JlbmRlcmluZ0V4dHJhUHVsbE5vZGVzOworICAgIC8vIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBk
YXRpbmcga2VlcHMgdHJhY2sgaWYgbV9leHRyYVB1bGxOb2RlcyBpcyBtb2RpZmllZC4KKyAgICBi
b29sIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmc7CisgICAgdm9pZCB1cGRhdGVFeHRyYVB1
bGxOb2RlcygpOworCiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291bnQ7CiAKICAgICAvLyBH
cmFwaCBsb2NraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5h
dGlvbk5vZGUuY3BwCmluZGV4IDZlNTI3YmJlZTM3MTQwZDA3M2EzMTAxOWNlYjQzMTNmNmE0YzMz
MjQuLjZhNjRkMGUzZDI0NWI1ZDE1NGU2YmRjOGYwOTRjZDAxYTZlYjY2ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTgwLDYg
KzgwLDkgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KEF1ZGlvQnVz
KiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IG51bWJlck8KICAgICAgICAgZGVzdGluYXRpb25CdXMt
PmNvcHlGcm9tKCpyZW5kZXJlZEJ1cyk7CiAgICAgfQogCisgICAgLy8gUHJvY2VzcyBleHRyYSBu
b2RlcyB3aGljaCBuZWVkIHRvIHB1bGwgZGF0YSBieSB0aGVtc2VsdmVzLgorICAgIGNvbnRleHQo
KS0+cHJvY2Vzc0V4dHJhUHVsbE5vZGVzKG51bWJlck9mRnJhbWVzKTsKKwogICAgIC8vIExldCB0
aGUgY29udGV4dCB0YWtlIGNhcmUgb2YgYW55IGJ1c2luZXNzIGF0IHRoZSBlbmQgb2YgZWFjaCBy
ZW5kZXIgcXVhbnR1bS4KICAgICBjb250ZXh0KCktPmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNl
ck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUu
Y3BwCmluZGV4IDhkNzRhNjdhODBhNzI3NjdkNzhhMDZlZGQ4NmZhNzI3YjYzZGQ3ZWYuLmNlMDQ3
NTVjZDliNDhlMTliMTNjYmYyNjcwMTg3MDc1ZGUzNzRhM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5h
bHlzZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6
IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcg
QXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlv
Tm9kZU91dHB1dCh0aGlzLCAyKSkpOwpAQCAtNjksMTUgKzY5LDYgQEAgdm9pZCBSZWFsdGltZUFu
YWx5c2VyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgICAgICBvdXRw
dXRCdXMtPmNvcHlGcm9tKCppbnB1dEJ1cyk7CiB9CiAKLS8vIFdlIG92ZXJyaWRlIHB1bGxJbnB1
dHMoKSBhcyBhbiBvcHRpbWl6YXRpb24gYWxsb3dpbmcgdGhpcyBub2RlIHRvIHRha2UgYWR2YW50
YWdlIG9mIGluLXBsYWNlIHByb2Nlc3NpbmcsCi0vLyB3aGVyZSB0aGUgaW5wdXQgaXMgc2ltcGx5
IHBhc3NlZCB0aHJvdWdoIHVucHJvY2Vzc2VkIHRvIHRoZSBvdXRwdXQuCi0vLyBOb3RlOiB0aGlz
IG9ubHkgYXBwbGllcyBpZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBjaGFubmVsIGNvdW50cyBtYXRj
aC4KLXZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKLXsKLSAgICAvLyBSZW5kZXIgaW5wdXQgc3RyZWFtIC0gdHJ5IHRvIHJlbmRlciBk
aXJlY3RseSBpbnRvIG91dHB1dCBidXMgZm9yIHBhc3MtdGhyb3VnaCBwcm9jZXNzaW5nIHdoZXJl
IHByb2Nlc3MoKSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuLi4KLSAgICBpbnB1dCgwKS0+
cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFtZXNUb1Byb2Nlc3MpOwotfQotCiB2b2lkIFJlYWx0
aW1lQW5hbHlzZXJOb2RlOjpyZXNldCgpCiB7CiAgICAgbV9hbmFseXNlci5yZXNldCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKaW5kZXggYzM3
YzZjMWI1Y2EzYmYwYjY1OGU5MDIyN2RjYzM5YTc4ODA3ZmZjMy4uMDU2YzcyNjdjMDVlNmU2ZTNh
MTRlMTI1MGU1YTUwODc1YzFjNTZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICNpZm5kZWYgUmVhbHRp
bWVBbmFseXNlck5vZGVfaAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCiAKLSNpbmNs
dWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oIgog
I2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlYWx0aW1lQW5hbHlzZXJOb2RlIDogcHVi
bGljIEF1ZGlvTm9kZSB7CitjbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IHB1YmxpYyBBdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVh
bHRpbWVBbmFseXNlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUpCiAgICAgewpAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
QXVkaW9Ob2RlCiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cyk7Ci0gICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7
CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CiAKICAgICAvLyBKYXZhc2NyaXB0IGJpbmRpbmdz
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMDIxNTVmOWIwNjI1MjJkODk4N2ZiYjNiNDM2Yjc2NjdkOWJjMmM2OC4uZWQ5YzJi
OTlhN2U4MjY4MWY5ZTRlOGI0ZmFmOTAyMjk3YTkyNmU0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTAyLTA1ICBSYXltb25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAg
ICAgICBNb2RpZnkgUmVhbHRpbWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9leHRyYS1w
dWxsLW5vZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9leHRyYS1w
dWxsLW5vZGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMDUgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZWJhc2VsaW5lIHhzcy1pbmFjdGl2ZS1jbG9zdXJlLmh0
bWwuICBUaGlzIHRlc3QgImZhaWxzIiBiZWNhdXNlIG9mIGEKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2V4dHJhLXB1bGwtbm9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9leHRyYS1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjYjAzMDY1
NjNkOGNkYmUzMTlhMTU1ODE2MzZlNDE4ZWI4Y2QxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9leHRyYS1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTEgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB3aGV0aGVyIHRoZSBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZSBiYXNlZCBub2RlcyB3b3JraW5nIHdlbGwuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworUEFTUyB0ZXN0MS4KK1BBU1MgdGVzdDIuCitQQVNTIHRlc3QzLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2V4dHJhLXB1bGwtbm9kZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vZXh0cmEtcHVsbC1ub2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI1NjAzNDM3MTgyNWY5NTZkNTQ2
OTIwNWNlNzZjYjI5MjI0MzU1YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2V4dHJhLXB1bGwtbm9kZS5odG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8IURPQ1RZUEUgaHRt
bD4KKworPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgd2hldGhlciB0aGUgQXVkaW9CYXNpY0lu
c3BlY3Rvck5vZGUgYmFzZWQgbm9kZXMgd29ya2luZyB3ZWxsLiIpOworCit2YXIgc2FtcGxlUmF0
ZSA9IDQ0MTAwLjA7Cit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDAuMTsKK3ZhciBmZnRTaXpl
ID0gMzI7CisKK3ZhciBjb250ZXh0OwordmFyIHRvbmVCdWZmZXI7Cit2YXIgYnVmZmVyU291cmNl
OwordmFyIGFuYWx5c2VyOworCitmdW5jdGlvbiBjcmVhdGVEYXRhQnVmZmVyKGNvbnRleHQsIGxl
bmd0aEluU2Vjb25kcykgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVm
ZmVyKDEsIGxlbmd0aEluU2Vjb25kcyAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOworCisgICAg
dmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGEgPSBhdWRpb0J1ZmZlci5n
ZXRDaGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIGRhdGFbaV0gPSAxLjA7CisgICAgfQorCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwor
fQorCitmdW5jdGlvbiBjb25zdHJ1Y3RDb21tb25HcmFwaCgpIHsKKyAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0
KDEsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKyAgICB0
b25lQnVmZmVyID0gY3JlYXRlRGF0YUJ1ZmZlcihjb250ZXh0LCByZW5kZXJMZW5ndGhTZWNvbmRz
KTsKKworICAgIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7Cisg
ICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IHRvbmVCdWZmZXI7CisKKyAgICBhbmFseXNlciA9IGNv
bnRleHQuY3JlYXRlQW5hbHlzZXIoKTsKKyAgICBhbmFseXNlci5mZnRTaXplID0gZmZ0U2l6ZTsK
KworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGFuYWx5c2VyKTsKK30KKworZnVuY3Rpb24gdGVz
dDFGaW5pc2hlZCgpIHsKKyAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7Cisg
ICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGFycik7CisKKyAgICBpZiAoYXJyWzBd
ID49IDI1NSkKKyAgICAgICAgdGVzdFBhc3NlZCgidGVzdDEuIik7CisgICAgZWxzZQorICAgICAg
ICB0ZXN0RmFpbGVkKCJ0ZXN0MS4iKTsKKworICAgIHRlc3QyKCk7Cit9CisKKy8vIFRvIHZlcmlm
eSB0aGUgcmVhbHRpbWVBbmFseXNlciBjYW4gcHVsbCBkYXRhIHdoZW4gdGhlcmUgaXMgdXBzdHJl
YW0gbm9kZSBjb25uZWN0IHRvIGl0CisvLyBhdCB0aGUgc2FtZSB0aW1lIGl0IGRvbid0IGNvbm5l
Y3QgdG8gYSBkb3duc3RyZWFtIG5vZGUuCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBjb25zdHJ1
Y3RDb21tb25HcmFwaCgpOworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKworICAgIGNv
bnRleHQub25jb21wbGV0ZSA9IHRlc3QxRmluaXNoZWQ7CisgICAgY29udGV4dC5zdGFydFJlbmRl
cmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0MkZpbmlzaGVkKCkgeworICAgIHZhciBhcnIgPSBu
ZXcgVWludDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5nZXRCeXRlVGltZURvbWFpbkRh
dGEoYXJyKTsKKworICAgIGlmIChhcnJbMF0gPj0gMjU1KQorICAgICAgICB0ZXN0UGFzc2VkKCJ0
ZXN0Mi4iKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoInRlc3QyLiIpOworCisgICAg
dGVzdDMoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIGNhbiBwcm9j
ZXNzIG5vcm1hbGx5IHdoZW4gdGhlcmUgaXMgdXBzdHJlYW0gbm9kZSBjb25uZWN0IHRvIGl0Cisv
LyBhdCB0aGUgc2FtZSB0aW1lIGl0IGFsc28gY29ubmVjdCB0byBhIGRvd25zdHJlYW0gbm9kZSB3
aGljaCB1bHRpbWF0ZWx5IGNvbm5lY3QgdG8gYXVkaW8gZGVzdGluYXRpb24KK2Z1bmN0aW9uIHRl
c3QyKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBhbmFseXNlci5jb25u
ZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsK
KworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QyRmluaXNoZWQ7CisgICAgY29udGV4dC5z
dGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0M0ZpbmlzaGVkKCkgeworICAgIHZh
ciBhcnIgPSBuZXcgVWludDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5nZXRCeXRlVGlt
ZURvbWFpbkRhdGEoYXJyKTsKKworICAgIC8vIElmIHJlYWx0aW1lQW5hbHlzZXIgaGFkbid0IHB1
bGxlZCBhbnkgZGF0YSwgdGhlIGRhdGEgaGVyZSB3aWxsIGJlIDEyOC4KKyAgICBpZiAoYXJyWzBd
ID09IDEyOCkKKyAgICAgICAgdGVzdFBhc3NlZCgidGVzdDMuIik7CisgICAgZWxzZQorICAgICAg
ICB0ZXN0RmFpbGVkKCJ0ZXN0My4iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBU
byB2ZXJpZnkgdGhlIHJlYWx0aW1lQW5hbHlzZXIgd2lsbCBzdG9wIHB1bGwgaWYgaXQgaXMgY29u
bmVjdCB0byBhIGRvd25zdHJlYW0gbm9kZQorLy8gd2hpY2ggZG8gbm90IHVsdGltYXRseSBjb25u
ZWN0IHRvIGFueSBhdWRpbyBkZXN0aW5hdGlvbgorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBj
b25zdHJ1Y3RDb21tb25HcmFwaCgpOworCisgICAgdmFyIGdhaW4gPSBjb250ZXh0LmNyZWF0ZUdh
aW5Ob2RlKCk7CisgICAgYW5hbHlzZXIuY29ubmVjdChnYWluKTsKKworICAgIGJ1ZmZlclNvdXJj
ZS5ub3RlT24oMCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0ZXN0M0ZpbmlzaGVkOwor
ICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJBdWRpb0VuYWJsZWQi
LCAiMSIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICB0ZXN0MSgpOworfQorCisKK3J1blRl
c3QoKTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137287</attachid>
            <date>2012-04-15 23:59:33 -0700</date>
            <delta_ts>2012-04-23 22:52:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120416150525.patch</filename>
            <type>text/plain</type>
            <size>31754</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY1ZDExYjNkNDgwYmQ1
ZDEwOWNhMTQ4MjM2YWU0YTk3Yzg1MTM2ZS4uNjdlMzE5Zjc0MjEyNjJiZTA2MDAzZmRhOWJmOGY1
MmE5YmI5YTRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA0LTE2ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vZXh0cmEtcHVsbC1ub2RlLmh0bWwK
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6QXVkaW9CYXNp
Y0luc3BlY3Rvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGU6OnB1bGxJbnB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGU6OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6
OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6
OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjpBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpo
YW5kbGVQcmVSZW5kZXJUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Omhh
bmRsZVBvc3RSZW5kZXJUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Om1h
cmtGb3JEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6YWRkRXh0cmFQdWxsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OnJlbW92ZUV4dHJhUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0Ojp1cGRhdGVFeHRyYVB1bGxOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OnByb2Nlc3NFeHRyYVB1bGxOb2Rlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoQXVkaW9Ob2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9O
b2RlT3V0cHV0Ojppc0Nvbm5lY3RlZCk6CisgICAgICAgIChBdWRpb05vZGVPdXRwdXQpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5hbHlzZXJOb2RlKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmg6CisgICAg
ICAgIChSZWFsdGltZUFuYWx5c2VyTm9kZSk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0wNC0xNCAg
RW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHBpeGVsU25h
cHBpbmcgZm9yIENhbGVuZGFyUGlja2VyLCBNZWRpYUNvbnRyb2wgYW5kIFNjcm9sbGJhclBhcnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGFiMGJkZDBiODYyMzcxY2JkMTU4NDY3
YTFhOWJlYmM4MTViYjUzZjcuLjJhYjE5MzhlMWFmZjJkMWM0ZTBmOGM2MWUzMDI1NDc5NzllNTk0
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTQ0Myw2ICs1NDQzLDggQEAg
aWYgRU5BQkxFX1dFQl9BVURJTwogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1ZjIwNjNkMTdiMjEzMDE5ZWQ0
NWQyNzhkMGJhNDYyNDY5N2VhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtMCwwICsxLDEx
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oIgorCisjaW5jbHVk
ZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRl
ICJBdWRpb05vZGVPdXRwdXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGUoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpCisgICAgLCBtX25lZWRFeHRyYVB1bGwoZmFsc2UpCit7CisgICAgYWRkSW5wdXQoYWRvcHRQ
dHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5l
dyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKK30KKworLy8gV2Ugb3ZlcnJpZGUgcHVsbElu
cHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZh
bnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywKKy8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1w
bHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQgdG8gdGhlIG91dHB1dC4KKy8vIE5vdGU6IHRo
aXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1h
dGNoLgordm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQoreworICAgIC8vIFJlbmRlciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVu
ZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcg
d2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4uLgorICAgIGlucHV0
KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQg
QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmNvbm5lY3QoQXVkaW9Ob2RlKiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQXVkaW9Ob2RlOjpjb25u
ZWN0KGRlc3RpbmF0aW9uLCBvdXRwdXRJbmRleCwgaW5wdXRJbmRleCwgZWMpOworCisgICAgQXVk
aW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworCisgICAgdXBkYXRlUHVs
bFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpkaXNjb25uZWN0
KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEF1ZGlvTm9kZTo6ZGlzY29ubmVjdChvdXRwdXRJbmRleCwg
ZWMpOworCisgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwor
CisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQp
Cit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJUKGlucHV0ID09IHRoaXMtPmlucHV0KDApKTsK
KyAgICBpZiAoaW5wdXQgIT0gdGhpcy0+aW5wdXQoMCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBpbnB1dC0+bnVtYmVyT2ZDaGFubmVscygpOwor
CisgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxz
KCkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbm5lbCBjb3VudCB0
byBhbnkgbm9kZXMgY29ubmVjdGVkIGZ1cnRoZXIgZG93bnN0cmVhbSBpbiB0aGUgZ3JhcGguCisg
ICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsK
KyAgICB9CisKKyAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlu
cHV0KTsKKworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9pZCBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG91dHB1dCgwKS0+aXNDb25uZWN0ZWQoKSkgewor
ICAgICAgICAvLyBXaGVuIGEgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29ubmVjdGVkIHRv
IGEgZG93bnN0cmVhbSBub2RlLCBpdCB3aWxsIGdldCBwdWxsZWQgYnkgdGhlCisgICAgICAgIC8v
IGRvd25zdHJlYW0gbm9kZSwgdGh1cyByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGV4dHJh
IHB1bGwgbGlzdC4KKyAgICAgICAgaWYgKG1fbmVlZEV4dHJhUHVsbCkgeworICAgICAgICAgICAg
Y29udGV4dCgpLT5yZW1vdmVFeHRyYVB1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgbV9uZWVk
RXh0cmFQdWxsID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBX
aGVuIGEgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgbm90IGNvbm5lY3RlZCB0byBhbnkgZG93
bnN0cmVhbSBub2RlIHdoaWxlIHN0aWxsIGJlIGNvbm5lY3RlZCBieQorICAgICAgICAvLyBzb21l
IHVwc3RyZWFtIG5vZGVzLCBhZGQgaXQgdG8gdGhlIGNvbnRleHQncyBleHRyYSBwdWxsIGxpc3Qu
CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDb25uZWN0aW9ucyA9IGlucHV0KDApLT5u
dW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCk7CisgICAgICAgIGlmIChudW1iZXJPZklucHV0
Q29ubmVjdGlvbnMgJiYgIW1fbmVlZEV4dHJhUHVsbCkgeworICAgICAgICAgICAgY29udGV4dCgp
LT5hZGRFeHRyYVB1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgbV9uZWVkRXh0cmFQdWxsID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
MmQ5MDJjNjdlZDA0ZjhlMzFiNzZhNzU5ZmZlNzBiZjg5NGVlZDQwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9k
ZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlX2gKKyNkZWZpbmUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGVfaAorCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXVkaW9CYXNpY0lu
c3BlY3Rvck5vZGUgaXMgYW4gQXVkaW9Ob2RlIHdpdGggb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0
IHdoZXJlIHRoZSBvdXRwdXQgbWlnaHQgbm90IG5lY2VzYXJ5IGNvbm5lY3QgdG8gYW5vdGhlciBu
b2RlJ3MgaW5wdXQuCisvLyBJZiB0aGUgb3V0cHV0IGlzIG5vdCBjb25uZWN0IHRvIGFueSBpbnB1
dCwgdGhlbiB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUncyBwcm9jZXNzSWZOZWNlc3Nhcnkg
ZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgQXVkaW9Db250ZXh0IGJlZm9yZQorLy8gdGhlIGVu
ZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIHRvIHB1bGwgZGF0YSBmcm9tIGl0cyBpbnB1dChzKSBz
byB0aGF0IGl0IGNhbiBpbnNwZWN0IHRoZSBhdWRpbyBzdHJlYW0uCitjbGFzcyBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworCisgICAg
Ly8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1Rv
UHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQg
b3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRp
b05vZGVJbnB1dCopOworCitwcml2YXRlOgorICAgIGJvb2wgbV9uZWVkRXh0cmFQdWxsOworICAg
IHZvaWQgdXBkYXRlUHVsbFN0YXR1cygpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IGEyYjYzYmZlZDAyN2Qy
OTQwZjI1MTE4ZWQ0MzdjOTAyMGU2YmY0MDIuLmNkYjNmYmEzMDZiODc2M2Q2NzZmZGRlNmZiYzY0
MjM3ZmM4ZTM1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5jcHAKQEAgLTEzNiw2ICsxMzYsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29u
dGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAg
ICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkKICAgICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxz
ZSkKKyAgICAsIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmcoZmFsc2UpCiAgICAgLCBtX2Nv
bm5lY3Rpb25Db3VudCgwKQogICAgICwgbV9hdWRpb1RocmVhZCgwKQogICAgICwgbV9ncmFwaE93
bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCkBAIC0xNjAsNiArMTYxLDcgQEAg
QXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzLCBzaXplX3QKICAgICAsIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkKGZh
bHNlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZGVzdGluYXRpb25Ob2Rl
KDApCisgICAgLCBtX2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nKGZhbHNlKQogICAgICwgbV9j
b25uZWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXVkaW9UaHJlYWQoMCkKICAgICAsIG1fZ3JhcGhP
d25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVyKQpAQCAtNjU0LDcgKzY1Niw5IEBA
IHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVQcmVSZW5kZXJUYXNrcygpCiAgICAgICAgIC8vIEZp
eHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVP
dXRwdXRzLgogICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOwogICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKLSAgICAgICAgCisKKyAgICAgICAgdXBkYXRl
RXh0cmFQdWxsTm9kZXMoKTsKKwogICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQogICAgICAg
ICAgICAgdW5sb2NrKCk7CiAgICAgfQpAQCAtNjgyLDcgKzY4Niw5IEBAIHZvaWQgQXVkaW9Db250
ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQogICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUg
b2YgYW55IGRpcnR5IEF1ZGlvTm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KICAgICAg
ICAgaGFuZGxlRGlydHlBdWRpb05vZGVJbnB1dHMoKTsKICAgICAgICAgaGFuZGxlRGlydHlBdWRp
b05vZGVPdXRwdXRzKCk7Ci0gICAgICAgIAorCisgICAgICAgIHVwZGF0ZUV4dHJhUHVsbE5vZGVz
KCk7CisKICAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKICAgICAgICAgICAgIHVubG9jaygp
OwogICAgIH0KQEAgLTcwNCw2ICs3MTAsMTIgQEAgdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtGb3JE
ZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsK
ICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKG5vZGUpOworCisgICAgLy8gVGhpcyBpcyBwcm9i
YWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5vZGUgZnJvbSBleHRyYSBw
dWxsIGxpc3QsCisgICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBo
b2xkIHRoZSBncmFwaCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzCisgICAg
Ly8gZ2V0IGNoYW5jZSB0byBzY2hlZHVsZSB0aGUgZGVsZXRpb24gd29yaywgdGhlIHVwZGF0ZUV4
dHJhUHVsbE5vZGVzKCkgYWxzbyBnZXQgY2hhbmNlIHRvIG1vZGlmeQorICAgIC8vIHRoZSByZW5k
ZXJpbmdFeHRyYVB1bGxOb2Rlcy4KKyAgICByZW1vdmVFeHRyYVB1bGxOb2RlKG5vZGUpOwogfQog
CiB2b2lkIEF1ZGlvQ29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRpb24oKQpAQCAtNzk1LDYgKzgw
Nyw1MiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkK
ICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCit2b2lkIEF1ZGlvQ29u
dGV4dDo6YWRkRXh0cmFQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlz
R3JhcGhPd25lcigpKTsKKworICAgIGlmICghbV9leHRyYVB1bGxOb2Rlcy5jb250YWlucyhub2Rl
KSkgeworICAgICAgICBtX2V4dHJhUHVsbE5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgbV9leHRy
YVB1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIEF1ZGlvQ29u
dGV4dDo6cmVtb3ZlRXh0cmFQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsKKworICAgIGlmIChtX2V4dHJhUHVsbE5vZGVzLmNvbnRhaW5zKG5v
ZGUpKSB7CisgICAgICAgIG1fZXh0cmFQdWxsTm9kZXMucmVtb3ZlKG5vZGUpOworICAgICAgICBt
X2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVk
aW9Db250ZXh0Ojp1cGRhdGVFeHRyYVB1bGxOb2RlcygpCit7CisgICAgQVNTRVJUKGlzR3JhcGhP
d25lcigpKTsKKworICAgIGlmIChtX2V4dHJhUHVsbE5vZGVzTmVlZFVwZGF0aW5nKSB7CisgICAg
ICAgIC8vIENvcHkgZnJvbSBtX2V4dHJhUHVsbE5vZGVzIHRvIG1fcmVuZGVyaW5nRXh0cmFQdWxs
Tm9kZXMuCisgICAgICAgIG1fcmVuZGVyaW5nRXh0cmFQdWxsTm9kZXMucmVzaXplKG1fZXh0cmFQ
dWxsTm9kZXMuc2l6ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBqID0gMDsKKyAgICAgICAgZm9y
IChIYXNoU2V0PEF1ZGlvTm9kZSo+OjppdGVyYXRvciBpID0gbV9leHRyYVB1bGxOb2Rlcy5iZWdp
bigpOyBpICE9IG1fZXh0cmFQdWxsTm9kZXMuZW5kKCk7ICsraSwgKytqKSB7CisgICAgICAgICAg
ICBBdWRpb05vZGUqIG91dHB1dCA9ICppOworICAgICAgICAgICAgbV9yZW5kZXJpbmdFeHRyYVB1
bGxOb2Rlc1tqXSA9IG91dHB1dDsKKyAgICAgICAgfQorCisgICAgICAgIG1fZXh0cmFQdWxsTm9k
ZXNOZWVkVXBkYXRpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojpw
cm9jZXNzRXh0cmFQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBU1NF
UlQoaXNBdWRpb1RocmVhZCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Jl
bmRlcmluZ0V4dHJhUHVsbE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRlcmluZ0V4
dHJhUHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKK30K
KwogY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25z
dAogewogICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Db250ZXh0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXgg
NTI1NGVmNjRmZGY1NTIwZjAxMDZiMTk4OWFmMGJkZGJjOThkNjg3Ni4uODM4NTc1ZDU4OTRkYTBl
YjQ3MTg0YzcwYzY0ODM2NWFjOTZjOTQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC0xNDgsNyArMTQ4LDEzIEBAIHB1YmxpYzoKICAg
ICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQg
b2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KICAgICB2b2lkIG1hcmtGb3JEZWxldGlv
bihBdWRpb05vZGUqKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0gICAgCisKKyAg
ICB2b2lkIGFkZEV4dHJhUHVsbE5vZGUoQXVkaW9Ob2RlKik7CisgICAgdm9pZCByZW1vdmVFeHRy
YVB1bGxOb2RlKEF1ZGlvTm9kZSopOworCisgICAgLy8gQ2FsbGVkIHJpZ2h0IGJlZm9yZSBoYW5k
bGVQb3N0UmVuZGVyVGFza3MoKTsKKyAgICB2b2lkIHByb2Nlc3NFeHRyYVB1bGxOb2RlcyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKTsKKwogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIg
b2YgY29ubmVjdGlvbnMgbWFkZS4KICAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgp
CiAgICAgewpAQCAtMjgxLDYgKzI4NywxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlRGly
dHlBdWRpb05vZGVJbnB1dHMoKTsKICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0
cygpOwogCisgICAgSGFzaFNldDxBdWRpb05vZGUqPiBtX2V4dHJhUHVsbE5vZGVzOworICAgIFZl
Y3RvcjxBdWRpb05vZGUqPiBtX3JlbmRlcmluZ0V4dHJhUHVsbE5vZGVzOworICAgIC8vIG1fZXh0
cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmcga2VlcHMgdHJhY2sgaWYgbV9leHRyYVB1bGxOb2RlcyBp
cyBtb2RpZmllZC4KKyAgICBib29sIG1fZXh0cmFQdWxsTm9kZXNOZWVkVXBkYXRpbmc7CisgICAg
dm9pZCB1cGRhdGVFeHRyYVB1bGxOb2RlcygpOworCiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9u
Q291bnQ7CiAKICAgICAvLyBHcmFwaCBsb2NraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA2ZTUy
N2JiZWUzNzE0MGQwNzNhMzEwMTljZWI0MzEzZjZhNGMzMzI0Li42YTY0ZDBlM2QyNDViNWQxNTRl
NmJkYzhmMDk0Y2QwMWE2ZWI2NmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtODAsNiArODAsOSBA
QCB2b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3Rp
bmF0aW9uQnVzLCBzaXplX3QgbnVtYmVyTwogICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+Y29weUZy
b20oKnJlbmRlcmVkQnVzKTsKICAgICB9CiAKKyAgICAvLyBQcm9jZXNzIGV4dHJhIG5vZGVzIHdo
aWNoIG5lZWQgdG8gcHVsbCBkYXRhIGJ5IHRoZW1zZWx2ZXMuCisgICAgY29udGV4dCgpLT5wcm9j
ZXNzRXh0cmFQdWxsTm9kZXMobnVtYmVyT2ZGcmFtZXMpOworCiAgICAgLy8gTGV0IHRoZSBjb250
ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBx
dWFudHVtLgogICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRhc2tzKCk7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAppbmRleCBjMjYxNGNi
M2IxMmQ2ZDE1NTBmZGY3NGY4NDg4ZTQxZjQ1ZjljZGEyLi42NGM1ZjI2MmU0MjIwNmQxODNiN2E5
MjQ4YmVmMjEyYjAwYWQ0YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Ob2RlLmgKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgQXVkaW9Ob2RlT3V0
cHV0KiBvdXRwdXQodW5zaWduZWQpOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQg
YnkgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IG1ldGhvZHMuCi0gICAgdm9pZCBjb25uZWN0KEF1
ZGlvTm9kZSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWdu
ZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2b2lkIGNvbm5lY3QoQXVkaW9QYXJhbSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QodW5zaWduZWQgb3V0cHV0
SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAppbmRleCA4MmJmMjlmNWE0NzU0OGY0
NDExNGMwMDc3NWMzMGRmOWUyYTMyNzM4Li40ZmQxYzllNWU5ZGE3OTM3MzBhM2YxNDhhZjI1Y2M0
M2MyMmE0NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvTm9kZU91dHB1dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Ob2RlT3V0cHV0LmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KICAg
ICBib29sIGlzQ2hhbm5lbENvdW50S25vd24oKSBjb25zdCB7IHJldHVybiBudW1iZXJPZkNoYW5u
ZWxzKCkgPiAwOyB9CiAKKyAgICBib29sIGlzQ29ubmVjdGVkKCkgeyByZXR1cm4gZmFuT3V0Q291
bnQoKSA+IDA7IH0KKwogICAgIC8vIERpc2FibGUvRW5hYmxlIGhhcHBlbnMgd2hlbiB0aGVyZSBh
cmUgc3RpbGwgSmF2YVNjcmlwdCByZWZlcmVuY2VzIHRvIGEgbm9kZSwgYnV0IGl0IGhhcyBvdGhl
cndpc2UgImZpbmlzaGVkIiBpdHMgd29yay4KICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiBhIG5v
dGUgaGFzIGZpbmlzaGVkIHBsYXlpbmcuICBJdCBpcyBrZXB0IGFyb3VuZCwgYmVjYXVzZSBpdCBt
YXkgYmUgcGxheWVkIGFnYWluIGF0IGEgbGF0ZXIgdGltZS4KICAgICAvLyBUaGV5IG11c3QgYmUg
Y2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcAppbmRl
eCBkMDM5ZjNjNmFiMjZjYTRmNWM5YTY0NzkzNWU4NzY5ZjlmYTA0ZTA4Li5lZTc0OTYwNDM1MmE3
ZGJmZDg5ZGRlMWJjMmM2YTYyNjI3NjRlMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcApAQCAtMzUsNyAr
MzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVh
bHRpbWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogewogICAgIGFkZElucHV0KGFkb3B0
UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwogICAgIGFkZE91dHB1dChhZG9wdFB0cihu
ZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CkBAIC03MCwxNSArNzAsNiBAQCB2b2lkIFJl
YWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAg
ICAgIG91dHB1dEJ1cy0+Y29weUZyb20oKmlucHV0QnVzKTsKIH0KIAotLy8gV2Ugb3ZlcnJpZGUg
cHVsbElucHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxvd2luZyB0aGlzIG5vZGUgdG8gdGFr
ZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywKLS8vIHdoZXJlIHRoZSBpbnB1dCBp
cyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQgdG8gdGhlIG91dHB1dC4KLS8vIE5v
dGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291
bnRzIG1hdGNoLgotdm9pZCBSZWFsdGltZUFuYWx5c2VyTm9kZTo6cHVsbElucHV0cyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRlciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8g
cmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3IgcGFzcy10aHJvdWdoIHByb2Nlc3Np
bmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4uLgotICAgIGlu
cHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KIHZv
aWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnJlc2V0KCkKIHsKICAgICBtX2FuYWx5c2VyLnJlc2V0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXJOb2RlLmgKaW5kZXggY2UzNjRhOTk5NWVlNmFjNzZjZDNlNDY2ZjFlMWNmY2I0MjE3
ZjBhOS4uMDgxOWMwMzg2N2M0YzIyODZhZDgzOGMxNzdjNjVhZDUyZGVmOGNjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gK
ICNkZWZpbmUgUmVhbHRpbWVBbmFseXNlck5vZGVfaAogCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgi
CisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKICNpbmNsdWRlICJSZWFsdGlt
ZUFuYWx5c2VyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgewor
Y2xhc3MgUmVhbHRpbWVBbmFseXNlck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2Rl
PiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsK
QEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIAogICAgIC8vIEF1ZGlvTm9kZQogICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwg
dm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZpcnR1YWwgdm9p
ZCByZXNldCgpOwogCiAgICAgLy8gSmF2YXNjcmlwdCBiaW5kaW5ncwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDFhMjdkNjNiNjlkOTU4NjNkMTc1ZGJhNDhiYzM1NTQxMjFmOGI1ZDcuLjM1YTNjNDNjNzdh
MTk3MmZhN2U1Nzc0Y2E5ZjYyZTJkMDg2MzVlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE1NTEs
NiArMTU1MSw4IEBACiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b25SZXN1bHRMaXN0LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVj
b2duaXRpb25SZXN1bHRMaXN0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZDFhOTc0YWY2Y2I5MTIxNTY2YmJkYjcy
MDI4YjU5NjdjZDg4MTYxLi40OWU1NmQwYTkwMTdlZGVjZDM4MzQ5NGY2ZDI4YTkyMzViYWU1YTlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC02MTUxLDYgKzYxNTEsNyBAQAogCQlGRDJEQkYxMzEyQjA0OEEzMDBFRDk4QzYgLyog
QXVkaW9Ub29sYm94LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMkRCRjBGMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1Rvb2xib3gu
ZnJhbWV3b3JrICovOyB9OwogCQlGRDJEQkYxNDEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Vbml0
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMkRCRjEwMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrICovOyB9
OwogCQlGRDJEQkYxNTEyQjA0OEEzMDBFRDk4QzYgLyogQ29yZUF1ZGlvLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMkRCRjExMTJC
MDQ4QTMwMEVEOThDNiAvKiBDb3JlQXVkaW8uZnJhbWV3b3JrICovOyB9OworCQlGRDMxNUZGNjEy
QjAyNjc2MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTVGQUMxMkIwMjY3NTAwQzFB
MzU5IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCAqLzsgfTsKIAkJRkQzMTVGRjYxMkIw
MjY3NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE1RkFDMTJCMDI2NzUwMEMxQTM1
OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAgKi87IH07CiAJCUZEMzE1RkY3MTJCMDI2
NzYwMEMxQTM1OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTVGQUQxMkIwMjY3NTAwQzFBMzU5IC8q
IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggKi87IH07CiAJCUZEMzE1RkY4MTJCMDI2NzYwMEMx
QTM1OSAvKiBBdWRpb0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDMxNUZBRTEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CdWZmZXIuY3Bw
ICovOyB9OwpAQCAtMTMzMzcsNiArMTMzMzgsOCBAQAogCQlGRDJEQkYwRjEyQjA0OEEzMDBFRDk4
QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXVkaW9Ub29s
Ym94LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVG9v
bGJveC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUZEMkRCRjEw
MTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUg
PSBBdWRpb1VuaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
QXVkaW9Vbml0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJRkQy
REJGMTExMkIwNDhBMzAwRUQ5OEM2IC8qIENvcmVBdWRpby5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IENvcmVBdWRpby5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9Db3JlQXVkaW8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9Owor
CQlGRDMxNUZBQzEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDMxNUZBRDEyQjAyNjc1
MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkQzMTVGQUMxMkIwMjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQz
MTVGQUQxMkIwMjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMzE1RkFFMTJCMDI2NzUwMEMxQTM1OSAvKiBB
dWRpb0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRp
b0J1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTMwNSw2ICsyMTMw
OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlGRDU2ODZDNzEzQUMxODAyMDBCNjlDNjggLyog
QXN5bmNBdWRpb0RlY29kZXIuY3BwICovLAogCQkJCUZENTY4NkM4MTNBQzE4MDIwMEI2OUM2OCAv
KiBBc3luY0F1ZGlvRGVjb2Rlci5oICovLAorCQkJCUZEMzE1RkFDMTJCMDI2NzUwMEMxQTM1OSAv
KiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAgKi8sCisJCQkJRkQzMTVGQUQxMkIwMjY3NTAw
QzFBMzU5IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggKi8sCiAJCQkJRkQzMTVGQUMxMkIw
MjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCAqLywKIAkJCQlGRDMx
NUZBRDEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCAqLywKIAkJ
CQlGRDMxNUZBRTEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CdWZmZXIuY3BwICovLApAQCAtMjE2
MzksNiArMjE2NDQsNyBAQAogCQkJCUE4QzRBODBEMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEM0QTgwQjA5RDU2MzI3MDAwM0FDOEQgLyogQXR0cmlidXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA3QTEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9B
cnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQzMTVGRjcxMkIwMjY3NjAwQzFBMzU5IC8qIEF1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNUZGNzEyQjAy
Njc2MDBDMUEzNTkgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE1RkY5MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0J1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQ1Njg2Q0MxM0FDMTgxNDAwQjY5QzY4IC8qIEF1ZGlvQnVmZmVyQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLApAQCAtMjUxNjAsNiArMjUxNjYsNyBAQAogCQkJCTg5RDA4RDlGMTIy
Mjg0NTEwMDEyNDFERiAvKiBBc3luY0ZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDNEE4MEUwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDNEE4MEMwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRDMxNUZGNjEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTVGRjYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE1RkY4MTJCMDI2
NzYwMEMxQTM1OSAvKiBBdWRpb0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNUZG
QjEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDYxMWUwNzRmOTczZDYzYWVlOTg3MjI4ZjVhZTFiMjgyY2Q2ZWFlMWYuLmQ3
MmZiNTY0NzllOTA2MTVmNjE3ZjE5MTdjMjExYzgxZWRkMTEzNDMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxMi0wNC0xNiAgUmF5bW9uZCBMaXUgIDxyYXltb25kLmxpdUBpbnRlbC5jb20+CisK
KyAgICAgICAgTW9kaWZ5IFJlYWx0aW1lQW5hbHlzZXJOb2RlIHB1bGwgbWVjaGFuaXNtCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzUxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vZXh0
cmEtcHVsbC1ub2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZXh0
cmEtcHVsbC1ub2RlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA0LTE1ICBSYXBoYWVsIEt1Ym8gZGEg
Q29zdGEgIDxyYWt1Y29Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBHYXJkZW5pbmcuIFNr
aXAgZmFzdC9yZWdpb25zIHRlc3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
ZXh0cmEtcHVsbC1ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2V4dHJh
LXB1bGwtbm9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFmMzgxNThiODRmMWRlOGJhNGM4
Y2NlMGU2OTkxYmE2Nzc0OGI4NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2V4dHJhLXB1bGwtbm9kZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0
ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGJhc2VkIG5vZGVz
IHdvcmtpbmcgY29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
UmVhbHRpbWVBbmFseXNlciBnb3QgcHVsbGVkIHdoZW4gY29ubmVjdGVkIHRvIHVwc3RyZWFtIG5v
ZGUgYnV0IG5vdCBkb3duc3RyZWFtIG5vZGUuCitQQVNTIFJlYWx0aW1lQW5hbHlzZXIgZ290IHB1
bGxlZCB3aGVuIGNvbm5lY3RlZCBieSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBu
b2RlLgorUEFTUyBSZWFsdGltZUFuYWx5c2VyIGRpZG4ndCBnZXQgcHVsbGVkIHdoZW4gaXQgc2hv
dWxkIG5vdC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9leHRyYS1wdWxsLW5vZGUuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2V4dHJhLXB1bGwtbm9kZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY1YzlmMTkxMTljYjk4NWM4NDk2YzE0MGE0MWIwMTFiNTk0ZjdkYWEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9leHRyYS1wdWxsLW5vZGUuaHRtbApAQCAtMCwwICsx
LDE0OCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhp
cyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGJhc2VkIG5v
ZGVzIHdvcmtpbmcgY29ycmVjdGx5LiIpOworCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7Cisv
LyBXZSBjYXJlZnVsbHkgYXJyYW5nZSB0aGUgcmVuZGVyTGVuZ3RoSW5GcmFtZXMgdG8gYmUgbXVs
dGkgdGltZXMgb2YgdGhlIGF1ZGlvIHByb2Nlc3NpbmcgZnJhbWUsCisvLyBzbyB0aGF0IEF1ZGlv
U291cmNlTm9kZSB3aWxsIG5vdCBmZWVkIHRhaWxpbmcgemVyb2VzIGludG8gdGhlIGNvbnRleHQg
YW5kIGZhaWwgdGhpcyB0ZXN0LgordmFyIHJlbmRlckxlbmd0aEluRnJhbWVzID0gMjU2OwordmFy
IGZmdFNpemUgPSA2NDsKKwordmFyIGNvbnRleHQ7Cit2YXIgdG9uZUJ1ZmZlcjsKK3ZhciBidWZm
ZXJTb3VyY2U7Cit2YXIgYW5hbHlzZXI7CisKK2Z1bmN0aW9uIGNyZWF0ZURhdGFCdWZmZXIoY29u
dGV4dCwgbGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZm
ZXIoMSwgbGVuZ3RoLCBzYW1wbGVSYXRlKTsKKworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVu
Z3RoOworICAgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBkYXRhW2ldID0gMS4wOwor
ICAgIH0KKworICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30KKworZnVuY3Rpb24gY29uc3RydWN0
Q29tbW9uR3JhcGgoKSB7CisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAg
ICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgxLCByZW5kZXJMZW5ndGhJbkZyYW1l
cywgc2FtcGxlUmF0ZSk7CisgICAgdG9uZUJ1ZmZlciA9IGNyZWF0ZURhdGFCdWZmZXIoY29udGV4
dCwgcmVuZGVyTGVuZ3RoSW5GcmFtZXMpOworCisgICAgYnVmZmVyU291cmNlID0gY29udGV4dC5j
cmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBidWZmZXJTb3VyY2UuYnVmZmVyID0gdG9uZUJ1ZmZl
cjsKKworICAgIGFuYWx5c2VyID0gY29udGV4dC5jcmVhdGVBbmFseXNlcigpOworICAgIGFuYWx5
c2VyLmZmdFNpemUgPSBmZnRTaXplOworCisgICAgYnVmZmVyU291cmNlLmNvbm5lY3QoYW5hbHlz
ZXIpOworfQorCitmdW5jdGlvbiB0ZXN0MUZpbmlzaGVkKCkgeworICAgIHZhciBhcnIgPSBuZXcg
VWludDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5nZXRCeXRlVGltZURvbWFpbkRhdGEo
YXJyKTsKKworICAgIGlmIChhcnJbMF0gPj0gMjU1KQorICAgICAgICB0ZXN0UGFzc2VkKCJSZWFs
dGltZUFuYWx5c2VyIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgdG8gdXBzdHJlYW0gbm9kZSBi
dXQgbm90IGRvd25zdHJlYW0gbm9kZS4iKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQo
IlJlYWx0aW1lQW5hbHlzZXIgZmFpbGVkIHRvIGdldCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgdG8g
dXBzdHJlYW0gbm9kZSBidXQgbm90IGRvd25zdHJlYW0gbm9kZS4iKTsKKworICAgIHRlc3QyKCk7
Cit9CisKKy8vIFRvIHZlcmlmeSB0aGUgcmVhbHRpbWVBbmFseXNlciBjYW4gcHVsbCBkYXRhIHdo
ZW4gdGhlcmUgaXMgdXBzdHJlYW0gbm9kZSBjb25uZWN0IHRvIGl0CisvLyBhdCB0aGUgc2FtZSB0
aW1lIGl0IGRvbid0IGNvbm5lY3QgdG8gYSBkb3duc3RyZWFtIG5vZGUuCitmdW5jdGlvbiB0ZXN0
MSgpIHsKKyAgICBjb25zdHJ1Y3RDb21tb25HcmFwaCgpOworCisgICAgYnVmZmVyU291cmNlLm5v
dGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QxRmluaXNoZWQ7CisgICAg
Y29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0MkZpbmlzaGVkKCkg
eworICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5n
ZXRCeXRlVGltZURvbWFpbkRhdGEoYXJyKTsKKworICAgIGlmIChhcnJbMF0gPj0gMjU1KQorICAg
ICAgICB0ZXN0UGFzc2VkKCJSZWFsdGltZUFuYWx5c2VyIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0
ZWQgYnkgdXBzdHJlYW0gbm9kZSBhbmQgdG8gZGVzdGluYXRpb24gbm9kZS4iKTsKKyAgICBlbHNl
CisgICAgICAgIHRlc3RGYWlsZWQoIlJlYWx0aW1lQW5hbHlzZXIgZmFpbGVkIHRvIGJlIHB1bGxl
ZCB3aGVuIGNvbm5lY3RlZCBieSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBub2Rl
LiIpOworCisgICAgdGVzdDMoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5
c2VyIGNhbiBwcm9jZXNzIG5vcm1hbGx5IHdoZW4gdGhlcmUgaXMgdXBzdHJlYW0gbm9kZSBjb25u
ZWN0IHRvIGl0CisvLyBhdCB0aGUgc2FtZSB0aW1lIGl0IGFsc28gY29ubmVjdCB0byBhIGRvd25z
dHJlYW0gbm9kZSB3aGljaCB1bHRpbWF0ZWx5IGNvbm5lY3QgdG8gYXVkaW8gZGVzdGluYXRpb24K
K2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBh
bmFseXNlci5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgYnVmZmVyU291cmNl
Lm5vdGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QyRmluaXNoZWQ7Cisg
ICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0M0ZpbmlzaGVk
KCkgeworICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShmZnRTaXplKTsKKyAgICBhbmFseXNl
ci5nZXRCeXRlVGltZURvbWFpbkRhdGEoYXJyKTsKKworICAgIC8vIElmIHJlYWx0aW1lQW5hbHlz
ZXIgaGFkbid0IHB1bGxlZCBhbnkgZGF0YSwgdGhlIGRhdGEgaGVyZSB3aWxsIGJlIDEyOC4KKyAg
ICBpZiAoYXJyWzBdID09IDEyOCkKKyAgICAgICAgdGVzdFBhc3NlZCgiUmVhbHRpbWVBbmFseXNl
ciBkaWRuJ3QgZ2V0IHB1bGxlZCB3aGVuIGl0IHNob3VsZCBub3QuIik7CisgICAgZWxzZQorICAg
ICAgICB0ZXN0RmFpbGVkKCJSZWFsdGltZUFuYWx5c2VyIGJlZW4gcHVsbGVkIHdoZW4gaXQgc2hv
dWxkIG5vdC4iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBUbyB2ZXJpZnkgdGhl
IHJlYWx0aW1lQW5hbHlzZXIgd2lsbCBzdG9wIHB1bGwgaWYgaXQgaXMgY29ubmVjdCB0byBhIGRv
d25zdHJlYW0gbm9kZQorLy8gd2hpY2ggZG8gbm90IHVsdGltYXRseSBjb25uZWN0IHRvIGFueSBh
dWRpbyBkZXN0aW5hdGlvbgorZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgY29uc3RydWN0Q29tbW9u
R3JhcGgoKTsKKworICAgIHZhciBnYWluID0gY29udGV4dC5jcmVhdGVHYWluTm9kZSgpOworICAg
IGFuYWx5c2VyLmNvbm5lY3QoZ2Fpbik7CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOwor
CisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gdGVzdDNGaW5pc2hlZDsKKyAgICBjb250ZXh0LnN0
YXJ0UmVuZGVyaW5nKCk7Cit9CisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIHRl
c3QxKCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138496</attachid>
            <date>2012-04-23 22:53:00 -0700</date>
            <delta_ts>2012-04-26 00:05:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120424135900.patch</filename>
            <type>text/plain</type>
            <size>27544</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY3NjVlMDc0Y2IyM2M3
ZDQ1ODA3OWY1NzJiYjNiYWMyOGI2MGM0MS4uODdkOWNlNzAxMDg0MGZhMzI3M2U0Y2Q1NjY1NThm
MzdmNmRlZTQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTIzICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5o
dG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6aGFuZGxlUHJlUmVuZGVyVGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0
OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0
OjptYXJrRm9yRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoQXVkaW9Db250ZXh0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRlSW5wdXQpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAgIChBdWRpb05v
ZGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb05vZGVPdXRwdXQ6OmlzQ29ubmVjdGVkKToKKyAgICAgICAgKEF1
ZGlvTm9kZU91dHB1dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVh
bHRpbWVBbmFseXNlck5vZGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVB
bmFseXNlck5vZGUuaDoKKyAgICAgICAgKFJlYWx0aW1lQW5hbHlzZXJOb2RlKToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisKIDIwMTItMDQtMjMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTQ5
NjUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3MDY4MzZhMTUzZjYzMWFkZDk4
YWE3ZjFkZjU5OGZjOTIyYjg0ZTg0Li5iZDM3OWIyMjRiZDdhYjA4N2I1OWJhNjFhZWFhZDFlMTI2
YTNkZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU0NTUsNiArNTQ1NSw4
IEBAIGlmIEVOQUJMRV9XRUJfQVVESU8KIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9k
ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nl
c3Nvck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmQ4ZjEzOGVlY2UzMjVi
MzEwYzc4NDAyMGMxNDI4MjU2ZjdlNDhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAKQEAgLTAsMCAr
MSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgi
CisKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5o
IgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShBdWRpb0Nv
bnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb05vZGUoY29udGV4
dCwgc2FtcGxlUmF0ZSkKKyAgICAsIG1fbmVlZEF1dG9tYXRpY1B1bGwoZmFsc2UpCit7CisgICAg
YWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CisgICAgYWRkT3V0
cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKK30KKworLy8gV2Ug
b3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxvd2luZyB0aGlzIG5v
ZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywKKy8vIHdoZXJlIHRo
ZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQgdG8gdGhlIG91dHB1
dC4KKy8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNo
YW5uZWwgY291bnRzIG1hdGNoLgordm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6cHVsbElu
cHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8vIFJlbmRlciBpbnB1dCBzdHJl
YW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3IgcGFzcy10aHJv
dWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGlu
Zy4uLgorICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vz
cyk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmNvbm5lY3QoQXVkaW9Ob2Rl
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7CisKKyAgICBBdWRp
b05vZGU6OmNvbm5lY3QoZGVzdGluYXRpb24sIG91dHB1dEluZGV4LCBpbnB1dEluZGV4LCBlYyk7
CisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgQXVkaW9Db250ZXh0OjpBdXRv
TG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworCisgICAgQXVkaW9Ob2RlOjpkaXNjb25uZWN0KG91
dHB1dEluZGV4LCBlYyk7CisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05v
ZGVJbnB1dCogaW5wdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgp
ICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJUKGlucHV0ID09IHRo
aXMtPmlucHV0KDApKTsKKyAgICBpZiAoaW5wdXQgIT0gdGhpcy0+aW5wdXQoMCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBpbnB1dC0+bnVtYmVy
T2ZDaGFubmVscygpOworCisgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0KDApLT5u
dW1iZXJPZkNoYW5uZWxzKCkpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aGUg
Y2hhbm5lbCBjb3VudCB0byBhbnkgbm9kZXMgY29ubmVjdGVkIGZ1cnRoZXIgZG93bnN0cmVhbSBp
biB0aGUgZ3JhcGguCisgICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1i
ZXJPZkNoYW5uZWxzKTsKKyAgICB9CisKKyAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFu
bmVsc0ZvcklucHV0KGlucHV0KTsKKworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9p
ZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCit7CisgICAgQVNT
RVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG91dHB1dCgwKS0+aXND
b25uZWN0ZWQoKSkgeworICAgICAgICAvLyBXaGVuIGEgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUg
aXMgY29ubmVjdGVkIHRvIGEgZG93bnN0cmVhbSBub2RlLCBpdCB3aWxsIGdldCBwdWxsZWQgYnkg
dGhlCisgICAgICAgIC8vIGRvd25zdHJlYW0gbm9kZSwgdGh1cyByZW1vdmUgaXQgZnJvbSB0aGUg
Y29udGV4dCdzIGF1dG9tYXRpYyBwdWxsIGxpc3QuCisgICAgICAgIGlmIChtX25lZWRBdXRvbWF0
aWNQdWxsKSB7CisgICAgICAgICAgICBjb250ZXh0KCktPnJlbW92ZUF1dG9tYXRpY1B1bGxOb2Rl
KHRoaXMpOworICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBhIEF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZSB3aGlsZSBzdGlsbCBj
b25uZWN0ZWQgZnJvbQorICAgICAgICAvLyB1cHN0cmVhbSBub2RlKHMpLCBhZGQgaXQgdG8gdGhl
IGNvbnRleHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgorICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZklucHV0Q29ubmVjdGlvbnMgPSBpbnB1dCgwKS0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9u
cygpOworICAgICAgICBpZiAobnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zICYmICFtX25lZWRBdXRv
bWF0aWNQdWxsKSB7CisgICAgICAgICAgICBjb250ZXh0KCktPmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KHRoaXMpOworICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc4YzJkODQzMjZmMjI5
YmJmOGU2ODY5Njc4ZWM5OGJmNzVmMjVhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaApAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGVfaAorI2RlZmluZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisKKyNpbmNsdWRlICJBdWRp
b05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hlcmUg
dGhlIG91dHB1dCBtaWdodCBub3QgbmVjZXNzYXJpbHkgY29ubmVjdCB0byBhbm90aGVyIG5vZGUn
cyBpbnB1dC4KKy8vIElmIHRoZSBvdXRwdXQgaXMgbm90IGNvbm5lY3QgdG8gYW55IG90aGVyIG5v
ZGUsIHRoZW4gdGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlJ3MgcHJvY2Vzc0lmTmVjZXNzYXJ5
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkKKy8vIEF1ZGlvQ29udGV4
dCBiZWZvcmUgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIHRvIHB1bGwgZGF0YSBmcm9t
IGl0cyBpbnB1dChzKSBzbyB0aGF0IGl0IGNhbiBpbnNwZWN0IHRoZSBhdWRpbyBzdHJlYW0uCitj
bGFzcyBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGlj
OgorICAgIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBs
ZVJhdGUpOworCisgICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMo
c2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9O
b2RlKiwgdW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRl
eCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5l
bHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCopOworCitwcml2YXRlOgorICAgIGJvb2wgbV9uZWVk
QXV0b21hdGljUHVsbDsKKyAgICB2b2lkIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApp
bmRleCBmNzg5MDViZTY3YTcxMDNiNWQ1MWNhYzZhYWRkNzY0MWEzMGI3N2QwLi5iNDkxOWQzOWI4
YzFmMzI0OWY1Y2Y1MDM0ZTkwNzNlMTJiNTZhZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAgQXVk
aW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9kb2N1
bWVudChkb2N1bWVudCkKICAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCiAgICAgLCBtX2lzRGVs
ZXRpb25TY2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRh
dGluZyhmYWxzZSkKICAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCiAgICAgLCBtX2F1ZGlvVGhy
ZWFkKDApCiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmll
cikKQEAgLTE2NCw2ICsxNjUsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVu
dCogZG9jdW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdAogICAgICwgbV9p
c0F1ZGlvVGhyZWFkRmluaXNoZWQoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQog
ICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkKKyAgICAsIG1fYXV0b21hdGljUHVsbE5vZGVzTmVl
ZFVwZGF0aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXVk
aW9UaHJlYWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVu
dGlmaWVyKQpAQCAtNjYyLDcgKzY2NCw5IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVQcmVS
ZW5kZXJUYXNrcygpCiAgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVk
aW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVPdXRwdXRzLgogICAgICAgICBoYW5kbGVEaXJ0eUF1
ZGlvTm9kZUlucHV0cygpOwogICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsK
LSAgICAgICAgCisKKyAgICAgICAgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCk7CisKICAgICAg
ICAgaWYgKG11c3RSZWxlYXNlTG9jaykKICAgICAgICAgICAgIHVubG9jaygpOwogICAgIH0KQEAg
LTY5MCw3ICs2OTQsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tz
KCkKICAgICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1
dHMgYW5kIEF1ZGlvTm9kZU91dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5w
dXRzKCk7CiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotICAgICAgICAK
KworICAgICAgICB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKKwogICAgICAgICBpZiAobXVz
dFJlbGVhc2VMb2NrKQogICAgICAgICAgICAgdW5sb2NrKCk7CiAgICAgfQpAQCAtNzEyLDYgKzcx
OCwxMiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIG1fbm9kZXNUb0RlbGV0ZS5h
cHBlbmQobm9kZSk7CisKKyAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRpbWUgZm9y
IHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxpc3QsCisgICAgLy8g
c2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFwaCBsb2Nr
LiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzCisgICAgLy8gZ2V0IGNoYW5jZSB0byBz
Y2hlZHVsZSB0aGUgZGVsZXRpb24gd29yaywgdGhlIHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2Rlcygp
IGFsc28gZ2V0IGNoYW5jZSB0byBtb2RpZnkKKyAgICAvLyB0aGUgcmVuZGVyaW5nQXV0b21hdGlj
UHVsbE5vZGVzLgorICAgIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKG5vZGUpOwogfQogCiB2b2lk
IEF1ZGlvQ29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRpb24oKQpAQCAtODAzLDYgKzgxNSw1MiBA
QCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBt
X2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCit2b2lkIEF1ZGlvQ29udGV4dDo6
YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc0dy
YXBoT3duZXIoKSk7CisKKyAgICBpZiAoIW1fYXV0b21hdGljUHVsbE5vZGVzLmNvbnRhaW5zKG5v
ZGUpKSB7CisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKTsKKyAgICAgICAg
bV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9p
ZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkK
K3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1fYXV0b21hdGljUHVs
bE5vZGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzLnJl
bW92ZShub2RlKTsKKyAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0
cnVlOworICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxO
b2RlcygpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKworICAgIGlmIChtX2F1dG9t
YXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZykgeworICAgICAgICAvLyBDb3B5IGZyb20gbV9hdXRv
bWF0aWNQdWxsTm9kZXMgdG8gbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuCisgICAgICAg
IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9tYXRpY1B1bGxOb2Rl
cy5zaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIGogPSAwOworICAgICAgICBmb3IgKEhhc2hT
ZXQ8QXVkaW9Ob2RlKj46Oml0ZXJhdG9yIGkgPSBtX2F1dG9tYXRpY1B1bGxOb2Rlcy5iZWdpbigp
OyBpICE9IG1fYXV0b21hdGljUHVsbE5vZGVzLmVuZCgpOyArK2ksICsraikgeworICAgICAgICAg
ICAgQXVkaW9Ob2RlKiBvdXRwdXQgPSAqaTsKKyAgICAgICAgICAgIG1fcmVuZGVyaW5nQXV0b21h
dGljUHVsbE5vZGVzW2pdID0gb3V0cHV0OworICAgICAgICB9CisKKyAgICAgICAgbV9hdXRvbWF0
aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9D
b250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
Cit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZOZWNlc3Nhcnko
ZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb0NvbnRleHQ6
OmludGVyZmFjZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yQXVkaW9Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmgKaW5kZXggNTI1NGVmNjRmZGY1NTIwZjAxMDZiMTk4OWFmMGJkZGJjOThk
Njg3Ni4uYzhjNmE3OTIxZDNjMGQwNTlkMDMzNDMwM2FkYjE0ZTE2NzdkYWMzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC0xNDgsNyAr
MTQ4LDEzIEBAIHB1YmxpYzoKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFy
a2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KICAg
ICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtl
ZE5vZGVzKCk7Ci0gICAgCisKKyAgICB2b2lkIGFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9k
ZSopOworICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKik7CisKKyAg
ICAvLyBDYWxsZWQgcmlnaHQgYmVmb3JlIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOworICAgIHZv
aWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKwog
ICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFkZS4KICAg
ICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpCiAgICAgewpAQCAtMjgxLDYgKzI4Nywx
NCBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVJbnB1dHMoKTsKICAg
ICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwogCisgICAgLy8gRm9yIHRoZSBz
YWtlIG9mIHRocmVhZCBzYWZldHksIHdlIG1haW50YWluIGEgc2VwZXJhdGUgVmVjdG9yIG9mIGF1
dG9tYXRpYyBwdWxsIG5vZGVzIGZvciByZW5kZXJpbmcgaW4gbV9yZW5kZXJpbmdBdXRvbWF0aWNQ
dWxsTm9kZXMuCisgICAgLy8gSXQgd2lsbCBiZSBjb3BpZWQgZnJvbSBtX2F1dG9tYXRpY1B1bGxO
b2RlcyBieSB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5k
IG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4KKyAgICBIYXNoU2V0PEF1ZGlvTm9kZSo+IG1fYXV0
b21hdGljUHVsbE5vZGVzOworICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2RlczsKKyAgICAvLyBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyBr
ZWVwcyB0cmFjayBpZiBtX2F1dG9tYXRpY1B1bGxOb2RlcyBpcyBtb2RpZmllZC4KKyAgICBib29s
IG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nOworICAgIHZvaWQgdXBkYXRlQXV0b21h
dGljUHVsbE5vZGVzKCk7CisKICAgICB1bnNpZ25lZCBtX2Nvbm5lY3Rpb25Db3VudDsKIAogICAg
IC8vIEdyYXBoIGxvY2tpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IDZlNTI3YmJlZTM3MTQwZDA3
M2EzMTAxOWNlYjQzMTNmNmE0YzMzMjQuLjZmNDg5YjJhOTIzNjQ1MjUyYjMyYWJhZjY3ODc0ZmM0
MzcyYjMyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC04MCw2ICs4MCw5IEBAIHZvaWQgQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNp
emVfdCBudW1iZXJPCiAgICAgICAgIGRlc3RpbmF0aW9uQnVzLT5jb3B5RnJvbSgqcmVuZGVyZWRC
dXMpOwogICAgIH0KIAorICAgIC8vIFByb2Nlc3Mgbm9kZXMgd2hpY2ggbmVlZCBhIGxpdHRsZSBl
eHRyYSBoZWxwIGJlY2F1c2UgdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBhbnl0aGluZywgYnV0
IHN0aWxsIG5lZWQgdG8gcHJvY2Vzcy4KKyAgICBjb250ZXh0KCktPnByb2Nlc3NBdXRvbWF0aWNQ
dWxsTm9kZXMobnVtYmVyT2ZGcmFtZXMpOworCiAgICAgLy8gTGV0IHRoZSBjb250ZXh0IHRha2Ug
Y2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgog
ICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRhc2tzKCk7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAppbmRleCBjMjYxNGNiM2IxMmQ2ZDE1
NTBmZGY3NGY4NDg4ZTQxZjQ1ZjljZGEyLi42NGM1ZjI2MmU0MjIwNmQxODNiN2E5MjQ4YmVmMjEy
YjAwYWQ0YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmgKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRw
dXQodW5zaWduZWQpOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgYnkgY29ycmVz
cG9uZGluZyBKYXZhU2NyaXB0IG1ldGhvZHMuCi0gICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSos
IHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQgb3V0cHV0
SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNv
bm5lY3QoQXVkaW9QYXJhbSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAppbmRleCA4MmJmMjlmNWE0NzU0OGY0NDExNGMwMDc3
NWMzMGRmOWUyYTMyNzM4Li4zZjk0OTFhNGZlODhmNjg5ZjkwNTRlNTBhZjEwZTgxNDllZTA3YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91
dHB1dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0
cHV0LmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KICAgICBib29sIGlz
Q2hhbm5lbENvdW50S25vd24oKSBjb25zdCB7IHJldHVybiBudW1iZXJPZkNoYW5uZWxzKCkgPiAw
OyB9CiAKKyAgICBib29sIGlzQ29ubmVjdGVkKCkgeyByZXR1cm4gZmFuT3V0Q291bnQoKSA+IDAg
fHwgcGFyYW1GYW5PdXRDb3VudCgpID4gMDsgfQorCiAgICAgLy8gRGlzYWJsZS9FbmFibGUgaGFw
cGVucyB3aGVuIHRoZXJlIGFyZSBzdGlsbCBKYXZhU2NyaXB0IHJlZmVyZW5jZXMgdG8gYSBub2Rl
LCBidXQgaXQgaGFzIG90aGVyd2lzZSAiZmluaXNoZWQiIGl0cyB3b3JrLgogICAgIC8vIEZvciBl
eGFtcGxlLCB3aGVuIGEgbm90ZSBoYXMgZmluaXNoZWQgcGxheWluZy4gIEl0IGlzIGtlcHQgYXJv
dW5kLCBiZWNhdXNlIGl0IG1heSBiZSBwbGF5ZWQgYWdhaW4gYXQgYSBsYXRlciB0aW1lLgogICAg
IC8vIFRoZXkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlz
ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFs
eXNlck5vZGUuY3BwCmluZGV4IGQwMzlmM2M2YWIyNmNhNGY1YzlhNjQ3OTM1ZTg3NjlmOWZhMDRl
MDguLmVlNzQ5NjA0MzUyYTdkYmZkODlkZGUxYmMyYzZhNjI2Mjc2NGUzN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuY3BwCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlYWx0aW1l
QW5hbHlzZXJOb2RlOjpSZWFsdGltZUFuYWx5c2VyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkK
KyAgICA6IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiB7CiAg
ICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CiAgICAgYWRk
T3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKQEAgLTcwLDE1
ICs3MCw2IEBAIHZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1l
c1RvUHJvY2VzcykKICAgICAgICAgb3V0cHV0QnVzLT5jb3B5RnJvbSgqaW5wdXRCdXMpOwogfQog
Ci0vLyBXZSBvdmVycmlkZSBwdWxsSW5wdXRzKCkgYXMgYW4gb3B0aW1pemF0aW9uIGFsbG93aW5n
IHRoaXMgbm9kZSB0byB0YWtlIGFkdmFudGFnZSBvZiBpbi1wbGFjZSBwcm9jZXNzaW5nLAotLy8g
d2hlcmUgdGhlIGlucHV0IGlzIHNpbXBseSBwYXNzZWQgdGhyb3VnaCB1bnByb2Nlc3NlZCB0byB0
aGUgb3V0cHV0LgotLy8gTm90ZTogdGhpcyBvbmx5IGFwcGxpZXMgaWYgdGhlIGlucHV0IGFuZCBv
dXRwdXQgY2hhbm5lbCBjb3VudHMgbWF0Y2guCi12b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpw
dWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gUmVuZGVyIGlucHV0
IHN0cmVhbSAtIHRyeSB0byByZW5kZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVzIGZvciBwYXNz
LXRocm91Z2ggcHJvY2Vzc2luZyB3aGVyZSBwcm9jZXNzKCkgZG9lc24ndCBuZWVkIHRvIGRvIGFu
eXRoaW5nLi4uCi0gICAgaW5wdXQoMCktPnB1bGwob3V0cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Q
cm9jZXNzKTsKLX0KLQogdm9pZCBSZWFsdGltZUFuYWx5c2VyTm9kZTo6cmVzZXQoKQogewogICAg
IG1fYW5hbHlzZXIucmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAppbmRleCBjZTM2NGE5OTk1ZWU2YWM3NmNk
M2U0NjZmMWUxY2ZjYjQyMTdmMGE5Li4wODE5YzAzODY3YzRjMjI4NmFkODM4YzE3N2M2NWFkNTJk
ZWY4Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICNpZm5kZWYgUmVhbHRp
bWVBbmFseXNlck5vZGVfaAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCiAKLSNpbmNs
dWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oIgog
I2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlYWx0aW1lQW5hbHlzZXJOb2RlIDogcHVi
bGljIEF1ZGlvTm9kZSB7CitjbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IHB1YmxpYyBBdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVh
bHRpbWVBbmFseXNlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUpCiAgICAgewpAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
QXVkaW9Ob2RlCiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cyk7Ci0gICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7
CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CiAKICAgICAvLyBKYXZhc2NyaXB0IGJpbmRpbmdz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggZjQ1Njg5OTcxMjMyN2I0YzQwZTlmMjU0ZjI1NjI1YTQzNThk
ZTIyZi4uNWViNDI2OTViM2NjZDUzNmEzZjc4YzQ0ZjIzNmUxZmZmMjhjMTI3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMTU1NCw2ICsxNTU0LDggQEAKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QuaCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAnLApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYyMDQ3
ZDRiNjU1ZTQ3ZDgxYWMwNTJjMTM5YzQ2MjhkYjFkNThlNmYuLmI2NDU3ZDU0NGQ4ZjUyNmJjYTcy
ODM3NTc0OThhMzJjOTI0YjlhYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNC0yMyAg
UmF5bW9uZCBMaXUgIDxyYXltb25kLmxpdUBpbnRlbC5jb20+CisKKyAgICAgICAgTW9kaWZ5IFJl
YWx0aW1lQW5hbHlzZXJOb2RlIHB1bGwgbWVjaGFuaXNtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzUxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5v
ZGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDQtMjMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTQ5
NjUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMtcHVsbC1ub2Rl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxMWRiMjFlMjY0NDg1ZGEyZjBlODVlZjYwMDllNjU4
MTRmN2ZkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0
aWMtcHVsbC1ub2RlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUaGlzIHRlc3QgdmVy
aWZpZXMgdGhhdCB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgYmFzZWQgbm9kZXMgd29yayBj
b3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZWFsdGltZUFu
YWx5c2VyTm9kZSBnb3QgcHVsbGVkIHdoZW4gY29ubmVjdGVkIGZyb20gdXBzdHJlYW0gbm9kZSBi
dXQgbm90IHRvIGRvd25zdHJlYW0gbm9kZS4KK1BBU1MgUmVhbHRpbWVBbmFseXNlck5vZGUgZ290
IHB1bGxlZCB3aGVuIGNvbm5lY3RlZCBmcm9tIHVwc3RyZWFtIG5vZGUgYW5kIHRvIGRlc3RpbmF0
aW9uIG5vZGUuCitQQVNTIFJlYWx0aW1lQW5hbHlzZXJOb2RlIGRpZG4ndCBnZXQgcHVsbGVkIHdo
ZW4gaXQgc2hvdWxkIG5vdC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMt
cHVsbC1ub2RlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMtcHVsbC1ub2Rl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzJhODc1OWZiZGM2MGMxYWVhOTM2YTg4Y2YwNDlkNDNiZjRkYTMw
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxs
LW5vZGUuaHRtbApAQCAtMCwwICsxLDEzNCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icmVzb3VyY2Vz
L2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIEF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlIGJhc2VkIG5vZGVzIHdvcmsgY29ycmVjdGx5LiIpOworCit2YXIgc2FtcGxl
UmF0ZSA9IDQ0MTAwLjA7CisvLyBXZSBjYXJlZnVsbHkgYXJyYW5nZSB0aGUgcmVuZGVyTGVuZ3Ro
SW5GcmFtZXMgdG8gYmUgYSBtdWx0aXBsZSBvZiB0aGUgQXVkaW9Ob2RlIHJlbmRlcmluZyBxdWFu
dHVtIChBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpCisvLyBzbyB0aGF0IEF1ZGlv
U291cmNlTm9kZSB3aWxsIG5vdCBmZWVkIHRhaWxpbmcgemVyb2VzIGludG8gdGhlIGNvbnRleHQg
YW5kIGZhaWwgdGhpcyB0ZXN0LgordmFyIHJlbmRlckxlbmd0aEluRnJhbWVzID0gMjU2OwordmFy
IGZmdFNpemUgPSA2NDsKKwordmFyIGNvbnRleHQ7Cit2YXIgdG9uZUJ1ZmZlcjsKK3ZhciBidWZm
ZXJTb3VyY2U7Cit2YXIgYW5hbHlzZXI7CisKK2Z1bmN0aW9uIGNvbnN0cnVjdENvbW1vbkdyYXBo
KCkgeworICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgY29udGV4dCA9
IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMSwgcmVuZGVyTGVuZ3RoSW5GcmFtZXMsIHNhbXBsZVJh
dGUpOworICAgIHRvbmVCdWZmZXIgPSBjcmVhdGVDb25zdGFudEJ1ZmZlcihjb250ZXh0LCByZW5k
ZXJMZW5ndGhJbkZyYW1lcywgMSk7CisKKyAgICBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOworICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgPSB0b25lQnVmZmVyOwor
CisgICAgYW5hbHlzZXIgPSBjb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7CisgICAgYW5hbHlzZXIu
ZmZ0U2l6ZSA9IGZmdFNpemU7CisKKyAgICBidWZmZXJTb3VyY2UuY29ubmVjdChhbmFseXNlcik7
Cit9CisKK2Z1bmN0aW9uIHRlc3QxRmluaXNoZWQoKSB7CisgICAgdmFyIHRpbWVEb21haW5EYXRh
ID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21h
aW5EYXRhKHRpbWVEb21haW5EYXRhKTsKKworICAgIGlmICh0aW1lRG9tYWluRGF0YVswXSA+PSAy
NTUpCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQg
d2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0cmVhbSBu
b2RlLiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFseXNlck5v
ZGUgZmFpbGVkIHRvIGdldCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2Rl
IGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLiIpOworCisgICAgdGVzdDIoKTsKK30KKworLy8g
VG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIGNhbiBwdWxsIGRhdGEgd2hlbiB0aGVyZSBp
cyBhbiB1cHN0cmVhbSBub2RlIGNvbm5lY3RlZCB0byBpdAorLy8gYnV0IGl0J3Mgbm90IGNvbm5l
Y3RlZCB0byBhIGRvd25zdHJlYW0gbm9kZS4KK2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGNvbnN0
cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworCisgICAg
Y29udGV4dC5vbmNvbXBsZXRlID0gdGVzdDFGaW5pc2hlZDsKKyAgICBjb250ZXh0LnN0YXJ0UmVu
ZGVyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QyRmluaXNoZWQoKSB7CisgICAgdmFyIHRpbWVE
b21haW5EYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0
ZVRpbWVEb21haW5EYXRhKHRpbWVEb21haW5EYXRhKTsKKworICAgIGlmICh0aW1lRG9tYWluRGF0
YVswXSA+PSAyNTUpCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGdv
dCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5h
dGlvbiBub2RlLiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFs
eXNlck5vZGUgZmFpbGVkIHRvIGJlIHB1bGxlZCB3aGVuIGNvbm5lY3RlZCBieSB1cHN0cmVhbSBu
b2RlIGFuZCB0byBkZXN0aW5hdGlvbiBub2RlLiIpOworCisgICAgdGVzdDMoKTsKK30KKworLy8g
VG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIGNhbiBwcm9jZXNzIG5vcm1hbGx5IHdoZW4g
dGhlcmUgaXMgYW4gdXBzdHJlYW0gbm9kZSBjb25uZWN0ZWQgdG8gaXQKKy8vIGFuZCBpdCdzIGFs
c28gY29ubmVjdGVkIHRvIGEgZG93bnN0cmVhbSBub2RlIHdoaWNoIHVsdGltYXRlbHkgY29ubmVj
dCB0byBhdWRpbyBkZXN0aW5hdGlvbi4KK2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGNvbnN0cnVj
dENvbW1vbkdyYXBoKCk7CisKKyAgICBhbmFseXNlci5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRp
b24pOworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21w
bGV0ZSA9IHRlc3QyRmluaXNoZWQ7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQor
CitmdW5jdGlvbiB0ZXN0M0ZpbmlzaGVkKCkgeworICAgIHZhciB0aW1lRG9tYWluRGF0YSA9IG5l
dyBVaW50OEFycmF5KGZmdFNpemUpOworICAgIGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0
YSh0aW1lRG9tYWluRGF0YSk7CisKKyAgICAvLyBJZiByZWFsdGltZUFuYWx5c2VyIGhhc24ndCBw
dWxsZWQgYW55IGRhdGEsIHRoZSBkYXRhIGhlcmUgd2lsbCBiZSAxMjguCisgICAgaWYgKHRpbWVE
b21haW5EYXRhWzBdID09IDEyOCkKKyAgICAgICAgdGVzdFBhc3NlZCgiUmVhbHRpbWVBbmFseXNl
ck5vZGUgZGlkbid0IGdldCBwdWxsZWQgd2hlbiBpdCBzaG91bGQgbm90LiIpOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUgYmVlbiBwdWxsZWQgd2hl
biBpdCBzaG91bGQgbm90LiIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKKy8vIFRvIHZl
cmlmeSB0aGUgcmVhbHRpbWVBbmFseXNlciB3aWxsIHN0b3AgcHVsbCBpZiBpdCBpcyBjb25uZWN0
ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUKKy8vIHdoaWNoIGRvIG5vdCB1bHRpbWF0bHkgY29ubmVj
dCB0byBhbnkgYXVkaW8gZGVzdGluYXRpb24KK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGNvbnN0
cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICB2YXIgZ2FpbiA9IGNvbnRleHQuY3JlYXRlR2Fpbk5v
ZGUoKTsKKyAgICBhbmFseXNlci5jb25uZWN0KGdhaW4pOworCisgICAgYnVmZmVyU291cmNlLm5v
dGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QzRmluaXNoZWQ7CisgICAg
Y29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgfQorCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CisgICAgdGVzdDEoKTsKK30KKworcnVuVGVzdCgpOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138945</attachid>
            <date>2012-04-26 00:05:32 -0700</date>
            <delta_ts>2012-04-27 18:58:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120426151135.patch</filename>
            <type>text/plain</type>
            <size>28865</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzEyODIxZTM2MWJlYjY4
MDE5MmIxYTcxNTZlNmMxZjZiYjM0MTBlZS4uYWE3Nzg1YTliYTlhNGY5Y2RiODQxYWNkMDNlNTA0
NmRmNDE4YzNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA0LTI2ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5o
dG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6fkF1ZGlvQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmhhbmRs
ZVByZVJlbmRlclRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aGFuZGxl
UG9zdFJlbmRlclRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWFya0Zv
ckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2Rlcyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoQXVkaW9Ob2RlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlT3V0cHV0Ojppc0Nvbm5lY3RlZCk6CisgICAgICAgIChBdWRpb05vZGVP
dXRwdXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5h
bHlzZXJOb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmg6CisgICAgICAgIChSZWFsdGltZUFuYWx5c2VyTm9kZSk6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorCiAyMDEyLTA0LTI1ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgYSB2ZXJzaW9uIG9mIFN0cmluZ0ltcGw6OmZpbmQoKSB3aXRo
b3V0IG9mZnNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYjIzMGJmYWU3ZTNh
ZTlmOTRlZmRlNjVmYTBjZDIyYzBhZGVjOTE3YS4uMWE5NDQyZWFhMDFlYjA2MzFhOTc3ZTMwZTk2
MmMxMzdiMTgyOTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDY4LDYg
KzU0NjgsOCBAQCBpZiBFTkFCTEVfV0VCX0FVRElPCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nl
c3Nvck5vZGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CdWZmZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA2YzEyNTc2
NGEwYjU5YWE2M2ViYWVkMDU5Yzk2ZDRjOTlhZmUzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCkBA
IC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2Rl
SW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9Ob2Rl
KGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgLCBtX25lZWRBdXRvbWF0aWNQdWxsKGZhbHNlKQor
eworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAg
IGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7Cit9CisK
Ky8vIFdlIG92ZXJyaWRlIHB1bGxJbnB1dHMoKSBhcyBhbiBvcHRpbWl6YXRpb24gYWxsb3dpbmcg
dGhpcyBub2RlIHRvIHRha2UgYWR2YW50YWdlIG9mIGluLXBsYWNlIHByb2Nlc3NpbmcsCisvLyB3
aGVyZSB0aGUgaW5wdXQgaXMgc2ltcGx5IHBhc3NlZCB0aHJvdWdoIHVucHJvY2Vzc2VkIHRvIHRo
ZSBvdXRwdXQuCisvLyBOb3RlOiB0aGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgaW5wdXQgYW5kIG91
dHB1dCBjaGFubmVsIGNvdW50cyBtYXRjaC4KK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6
OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBSZW5kZXIgaW5w
dXQgc3RyZWFtIC0gdHJ5IHRvIHJlbmRlciBkaXJlY3RseSBpbnRvIG91dHB1dCBidXMgZm9yIHBh
c3MtdGhyb3VnaCBwcm9jZXNzaW5nIHdoZXJlIHByb2Nlc3MoKSBkb2Vzbid0IG5lZWQgdG8gZG8g
YW55dGhpbmcuLi4KKyAgICBpbnB1dCgwKS0+cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFtZXNU
b1Byb2Nlc3MpOworfQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjb25uZWN0KEF1
ZGlvTm9kZSogZGVzdGluYXRpb24sIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1
dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworCisg
ICAgQXVkaW9Ob2RlOjpjb25uZWN0KGRlc3RpbmF0aW9uLCBvdXRwdXRJbmRleCwgaW5wdXRJbmRl
eCwgZWMpOworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9pZCBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZTo6ZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEF1ZGlvQ29udGV4
dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKworICAgIEF1ZGlvTm9kZTo6ZGlzY29u
bmVjdChvdXRwdXRJbmRleCwgZWMpOworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9p
ZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQo
QXVkaW9Ob2RlSW5wdXQqIGlucHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9U
aHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChpbnB1
dCA9PSB0aGlzLT5pbnB1dCgwKSk7CisgICAgaWYgKGlucHV0ICE9IHRoaXMtPmlucHV0KDApKQor
ICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gaW5wdXQt
Pm51bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzICE9IG91dHB1
dCgwKS0+bnVtYmVyT2ZDaGFubmVscygpKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBwcm9wYWdh
dGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBmdXJ0aGVyIGRvd25z
dHJlYW0gaW4gdGhlIGdyYXBoLgorICAgICAgICBvdXRwdXQoMCktPnNldE51bWJlck9mQ2hhbm5l
bHMobnVtYmVyT2ZDaGFubmVscyk7CisgICAgfQorCisgICAgQXVkaW9Ob2RlOjpjaGVja051bWJl
ck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7CisKKyAgICB1cGRhdGVQdWxsU3RhdHVzKCk7Cit9
CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0ZVB1bGxTdGF0dXMoKQorewor
ICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIGlmIChvdXRwdXQo
MCktPmlzQ29ubmVjdGVkKCkpIHsKKyAgICAgICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUsIGl0IHdpbGwgZ2V0IHB1
bGxlZCBieSB0aGUKKyAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0aHVzIHJlbW92ZSBpdCBm
cm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KKyAgICAgICAgaWYgKG1fbmVl
ZEF1dG9tYXRpY1B1bGwpIHsKKyAgICAgICAgICAgIGNvbnRleHQoKS0+cmVtb3ZlQXV0b21hdGlj
UHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQdWxsID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0
Q29ubmVjdGlvbnMgPSBpbnB1dCgwKS0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOwor
ICAgICAgICBpZiAobnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zICYmICFtX25lZWRBdXRvbWF0aWNQ
dWxsKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFuIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlz
IG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZSB3aGlsZSBzdGlsbCBjb25uZWN0
ZWQgZnJvbQorICAgICAgICAgICAgLy8gdXBzdHJlYW0gbm9kZShzKSwgYWRkIGl0IHRvIHRoZSBj
b250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KKyAgICAgICAgICAgIGNvbnRleHQoKS0+YWRk
QXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQdWxs
ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghbnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zICYm
IG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKKyAgICAgICAgICAgIC8vIFRoZSBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gbm90aGluZywgcmVtb3ZlIGl0IGZyb20gdGhlIGNv
bnRleHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgorICAgICAgICAgICAgY29udGV4dCgpLT5yZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIG1fbmVlZEF1dG9tYXRpY1B1
bGwgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43Yzk0M2Q2MTY0ODU3NWJhZTA5MzJlYWI0Y2EwNmRmZWFmMGRmYWFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisjZGVmaW5lIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
X2gKKworI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBh
bmQgb25lIG91dHB1dCB3aGVyZSB0aGUgb3V0cHV0IG1pZ2h0IG5vdCBuZWNlc3NhcmlseSBjb25u
ZWN0IHRvIGFub3RoZXIgbm9kZSdzIGlucHV0LgorLy8gSWYgdGhlIG91dHB1dCBpcyBub3QgY29u
bmVjdGVkIHRvIGFueSBvdGhlciBub2RlLCB0aGVuIHRoZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9k
ZSdzIHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRp
Y2FsbHkgYnkKKy8vIEF1ZGlvQ29udGV4dCBiZWZvcmUgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBx
dWFudHVtIHNvIHRoYXQgaXQgY2FuIGluc3BlY3QgdGhlIGF1ZGlvIHN0cmVhbS4KK2NsYXNzIEF1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAg
QXVkaW9CYXNpY0luc3BlY3Rvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7
CisKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHVsbElucHV0cyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChBdWRpb05vZGUqLCB1
bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zvcklu
cHV0KEF1ZGlvTm9kZUlucHV0Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVQdWxsU3Rh
dHVzKCk7CisgICAgYm9vbCBtX25lZWRBdXRvbWF0aWNQdWxsOyAvLyBXaGVuIHNldHRpbmcgdG8g
dHJ1ZSwgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgd2lsbCBiZSBwdWxsZWQgYXV0b21hdGljbGx5
IGJ5IEF1ZGlvQ29udGV4dCBiZWZvcmUgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwCmluZGV4IGY3ODkwNWJlNjdhNzEwM2I1ZDUxY2FjNmFhZGQ3NjQxYTMwYjc3ZDAu
LjRiMjg5NmUxOTRiNWY1YzY0MjBhZGM2NzE1NGJhNTJkZjY1ZWNhYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE0MCw2ICsx
NDAsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkKICAg
ICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxzZSkKKyAgICAsIG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKICAgICAs
IG1fYXVkaW9UaHJlYWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJl
YWRJZGVudGlmaWVyKQpAQCAtMTY0LDYgKzE2NSw3IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9Db250
ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
CiAgICAgLCBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCiAgICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgwKQorICAgICwgbV9hdXRvbWF0aWNQ
dWxsTm9kZXNOZWVkVXBkYXRpbmcoZmFsc2UpCiAgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQog
ICAgICwgbV9hdWRpb1RocmVhZCgwKQogICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5l
ZFRocmVhZElkZW50aWZpZXIpCkBAIC0yMDAsNiArMjAyLDggQEAgQXVkaW9Db250ZXh0Ojp+QXVk
aW9Db250ZXh0KCkKICAgICBBU1NFUlQoIW1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOwogICAgIEFT
U0VSVCghbV9yZWZlcmVuY2VkTm9kZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoIW1fZmluaXNoZWRO
b2Rlcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9hdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpKTsK
KyAgICBBU1NFUlQoIW1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CiB9CiAK
IHZvaWQgQXVkaW9Db250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCkBAIC02NjIsNyArNjY2LDkgQEAg
dm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKCkKICAgICAgICAgLy8gRml4
dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMgYW5kIEF1ZGlvTm9kZU91
dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7CiAgICAgICAgIGhh
bmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotICAgICAgICAKKworICAgICAgICB1cGRhdGVB
dXRvbWF0aWNQdWxsTm9kZXMoKTsKKwogICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQogICAg
ICAgICAgICAgdW5sb2NrKCk7CiAgICAgfQpAQCAtNjkwLDcgKzY5Niw5IEBAIHZvaWQgQXVkaW9D
b250ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQogICAgICAgICAvLyBGaXh1cCB0aGUgc3Rh
dGUgb2YgYW55IGRpcnR5IEF1ZGlvTm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KICAg
ICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVJbnB1dHMoKTsKICAgICAgICAgaGFuZGxlRGlydHlB
dWRpb05vZGVPdXRwdXRzKCk7Ci0gICAgICAgIAorCisgICAgICAgIHVwZGF0ZUF1dG9tYXRpY1B1
bGxOb2RlcygpOworCiAgICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCiAgICAgICAgICAgICB1
bmxvY2soKTsKICAgICB9CkBAIC03MTIsNiArNzIwLDEyIEBAIHZvaWQgQXVkaW9Db250ZXh0Ojpt
YXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlKiBub2RlKQogewogICAgIEFTU0VSVChpc0dyYXBoT3du
ZXIoKSk7CiAgICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVuZChub2RlKTsKKworICAgIC8vIFRoaXMg
aXMgcHJvYmFibHkgdGhlIGJlc3QgdGltZSBmb3IgdXMgdG8gcmVtb3ZlIHRoZSBub2RlIGZyb20g
YXV0b21hdGljIHB1bGwgbGlzdCwKKyAgICAvLyBzaW5jZSBhbGwgY29ubmVjdGlvbnMgYXJlIGdv
bmUgYW5kIHdlIGhvbGQgdGhlIGdyYXBoIGxvY2suIFRoZW4gd2hlbiBoYW5kbGVQb3N0UmVuZGVy
VGFza3MKKyAgICAvLyBnZXQgY2hhbmNlIHRvIHNjaGVkdWxlIHRoZSBkZWxldGlvbiB3b3JrLCB0
aGUgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkgYWxzbyBnZXQgY2hhbmNlIHRvIG1vZGlmeQor
ICAgIC8vIHRoZSByZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuCisgICAgcmVtb3ZlQXV0b21h
dGljUHVsbE5vZGUobm9kZSk7CiB9CiAKIHZvaWQgQXVkaW9Db250ZXh0OjpzY2hlZHVsZU5vZGVE
ZWxldGlvbigpCkBAIC04MDMsNiArODE3LDUyIEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVE
aXJ0eUF1ZGlvTm9kZU91dHB1dHMoKQogICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmNsZWFy
KCk7CiB9CiAKK3ZvaWQgQXVkaW9Db250ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKworICAgIGlmICghbV9h
dXRvbWF0aWNQdWxsTm9kZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgbV9hdXRvbWF0aWNQ
dWxsTm9kZXMuYWRkKG5vZGUpOworICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRh
dGluZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21h
dGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIo
KSk7CisKKyAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMuY29udGFpbnMobm9kZSkpIHsKKyAg
ICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXMucmVtb3ZlKG5vZGUpOworICAgICAgICBtX2F1dG9t
YXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIEF1ZGlv
Q29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkKK3sKKyAgICBBU1NFUlQoaXNHcmFw
aE93bmVyKCkpOworCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nKSB7
CisgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxOb2RlcyB0byBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2Rlcy4KKyAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CisKKyAgICAgICAgdW5zaWdu
ZWQgaiA9IDA7CisgICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGUqPjo6aXRlcmF0b3IgaSA9
IG1fYXV0b21hdGljUHVsbE5vZGVzLmJlZ2luKCk7IGkgIT0gbV9hdXRvbWF0aWNQdWxsTm9kZXMu
ZW5kKCk7ICsraSwgKytqKSB7CisgICAgICAgICAgICBBdWRpb05vZGUqIG91dHB1dCA9ICppOwor
ICAgICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXNbal0gPSBvdXRwdXQ7Cisg
ICAgICAgIH0KKworICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IGZh
bHNlOworICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnByb2Nlc3NBdXRvbWF0aWNQdWxs
Tm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1RocmVh
ZCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlbmRlcmluZ0F1dG9tYXRp
Y1B1bGxOb2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxs
Tm9kZXNbaV0tPnByb2Nlc3NJZk5lY2Vzc2FyeShmcmFtZXNUb1Byb2Nlc3MpOworfQorCiBjb25z
dCBBdG9taWNTdHJpbmcmIEF1ZGlvQ29udGV4dDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb0NvbnRleHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA1MjU0ZWY2
NGZkZjU1MjBmMDEwNmIxOTg5YWYwYmRkYmM5OGQ2ODc2Li5lZGI4N2U3ZTRmZGM4MTdlZGU2YTI4
ZGZkYjM0YzE3YjgxYzcxMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmgKQEAgLTE0OCw3ICsxNDgsMTUgQEAgcHVibGljOgogICAgIC8vIFdl
IHNjaGVkdWxlIGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNo
IHJlYWx0aW1lIHJlbmRlciBxdWFudHVtLgogICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlv
Tm9kZSopOwogICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMoKTsKLSAgICAKKworICAgIC8vIEF1
ZGlvQ29udGV4dCBjYW4gcHVsbCBub2RlKHMpIGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVh
bnR1bSBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0cmVhbSBu
b2Rlcy4KKyAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHRoZSBub2RlcyB3
aG8gd2FudCB0byBhZGQvcmVtb3ZlIHRoZW1zZWx2ZXMgaW50by9mcm9tIHRoZSBhdXRvbWF0aWMg
cHVsbCBsaXN0cy4KKyAgICB2b2lkIGFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOwor
ICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKik7CisKKyAgICAvLyBD
YWxsZWQgcmlnaHQgYmVmb3JlIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpIHRvIGhhbmRsZSBub2Rl
cyB3aGljaCBuZWVkIHRvIGJlIHB1bGxlZCBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3Rl
ZCB0byBhbnl0aGluZy4KKyAgICB2b2lkIHByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90
IGZyYW1lc1RvUHJvY2Vzcyk7CisKICAgICAvLyBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9m
IGNvbm5lY3Rpb25zIG1hZGUuCiAgICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKQog
ICAgIHsKQEAgLTI4MSw2ICsyODksMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZURpcnR5
QXVkaW9Ob2RlSW5wdXRzKCk7CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMo
KTsKIAorICAgIC8vIEZvciB0aGUgc2FrZSBvZiB0aHJlYWQgc2FmZXR5LCB3ZSBtYWludGFpbiBh
IHNlcGVyYXRlIFZlY3RvciBvZiBhdXRvbWF0aWMgcHVsbCBub2RlcyBmb3IgcmVuZGVyaW5nIGlu
IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLgorICAgIC8vIEl0IHdpbGwgYmUgY29waWVk
IGZyb20gbV9hdXRvbWF0aWNQdWxsTm9kZXMgYnkgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkg
YXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4KKyAgICBI
YXNoU2V0PEF1ZGlvTm9kZSo+IG1fYXV0b21hdGljUHVsbE5vZGVzOworICAgIFZlY3RvcjxBdWRp
b05vZGUqPiBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2RlczsKKyAgICAvLyBtX2F1dG9tYXRp
Y1B1bGxOb2Rlc05lZWRVcGRhdGluZyBrZWVwcyB0cmFjayBpZiBtX2F1dG9tYXRpY1B1bGxOb2Rl
cyBpcyBtb2RpZmllZC4KKyAgICBib29sIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5n
OworICAgIHZvaWQgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCk7CisKICAgICB1bnNpZ25lZCBt
X2Nvbm5lY3Rpb25Db3VudDsKIAogICAgIC8vIEdyYXBoIGxvY2tpbmcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3Bw
CmluZGV4IDZlNTI3YmJlZTM3MTQwZDA3M2EzMTAxOWNlYjQzMTNmNmE0YzMzMjQuLjZmNDg5YjJh
OTIzNjQ1MjUyYjMyYWJhZjY3ODc0ZmM0MzcyYjMyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC04
MCw2ICs4MCw5IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnByb3ZpZGVJbnB1dChBdWRp
b0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBudW1iZXJPCiAgICAgICAgIGRlc3RpbmF0aW9u
QnVzLT5jb3B5RnJvbSgqcmVuZGVyZWRCdXMpOwogICAgIH0KIAorICAgIC8vIFByb2Nlc3Mgbm9k
ZXMgd2hpY2ggbmVlZCBhIGxpdHRsZSBleHRyYSBoZWxwIGJlY2F1c2UgdGhleSBhcmUgbm90IGNv
bm5lY3RlZCB0byBhbnl0aGluZywgYnV0IHN0aWxsIG5lZWQgdG8gcHJvY2Vzcy4KKyAgICBjb250
ZXh0KCktPnByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMobnVtYmVyT2ZGcmFtZXMpOworCiAgICAg
Ly8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBv
ZiBlYWNoIHJlbmRlciBxdWFudHVtLgogICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRh
c2tzKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUu
aAppbmRleCBjMjYxNGNiM2IxMmQ2ZDE1NTBmZGY3NGY4NDg4ZTQxZjQ1ZjljZGEyLi42NGM1ZjI2
MmU0MjIwNmQxODNiN2E5MjQ4YmVmMjEyYjAwYWQ0YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJsaWM6CiAg
ICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQodW5zaWduZWQpOwogCiAgICAgLy8gQ2FsbGVkIGZy
b20gbWFpbiB0aHJlYWQgYnkgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IG1ldGhvZHMuCi0gICAg
dm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBp
bnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVk
aW9Ob2RlKiwgdW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2b2lkIGNvbm5lY3QoQXVkaW9QYXJhbSosIHVuc2lnbmVkIG91dHB1
dEluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91
dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3Qo
dW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgZmxv
YXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAppbmRleCA4
MmJmMjlmNWE0NzU0OGY0NDExNGMwMDc3NWMzMGRmOWUyYTMyNzM4Li4zZjk0OTFhNGZlODhmNjg5
ZjkwNTRlNTBhZjEwZTgxNDllZTA3YzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9m
Q2hhbm5lbHM7IH0KICAgICBib29sIGlzQ2hhbm5lbENvdW50S25vd24oKSBjb25zdCB7IHJldHVy
biBudW1iZXJPZkNoYW5uZWxzKCkgPiAwOyB9CiAKKyAgICBib29sIGlzQ29ubmVjdGVkKCkgeyBy
ZXR1cm4gZmFuT3V0Q291bnQoKSA+IDAgfHwgcGFyYW1GYW5PdXRDb3VudCgpID4gMDsgfQorCiAg
ICAgLy8gRGlzYWJsZS9FbmFibGUgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSBzdGlsbCBKYXZhU2Ny
aXB0IHJlZmVyZW5jZXMgdG8gYSBub2RlLCBidXQgaXQgaGFzIG90aGVyd2lzZSAiZmluaXNoZWQi
IGl0cyB3b3JrLgogICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIGEgbm90ZSBoYXMgZmluaXNoZWQg
cGxheWluZy4gIEl0IGlzIGtlcHQgYXJvdW5kLCBiZWNhdXNlIGl0IG1heSBiZSBwbGF5ZWQgYWdh
aW4gYXQgYSBsYXRlciB0aW1lLgogICAgIC8vIFRoZXkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUg
Y29udGV4dCdzIGdyYXBoIGxvY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCmluZGV4IGQwMzlmM2M2YWIyNmNh
NGY1YzlhNjQ3OTM1ZTg3NjlmOWZhMDRlMDguLmVlNzQ5NjA0MzUyYTdkYmZkODlkZGUxYmMyYzZh
NjI2Mjc2NGUzN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
UmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpSZWFsdGltZUFuYWx5c2VyTm9k
ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05v
ZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCiB7CiAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZUlucHV0KHRoaXMpKSk7CiAgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRw
dXQodGhpcywgMikpKTsKQEAgLTcwLDE1ICs3MCw2IEBAIHZvaWQgUmVhbHRpbWVBbmFseXNlck5v
ZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgb3V0cHV0QnVzLT5j
b3B5RnJvbSgqaW5wdXRCdXMpOwogfQogCi0vLyBXZSBvdmVycmlkZSBwdWxsSW5wdXRzKCkgYXMg
YW4gb3B0aW1pemF0aW9uIGFsbG93aW5nIHRoaXMgbm9kZSB0byB0YWtlIGFkdmFudGFnZSBvZiBp
bi1wbGFjZSBwcm9jZXNzaW5nLAotLy8gd2hlcmUgdGhlIGlucHV0IGlzIHNpbXBseSBwYXNzZWQg
dGhyb3VnaCB1bnByb2Nlc3NlZCB0byB0aGUgb3V0cHV0LgotLy8gTm90ZTogdGhpcyBvbmx5IGFw
cGxpZXMgaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbCBjb3VudHMgbWF0Y2guCi12b2lk
IFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
Ci17Ci0gICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAtIHRyeSB0byByZW5kZXIgZGlyZWN0bHkg
aW50byBvdXRwdXQgYnVzIGZvciBwYXNzLXRocm91Z2ggcHJvY2Vzc2luZyB3aGVyZSBwcm9jZXNz
KCkgZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLi4uCi0gICAgaW5wdXQoMCktPnB1bGwob3V0
cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQogdm9pZCBSZWFsdGltZUFuYWx5
c2VyTm9kZTo6cmVzZXQoKQogewogICAgIG1fYW5hbHlzZXIucmVzZXQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaApp
bmRleCBjZTM2NGE5OTk1ZWU2YWM3NmNkM2U0NjZmMWUxY2ZjYjQyMTdmMGE5Li4wODE5YzAzODY3
YzRjMjI4NmFkODM4YzE3N2M2NWFkNTJkZWY4Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCkBAIC0yNSwxMyAr
MjUsMTMgQEAKICNpZm5kZWYgUmVhbHRpbWVBbmFseXNlck5vZGVfaAogI2RlZmluZSBSZWFsdGlt
ZUFuYWx5c2VyTm9kZV9oCiAKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlICJBdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZS5oIgogI2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJl
YWx0aW1lQW5hbHlzZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitjbGFzcyBSZWFsdGltZUFu
YWx5c2VyTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVhbHRpbWVBbmFseXNlck5vZGU+IGNyZWF0ZShBdWRpb0Nv
bnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewpAQCAtNDIsNyArNDIsNiBA
QCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQXVkaW9Ob2RlCiAgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMo
c2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CiAKICAg
ICAvLyBKYXZhc2NyaXB0IGJpbmRpbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDhlN2YwMDQzMGQ1
MmMzODFkOTY1MDZkNmVjMWNmOTJhZjVmODkzMy4uNjk3ZjdhNjgwMjg2Y2M2NTI4ODgzZjdmYTNk
YzQxZWNkZTA3YjdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTU1Nyw2ICsxNTU3LDggQEAKICAg
ICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oJywKICAg
ICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QuY3Bw
JywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExp
c3QuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1
ZmZlci5jcHAnLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDBlNWM5NzJhYjVjZjg5MmNjNjMxNDc1NThmNWM3YjFkNDYwYjk5
MWEuLmJjZGJiNjY1Zjk4YjZhMjFkYWEwODMxM2I5YWViZmMyMzE0NjhiMzMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0wNC0yNiAgUmF5bW9uZCBMaXUgIDxyYXltb25kLmxpdUBpbnRlbC5j
b20+CisKKyAgICAgICAgTW9kaWZ5IFJlYWx0aW1lQW5hbHlzZXJOb2RlIHB1bGwgbWVjaGFuaXNt
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzUxNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVk
aW8vYXV0b21hdGljLXB1bGwtbm9kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDQtMjUgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2pz
L3JhbmRvbS1hcnJheS1nYy1zdHJlc3MgdGltZXMgb3V0IGluIGRlYnVnIG1vZGUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDExZGIyMWUyNjQ0ODVkYTJmMGU4NWVmNjAwOWU2NTgxNGY3ZmQ4ZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRo
ZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBiYXNlZCBub2RlcyB3b3JrIGNvcnJlY3RseS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlYWx0aW1lQW5hbHlzZXJOb2RlIGdv
dCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93
bnN0cmVhbSBub2RlLgorUEFTUyBSZWFsdGltZUFuYWx5c2VyTm9kZSBnb3QgcHVsbGVkIHdoZW4g
Y29ubmVjdGVkIGZyb20gdXBzdHJlYW0gbm9kZSBhbmQgdG8gZGVzdGluYXRpb24gbm9kZS4KK1BB
U1MgUmVhbHRpbWVBbmFseXNlck5vZGUgZGlkbid0IGdldCBwdWxsZWQgd2hlbiBpdCBzaG91bGQg
bm90LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMjM0Y2UwNTljZDIyNjM1MjdiZjI3ZDcwYzQwNzdmZDVjZjExZmQ3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5odG1sCkBA
IC0wLDAgKzEsMTM3IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGlu
Zy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0
aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUg
YmFzZWQgbm9kZXMgd29yayBjb3JyZWN0bHkuIik7CisKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAu
MDsKKy8vIFdlIGNhcmVmdWxseSBhcnJhbmdlIHRoZSByZW5kZXJMZW5ndGhJbkZyYW1lcyB0byBi
ZSBhIG11bHRpcGxlIG9mIHRoZSBBdWRpb05vZGUgcmVuZGVyaW5nIHF1YW50dW0gKEF1ZGlvTm9k
ZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKKy8vIHNvIHRoYXQgQXVkaW9Tb3VyY2VOb2RlIHdp
bGwgbm90IGZlZWQgdGFpbGluZyB6ZXJvZXMgaW50byB0aGUgY29udGV4dCBhbmQgZmFpbCB0aGlz
IHRlc3QuCit2YXIgcmVuZGVyTGVuZ3RoSW5GcmFtZXMgPSAyNTY7Cit2YXIgZmZ0U2l6ZSA9IDY0
OworCit2YXIgYXVkaW9EYXRhT25lID0gMjU1OyAvLyBBdWRpbyBkYXRhIDEuMCBpbiBVaW50OCBm
b3JtYXQgd2lsbCBiZSAyNTUuCit2YXIgYXVkaW9EYXRhWmVybyA9IDEyODsgLy8gQXVkaW8gZGF0
YSAwIGluIFVpbnQ4IGZvcm1hdCB3aWxsIGJlIDEyOC4KKwordmFyIGNvbnRleHQ7Cit2YXIgY29u
c3RhbnRCdWZmZXI7Cit2YXIgYnVmZmVyU291cmNlOwordmFyIGFuYWx5c2VyOworCitmdW5jdGlv
biBjb25zdHJ1Y3RDb21tb25HcmFwaCgpIHsKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDEsIHJlbmRlckxl
bmd0aEluRnJhbWVzLCBzYW1wbGVSYXRlKTsKKyAgICBjb25zdGFudEJ1ZmZlciA9IGNyZWF0ZUNv
bnN0YW50QnVmZmVyKGNvbnRleHQsIHJlbmRlckxlbmd0aEluRnJhbWVzLCAxKTsKKworICAgIGJ1
ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291
cmNlLmJ1ZmZlciA9IGNvbnN0YW50QnVmZmVyOworCisgICAgYW5hbHlzZXIgPSBjb250ZXh0LmNy
ZWF0ZUFuYWx5c2VyKCk7CisgICAgYW5hbHlzZXIuZmZ0U2l6ZSA9IGZmdFNpemU7CisKKyAgICBi
dWZmZXJTb3VyY2UuY29ubmVjdChhbmFseXNlcik7Cit9CisKK2Z1bmN0aW9uIHRlc3QxRmluaXNo
ZWQoKSB7CisgICAgdmFyIHRpbWVEb21haW5EYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7
CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRpbWVEb21haW5EYXRhKTsKKwor
ICAgIGlmICh0aW1lRG9tYWluRGF0YVswXSA+PSBhdWRpb0RhdGFPbmUpCisgICAgICAgIHRlc3RQ
YXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJv
bSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLiIpOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUgZmFpbGVkIHRvIGdldCBw
dWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0
cmVhbSBub2RlLiIpOworCisgICAgdGVzdDIoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFs
dGltZUFuYWx5c2VyIGNhbiBwdWxsIGRhdGEgd2hlbiB0aGVyZSBpcyBhbiB1cHN0cmVhbSBub2Rl
IGNvbm5lY3RlZCB0byBpdAorLy8gYnV0IGl0J3Mgbm90IGNvbm5lY3RlZCB0byBhIGRvd25zdHJl
YW0gbm9kZS4KK2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7
CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworCisgICAgY29udGV4dC5vbmNvbXBsZXRl
ID0gdGVzdDFGaW5pc2hlZDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QyRmluaXNoZWQoKSB7CisgICAgdmFyIHRpbWVEb21haW5EYXRhID0gbmV3IFVp
bnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRp
bWVEb21haW5EYXRhKTsKKworICAgIGlmICh0aW1lRG9tYWluRGF0YVswXSA+PSBhdWRpb0RhdGFP
bmUpCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQg
d2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBub2Rl
LiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUg
ZmFpbGVkIHRvIGJlIHB1bGxlZCB3aGVuIGNvbm5lY3RlZCBieSB1cHN0cmVhbSBub2RlIGFuZCB0
byBkZXN0aW5hdGlvbiBub2RlLiIpOworCisgICAgdGVzdDMoKTsKK30KKworLy8gVG8gdmVyaWZ5
IHRoZSByZWFsdGltZUFuYWx5c2VyIGNhbiBwcm9jZXNzIG5vcm1hbGx5IHdoZW4gdGhlcmUgaXMg
YW4gdXBzdHJlYW0gbm9kZSBjb25uZWN0ZWQgdG8gaXQKKy8vIGFuZCBpdCdzIGFsc28gY29ubmVj
dGVkIHRvIGEgZG93bnN0cmVhbSBub2RlIHdoaWNoIHVsdGltYXRlbHkgY29ubmVjdCB0byBhdWRp
byBkZXN0aW5hdGlvbi4KK2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdy
YXBoKCk7CisKKyAgICBhbmFseXNlci5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisg
ICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRl
c3QyRmluaXNoZWQ7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlv
biB0ZXN0M0ZpbmlzaGVkKCkgeworICAgIHZhciB0aW1lRG9tYWluRGF0YSA9IG5ldyBVaW50OEFy
cmF5KGZmdFNpemUpOworICAgIGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0aW1lRG9t
YWluRGF0YSk7CisKKyAgICAvLyBJZiByZWFsdGltZUFuYWx5c2VyIGhhc24ndCBwdWxsZWQgYW55
IGRhdGEsIHRoZSBkYXRhIGluIGJ1ZmZlciB3aWxsIGJlIDAuCisgICAgaWYgKHRpbWVEb21haW5E
YXRhWzBdID09IGF1ZGlvRGF0YVplcm8pCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1lQW5h
bHlzZXJOb2RlIGRpZG4ndCBnZXQgcHVsbGVkIHdoZW4gaXQgc2hvdWxkIG5vdC4iKTsKKyAgICBl
bHNlCisgICAgICAgIHRlc3RGYWlsZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGJlZW4gcHVsbGVk
IHdoZW4gaXQgc2hvdWxkIG5vdC4iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBU
byB2ZXJpZnkgdGhlIHJlYWx0aW1lQW5hbHlzZXIgd2lsbCBzdG9wIHB1bGxpbmcgaWYgaXQgaXMg
Y29ubmVjdGVkIHRvIGEgZG93bnN0cmVhbSBub2RlCisvLyB3aGljaCBpcyBub3QgdWx0aW1hdGx5
IGNvbm5lY3RlZCB0byBhbnkgYXVkaW8gZGVzdGluYXRpb24uCitmdW5jdGlvbiB0ZXN0MygpIHsK
KyAgICBjb25zdHJ1Y3RDb21tb25HcmFwaCgpOworCisgICAgdmFyIGdhaW4gPSBjb250ZXh0LmNy
ZWF0ZUdhaW5Ob2RlKCk7CisgICAgYW5hbHlzZXIuY29ubmVjdChnYWluKTsKKworICAgIGJ1ZmZl
clNvdXJjZS5ub3RlT24oMCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0ZXN0M0Zpbmlz
aGVkOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKworICAgIHRlc3QxKCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisK
KzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139316</attachid>
            <date>2012-04-27 18:58:49 -0700</date>
            <delta_ts>2012-04-27 19:18:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120428100455.patch</filename>
            <type>text/plain</type>
            <size>33353</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmU3YWM4YzEyYWEwZjgz
MTYxNjBjNjVmMGVjNGNjZTk1YzU4MDg0OS4uMTJhYzU5ODU0ZWIwNDY4NDFmNmFhNjQ3ODVjYzBm
YzA2MzJiZjYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA0LTI3ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5o
dG1sCisKKyAgICAgICAgVGhpcyBjb21taXQgYWxzbyBpbmNsdWRlcyBhIHBhdGNoIGZyb20gQ2hy
aXMgUm9nZXJzIGZvciBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ouCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpwdWxs
SW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpkaXNjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjaGVja051
bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRh
c2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRh
c2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjphZGRB
dXRvbWF0aWNQdWxsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnJlbW92
ZUF1dG9tYXRpY1B1bGxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dXBk
YXRlQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2Rlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoQXVkaW9Ob2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9O
b2RlT3V0cHV0Ojppc0Nvbm5lY3RlZCk6CisgICAgICAgIChBdWRpb05vZGVPdXRwdXQpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5hbHlzZXJOb2RlKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmg6CisgICAg
ICAgIChSZWFsdGltZUFuYWx5c2VyTm9kZSk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0wNC0yNyAg
TmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IGhpZ2gt
cmVzb2x1dGlvbiB0aW1lIHZpYSB3aW5kb3cucGVyZm9ybWFuY2Uud2Via2l0Tm93KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDg1ZjUwYzQzYjY1NjYzNWM2YzQ2NTg3Njc2MmUw
ODZmNTMxZmY3MmMuLmZlMDVlYWI4NmE3NDRkNmI2MzgxMGM5NWVkMmM0NWU1ZTFiZWM3MGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTQ3MSw2ICs1NDcxLDggQEAgaWYgRU5B
QkxFX1dFQl9BVURJTwogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNp
Y0luc3BlY3Rvck5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwNmMxMjU3NjRhMGI1OWFhNjNlYmFlZDA1
OWM5NmQ0Yzk5YWZlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtMCwwICsxLDEyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKKworI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9CYXNp
Y0luc3BlY3Rvck5vZGU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKEF1ZGlvQ29udGV4dCogY29u
dGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVS
YXRlKQorICAgICwgbV9uZWVkQXV0b21hdGljUHVsbChmYWxzZSkKK3sKKyAgICBhZGRJbnB1dChh
ZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQ
dHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOworfQorCisvLyBXZSBvdmVycmlkZSBw
dWxsSW5wdXRzKCkgYXMgYW4gb3B0aW1pemF0aW9uIGFsbG93aW5nIHRoaXMgbm9kZSB0byB0YWtl
IGFkdmFudGFnZSBvZiBpbi1wbGFjZSBwcm9jZXNzaW5nLAorLy8gd2hlcmUgdGhlIGlucHV0IGlz
IHNpbXBseSBwYXNzZWQgdGhyb3VnaCB1bnByb2Nlc3NlZCB0byB0aGUgb3V0cHV0LgorLy8gTm90
ZTogdGhpcyBvbmx5IGFwcGxpZXMgaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbCBjb3Vu
dHMgbWF0Y2guCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpwdWxsSW5wdXRzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAtIHRyeSB0
byByZW5kZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVzIGZvciBwYXNzLXRocm91Z2ggcHJvY2Vz
c2luZyB3aGVyZSBwcm9jZXNzKCkgZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLi4uCisgICAg
aW5wdXQoMCktPnB1bGwob3V0cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwor
dm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6Y29ubmVjdChBdWRpb05vZGUqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEF1ZGlvQ29u
dGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKworICAgIEF1ZGlvTm9kZTo6Y29u
bmVjdChkZXN0aW5hdGlvbiwgb3V0cHV0SW5kZXgsIGlucHV0SW5kZXgsIGVjKTsKKyAgICB1cGRh
dGVQdWxsU3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmRpc2Nv
bm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9j
a2VyKGNvbnRleHQoKSk7CisKKyAgICBBdWRpb05vZGU6OmRpc2Nvbm5lY3Qob3V0cHV0SW5kZXgs
IGVjKTsKKyAgICB1cGRhdGVQdWxsU3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBp
bnB1dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBBU1NFUlQoaW5wdXQgPT0gdGhpcy0+aW5wdXQo
MCkpOworICAgIGlmIChpbnB1dCAhPSB0aGlzLT5pbnB1dCgwKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGlucHV0LT5udW1iZXJPZkNoYW5uZWxz
KCk7CisKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyAhPSBvdXRwdXQoMCktPm51bWJlck9mQ2hh
bm5lbHMoKSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFubmVsIGNv
dW50IHRvIGFueSBub2RlcyBjb25uZWN0ZWQgZnVydGhlciBkb3duc3RyZWFtIGluIHRoZSBncmFw
aC4KKyAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5l
bHMpOworICAgIH0KKworICAgIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5w
dXQoaW5wdXQpOworCisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKK3sKKyAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAob3V0cHV0KDApLT5pc0Nvbm5lY3RlZCgp
KSB7CisgICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29ubmVj
dGVkIHRvIGEgZG93bnN0cmVhbSBub2RlLCBpdCB3aWxsIGdldCBwdWxsZWQgYnkgdGhlCisgICAg
ICAgIC8vIGRvd25zdHJlYW0gbm9kZSwgdGh1cyByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdz
IGF1dG9tYXRpYyBwdWxsIGxpc3QuCisgICAgICAgIGlmIChtX25lZWRBdXRvbWF0aWNQdWxsKSB7
CisgICAgICAgICAgICBjb250ZXh0KCktPnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOwor
ICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zID0gaW5w
dXQoMCktPm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsKKyAgICAgICAgaWYgKG51bWJl
ck9mSW5wdXRDb25uZWN0aW9ucyAmJiAhbV9uZWVkQXV0b21hdGljUHVsbCkgeworICAgICAgICAg
ICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBub3QgY29ubmVjdGVkIHRv
IGFueSBkb3duc3RyZWFtIG5vZGUgd2hpbGUgc3RpbGwgY29ubmVjdGVkIGZyb20KKyAgICAgICAg
ICAgIC8vIHVwc3RyZWFtIG5vZGUocyksIGFkZCBpdCB0byB0aGUgY29udGV4dCdzIGF1dG9tYXRp
YyBwdWxsIGxpc3QuCisgICAgICAgICAgICBjb250ZXh0KCktPmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KHRoaXMpOworICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoIW51bWJlck9mSW5wdXRDb25uZWN0aW9ucyAmJiBtX25lZWRBdXRvbWF0aWNQ
dWxsKSB7CisgICAgICAgICAgICAvLyBUaGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29u
bmVjdGVkIHRvIG5vdGhpbmcsIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGlj
IHB1bGwgbGlzdC4KKyAgICAgICAgICAgIGNvbnRleHQoKS0+cmVtb3ZlQXV0b21hdGljUHVsbE5v
ZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQdWxsID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2M5NDNkNjE2NDg1
NzViYWUwOTMyZWFiNGNhMDZkZmVhZjBkZmFhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGVfaAorI2RlZmluZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisKKyNpbmNsdWRlICJB
dWRpb05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hl
cmUgdGhlIG91dHB1dCBtaWdodCBub3QgbmVjZXNzYXJpbHkgY29ubmVjdCB0byBhbm90aGVyIG5v
ZGUncyBpbnB1dC4KKy8vIElmIHRoZSBvdXRwdXQgaXMgbm90IGNvbm5lY3RlZCB0byBhbnkgb3Ro
ZXIgbm9kZSwgdGhlbiB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUncyBwcm9jZXNzSWZOZWNl
c3NhcnkoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5CisvLyBBdWRp
b0NvbnRleHQgYmVmb3JlIHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSBzbyB0aGF0IGl0
IGNhbiBpbnNwZWN0IHRoZSBhdWRpbyBzdHJlYW0uCitjbGFzcyBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIEF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworCisgICAgLy8gQXVkaW9O
b2RlCisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7
CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQgb3V0cHV0SW5k
ZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1
dCopOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlUHVsbFN0YXR1cygpOworICAgIGJvb2wg
bV9uZWVkQXV0b21hdGljUHVsbDsgLy8gV2hlbiBzZXR0aW5nIHRvIHRydWUsIEF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlIHdpbGwgYmUgcHVsbGVkIGF1dG9tYXRpY2xseSBieSBBdWRpb0NvbnRleHQg
YmVmb3JlIHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCBm
Nzg5MDViZTY3YTcxMDNiNWQ1MWNhYzZhYWRkNzY0MWEzMGI3N2QwLi40YjI4OTZlMTk0YjVmNWM2
NDIwYWRjNjcxNTRiYTUyZGY2NWVjYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAgQXVkaW9Db250
ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKICAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCiAgICAgLCBtX2lzRGVsZXRpb25T
Y2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyhm
YWxzZSkKICAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCiAgICAgLCBtX2F1ZGlvVGhyZWFkKDAp
CiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKQEAg
LTE2NCw2ICsxNjUsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9j
dW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdAogICAgICwgbV9pc0F1ZGlv
VGhyZWFkRmluaXNoZWQoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV9kZXN0aW5hdGlvbk5vZGUoMCkKKyAgICAsIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0
aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXVkaW9UaHJl
YWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVy
KQpAQCAtMjAwLDYgKzIwMiw4IEBAIEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCiAgICAg
QVNTRVJUKCFtX25vZGVzVG9EZWxldGUuc2l6ZSgpKTsKICAgICBBU1NFUlQoIW1fcmVmZXJlbmNl
ZE5vZGVzLnNpemUoKSk7CiAgICAgQVNTRVJUKCFtX2ZpbmlzaGVkTm9kZXMuc2l6ZSgpKTsKKyAg
ICBBU1NFUlQoIW1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX3Jl
bmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5zaXplKCkpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4
dDo6bGF6eUluaXRpYWxpemUoKQpAQCAtNjYyLDcgKzY2Niw5IEBAIHZvaWQgQXVkaW9Db250ZXh0
OjpoYW5kbGVQcmVSZW5kZXJUYXNrcygpCiAgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBh
bnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVPdXRwdXRzLgogICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOwogICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9k
ZU91dHB1dHMoKTsKLSAgICAgICAgCisKKyAgICAgICAgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVz
KCk7CisKICAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKICAgICAgICAgICAgIHVubG9jaygp
OwogICAgIH0KQEAgLTY5MCw3ICs2OTYsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9z
dFJlbmRlclRhc2tzKCkKICAgICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBB
dWRpb05vZGVJbnB1dHMgYW5kIEF1ZGlvTm9kZU91dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5
QXVkaW9Ob2RlSW5wdXRzKCk7CiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygp
OwotICAgICAgICAKKworICAgICAgICB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKKwogICAg
ICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQogICAgICAgICAgICAgdW5sb2NrKCk7CiAgICAgfQpA
QCAtNzEyLDYgKzcyMCwxMiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1
ZGlvTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIG1fbm9k
ZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7CisKKyAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBi
ZXN0IHRpbWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxp
c3QsCisgICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRo
ZSBncmFwaCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzCisgICAgLy8gZ2V0
IGNoYW5jZSB0byBzY2hlZHVsZSB0aGUgZGVsZXRpb24gd29yaywgdGhlIHVwZGF0ZUF1dG9tYXRp
Y1B1bGxOb2RlcygpIGFsc28gZ2V0IGNoYW5jZSB0byBtb2RpZnkKKyAgICAvLyB0aGUgcmVuZGVy
aW5nQXV0b21hdGljUHVsbE5vZGVzLgorICAgIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKG5vZGUp
OwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRpb24oKQpAQCAtODAz
LDYgKzgxNyw1MiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRw
dXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCit2b2lkIEF1
ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2RlKQoreworICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAoIW1fYXV0b21hdGljUHVsbE5vZGVz
LmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2Rl
KTsKKyAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOworICAg
IH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlv
Tm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1f
YXV0b21hdGljUHVsbE5vZGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgIG1fYXV0b21hdGlj
UHVsbE5vZGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVk
VXBkYXRpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1
dG9tYXRpY1B1bGxOb2RlcygpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKworICAg
IGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZykgeworICAgICAgICAvLyBDb3B5
IGZyb20gbV9hdXRvbWF0aWNQdWxsTm9kZXMgdG8gbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXMuCisgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9t
YXRpY1B1bGxOb2Rlcy5zaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIGogPSAwOworICAgICAg
ICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlKj46Oml0ZXJhdG9yIGkgPSBtX2F1dG9tYXRpY1B1bGxO
b2Rlcy5iZWdpbigpOyBpICE9IG1fYXV0b21hdGljUHVsbE5vZGVzLmVuZCgpOyArK2ksICsraikg
eworICAgICAgICAgICAgQXVkaW9Ob2RlKiBvdXRwdXQgPSAqaTsKKyAgICAgICAgICAgIG1fcmVu
ZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2pdID0gb3V0cHV0OworICAgICAgICB9CisKKyAgICAg
ICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisK
K3ZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNz
SWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBB
dWRpb0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggNTI1NGVmNjRmZGY1NTIwZjAxMDZiMTk4
OWFmMGJkZGJjOThkNjg3Ni4uZWRiODdlN2U0ZmRjODE3ZWRlNmEyOGRmZGIzNGMxN2I4MWM3MTA1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5o
CkBAIC0xNDgsNyArMTQ4LDE1IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlv
biBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIg
cXVhbnR1bS4KICAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKICAgICB2b2lk
IGRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0gICAgCisKKyAgICAvLyBBdWRpb0NvbnRleHQgY2FuIHB1
bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gZXZlbiB3aGVuIHRo
ZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZXMuCisgICAgLy8gVGhl
c2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hvIHdhbnQgdG8gYWRkL3Jl
bW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1bGwgbGlzdHMuCisgICAg
dm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKKyAgICB2b2lkIHJlbW92ZUF1
dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworCisgICAgLy8gQ2FsbGVkIHJpZ2h0IGJlZm9y
ZSBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSB0byBoYW5kbGUgbm9kZXMgd2hpY2ggbmVlZCB0byBi
ZSBwdWxsZWQgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhpbmcuCisg
ICAgdm9pZCBwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OworCiAgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBtYWRl
LgogICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlvbkNvdW50KCkKICAgICB7CkBAIC0yODEsNiAr
Mjg5LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygp
OwogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CiAKKyAgICAvLyBGb3Ig
dGhlIHNha2Ugb2YgdGhyZWFkIHNhZmV0eSwgd2UgbWFpbnRhaW4gYSBzZXBlcmF0ZSBWZWN0b3Ig
b2YgYXV0b21hdGljIHB1bGwgbm9kZXMgZm9yIHJlbmRlcmluZyBpbiBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2Rlcy4KKyAgICAvLyBJdCB3aWxsIGJlIGNvcGllZCBmcm9tIG1fYXV0b21hdGlj
UHVsbE5vZGVzIGJ5IHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpIGF0IHRoZSB2ZXJ5IHN0YXJ0
IG9yIGVuZCBvZiB0aGUgcmVuZGVyaW5nIHF1YW50dW0uCisgICAgSGFzaFNldDxBdWRpb05vZGUq
PiBtX2F1dG9tYXRpY1B1bGxOb2RlczsKKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9yZW5kZXJp
bmdBdXRvbWF0aWNQdWxsTm9kZXM7CisgICAgLy8gbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBk
YXRpbmcga2VlcHMgdHJhY2sgaWYgbV9hdXRvbWF0aWNQdWxsTm9kZXMgaXMgbW9kaWZpZWQuCisg
ICAgYm9vbCBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZzsKKyAgICB2b2lkIHVwZGF0
ZUF1dG9tYXRpY1B1bGxOb2RlcygpOworCiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291bnQ7
CiAKICAgICAvLyBHcmFwaCBsb2NraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA2ZTUyN2JiZWUz
NzE0MGQwNzNhMzEwMTljZWI0MzEzZjZhNGMzMzI0Li42ZjQ4OWIyYTkyMzY0NTI1MmIzMmFiYWY2
Nzg3NGZjNDM3MmIzMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtODAsNiArODAsOSBAQCB2b2lk
IEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3RpbmF0aW9u
QnVzLCBzaXplX3QgbnVtYmVyTwogICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+Y29weUZyb20oKnJl
bmRlcmVkQnVzKTsKICAgICB9CiAKKyAgICAvLyBQcm9jZXNzIG5vZGVzIHdoaWNoIG5lZWQgYSBs
aXR0bGUgZXh0cmEgaGVscCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhp
bmcsIGJ1dCBzdGlsbCBuZWVkIHRvIHByb2Nlc3MuCisgICAgY29udGV4dCgpLT5wcm9jZXNzQXV0
b21hdGljUHVsbE5vZGVzKG51bWJlck9mRnJhbWVzKTsKKwogICAgIC8vIExldCB0aGUgY29udGV4
dCB0YWtlIGNhcmUgb2YgYW55IGJ1c2luZXNzIGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVh
bnR1bS4KICAgICBjb250ZXh0KCktPmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKaW5kZXggYzI2MTRjYjNi
MTJkNmQxNTUwZmRmNzRmODQ4OGU0MWY0NWY5Y2RhMi4uNjRjNWYyNjJlNDIyMDZkMTgzYjdhOTI0
OGJlZjIxMmIwMGFkNGFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5oCkBAIC0xMTYsOSArMTE2LDkgQEAgcHVibGljOgogICAgIEF1ZGlvTm9kZU91dHB1
dCogb3V0cHV0KHVuc2lnbmVkKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkIGJ5
IGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBtZXRob2RzLgotICAgIHZvaWQgY29ubmVjdChBdWRp
b05vZGUqLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVuc2lnbmVk
IG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dm9pZCBjb25uZWN0KEF1ZGlvUGFyYW0qLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dElu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBj
b25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgKaW5kZXggODJiZjI5ZjVhNDc1NDhmNDQx
MTRjMDA3NzVjMzBkZjllMmEzMjczOC4uM2Y5NDkxYTRmZTg4ZjY4OWY5MDU0ZTUwYWYxMGU4MTQ5
ZWUwN2MxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGVPdXRwdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZU91dHB1dC5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkNoYW5uZWxzOyB9CiAgICAg
Ym9vbCBpc0NoYW5uZWxDb3VudEtub3duKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZDaGFubmVs
cygpID4gMDsgfQogCisgICAgYm9vbCBpc0Nvbm5lY3RlZCgpIHsgcmV0dXJuIGZhbk91dENvdW50
KCkgPiAwIHx8IHBhcmFtRmFuT3V0Q291bnQoKSA+IDA7IH0KKwogICAgIC8vIERpc2FibGUvRW5h
YmxlIGhhcHBlbnMgd2hlbiB0aGVyZSBhcmUgc3RpbGwgSmF2YVNjcmlwdCByZWZlcmVuY2VzIHRv
IGEgbm9kZSwgYnV0IGl0IGhhcyBvdGhlcndpc2UgImZpbmlzaGVkIiBpdHMgd29yay4KICAgICAv
LyBGb3IgZXhhbXBsZSwgd2hlbiBhIG5vdGUgaGFzIGZpbmlzaGVkIHBsYXlpbmcuICBJdCBpcyBr
ZXB0IGFyb3VuZCwgYmVjYXVzZSBpdCBtYXkgYmUgcGxheWVkIGFnYWluIGF0IGEgbGF0ZXIgdGlt
ZS4KICAgICAvLyBUaGV5IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBs
b2NrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGlt
ZUFuYWx5c2VyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcAppbmRleCBkMDM5ZjNjNmFiMjZjYTRmNWM5YTY0NzkzNWU4NzY5
ZjlmYTA0ZTA4Li5lZTc0OTYwNDM1MmE3ZGJmZDg5ZGRlMWJjMmM2YTYyNjI3NjRlMzdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5h
bHlzZXJOb2RlLmNwcApAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBS
ZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVhbHRpbWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBs
ZVJhdGUpCisgICAgOiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KQogewogICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwog
ICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CkBA
IC03MCwxNSArNzAsNiBAQCB2b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9jZXNzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgICAgIG91dHB1dEJ1cy0+Y29weUZyb20oKmlucHV0QnVz
KTsKIH0KIAotLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBh
bGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2lu
ZywKLS8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNz
ZWQgdG8gdGhlIG91dHB1dC4KLS8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1
dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1hdGNoLgotdm9pZCBSZWFsdGltZUFuYWx5c2Vy
Tm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRl
ciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBm
b3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0
byBkbyBhbnl0aGluZy4uLgotICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZy
YW1lc1RvUHJvY2Vzcyk7Ci19Ci0KIHZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnJlc2V0KCkK
IHsKICAgICBtX2FuYWx5c2VyLnJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKaW5kZXggY2UzNjRhOTk5NWVl
NmFjNzZjZDNlNDY2ZjFlMWNmY2I0MjE3ZjBhOS4uMDgxOWMwMzg2N2M0YzIyODZhZDgzOGMxNzdj
NjVhZDUyZGVmOGNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaWZuZGVm
IFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gKICNkZWZpbmUgUmVhbHRpbWVBbmFseXNlck5vZGVfaAog
Ci0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUuaCIKICNpbmNsdWRlICJSZWFsdGltZUFuYWx5c2VyLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9k
ZSA6IHB1YmxpYyBBdWRpb05vZGUgeworY2xhc3MgUmVhbHRpbWVBbmFseXNlck5vZGUgOiBwdWJs
aWMgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBm
bG9hdCBzYW1wbGVSYXRlKQogICAgIHsKQEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIEF1ZGlvTm9kZQogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCiAgICAgLy8gSmF2YXNjcmlwdCBi
aW5kaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGY5ZjAzYzQyYmNhYjY5Mzc0Mzc0NTZkMTIxNjhh
MTQyYzZlNmJiZjkuLjBhZDk3MWRiMGYyNWQyNmZmYmJmNGZlODc5YTIxNjRkNjJhMjcyYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTE1NTcsNiArMTU1Nyw4IEBACiAgICAgICAgICAgICAnTW9kdWxl
cy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCcsCiAgICAgICAgICAgICAnTW9kdWxl
cy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmNwcCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmgnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgnLAogICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwJywK
ICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgn
LAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAw
MWQxZDBmOTI1ZGZjM2MzMzdlNmFlZTlmMGFlZDA1OTJhODljNThkLi5mYzA1ZGVlNWJiMDUxYjMw
OTk5YWUyZmU1MjY3MTkwZmQwZjFhNjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjkwLDYgKzYyOTAsOCBAQAogCQlGRDU4
MUZBRjE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1ODFGQUMxNTIwRjkxRjAwM0E3QTc1IC8qIE9z
Y2lsbGF0b3IuaCAqLzsgfTsKIAkJRkQ1ODFGQjQxNTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDU4
MUZCMTE1MjBGOTNCMDAzQTdBNzUgLyogV2F2ZVRhYmxlLmNwcCAqLzsgfTsKIAkJRkQ1ODFGQjUx
NTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1ODFGQjIxNTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJs
ZS5oICovOyB9OworCQlGRDYyOUVBMzE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZENjI5RUExMTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oICov
OyB9OworCQlGRDYyOUVBNDE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2
MjlFQTIxNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCAqLzsg
fTsKIAkJRkQ2MkY1MkUxNDU4OThEODAwOTRCMEVEIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENjJG
NTJEMTQ1ODk4RDgwMDk0QjBFRCAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmggKi87IH07
CiAJCUZENkVEMkMzMTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkVEMkMx
MTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLzsgfTsKIAkJ
RkQ2RUQyQzQxMzZCOEU0MjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkVEMkMyMTM2QjhF
NDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi87IH07CkBAIC0xMzUxNiw2
ICsxMzUxOCw4IEBACiAJCUZENTgxRkIxMTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2F2ZVRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ1ODFGQjIxNTIwRjkzQjAwM0E3QTc1IC8qIFdh
dmVUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXZlVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ1ODFGQjMxNTIwRjkzQjAwM0E3QTc1IC8q
IFdhdmVUYWJsZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2F2ZVRhYmxlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQ2MjlFQTExNTRCNDcxNjAwMDZEMDI2IC8qIEF1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZENjI5RUEyMTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENjJGNTJEMTQ1ODk4RDgw
MDk0QjBFRCAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkQ2RUQyQzExMzZCOEU0MjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZE
NkVEMkMyMTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMzU5LDYgKzIxMzYzLDggQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUZENTY4NkM3MTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rl
ci5jcHAgKi8sCiAJCQkJRkQ1Njg2QzgxM0FDMTgwMjAwQjY5QzY4IC8qIEFzeW5jQXVkaW9EZWNv
ZGVyLmggKi8sCisJCQkJRkQ2MjlFQTExNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlLmggKi8sCisJCQkJRkQ2MjlFQTIxNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcCAqLywKIAkJCQlGRDMxNUZBQzEyQjAyNjc1MDBDMUEzNTkgLyog
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwICovLAogCQkJCUZEMzE1RkFEMTJCMDI2NzUwMEMx
QTM1OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oICovLAogCQkJCUZEMzE1RkFFMTJCMDI2
NzUwMEMxQTM1OSAvKiBBdWRpb0J1ZmZlci5jcHAgKi8sCkBAIC0yNDgzMCw2ICsyNDgzNiw3IEBA
CiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQ4QzQ2RUMxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlvU2NoZWR1bGVkU291
cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ2MjlFQTMxNTRCNDcxNjAwMDZEMDI2IC8q
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3ODQ1LDYgKzI3
ODUyLDcgQEAKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ4QzQ2RUIxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlv
U2NoZWR1bGVkU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDYyOUVBNDE1NEI0
NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMTdlY2JiZjg0NDIwZGFjODAyOGJmMjNiOTBlNTJlY2ZlYzEyMjkyNS4uYzhhZWEy
M2FkMDRiYTc2ZjJlNzA0NTJmYTBmOWYxOTI4MTZjM2MxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTA0LTI3ICBSYXltb25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAg
ICAgICBNb2RpZnkgUmVhbHRpbWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9hdXRvbWF0
aWMtcHVsbC1ub2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXV0
b21hdGljLXB1bGwtbm9kZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0yNyAgTmF0IER1Y2EgIDxu
ZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IGhpZ2gtcmVzb2x1dGlvbiB0
aW1lIHZpYSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDEx
ZGIyMWUyNjQ0ODVkYTJmMGU4NWVmNjAwOWU2NTgxNGY3ZmQ4ZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZSBiYXNlZCBub2RlcyB3b3JrIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCitQQVNTIFJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBj
b25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLgor
UEFTUyBSZWFsdGltZUFuYWx5c2VyTm9kZSBnb3QgcHVsbGVkIHdoZW4gY29ubmVjdGVkIGZyb20g
dXBzdHJlYW0gbm9kZSBhbmQgdG8gZGVzdGluYXRpb24gbm9kZS4KK1BBU1MgUmVhbHRpbWVBbmFs
eXNlck5vZGUgZGlkbid0IGdldCBwdWxsZWQgd2hlbiBpdCBzaG91bGQgbm90LgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjM0Y2UwNTlj
ZDIyNjM1MjdiZjI3ZDcwYzQwNzdmZDVjZjExZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5odG1sCkBAIC0wLDAgKzEsMTM3IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3Qg
dmVyaWZpZXMgdGhhdCB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgYmFzZWQgbm9kZXMgd29y
ayBjb3JyZWN0bHkuIik7CisKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKy8vIFdlIGNhcmVm
dWxseSBhcnJhbmdlIHRoZSByZW5kZXJMZW5ndGhJbkZyYW1lcyB0byBiZSBhIG11bHRpcGxlIG9m
IHRoZSBBdWRpb05vZGUgcmVuZGVyaW5nIHF1YW50dW0gKEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1Np
emVJbkZyYW1lcykKKy8vIHNvIHRoYXQgQXVkaW9Tb3VyY2VOb2RlIHdpbGwgbm90IGZlZWQgdGFp
bGluZyB6ZXJvZXMgaW50byB0aGUgY29udGV4dCBhbmQgZmFpbCB0aGlzIHRlc3QuCit2YXIgcmVu
ZGVyTGVuZ3RoSW5GcmFtZXMgPSAyNTY7Cit2YXIgZmZ0U2l6ZSA9IDY0OworCit2YXIgYXVkaW9E
YXRhT25lID0gMjU1OyAvLyBBdWRpbyBkYXRhIDEuMCBpbiBVaW50OCBmb3JtYXQgd2lsbCBiZSAy
NTUuCit2YXIgYXVkaW9EYXRhWmVybyA9IDEyODsgLy8gQXVkaW8gZGF0YSAwIGluIFVpbnQ4IGZv
cm1hdCB3aWxsIGJlIDEyOC4KKwordmFyIGNvbnRleHQ7Cit2YXIgY29uc3RhbnRCdWZmZXI7Cit2
YXIgYnVmZmVyU291cmNlOwordmFyIGFuYWx5c2VyOworCitmdW5jdGlvbiBjb25zdHJ1Y3RDb21t
b25HcmFwaCgpIHsKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIGNv
bnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDEsIHJlbmRlckxlbmd0aEluRnJhbWVzLCBz
YW1wbGVSYXRlKTsKKyAgICBjb25zdGFudEJ1ZmZlciA9IGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNv
bnRleHQsIHJlbmRlckxlbmd0aEluRnJhbWVzLCAxKTsKKworICAgIGJ1ZmZlclNvdXJjZSA9IGNv
bnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IGNv
bnN0YW50QnVmZmVyOworCisgICAgYW5hbHlzZXIgPSBjb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7
CisgICAgYW5hbHlzZXIuZmZ0U2l6ZSA9IGZmdFNpemU7CisKKyAgICBidWZmZXJTb3VyY2UuY29u
bmVjdChhbmFseXNlcik7Cit9CisKK2Z1bmN0aW9uIHRlc3QxRmluaXNoZWQoKSB7CisgICAgdmFy
IHRpbWVEb21haW5EYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIu
Z2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRpbWVEb21haW5EYXRhKTsKKworICAgIGlmICh0aW1lRG9t
YWluRGF0YVswXSA+PSBhdWRpb0RhdGFPbmUpCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1l
QW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2Rl
IGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZh
aWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUgZmFpbGVkIHRvIGdldCBwdWxsZWQgd2hlbiBjb25u
ZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLiIpOwor
CisgICAgdGVzdDIoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIGNh
biBwdWxsIGRhdGEgd2hlbiB0aGVyZSBpcyBhbiB1cHN0cmVhbSBub2RlIGNvbm5lY3RlZCB0byBp
dAorLy8gYnV0IGl0J3Mgbm90IGNvbm5lY3RlZCB0byBhIGRvd25zdHJlYW0gbm9kZS4KK2Z1bmN0
aW9uIHRlc3QxKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBidWZmZXJT
b3VyY2Uubm90ZU9uKDApOworCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gdGVzdDFGaW5pc2hl
ZDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QyRmlu
aXNoZWQoKSB7CisgICAgdmFyIHRpbWVEb21haW5EYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6
ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRpbWVEb21haW5EYXRhKTsK
KworICAgIGlmICh0aW1lRG9tYWluRGF0YVswXSA+PSBhdWRpb0RhdGFPbmUpCisgICAgICAgIHRl
c3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQg
ZnJvbSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBub2RlLiIpOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUgZmFpbGVkIHRvIGJlIHB1
bGxlZCB3aGVuIGNvbm5lY3RlZCBieSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBu
b2RlLiIpOworCisgICAgdGVzdDMoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFu
YWx5c2VyIGNhbiBwcm9jZXNzIG5vcm1hbGx5IHdoZW4gdGhlcmUgaXMgYW4gdXBzdHJlYW0gbm9k
ZSBjb25uZWN0ZWQgdG8gaXQKKy8vIGFuZCBpdCdzIGFsc28gY29ubmVjdGVkIHRvIGEgZG93bnN0
cmVhbSBub2RlIHdoaWNoIHVsdGltYXRlbHkgY29ubmVjdCB0byBhdWRpbyBkZXN0aW5hdGlvbi4K
K2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBh
bmFseXNlci5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgYnVmZmVyU291cmNl
Lm5vdGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QyRmluaXNoZWQ7Cisg
ICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0M0ZpbmlzaGVk
KCkgeworICAgIHZhciB0aW1lRG9tYWluRGF0YSA9IG5ldyBVaW50OEFycmF5KGZmdFNpemUpOwor
ICAgIGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0aW1lRG9tYWluRGF0YSk7CisKKyAg
ICAvLyBJZiByZWFsdGltZUFuYWx5c2VyIGhhc24ndCBwdWxsZWQgYW55IGRhdGEsIHRoZSBkYXRh
IGluIGJ1ZmZlciB3aWxsIGJlIDAuCisgICAgaWYgKHRpbWVEb21haW5EYXRhWzBdID09IGF1ZGlv
RGF0YVplcm8pCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGRpZG4n
dCBnZXQgcHVsbGVkIHdoZW4gaXQgc2hvdWxkIG5vdC4iKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGJlZW4gcHVsbGVkIHdoZW4gaXQgc2hvdWxk
IG5vdC4iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBUbyB2ZXJpZnkgdGhlIHJl
YWx0aW1lQW5hbHlzZXIgd2lsbCBzdG9wIHB1bGxpbmcgaWYgaXQgaXMgY29ubmVjdGVkIHRvIGEg
ZG93bnN0cmVhbSBub2RlCisvLyB3aGljaCBpcyBub3QgdWx0aW1hdGx5IGNvbm5lY3RlZCB0byBh
bnkgYXVkaW8gZGVzdGluYXRpb24uCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBjb25zdHJ1Y3RD
b21tb25HcmFwaCgpOworCisgICAgdmFyIGdhaW4gPSBjb250ZXh0LmNyZWF0ZUdhaW5Ob2RlKCk7
CisgICAgYW5hbHlzZXIuY29ubmVjdChnYWluKTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24o
MCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0ZXN0M0ZpbmlzaGVkOworICAgIGNvbnRl
eHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAg
IHRlc3QxKCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139321</attachid>
            <date>2012-04-27 19:18:31 -0700</date>
            <delta_ts>2012-05-01 18:30:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120428102436.patch</filename>
            <type>text/plain</type>
            <size>33353</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmU3YWM4YzEyYWEwZjgz
MTYxNjBjNjVmMGVjNGNjZTk1YzU4MDg0OS4uMTJhYzU5ODU0ZWIwNDY4NDFmNmFhNjQ3ODVjYzBm
YzA2MzJiZjYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA0LTI3ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5o
dG1sCisKKyAgICAgICAgVGhpcyBjb21taXQgYWxzbyBpbmNsdWRlcyBhIHBhdGNoIGZyb20gQ2hy
aXMgUm9nZXJzIGZvciBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ouCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpwdWxs
SW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpkaXNjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjaGVja051
bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRh
c2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRh
c2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjphZGRB
dXRvbWF0aWNQdWxsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnJlbW92
ZUF1dG9tYXRpY1B1bGxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dXBk
YXRlQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2Rlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoQXVkaW9Ob2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9O
b2RlT3V0cHV0Ojppc0Nvbm5lY3RlZCk6CisgICAgICAgIChBdWRpb05vZGVPdXRwdXQpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5hbHlzZXJOb2RlKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmg6CisgICAg
ICAgIChSZWFsdGltZUFuYWx5c2VyTm9kZSk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0wNC0yNyAg
TmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IGhpZ2gt
cmVzb2x1dGlvbiB0aW1lIHZpYSB3aW5kb3cucGVyZm9ybWFuY2Uud2Via2l0Tm93KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDg1ZjUwYzQzYjY1NjYzNWM2YzQ2NTg3Njc2MmUw
ODZmNTMxZmY3MmMuLmZlMDVlYWI4NmE3NDRkNmI2MzgxMGM5NWVkMmM0NWU1ZTFiZWM3MGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTQ3MSw2ICs1NDcxLDggQEAgaWYgRU5B
QkxFX1dFQl9BVURJTwogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNp
Y0luc3BlY3Rvck5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwNmMxMjU3NjRhMGI1OWFhNjNlYmFlZDA1
OWM5NmQ0Yzk5YWZlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtMCwwICsxLDEyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKKworI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9CYXNp
Y0luc3BlY3Rvck5vZGU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKEF1ZGlvQ29udGV4dCogY29u
dGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVS
YXRlKQorICAgICwgbV9uZWVkQXV0b21hdGljUHVsbChmYWxzZSkKK3sKKyAgICBhZGRJbnB1dChh
ZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQ
dHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOworfQorCisvLyBXZSBvdmVycmlkZSBw
dWxsSW5wdXRzKCkgYXMgYW4gb3B0aW1pemF0aW9uIGFsbG93aW5nIHRoaXMgbm9kZSB0byB0YWtl
IGFkdmFudGFnZSBvZiBpbi1wbGFjZSBwcm9jZXNzaW5nLAorLy8gd2hlcmUgdGhlIGlucHV0IGlz
IHNpbXBseSBwYXNzZWQgdGhyb3VnaCB1bnByb2Nlc3NlZCB0byB0aGUgb3V0cHV0LgorLy8gTm90
ZTogdGhpcyBvbmx5IGFwcGxpZXMgaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbCBjb3Vu
dHMgbWF0Y2guCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpwdWxsSW5wdXRzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAtIHRyeSB0
byByZW5kZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVzIGZvciBwYXNzLXRocm91Z2ggcHJvY2Vz
c2luZyB3aGVyZSBwcm9jZXNzKCkgZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLi4uCisgICAg
aW5wdXQoMCktPnB1bGwob3V0cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwor
dm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6Y29ubmVjdChBdWRpb05vZGUqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEF1ZGlvQ29u
dGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKworICAgIEF1ZGlvTm9kZTo6Y29u
bmVjdChkZXN0aW5hdGlvbiwgb3V0cHV0SW5kZXgsIGlucHV0SW5kZXgsIGVjKTsKKyAgICB1cGRh
dGVQdWxsU3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OmRpc2Nv
bm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9j
a2VyKGNvbnRleHQoKSk7CisKKyAgICBBdWRpb05vZGU6OmRpc2Nvbm5lY3Qob3V0cHV0SW5kZXgs
IGVjKTsKKyAgICB1cGRhdGVQdWxsU3RhdHVzKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBp
bnB1dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBBU1NFUlQoaW5wdXQgPT0gdGhpcy0+aW5wdXQo
MCkpOworICAgIGlmIChpbnB1dCAhPSB0aGlzLT5pbnB1dCgwKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGlucHV0LT5udW1iZXJPZkNoYW5uZWxz
KCk7CisKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyAhPSBvdXRwdXQoMCktPm51bWJlck9mQ2hh
bm5lbHMoKSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFubmVsIGNv
dW50IHRvIGFueSBub2RlcyBjb25uZWN0ZWQgZnVydGhlciBkb3duc3RyZWFtIGluIHRoZSBncmFw
aC4KKyAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5l
bHMpOworICAgIH0KKworICAgIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5w
dXQoaW5wdXQpOworCisgICAgdXBkYXRlUHVsbFN0YXR1cygpOworfQorCit2b2lkIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKK3sKKyAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAob3V0cHV0KDApLT5pc0Nvbm5lY3RlZCgp
KSB7CisgICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29ubmVj
dGVkIHRvIGEgZG93bnN0cmVhbSBub2RlLCBpdCB3aWxsIGdldCBwdWxsZWQgYnkgdGhlCisgICAg
ICAgIC8vIGRvd25zdHJlYW0gbm9kZSwgdGh1cyByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdz
IGF1dG9tYXRpYyBwdWxsIGxpc3QuCisgICAgICAgIGlmIChtX25lZWRBdXRvbWF0aWNQdWxsKSB7
CisgICAgICAgICAgICBjb250ZXh0KCktPnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOwor
ICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zID0gaW5w
dXQoMCktPm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsKKyAgICAgICAgaWYgKG51bWJl
ck9mSW5wdXRDb25uZWN0aW9ucyAmJiAhbV9uZWVkQXV0b21hdGljUHVsbCkgeworICAgICAgICAg
ICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBub3QgY29ubmVjdGVkIHRv
IGFueSBkb3duc3RyZWFtIG5vZGUgd2hpbGUgc3RpbGwgY29ubmVjdGVkIGZyb20KKyAgICAgICAg
ICAgIC8vIHVwc3RyZWFtIG5vZGUocyksIGFkZCBpdCB0byB0aGUgY29udGV4dCdzIGF1dG9tYXRp
YyBwdWxsIGxpc3QuCisgICAgICAgICAgICBjb250ZXh0KCktPmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KHRoaXMpOworICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoIW51bWJlck9mSW5wdXRDb25uZWN0aW9ucyAmJiBtX25lZWRBdXRvbWF0aWNQ
dWxsKSB7CisgICAgICAgICAgICAvLyBUaGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29u
bmVjdGVkIHRvIG5vdGhpbmcsIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGlj
IHB1bGwgbGlzdC4KKyAgICAgICAgICAgIGNvbnRleHQoKS0+cmVtb3ZlQXV0b21hdGljUHVsbE5v
ZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQdWxsID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2M5NDNkNjE2NDg1
NzViYWUwOTMyZWFiNGNhMDZkZmVhZjBkZmFhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9CYXNpY0luc3BlY3Rv
ck5vZGVfaAorI2RlZmluZSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisKKyNpbmNsdWRlICJB
dWRpb05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hl
cmUgdGhlIG91dHB1dCBtaWdodCBub3QgbmVjZXNzYXJpbHkgY29ubmVjdCB0byBhbm90aGVyIG5v
ZGUncyBpbnB1dC4KKy8vIElmIHRoZSBvdXRwdXQgaXMgbm90IGNvbm5lY3RlZCB0byBhbnkgb3Ro
ZXIgbm9kZSwgdGhlbiB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUncyBwcm9jZXNzSWZOZWNl
c3NhcnkoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5CisvLyBBdWRp
b0NvbnRleHQgYmVmb3JlIHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSBzbyB0aGF0IGl0
IGNhbiBpbnNwZWN0IHRoZSBhdWRpbyBzdHJlYW0uCitjbGFzcyBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIEF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworCisgICAgLy8gQXVkaW9O
b2RlCisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7
CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQgb3V0cHV0SW5k
ZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1
dCopOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlUHVsbFN0YXR1cygpOworICAgIGJvb2wg
bV9uZWVkQXV0b21hdGljUHVsbDsgLy8gV2hlbiBzZXR0aW5nIHRvIHRydWUsIEF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlIHdpbGwgYmUgcHVsbGVkIGF1dG9tYXRpY2xseSBieSBBdWRpb0NvbnRleHQg
YmVmb3JlIHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCBm
Nzg5MDViZTY3YTcxMDNiNWQ1MWNhYzZhYWRkNzY0MWEzMGI3N2QwLi40YjI4OTZlMTk0YjVmNWM2
NDIwYWRjNjcxNTRiYTUyZGY2NWVjYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAgQXVkaW9Db250
ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKICAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCiAgICAgLCBtX2lzRGVsZXRpb25T
Y2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyhm
YWxzZSkKICAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCiAgICAgLCBtX2F1ZGlvVGhyZWFkKDAp
CiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKQEAg
LTE2NCw2ICsxNjUsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9j
dW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdAogICAgICwgbV9pc0F1ZGlv
VGhyZWFkRmluaXNoZWQoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV9kZXN0aW5hdGlvbk5vZGUoMCkKKyAgICAsIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0
aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXVkaW9UaHJl
YWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVy
KQpAQCAtMjAwLDYgKzIwMiw4IEBAIEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCiAgICAg
QVNTRVJUKCFtX25vZGVzVG9EZWxldGUuc2l6ZSgpKTsKICAgICBBU1NFUlQoIW1fcmVmZXJlbmNl
ZE5vZGVzLnNpemUoKSk7CiAgICAgQVNTRVJUKCFtX2ZpbmlzaGVkTm9kZXMuc2l6ZSgpKTsKKyAg
ICBBU1NFUlQoIW1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX3Jl
bmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5zaXplKCkpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4
dDo6bGF6eUluaXRpYWxpemUoKQpAQCAtNjYyLDcgKzY2Niw5IEBAIHZvaWQgQXVkaW9Db250ZXh0
OjpoYW5kbGVQcmVSZW5kZXJUYXNrcygpCiAgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBh
bnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVPdXRwdXRzLgogICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOwogICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9k
ZU91dHB1dHMoKTsKLSAgICAgICAgCisKKyAgICAgICAgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVz
KCk7CisKICAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKICAgICAgICAgICAgIHVubG9jaygp
OwogICAgIH0KQEAgLTY5MCw3ICs2OTYsOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9z
dFJlbmRlclRhc2tzKCkKICAgICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBB
dWRpb05vZGVJbnB1dHMgYW5kIEF1ZGlvTm9kZU91dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5
QXVkaW9Ob2RlSW5wdXRzKCk7CiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygp
OwotICAgICAgICAKKworICAgICAgICB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKKwogICAg
ICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQogICAgICAgICAgICAgdW5sb2NrKCk7CiAgICAgfQpA
QCAtNzEyLDYgKzcyMCwxMiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1
ZGlvTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIG1fbm9k
ZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7CisKKyAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBi
ZXN0IHRpbWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxp
c3QsCisgICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRo
ZSBncmFwaCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzCisgICAgLy8gZ2V0
IGNoYW5jZSB0byBzY2hlZHVsZSB0aGUgZGVsZXRpb24gd29yaywgdGhlIHVwZGF0ZUF1dG9tYXRp
Y1B1bGxOb2RlcygpIGFsc28gZ2V0IGNoYW5jZSB0byBtb2RpZnkKKyAgICAvLyB0aGUgcmVuZGVy
aW5nQXV0b21hdGljUHVsbE5vZGVzLgorICAgIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKG5vZGUp
OwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRpb24oKQpAQCAtODAz
LDYgKzgxNyw1MiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRw
dXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCit2b2lkIEF1
ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2RlKQoreworICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAoIW1fYXV0b21hdGljUHVsbE5vZGVz
LmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2Rl
KTsKKyAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOworICAg
IH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlv
Tm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1f
YXV0b21hdGljUHVsbE5vZGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgIG1fYXV0b21hdGlj
UHVsbE5vZGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVk
VXBkYXRpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1
dG9tYXRpY1B1bGxOb2RlcygpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKworICAg
IGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZykgeworICAgICAgICAvLyBDb3B5
IGZyb20gbV9hdXRvbWF0aWNQdWxsTm9kZXMgdG8gbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXMuCisgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9t
YXRpY1B1bGxOb2Rlcy5zaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIGogPSAwOworICAgICAg
ICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlKj46Oml0ZXJhdG9yIGkgPSBtX2F1dG9tYXRpY1B1bGxO
b2Rlcy5iZWdpbigpOyBpICE9IG1fYXV0b21hdGljUHVsbE5vZGVzLmVuZCgpOyArK2ksICsraikg
eworICAgICAgICAgICAgQXVkaW9Ob2RlKiBvdXRwdXQgPSAqaTsKKyAgICAgICAgICAgIG1fcmVu
ZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2pdID0gb3V0cHV0OworICAgICAgICB9CisKKyAgICAg
ICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisK
K3ZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNz
SWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBB
dWRpb0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggNTI1NGVmNjRmZGY1NTIwZjAxMDZiMTk4
OWFmMGJkZGJjOThkNjg3Ni4uZWRiODdlN2U0ZmRjODE3ZWRlNmEyOGRmZGIzNGMxN2I4MWM3MTA1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5o
CkBAIC0xNDgsNyArMTQ4LDE1IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlv
biBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIg
cXVhbnR1bS4KICAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKICAgICB2b2lk
IGRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0gICAgCisKKyAgICAvLyBBdWRpb0NvbnRleHQgY2FuIHB1
bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gZXZlbiB3aGVuIHRo
ZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZXMuCisgICAgLy8gVGhl
c2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hvIHdhbnQgdG8gYWRkL3Jl
bW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1bGwgbGlzdHMuCisgICAg
dm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKKyAgICB2b2lkIHJlbW92ZUF1
dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworCisgICAgLy8gQ2FsbGVkIHJpZ2h0IGJlZm9y
ZSBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSB0byBoYW5kbGUgbm9kZXMgd2hpY2ggbmVlZCB0byBi
ZSBwdWxsZWQgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhpbmcuCisg
ICAgdm9pZCBwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OworCiAgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBtYWRl
LgogICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlvbkNvdW50KCkKICAgICB7CkBAIC0yODEsNiAr
Mjg5LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygp
OwogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CiAKKyAgICAvLyBGb3Ig
dGhlIHNha2Ugb2YgdGhyZWFkIHNhZmV0eSwgd2UgbWFpbnRhaW4gYSBzZXBlcmF0ZSBWZWN0b3Ig
b2YgYXV0b21hdGljIHB1bGwgbm9kZXMgZm9yIHJlbmRlcmluZyBpbiBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2Rlcy4KKyAgICAvLyBJdCB3aWxsIGJlIGNvcGllZCBmcm9tIG1fYXV0b21hdGlj
UHVsbE5vZGVzIGJ5IHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpIGF0IHRoZSB2ZXJ5IHN0YXJ0
IG9yIGVuZCBvZiB0aGUgcmVuZGVyaW5nIHF1YW50dW0uCisgICAgSGFzaFNldDxBdWRpb05vZGUq
PiBtX2F1dG9tYXRpY1B1bGxOb2RlczsKKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9yZW5kZXJp
bmdBdXRvbWF0aWNQdWxsTm9kZXM7CisgICAgLy8gbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBk
YXRpbmcga2VlcHMgdHJhY2sgaWYgbV9hdXRvbWF0aWNQdWxsTm9kZXMgaXMgbW9kaWZpZWQuCisg
ICAgYm9vbCBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZzsKKyAgICB2b2lkIHVwZGF0
ZUF1dG9tYXRpY1B1bGxOb2RlcygpOworCiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291bnQ7
CiAKICAgICAvLyBHcmFwaCBsb2NraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA2ZTUyN2JiZWUz
NzE0MGQwNzNhMzEwMTljZWI0MzEzZjZhNGMzMzI0Li42ZjQ4OWIyYTkyMzY0NTI1MmIzMmFiYWY2
Nzg3NGZjNDM3MmIzMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtODAsNiArODAsOSBAQCB2b2lk
IEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3RpbmF0aW9u
QnVzLCBzaXplX3QgbnVtYmVyTwogICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+Y29weUZyb20oKnJl
bmRlcmVkQnVzKTsKICAgICB9CiAKKyAgICAvLyBQcm9jZXNzIG5vZGVzIHdoaWNoIG5lZWQgYSBs
aXR0bGUgZXh0cmEgaGVscCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhp
bmcsIGJ1dCBzdGlsbCBuZWVkIHRvIHByb2Nlc3MuCisgICAgY29udGV4dCgpLT5wcm9jZXNzQXV0
b21hdGljUHVsbE5vZGVzKG51bWJlck9mRnJhbWVzKTsKKwogICAgIC8vIExldCB0aGUgY29udGV4
dCB0YWtlIGNhcmUgb2YgYW55IGJ1c2luZXNzIGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVh
bnR1bS4KICAgICBjb250ZXh0KCktPmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKaW5kZXggYzI2MTRjYjNi
MTJkNmQxNTUwZmRmNzRmODQ4OGU0MWY0NWY5Y2RhMi4uNjRjNWYyNjJlNDIyMDZkMTgzYjdhOTI0
OGJlZjIxMmIwMGFkNGFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5oCkBAIC0xMTYsOSArMTE2LDkgQEAgcHVibGljOgogICAgIEF1ZGlvTm9kZU91dHB1
dCogb3V0cHV0KHVuc2lnbmVkKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkIGJ5
IGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBtZXRob2RzLgotICAgIHZvaWQgY29ubmVjdChBdWRp
b05vZGUqLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVuc2lnbmVk
IG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dm9pZCBjb25uZWN0KEF1ZGlvUGFyYW0qLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dElu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBj
b25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgKaW5kZXggODJiZjI5ZjVhNDc1NDhmNDQx
MTRjMDA3NzVjMzBkZjllMmEzMjczOC4uM2Y5NDkxYTRmZTg4ZjY4OWY5MDU0ZTUwYWYxMGU4MTQ5
ZWUwN2MxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGVPdXRwdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZU91dHB1dC5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkNoYW5uZWxzOyB9CiAgICAg
Ym9vbCBpc0NoYW5uZWxDb3VudEtub3duKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZDaGFubmVs
cygpID4gMDsgfQogCisgICAgYm9vbCBpc0Nvbm5lY3RlZCgpIHsgcmV0dXJuIGZhbk91dENvdW50
KCkgPiAwIHx8IHBhcmFtRmFuT3V0Q291bnQoKSA+IDA7IH0KKwogICAgIC8vIERpc2FibGUvRW5h
YmxlIGhhcHBlbnMgd2hlbiB0aGVyZSBhcmUgc3RpbGwgSmF2YVNjcmlwdCByZWZlcmVuY2VzIHRv
IGEgbm9kZSwgYnV0IGl0IGhhcyBvdGhlcndpc2UgImZpbmlzaGVkIiBpdHMgd29yay4KICAgICAv
LyBGb3IgZXhhbXBsZSwgd2hlbiBhIG5vdGUgaGFzIGZpbmlzaGVkIHBsYXlpbmcuICBJdCBpcyBr
ZXB0IGFyb3VuZCwgYmVjYXVzZSBpdCBtYXkgYmUgcGxheWVkIGFnYWluIGF0IGEgbGF0ZXIgdGlt
ZS4KICAgICAvLyBUaGV5IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBs
b2NrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGlt
ZUFuYWx5c2VyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcAppbmRleCBkMDM5ZjNjNmFiMjZjYTRmNWM5YTY0NzkzNWU4NzY5
ZjlmYTA0ZTA4Li5lZTc0OTYwNDM1MmE3ZGJmZDg5ZGRlMWJjMmM2YTYyNjI3NjRlMzdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5h
bHlzZXJOb2RlLmNwcApAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBS
ZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVhbHRpbWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBs
ZVJhdGUpCisgICAgOiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KQogewogICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwog
ICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CkBA
IC03MCwxNSArNzAsNiBAQCB2b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9jZXNzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgICAgIG91dHB1dEJ1cy0+Y29weUZyb20oKmlucHV0QnVz
KTsKIH0KIAotLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBh
bGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2lu
ZywKLS8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNz
ZWQgdG8gdGhlIG91dHB1dC4KLS8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1
dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1hdGNoLgotdm9pZCBSZWFsdGltZUFuYWx5c2Vy
Tm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRl
ciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBm
b3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0
byBkbyBhbnl0aGluZy4uLgotICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZy
YW1lc1RvUHJvY2Vzcyk7Ci19Ci0KIHZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnJlc2V0KCkK
IHsKICAgICBtX2FuYWx5c2VyLnJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKaW5kZXggY2UzNjRhOTk5NWVl
NmFjNzZjZDNlNDY2ZjFlMWNmY2I0MjE3ZjBhOS4uMDgxOWMwMzg2N2M0YzIyODZhZDgzOGMxNzdj
NjVhZDUyZGVmOGNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaWZuZGVm
IFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gKICNkZWZpbmUgUmVhbHRpbWVBbmFseXNlck5vZGVfaAog
Ci0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUuaCIKICNpbmNsdWRlICJSZWFsdGltZUFuYWx5c2VyLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9k
ZSA6IHB1YmxpYyBBdWRpb05vZGUgeworY2xhc3MgUmVhbHRpbWVBbmFseXNlck5vZGUgOiBwdWJs
aWMgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBm
bG9hdCBzYW1wbGVSYXRlKQogICAgIHsKQEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIEF1ZGlvTm9kZQogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCiAgICAgLy8gSmF2YXNjcmlwdCBi
aW5kaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGY5ZjAzYzQyYmNhYjY5Mzc0Mzc0NTZkMTIxNjhh
MTQyYzZlNmJiZjkuLjBhZDk3MWRiMGYyNWQyNmZmYmJmNGZlODc5YTIxNjRkNjJhMjcyYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTE1NTcsNiArMTU1Nyw4IEBACiAgICAgICAgICAgICAnTW9kdWxl
cy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCcsCiAgICAgICAgICAgICAnTW9kdWxl
cy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmNwcCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmgnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgnLAogICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwJywK
ICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgn
LAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAw
MWQxZDBmOTI1ZGZjM2MzMzdlNmFlZTlmMGFlZDA1OTJhODljNThkLi4yYmZiNjI1ODEyYzc2ZDI2
MjFiNGMzNjc1ZjE4MTMzZWZiNDc1Mjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjkwLDYgKzYyOTAsOCBAQAogCQlGRDU4
MUZBRjE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1ODFGQUMxNTIwRjkxRjAwM0E3QTc1IC8qIE9z
Y2lsbGF0b3IuaCAqLzsgfTsKIAkJRkQ1ODFGQjQxNTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDU4
MUZCMTE1MjBGOTNCMDAzQTdBNzUgLyogV2F2ZVRhYmxlLmNwcCAqLzsgfTsKIAkJRkQ1ODFGQjUx
NTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1ODFGQjIxNTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJs
ZS5oICovOyB9OworCQlGRDYyOUVBMzE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZENjI5RUExMTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oICov
OyB9OworCQlGRDYyOUVBNDE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2
MjlFQTIxNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCAqLzsg
fTsKIAkJRkQ2MkY1MkUxNDU4OThEODAwOTRCMEVEIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENjJG
NTJEMTQ1ODk4RDgwMDk0QjBFRCAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmggKi87IH07
CiAJCUZENkVEMkMzMTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkVEMkMx
MTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLzsgfTsKIAkJ
RkQ2RUQyQzQxMzZCOEU0MjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkVEMkMyMTM2QjhF
NDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi87IH07CkBAIC0xMzUxNiw2
ICsxMzUxOCw4IEBACiAJCUZENTgxRkIxMTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2F2ZVRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ1ODFGQjIxNTIwRjkzQjAwM0E3QTc1IC8qIFdh
dmVUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXZlVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ1ODFGQjMxNTIwRjkzQjAwM0E3QTc1IC8q
IFdhdmVUYWJsZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2F2ZVRhYmxlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQ2MjlFQTExNTRCNDcxNjAwMDZEMDI2IC8qIEF1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZENjI5RUEyMTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENjJGNTJEMTQ1ODk4RDgw
MDk0QjBFRCAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkQ2RUQyQzExMzZCOEU0MjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZE
NkVEMkMyMTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMzU5LDYgKzIxMzYzLDggQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUZENTY4NkM3MTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rl
ci5jcHAgKi8sCiAJCQkJRkQ1Njg2QzgxM0FDMTgwMjAwQjY5QzY4IC8qIEFzeW5jQXVkaW9EZWNv
ZGVyLmggKi8sCisJCQkJRkQ2MjlFQTExNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlLmggKi8sCisJCQkJRkQ2MjlFQTIxNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlLmNwcCAqLywKIAkJCQlGRDMxNUZBQzEyQjAyNjc1MDBDMUEzNTkgLyog
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwICovLAogCQkJCUZEMzE1RkFEMTJCMDI2NzUwMEMx
QTM1OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oICovLAogCQkJCUZEMzE1RkFFMTJCMDI2
NzUwMEMxQTM1OSAvKiBBdWRpb0J1ZmZlci5jcHAgKi8sCkBAIC0yNDgzMCw2ICsyNDgzNiw3IEBA
CiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQ4QzQ2RUMxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlvU2NoZWR1bGVkU291
cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ2MjlFQTMxNTRCNDcxNjAwMDZEMDI2IC8q
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3ODQ1LDYgKzI3
ODUyLDcgQEAKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ4QzQ2RUIxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlv
U2NoZWR1bGVkU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDYyOUVBNDE1NEI0
NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMTdlY2JiZjg0NDIwZGFjODAyOGJmMjNiOTBlNTJlY2ZlYzEyMjkyNS4uYzhhZWEy
M2FkMDRiYTc2ZjJlNzA0NTJmYTBmOWYxOTI4MTZjM2MxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTA0LTI3ICBSYXltb25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAg
ICAgICBNb2RpZnkgUmVhbHRpbWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9hdXRvbWF0
aWMtcHVsbC1ub2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXV0
b21hdGljLXB1bGwtbm9kZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0yNyAgTmF0IER1Y2EgIDxu
ZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IGhpZ2gtcmVzb2x1dGlvbiB0
aW1lIHZpYSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDEx
ZGIyMWUyNjQ0ODVkYTJmMGU4NWVmNjAwOWU2NTgxNGY3ZmQ4ZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZSBiYXNlZCBub2RlcyB3b3JrIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCitQQVNTIFJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBj
b25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLgor
UEFTUyBSZWFsdGltZUFuYWx5c2VyTm9kZSBnb3QgcHVsbGVkIHdoZW4gY29ubmVjdGVkIGZyb20g
dXBzdHJlYW0gbm9kZSBhbmQgdG8gZGVzdGluYXRpb24gbm9kZS4KK1BBU1MgUmVhbHRpbWVBbmFs
eXNlck5vZGUgZGlkbid0IGdldCBwdWxsZWQgd2hlbiBpdCBzaG91bGQgbm90LgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjM0Y2UwNTlj
ZDIyNjM1MjdiZjI3ZDcwYzQwNzdmZDVjZjExZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5odG1sCkBAIC0wLDAgKzEsMTM3IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3Qg
dmVyaWZpZXMgdGhhdCB0aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgYmFzZWQgbm9kZXMgd29y
ayBjb3JyZWN0bHkuIik7CisKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKy8vIFdlIGNhcmVm
dWxseSBhcnJhbmdlIHRoZSByZW5kZXJMZW5ndGhJbkZyYW1lcyB0byBiZSBhIG11bHRpcGxlIG9m
IHRoZSBBdWRpb05vZGUgcmVuZGVyaW5nIHF1YW50dW0gKEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1Np
emVJbkZyYW1lcykKKy8vIHNvIHRoYXQgQXVkaW9Tb3VyY2VOb2RlIHdpbGwgbm90IGZlZWQgdGFp
bGluZyB6ZXJvZXMgaW50byB0aGUgY29udGV4dCBhbmQgZmFpbCB0aGlzIHRlc3QuCit2YXIgcmVu
ZGVyTGVuZ3RoSW5GcmFtZXMgPSAyNTY7Cit2YXIgZmZ0U2l6ZSA9IDY0OworCit2YXIgYXVkaW9E
YXRhT25lID0gMjU1OyAvLyBBdWRpbyBkYXRhIDEuMCBpbiBVaW50OCBmb3JtYXQgd2lsbCBiZSAy
NTUuCit2YXIgYXVkaW9EYXRhWmVybyA9IDEyODsgLy8gQXVkaW8gZGF0YSAwIGluIFVpbnQ4IGZv
cm1hdCB3aWxsIGJlIDEyOC4KKwordmFyIGNvbnRleHQ7Cit2YXIgY29uc3RhbnRCdWZmZXI7Cit2
YXIgYnVmZmVyU291cmNlOwordmFyIGFuYWx5c2VyOworCitmdW5jdGlvbiBjb25zdHJ1Y3RDb21t
b25HcmFwaCgpIHsKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIGNv
bnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDEsIHJlbmRlckxlbmd0aEluRnJhbWVzLCBz
YW1wbGVSYXRlKTsKKyAgICBjb25zdGFudEJ1ZmZlciA9IGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNv
bnRleHQsIHJlbmRlckxlbmd0aEluRnJhbWVzLCAxKTsKKworICAgIGJ1ZmZlclNvdXJjZSA9IGNv
bnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IGNv
bnN0YW50QnVmZmVyOworCisgICAgYW5hbHlzZXIgPSBjb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7
CisgICAgYW5hbHlzZXIuZmZ0U2l6ZSA9IGZmdFNpemU7CisKKyAgICBidWZmZXJTb3VyY2UuY29u
bmVjdChhbmFseXNlcik7Cit9CisKK2Z1bmN0aW9uIHRlc3QxRmluaXNoZWQoKSB7CisgICAgdmFy
IHRpbWVEb21haW5EYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6ZSk7CisgICAgYW5hbHlzZXIu
Z2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRpbWVEb21haW5EYXRhKTsKKworICAgIGlmICh0aW1lRG9t
YWluRGF0YVswXSA+PSBhdWRpb0RhdGFPbmUpCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1l
QW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2Rl
IGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZh
aWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUgZmFpbGVkIHRvIGdldCBwdWxsZWQgd2hlbiBjb25u
ZWN0ZWQgZnJvbSB1cHN0cmVhbSBub2RlIGJ1dCBub3QgdG8gZG93bnN0cmVhbSBub2RlLiIpOwor
CisgICAgdGVzdDIoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIGNh
biBwdWxsIGRhdGEgd2hlbiB0aGVyZSBpcyBhbiB1cHN0cmVhbSBub2RlIGNvbm5lY3RlZCB0byBp
dAorLy8gYnV0IGl0J3Mgbm90IGNvbm5lY3RlZCB0byBhIGRvd25zdHJlYW0gbm9kZS4KK2Z1bmN0
aW9uIHRlc3QxKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBidWZmZXJT
b3VyY2Uubm90ZU9uKDApOworCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gdGVzdDFGaW5pc2hl
ZDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QyRmlu
aXNoZWQoKSB7CisgICAgdmFyIHRpbWVEb21haW5EYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmZ0U2l6
ZSk7CisgICAgYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHRpbWVEb21haW5EYXRhKTsK
KworICAgIGlmICh0aW1lRG9tYWluRGF0YVswXSA+PSBhdWRpb0RhdGFPbmUpCisgICAgICAgIHRl
c3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGdvdCBwdWxsZWQgd2hlbiBjb25uZWN0ZWQg
ZnJvbSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBub2RlLiIpOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCgiUmVhbHRpbWVBbmFseXNlck5vZGUgZmFpbGVkIHRvIGJlIHB1
bGxlZCB3aGVuIGNvbm5lY3RlZCBieSB1cHN0cmVhbSBub2RlIGFuZCB0byBkZXN0aW5hdGlvbiBu
b2RlLiIpOworCisgICAgdGVzdDMoKTsKK30KKworLy8gVG8gdmVyaWZ5IHRoZSByZWFsdGltZUFu
YWx5c2VyIGNhbiBwcm9jZXNzIG5vcm1hbGx5IHdoZW4gdGhlcmUgaXMgYW4gdXBzdHJlYW0gbm9k
ZSBjb25uZWN0ZWQgdG8gaXQKKy8vIGFuZCBpdCdzIGFsc28gY29ubmVjdGVkIHRvIGEgZG93bnN0
cmVhbSBub2RlIHdoaWNoIHVsdGltYXRlbHkgY29ubmVjdCB0byBhdWRpbyBkZXN0aW5hdGlvbi4K
K2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGNvbnN0cnVjdENvbW1vbkdyYXBoKCk7CisKKyAgICBh
bmFseXNlci5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgYnVmZmVyU291cmNl
Lm5vdGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IHRlc3QyRmluaXNoZWQ7Cisg
ICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5jdGlvbiB0ZXN0M0ZpbmlzaGVk
KCkgeworICAgIHZhciB0aW1lRG9tYWluRGF0YSA9IG5ldyBVaW50OEFycmF5KGZmdFNpemUpOwor
ICAgIGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0aW1lRG9tYWluRGF0YSk7CisKKyAg
ICAvLyBJZiByZWFsdGltZUFuYWx5c2VyIGhhc24ndCBwdWxsZWQgYW55IGRhdGEsIHRoZSBkYXRh
IGluIGJ1ZmZlciB3aWxsIGJlIDAuCisgICAgaWYgKHRpbWVEb21haW5EYXRhWzBdID09IGF1ZGlv
RGF0YVplcm8pCisgICAgICAgIHRlc3RQYXNzZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGRpZG4n
dCBnZXQgcHVsbGVkIHdoZW4gaXQgc2hvdWxkIG5vdC4iKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGJlZW4gcHVsbGVkIHdoZW4gaXQgc2hvdWxk
IG5vdC4iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBUbyB2ZXJpZnkgdGhlIHJl
YWx0aW1lQW5hbHlzZXIgd2lsbCBzdG9wIHB1bGxpbmcgaWYgaXQgaXMgY29ubmVjdGVkIHRvIGEg
ZG93bnN0cmVhbSBub2RlCisvLyB3aGljaCBpcyBub3QgdWx0aW1hdGx5IGNvbm5lY3RlZCB0byBh
bnkgYXVkaW8gZGVzdGluYXRpb24uCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBjb25zdHJ1Y3RD
b21tb25HcmFwaCgpOworCisgICAgdmFyIGdhaW4gPSBjb250ZXh0LmNyZWF0ZUdhaW5Ob2RlKCk7
CisgICAgYW5hbHlzZXIuY29ubmVjdChnYWluKTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24o
MCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0ZXN0M0ZpbmlzaGVkOworICAgIGNvbnRl
eHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAg
IHRlc3QxKCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139721</attachid>
            <date>2012-05-01 18:30:47 -0700</date>
            <delta_ts>2012-05-01 20:37:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77515-20120502093656.patch</filename>
            <type>text/plain</type>
            <size>33312</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM0ZGNlNmY3ZjNhNWMw
OWVjZWY1NzNhOTFhYTBlOTFkZjkxYWZkZC4uZmU1NDJkNTZlMzY4ZjEyYTE2YWJmMjc2OTFiZWIw
ZDEyOWE0Y2UwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTAxICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBNb2RpZnkgUmVhbHRp
bWVBbmFseXNlck5vZGUgcHVsbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vYXV0b21hdGljLXB1bGwtbm9kZS5o
dG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OkF1ZGlv
QmFzaWNJbnNwZWN0b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6fkF1ZGlvQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmhhbmRs
ZVByZVJlbmRlclRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aGFuZGxl
UG9zdFJlbmRlclRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWFya0Zv
ckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2Rlcyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAoQXVkaW9Ob2RlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlT3V0cHV0Ojppc0Nvbm5lY3RlZCk6CisgICAgICAgIChBdWRpb05vZGVP
dXRwdXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5h
bHlzZXJOb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmg6CisgICAgICAgIChSZWFsdGltZUFuYWx5c2VyTm9kZSk6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxMi0wNS0wMSAgTWluIFFpbiAgPHFpbm1pbkBnb29nbGUuY29tPgogCiAgICAgICAgIHVzZSBV
U0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pIGluc3RlYWQgb2YgRU5BQkxFKE5BVElWRV9GVUxM
U0NSRUVOX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMmY1MzI4MjM5
ZGIzZDZlNzEyZmFkN2ZhNDUzNDgxMGM5NGE2ZDAwMC4uZTlhNWUzNGE1NzhiMzRlNTBhNGViYTJh
YmZjNWY3NDJiNWJhMWM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDcz
LDYgKzU0NzMsOCBAQCBpZiBFTkFCTEVfV0VCX0FVRElPCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA2YzEy
NTc2NGEwYjU5YWE2M2ViYWVkMDU5Yzk2ZDRjOTlhZmUzMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3Bw
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9O
b2RlSW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9O
b2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgLCBtX25lZWRBdXRvbWF0aWNQdWxsKGZhbHNl
KQoreworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwor
ICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7Cit9
CisKKy8vIFdlIG92ZXJyaWRlIHB1bGxJbnB1dHMoKSBhcyBhbiBvcHRpbWl6YXRpb24gYWxsb3dp
bmcgdGhpcyBub2RlIHRvIHRha2UgYWR2YW50YWdlIG9mIGluLXBsYWNlIHByb2Nlc3NpbmcsCisv
LyB3aGVyZSB0aGUgaW5wdXQgaXMgc2ltcGx5IHBhc3NlZCB0aHJvdWdoIHVucHJvY2Vzc2VkIHRv
IHRoZSBvdXRwdXQuCisvLyBOb3RlOiB0aGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgaW5wdXQgYW5k
IG91dHB1dCBjaGFubmVsIGNvdW50cyBtYXRjaC4KK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBSZW5kZXIg
aW5wdXQgc3RyZWFtIC0gdHJ5IHRvIHJlbmRlciBkaXJlY3RseSBpbnRvIG91dHB1dCBidXMgZm9y
IHBhc3MtdGhyb3VnaCBwcm9jZXNzaW5nIHdoZXJlIHByb2Nlc3MoKSBkb2Vzbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcuLi4KKyAgICBpbnB1dCgwKS0+cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFt
ZXNUb1Byb2Nlc3MpOworfQorCit2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpjb25uZWN0
KEF1ZGlvTm9kZSogZGVzdGluYXRpb24sIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBp
bnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwor
CisgICAgQXVkaW9Ob2RlOjpjb25uZWN0KGRlc3RpbmF0aW9uLCBvdXRwdXRJbmRleCwgaW5wdXRJ
bmRleCwgZWMpOworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwordm9pZCBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZTo6ZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEF1ZGlvQ29u
dGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKworICAgIEF1ZGlvTm9kZTo6ZGlz
Y29ubmVjdChvdXRwdXRJbmRleCwgZWMpOworICAgIHVwZGF0ZVB1bGxTdGF0dXMoKTsKK30KKwor
dm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5w
dXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVk
aW9UaHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChp
bnB1dCA9PSB0aGlzLT5pbnB1dCgwKSk7CisgICAgaWYgKGlucHV0ICE9IHRoaXMtPmlucHV0KDAp
KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gaW5w
dXQtPm51bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzICE9IG91
dHB1dCgwKS0+bnVtYmVyT2ZDaGFubmVscygpKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBwcm9w
YWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBmdXJ0aGVyIGRv
d25zdHJlYW0gaW4gdGhlIGdyYXBoLgorICAgICAgICBvdXRwdXQoMCktPnNldE51bWJlck9mQ2hh
bm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CisgICAgfQorCisgICAgQXVkaW9Ob2RlOjpjaGVja051
bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7CisKKyAgICB1cGRhdGVQdWxsU3RhdHVzKCk7
Cit9CisKK3ZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0ZVB1bGxTdGF0dXMoKQor
eworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIGlmIChvdXRw
dXQoMCktPmlzQ29ubmVjdGVkKCkpIHsKKyAgICAgICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUsIGl0IHdpbGwgZ2V0
IHB1bGxlZCBieSB0aGUKKyAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0aHVzIHJlbW92ZSBp
dCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KKyAgICAgICAgaWYgKG1f
bmVlZEF1dG9tYXRpY1B1bGwpIHsKKyAgICAgICAgICAgIGNvbnRleHQoKS0+cmVtb3ZlQXV0b21h
dGljUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQdWxsID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZklu
cHV0Q29ubmVjdGlvbnMgPSBpbnB1dCgwKS0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygp
OworICAgICAgICBpZiAobnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zICYmICFtX25lZWRBdXRvbWF0
aWNQdWxsKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFuIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
IGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZSB3aGlsZSBzdGlsbCBjb25u
ZWN0ZWQgZnJvbQorICAgICAgICAgICAgLy8gdXBzdHJlYW0gbm9kZShzKSwgYWRkIGl0IHRvIHRo
ZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KKyAgICAgICAgICAgIGNvbnRleHQoKS0+
YWRkQXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQ
dWxsID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghbnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25z
ICYmIG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKKyAgICAgICAgICAgIC8vIFRoZSBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gbm90aGluZywgcmVtb3ZlIGl0IGZyb20gdGhl
IGNvbnRleHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgorICAgICAgICAgICAgY29udGV4dCgpLT5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIG1fbmVlZEF1dG9tYXRp
Y1B1bGwgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43Yzk0M2Q2MTY0ODU3NWJhZTA5MzJlYWI0Y2EwNmRmZWFmMGRmYWFjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZV9oCisjZGVmaW5lIEF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlX2gKKworI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1
dCBhbmQgb25lIG91dHB1dCB3aGVyZSB0aGUgb3V0cHV0IG1pZ2h0IG5vdCBuZWNlc3NhcmlseSBj
b25uZWN0IHRvIGFub3RoZXIgbm9kZSdzIGlucHV0LgorLy8gSWYgdGhlIG91dHB1dCBpcyBub3Qg
Y29ubmVjdGVkIHRvIGFueSBvdGhlciBub2RlLCB0aGVuIHRoZSBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZSdzIHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGF1dG9t
YXRpY2FsbHkgYnkKKy8vIEF1ZGlvQ29udGV4dCBiZWZvcmUgdGhlIGVuZCBvZiBlYWNoIHJlbmRl
ciBxdWFudHVtIHNvIHRoYXQgaXQgY2FuIGluc3BlY3QgdGhlIGF1ZGlvIHN0cmVhbS4KK2NsYXNz
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6Cisg
ICAgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0
ZSk7CisKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHVsbElucHV0cyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChBdWRpb05vZGUq
LCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zv
cklucHV0KEF1ZGlvTm9kZUlucHV0Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVQdWxs
U3RhdHVzKCk7CisgICAgYm9vbCBtX25lZWRBdXRvbWF0aWNQdWxsOyAvLyBXaGVuIHNldHRpbmcg
dG8gdHJ1ZSwgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgd2lsbCBiZSBwdWxsZWQgYXV0b21hdGlj
bGx5IGJ5IEF1ZGlvQ29udGV4dCBiZWZvcmUgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVt
LgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9CYXNpY0lu
c3BlY3Rvck5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwCmluZGV4IGY3ODkwNWJlNjdhNzEwM2I1ZDUxY2FjNmFhZGQ3NjQxYTMwYjc3
ZDAuLjliNDA0MzI0MzRkODJiN2FlYmViODZlMTQ4YTdkNDI4MzYwNzQ1MzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE0MCw2
ICsxNDAsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQp
CiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkK
ICAgICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxzZSkKKyAgICAsIG1fYXV0b21hdGljUHVs
bE5vZGVzTmVlZFVwZGF0aW5nKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKICAg
ICAsIG1fYXVkaW9UaHJlYWQoMCkKICAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRU
aHJlYWRJZGVudGlmaWVyKQpAQCAtMTY0LDYgKzE2NSw3IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9D
b250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6
ZV90CiAgICAgLCBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fZG9jdW1l
bnQoZG9jdW1lbnQpCiAgICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgwKQorICAgICwgbV9hdXRvbWF0
aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcoZmFsc2UpCiAgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgw
KQogICAgICwgbV9hdWRpb1RocmVhZCgwKQogICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVm
aW5lZFRocmVhZElkZW50aWZpZXIpCkBAIC0yMDAsNiArMjAyLDggQEAgQXVkaW9Db250ZXh0Ojp+
QXVkaW9Db250ZXh0KCkKICAgICBBU1NFUlQoIW1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOwogICAg
IEFTU0VSVCghbV9yZWZlcmVuY2VkTm9kZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoIW1fZmluaXNo
ZWROb2Rlcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9hdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQoIW1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CiB9
CiAKIHZvaWQgQXVkaW9Db250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCkBAIC02NjIsNyArNjY2LDkg
QEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKCkKICAgICAgICAgLy8g
Rml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMgYW5kIEF1ZGlvTm9k
ZU91dHB1dHMuCiAgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7CiAgICAgICAg
IGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotICAgICAgICAKKworICAgICAgICB1cGRh
dGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKKwogICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQog
ICAgICAgICAgICAgdW5sb2NrKCk7CiAgICAgfQpAQCAtNjkwLDcgKzY5Niw5IEBAIHZvaWQgQXVk
aW9Db250ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQogICAgICAgICAvLyBGaXh1cCB0aGUg
c3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvTm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4K
ICAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVJbnB1dHMoKTsKICAgICAgICAgaGFuZGxlRGly
dHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0gICAgICAgIAorCisgICAgICAgIHVwZGF0ZUF1dG9tYXRp
Y1B1bGxOb2RlcygpOworCiAgICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCiAgICAgICAgICAg
ICB1bmxvY2soKTsKICAgICB9CkBAIC03MTIsNiArNzIwLDEyIEBAIHZvaWQgQXVkaW9Db250ZXh0
OjptYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlKiBub2RlKQogewogICAgIEFTU0VSVChpc0dyYXBo
T3duZXIoKSk7CiAgICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVuZChub2RlKTsKKworICAgIC8vIFRo
aXMgaXMgcHJvYmFibHkgdGhlIGJlc3QgdGltZSBmb3IgdXMgdG8gcmVtb3ZlIHRoZSBub2RlIGZy
b20gYXV0b21hdGljIHB1bGwgbGlzdCwKKyAgICAvLyBzaW5jZSBhbGwgY29ubmVjdGlvbnMgYXJl
IGdvbmUgYW5kIHdlIGhvbGQgdGhlIGdyYXBoIGxvY2suIFRoZW4gd2hlbiBoYW5kbGVQb3N0UmVu
ZGVyVGFza3MoKQorICAgIC8vIGdldHMgYSBjaGFuY2UgdG8gc2NoZWR1bGUgdGhlIGRlbGV0aW9u
IHdvcmssIHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpIGFsc28gZ2V0cyBhIGNoYW5jZSB0bwor
ICAgIC8vIG1vZGlmeSBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy4KKyAgICByZW1vdmVB
dXRvbWF0aWNQdWxsTm9kZShub2RlKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnNjaGVkdWxl
Tm9kZURlbGV0aW9uKCkKQEAgLTgwMyw2ICs4MTcsNTIgQEAgdm9pZCBBdWRpb0NvbnRleHQ6Omhh
bmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCiAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMu
Y2xlYXIoKTsKIH0KIAordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1
ZGlvTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYg
KCFtX2F1dG9tYXRpY1B1bGxOb2Rlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICBtX2F1dG9t
YXRpY1B1bGxOb2Rlcy5hZGQobm9kZSk7CisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVl
ZFVwZGF0aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpyZW1vdmVB
dXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhP
d25lcigpKTsKKworICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5jb250YWlucyhub2RlKSkg
eworICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUobm9kZSk7CisgICAgICAgIG1f
YXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQg
QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKQoreworICAgIEFTU0VSVChp
c0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRp
bmcpIHsKKyAgICAgICAgLy8gQ29weSBmcm9tIG1fYXV0b21hdGljUHVsbE5vZGVzIHRvIG1fcmVu
ZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLgorICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1
bGxOb2Rlcy5yZXNpemUobV9hdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpKTsKKworICAgICAgICB1
bnNpZ25lZCBqID0gMDsKKyAgICAgICAgZm9yIChIYXNoU2V0PEF1ZGlvTm9kZSo+OjppdGVyYXRv
ciBpID0gbV9hdXRvbWF0aWNQdWxsTm9kZXMuYmVnaW4oKTsgaSAhPSBtX2F1dG9tYXRpY1B1bGxO
b2Rlcy5lbmQoKTsgKytpLCArK2opIHsKKyAgICAgICAgICAgIEF1ZGlvTm9kZSogb3V0cHV0ID0g
Kmk7CisgICAgICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlc1tqXSA9IG91dHB1
dDsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5n
ID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6cHJvY2Vzc0F1dG9tYXRp
Y1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEFTU0VSVChpc0F1ZGlv
VGhyZWFkKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVuZGVyaW5nQXV0
b21hdGljUHVsbE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRp
Y1B1bGxOb2Rlc1tpXS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisK
IGNvbnN0IEF0b21pY1N0cmluZyYgQXVkaW9Db250ZXh0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QK
IHsKICAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvQ29udGV4dDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDUy
NTRlZjY0ZmRmNTUyMGYwMTA2YjE5ODlhZjBiZGRiYzk4ZDY4NzYuLmVkYjg3ZTdlNGZkYzgxN2Vk
ZTZhMjhkZmRiMzRjMTdiODFjNzEwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaApAQCAtMTQ4LDcgKzE0OCwxNSBAQCBwdWJsaWM6CiAgICAg
Ly8gV2Ugc2NoZWR1bGUgZGVsZXRpb24gb2YgYWxsIG1hcmtlZCBub2RlcyBhdCB0aGUgZW5kIG9m
IGVhY2ggcmVhbHRpbWUgcmVuZGVyIHF1YW50dW0uCiAgICAgdm9pZCBtYXJrRm9yRGVsZXRpb24o
QXVkaW9Ob2RlKik7CiAgICAgdm9pZCBkZWxldGVNYXJrZWROb2RlcygpOwotICAgIAorCisgICAg
Ly8gQXVkaW9Db250ZXh0IGNhbiBwdWxsIG5vZGUocykgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRl
ciBxdWFudHVtIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueSBkb3duc3Ry
ZWFtIG5vZGVzLgorICAgIC8vIFRoZXNlIHR3byBtZXRob2RzIGFyZSBjYWxsZWQgYnkgdGhlIG5v
ZGVzIHdobyB3YW50IHRvIGFkZC9yZW1vdmUgdGhlbXNlbHZlcyBpbnRvL2Zyb20gdGhlIGF1dG9t
YXRpYyBwdWxsIGxpc3RzLgorICAgIHZvaWQgYWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2Rl
Kik7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKKworICAg
IC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxl
IG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVkIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29u
bmVjdGVkIHRvIGFueXRoaW5nLgorICAgIHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2Rlcyhz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKwogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1i
ZXIgb2YgY29ubmVjdGlvbnMgbWFkZS4KICAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3Vu
dCgpCiAgICAgewpAQCAtMjgxLDYgKzI4OSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxl
RGlydHlBdWRpb05vZGVJbnB1dHMoKTsKICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0
cHV0cygpOwogCisgICAgLy8gRm9yIHRoZSBzYWtlIG9mIHRocmVhZCBzYWZldHksIHdlIG1haW50
YWluIGEgc2VwZXJhdGUgVmVjdG9yIG9mIGF1dG9tYXRpYyBwdWxsIG5vZGVzIGZvciByZW5kZXJp
bmcgaW4gbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuCisgICAgLy8gSXQgd2lsbCBiZSBj
b3BpZWQgZnJvbSBtX2F1dG9tYXRpY1B1bGxOb2RlcyBieSB1cGRhdGVBdXRvbWF0aWNQdWxsTm9k
ZXMoKSBhdCB0aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlcmluZyBxdWFudHVtLgor
ICAgIEhhc2hTZXQ8QXVkaW9Ob2RlKj4gbV9hdXRvbWF0aWNQdWxsTm9kZXM7CisgICAgVmVjdG9y
PEF1ZGlvTm9kZSo+IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzOworICAgIC8vIG1fYXV0
b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nIGtlZXBzIHRyYWNrIGlmIG1fYXV0b21hdGljUHVs
bE5vZGVzIGlzIG1vZGlmaWVkLgorICAgIGJvb2wgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBk
YXRpbmc7CisgICAgdm9pZCB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKKwogICAgIHVuc2ln
bmVkIG1fY29ubmVjdGlvbkNvdW50OwogCiAgICAgLy8gR3JhcGggbG9ja2luZy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHAKaW5kZXggNmU1MjdiYmVlMzcxNDBkMDczYTMxMDE5Y2ViNDMxM2Y2YTRjMzMyNC4uNmY0
ODliMmE5MjM2NDUyNTJiMzJhYmFmNjc4NzRmYzQzNzJiMzJmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAK
QEAgLTgwLDYgKzgwLDkgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0
KEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IG51bWJlck8KICAgICAgICAgZGVzdGlu
YXRpb25CdXMtPmNvcHlGcm9tKCpyZW5kZXJlZEJ1cyk7CiAgICAgfQogCisgICAgLy8gUHJvY2Vz
cyBub2RlcyB3aGljaCBuZWVkIGEgbGl0dGxlIGV4dHJhIGhlbHAgYmVjYXVzZSB0aGV5IGFyZSBu
b3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLCBidXQgc3RpbGwgbmVlZCB0byBwcm9jZXNzLgorICAg
IGNvbnRleHQoKS0+cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhudW1iZXJPZkZyYW1lcyk7CisK
ICAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBjYXJlIG9mIGFueSBidXNpbmVzcyBhdCB0aGUg
ZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCiAgICAgY29udGV4dCgpLT5oYW5kbGVQb3N0UmVu
ZGVyVGFza3MoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZS5oCmluZGV4IGMyNjE0Y2IzYjEyZDZkMTU1MGZkZjc0Zjg0ODhlNDFmNDVmOWNkYTIuLjY0
YzVmMjYyZTQyMjA2ZDE4M2I3YTkyNDhiZWYyMTJiMDBhZDRhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaApAQCAtMTE2LDkgKzExNiw5IEBAIHB1Ymxp
YzoKICAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCh1bnNpZ25lZCk7CiAKICAgICAvLyBDYWxs
ZWQgZnJvbSBtYWluIHRocmVhZCBieSBjb3JyZXNwb25kaW5nIEphdmFTY3JpcHQgbWV0aG9kcy4K
LSAgICB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2ln
bmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVj
dChBdWRpb05vZGUqLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29ubmVjdChBdWRpb1BhcmFtKiwgdW5zaWduZWQg
b3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QodW5zaWdu
ZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29u
bmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVh
bCBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCmlu
ZGV4IDgyYmYyOWY1YTQ3NTQ4ZjQ0MTE0YzAwNzc1YzMwZGY5ZTJhMzI3MzguLjNmOTQ5MWE0ZmU4
OGY2ODlmOTA1NGU1MGFmMTBlODE0OWVlMDdjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
YmVyT2ZDaGFubmVsczsgfQogICAgIGJvb2wgaXNDaGFubmVsQ291bnRLbm93bigpIGNvbnN0IHsg
cmV0dXJuIG51bWJlck9mQ2hhbm5lbHMoKSA+IDA7IH0KIAorICAgIGJvb2wgaXNDb25uZWN0ZWQo
KSB7IHJldHVybiBmYW5PdXRDb3VudCgpID4gMCB8fCBwYXJhbUZhbk91dENvdW50KCkgPiAwOyB9
CisKICAgICAvLyBEaXNhYmxlL0VuYWJsZSBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHN0aWxsIEph
dmFTY3JpcHQgcmVmZXJlbmNlcyB0byBhIG5vZGUsIGJ1dCBpdCBoYXMgb3RoZXJ3aXNlICJmaW5p
c2hlZCIgaXRzIHdvcmsuCiAgICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gYSBub3RlIGhhcyBmaW5p
c2hlZCBwbGF5aW5nLiAgSXQgaXMga2VwdCBhcm91bmQsIGJlY2F1c2UgaXQgbWF5IGJlIHBsYXll
ZCBhZ2FpbiBhdCBhIGxhdGVyIHRpbWUuCiAgICAgLy8gVGhleSBtdXN0IGJlIGNhbGxlZCB3aXRo
IHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKaW5kZXggZDAzOWYzYzZh
YjI2Y2E0ZjVjOWE2NDc5MzVlODc2OWY5ZmEwNGUwOC4uZWU3NDk2MDQzNTJhN2RiZmQ4OWRkZTFi
YzJjNmE2MjYyNzY0ZTM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVhbHRpbWVBbmFseXNlck5vZGU6OlJlYWx0aW1lQW5hbHlz
ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1
ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVk
aW9Ob2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZU91dHB1dCh0aGlzLCAyKSkpOwpAQCAtNzAsMTUgKzcwLDYgQEAgdm9pZCBSZWFsdGltZUFuYWx5
c2VyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgICAgICBvdXRwdXRC
dXMtPmNvcHlGcm9tKCppbnB1dEJ1cyk7CiB9CiAKLS8vIFdlIG92ZXJyaWRlIHB1bGxJbnB1dHMo
KSBhcyBhbiBvcHRpbWl6YXRpb24gYWxsb3dpbmcgdGhpcyBub2RlIHRvIHRha2UgYWR2YW50YWdl
IG9mIGluLXBsYWNlIHByb2Nlc3NpbmcsCi0vLyB3aGVyZSB0aGUgaW5wdXQgaXMgc2ltcGx5IHBh
c3NlZCB0aHJvdWdoIHVucHJvY2Vzc2VkIHRvIHRoZSBvdXRwdXQuCi0vLyBOb3RlOiB0aGlzIG9u
bHkgYXBwbGllcyBpZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBjaGFubmVsIGNvdW50cyBtYXRjaC4K
LXZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJv
Y2VzcykKLXsKLSAgICAvLyBSZW5kZXIgaW5wdXQgc3RyZWFtIC0gdHJ5IHRvIHJlbmRlciBkaXJl
Y3RseSBpbnRvIG91dHB1dCBidXMgZm9yIHBhc3MtdGhyb3VnaCBwcm9jZXNzaW5nIHdoZXJlIHBy
b2Nlc3MoKSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuLi4KLSAgICBpbnB1dCgwKS0+cHVs
bChvdXRwdXQoMCktPmJ1cygpLCBmcmFtZXNUb1Byb2Nlc3MpOwotfQotCiB2b2lkIFJlYWx0aW1l
QW5hbHlzZXJOb2RlOjpyZXNldCgpCiB7CiAgICAgbV9hbmFseXNlci5yZXNldCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9k
ZS5oCmluZGV4IGNlMzY0YTk5OTVlZTZhYzc2Y2QzZTQ2NmYxZTFjZmNiNDIxN2YwYTkuLjA4MTlj
MDM4NjdjNGMyMjg2YWQ4MzhjMTc3YzY1YWQ1MmRlZjhjYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKQEAgLTI1
LDEzICsyNSwxMyBAQAogI2lmbmRlZiBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCiAjZGVmaW5lIFJl
YWx0aW1lQW5hbHlzZXJOb2RlX2gKIAotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUg
IkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlci5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgUmVhbHRpbWVBbmFseXNlck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK2NsYXNzIFJlYWx0
aW1lQW5hbHlzZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9kZT4gY3JlYXRlKEF1
ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICB7CkBAIC00Miw3ICs0
Miw2IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBBdWRpb05vZGUKICAgICB2aXJ0dWFsIHZvaWQg
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVsbElu
cHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsK
IAogICAgIC8vIEphdmFzY3JpcHQgYmluZGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0NmE1NDQz
ODUyOTUzMzE3Y2E2NjYyNTU3MWQzNzRkNDEzY2Y0OTgwLi4wNjkxN2VhYWIwZWQ2NDQxOWMzNjMy
ZGM2MTM3MTg3NzY4OTgwNTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNTU3LDYgKzE1NTcsOCBA
QAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0Lmgn
LAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlz
dC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVz
dWx0TGlzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNw
ZWN0b3JOb2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMjVkOTYzZTk3MTBiYzVjMWNlM2QyN2E3NjllMDgyYTg3OTk0
YzY4OS4uZmE1NzI3ZmQ5MTQ2ODExNmMyNjRmYzE3MmFlNjAzYmI5NTBiYTBhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI5
Miw2ICs2MjkyLDggQEAKIAkJRkQ1ODFGQUYxNTIwRjkxRjAwM0E3QTc1IC8qIE9zY2lsbGF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTgxRkFD
MTUyMEY5MUYwMDNBN0E3NSAvKiBPc2NpbGxhdG9yLmggKi87IH07CiAJCUZENTgxRkI0MTUyMEY5
M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQ1ODFGQjExNTIwRjkzQjAwM0E3QTc1IC8qIFdhdmVUYWJsZS5j
cHAgKi87IH07CiAJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTgxRkIyMTUyMEY5
M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuaCAqLzsgfTsKKwkJRkQ2MjlFQTMxNTRCNDcxNjAwMDZE
MDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDYyOUVBMTE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9C
YXNpY0luc3BlY3Rvck5vZGUuaCAqLzsgfTsKKwkJRkQ2MjlFQTQxNTRCNDcxNjAwMDZEMDI2IC8q
IEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZENjI5RUEyMTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZS5jcHAgKi87IH07CiAJCUZENjJGNTJFMTQ1ODk4RDgwMDk0QjBFRCAvKiBB
dWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDYyRjUyRDE0NTg5OEQ4MDA5NEIwRUQgLyogQXVkaW9Tb3VyY2VQ
cm92aWRlckNsaWVudC5oICovOyB9OwogCQlGRDZFRDJDMzEzNkI4RTQyMDAzQ0YwNzIgLyogRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDZFRDJDMTEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAgKi87IH07CiAJCUZENkVEMkM0MTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDZFRDJDMjEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5oICovOyB9OwpAQCAtMTM1MjAsNiArMTM1MjIsOCBAQAogCQlGRDU4MUZCMTE1MjBGOTNCMDAz
QTdBNzUgLyogV2F2ZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhdmVUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENTgxRkIy
MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2F2ZVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENTgx
RkIzMTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFdhdmVUYWJsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZENjI5RUEx
MTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRDYyOUVBMjE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9C
YXNpY0luc3BlY3Rvck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRDYyRjUyRDE0NTg5OEQ4MDA5NEIwRUQgLyogQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NvdXJjZVByb3ZpZGVy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENkVEMkMxMTM2QjhFNDIw
MDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRDZFRDJDMjEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3ND
b21wcmVzc29yTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTM2NSw2
ICsyMTM2OSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlGRDU2ODZDNzEzQUMxODAyMDBCNjlD
NjggLyogQXN5bmNBdWRpb0RlY29kZXIuY3BwICovLAogCQkJCUZENTY4NkM4MTNBQzE4MDIwMEI2
OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rlci5oICovLAorCQkJCUZENjI5RUExMTU0QjQ3MTYwMDA2
RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oICovLAorCQkJCUZENjI5RUEyMTU0QjQ3
MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAgKi8sCiAJCQkJRkQzMTVG
QUMxMkIwMjY3NTAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCAqLywKIAkJ
CQlGRDMxNUZBRDEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCAq
LywKIAkJCQlGRDMxNUZBRTEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9CdWZmZXIuY3BwICovLApA
QCAtMjQ4MzcsNiArMjQ4NDMsNyBAQAogCQkJCUZEOEM0NkVDMTU0NjA4RTcwMEE1OTEwQyAvKiBB
dWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxQTU3REYyMTU0
QkUyNUMwMDA5RDEyMCAvKiBTVkdQYXRoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZENjI5RUEzMTU0QjQ3MTYwMDA2RDAyNiAvKiBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzg1Myw2ICsyNzg2MCw3IEBACiAJCQkJRkQ4
QzQ2RUIxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MUE1N0RGMTE1NEJFMjVDMDAwOUQxMjAgLyogU1ZHUGF0aFV0aWxp
dGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OEQwMkJDNTE1NEExOERGMDBCNjJEMDUgLyog
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ2MjlFQTQxNTRC
NDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDdiN2UxNjk5YTQzMjgyYjc0MTc0YjYyZWIwYzNjNTVmNjRmN2EzM2EuLmVhYTBi
MTg1ODFlMDAzMmU4Y2VhNGI4YmM4MDUyNDc0Y2Y0M2MzYTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxMi0wNS0wMSAgUmF5bW9uZCBMaXUgIDxyYXltb25kLmxpdUBpbnRlbC5jb20+CisKKyAg
ICAgICAgTW9kaWZ5IFJlYWx0aW1lQW5hbHlzZXJOb2RlIHB1bGwgbWVjaGFuaXNtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzUxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vYXV0b21h
dGljLXB1bGwtbm9kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1
dG9tYXRpYy1wdWxsLW5vZGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDUtMDEgIEphbWVzIFNpbW9u
c2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVuc3VyZSBIVE1MRWxlbWVu
dFN0YWNrIGZhaWxzIGdyYWNlZnVsbHkgaWYgaXQgaGFzIGEgbm9uLUVsZW1lbnQuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMtcHVsbC1ub2RlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAxMWRiMjFlMjY0NDg1ZGEyZjBlODVlZjYwMDllNjU4MTRmN2ZkOGUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMtcHVsbC1ub2Rl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0
aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgYmFzZWQgbm9kZXMgd29yayBjb3JyZWN0bHkuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZWFsdGltZUFuYWx5c2VyTm9kZSBn
b3QgcHVsbGVkIHdoZW4gY29ubmVjdGVkIGZyb20gdXBzdHJlYW0gbm9kZSBidXQgbm90IHRvIGRv
d25zdHJlYW0gbm9kZS4KK1BBU1MgUmVhbHRpbWVBbmFseXNlck5vZGUgZ290IHB1bGxlZCB3aGVu
IGNvbm5lY3RlZCBmcm9tIHVwc3RyZWFtIG5vZGUgYW5kIHRvIGRlc3RpbmF0aW9uIG5vZGUuCitQ
QVNTIFJlYWx0aW1lQW5hbHlzZXJOb2RlIGRpZG4ndCBnZXQgcHVsbGVkIHdoZW4gaXQgc2hvdWxk
IG5vdC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMtcHVsbC1ub2RlLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdXRvbWF0aWMtcHVsbC1ub2RlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTIzNGNlMDU5Y2QyMjYzNTI3YmYyN2Q3MGM0MDc3ZmQ1Y2YxMWZkNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1dG9tYXRpYy1wdWxsLW5vZGUuaHRtbApA
QCAtMCwwICsxLDEzNyBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3Rp
bmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRp
b24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
IGJhc2VkIG5vZGVzIHdvcmsgY29ycmVjdGx5LiIpOworCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAw
LjA7CisvLyBXZSBjYXJlZnVsbHkgYXJyYW5nZSB0aGUgcmVuZGVyTGVuZ3RoSW5GcmFtZXMgdG8g
YmUgYSBtdWx0aXBsZSBvZiB0aGUgQXVkaW9Ob2RlIHJlbmRlcmluZyBxdWFudHVtIChBdWRpb05v
ZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpCisvLyBzbyB0aGF0IEF1ZGlvU291cmNlTm9kZSB3
aWxsIG5vdCBmZWVkIHRhaWxpbmcgemVyb2VzIGludG8gdGhlIGNvbnRleHQgYW5kIGZhaWwgdGhp
cyB0ZXN0LgordmFyIHJlbmRlckxlbmd0aEluRnJhbWVzID0gMjU2OwordmFyIGZmdFNpemUgPSA2
NDsKKwordmFyIGF1ZGlvRGF0YU9uZSA9IDI1NTsgLy8gQXVkaW8gZGF0YSAxLjAgaW4gVWludDgg
Zm9ybWF0IHdpbGwgYmUgMjU1LgordmFyIGF1ZGlvRGF0YVplcm8gPSAxMjg7IC8vIEF1ZGlvIGRh
dGEgMCBpbiBVaW50OCBmb3JtYXQgd2lsbCBiZSAxMjguCisKK3ZhciBjb250ZXh0OwordmFyIGNv
bnN0YW50QnVmZmVyOwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBhbmFseXNlcjsKKworZnVuY3Rp
b24gY29uc3RydWN0Q29tbW9uR3JhcGgoKSB7CisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8g
Y29udGV4dC4KKyAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgxLCByZW5kZXJM
ZW5ndGhJbkZyYW1lcywgc2FtcGxlUmF0ZSk7CisgICAgY29uc3RhbnRCdWZmZXIgPSBjcmVhdGVD
b25zdGFudEJ1ZmZlcihjb250ZXh0LCByZW5kZXJMZW5ndGhJbkZyYW1lcywgMSk7CisKKyAgICBi
dWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIGJ1ZmZlclNv
dXJjZS5idWZmZXIgPSBjb25zdGFudEJ1ZmZlcjsKKworICAgIGFuYWx5c2VyID0gY29udGV4dC5j
cmVhdGVBbmFseXNlcigpOworICAgIGFuYWx5c2VyLmZmdFNpemUgPSBmZnRTaXplOworCisgICAg
YnVmZmVyU291cmNlLmNvbm5lY3QoYW5hbHlzZXIpOworfQorCitmdW5jdGlvbiB0ZXN0MUZpbmlz
aGVkKCkgeworICAgIHZhciB0aW1lRG9tYWluRGF0YSA9IG5ldyBVaW50OEFycmF5KGZmdFNpemUp
OworICAgIGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0aW1lRG9tYWluRGF0YSk7CisK
KyAgICBpZiAodGltZURvbWFpbkRhdGFbMF0gPj0gYXVkaW9EYXRhT25lKQorICAgICAgICB0ZXN0
UGFzc2VkKCJSZWFsdGltZUFuYWx5c2VyTm9kZSBnb3QgcHVsbGVkIHdoZW4gY29ubmVjdGVkIGZy
b20gdXBzdHJlYW0gbm9kZSBidXQgbm90IHRvIGRvd25zdHJlYW0gbm9kZS4iKTsKKyAgICBlbHNl
CisgICAgICAgIHRlc3RGYWlsZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2RlIGZhaWxlZCB0byBnZXQg
cHVsbGVkIHdoZW4gY29ubmVjdGVkIGZyb20gdXBzdHJlYW0gbm9kZSBidXQgbm90IHRvIGRvd25z
dHJlYW0gbm9kZS4iKTsKKworICAgIHRlc3QyKCk7Cit9CisKKy8vIFRvIHZlcmlmeSB0aGUgcmVh
bHRpbWVBbmFseXNlciBjYW4gcHVsbCBkYXRhIHdoZW4gdGhlcmUgaXMgYW4gdXBzdHJlYW0gbm9k
ZSBjb25uZWN0ZWQgdG8gaXQKKy8vIGJ1dCBpdCdzIG5vdCBjb25uZWN0ZWQgdG8gYSBkb3duc3Ry
ZWFtIG5vZGUuCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBjb25zdHJ1Y3RDb21tb25HcmFwaCgp
OworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKworICAgIGNvbnRleHQub25jb21wbGV0
ZSA9IHRlc3QxRmluaXNoZWQ7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitm
dW5jdGlvbiB0ZXN0MkZpbmlzaGVkKCkgeworICAgIHZhciB0aW1lRG9tYWluRGF0YSA9IG5ldyBV
aW50OEFycmF5KGZmdFNpemUpOworICAgIGFuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh0
aW1lRG9tYWluRGF0YSk7CisKKyAgICBpZiAodGltZURvbWFpbkRhdGFbMF0gPj0gYXVkaW9EYXRh
T25lKQorICAgICAgICB0ZXN0UGFzc2VkKCJSZWFsdGltZUFuYWx5c2VyTm9kZSBnb3QgcHVsbGVk
IHdoZW4gY29ubmVjdGVkIGZyb20gdXBzdHJlYW0gbm9kZSBhbmQgdG8gZGVzdGluYXRpb24gbm9k
ZS4iKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIlJlYWx0aW1lQW5hbHlzZXJOb2Rl
IGZhaWxlZCB0byBiZSBwdWxsZWQgd2hlbiBjb25uZWN0ZWQgYnkgdXBzdHJlYW0gbm9kZSBhbmQg
dG8gZGVzdGluYXRpb24gbm9kZS4iKTsKKworICAgIHRlc3QzKCk7Cit9CisKKy8vIFRvIHZlcmlm
eSB0aGUgcmVhbHRpbWVBbmFseXNlciBjYW4gcHJvY2VzcyBub3JtYWxseSB3aGVuIHRoZXJlIGlz
IGFuIHVwc3RyZWFtIG5vZGUgY29ubmVjdGVkIHRvIGl0CisvLyBhbmQgaXQncyBhbHNvIGNvbm5l
Y3RlZCB0byBhIGRvd25zdHJlYW0gbm9kZSB3aGljaCB1bHRpbWF0ZWx5IGNvbm5lY3QgdG8gYXVk
aW8gZGVzdGluYXRpb24uCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBjb25zdHJ1Y3RDb21tb25H
cmFwaCgpOworCisgICAgYW5hbHlzZXIuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKwor
ICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSB0
ZXN0MkZpbmlzaGVkOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rp
b24gdGVzdDNGaW5pc2hlZCgpIHsKKyAgICB2YXIgdGltZURvbWFpbkRhdGEgPSBuZXcgVWludDhB
cnJheShmZnRTaXplKTsKKyAgICBhbmFseXNlci5nZXRCeXRlVGltZURvbWFpbkRhdGEodGltZURv
bWFpbkRhdGEpOworCisgICAgLy8gSWYgcmVhbHRpbWVBbmFseXNlciBoYXNuJ3QgcHVsbGVkIGFu
eSBkYXRhLCB0aGUgZGF0YSBpbiBidWZmZXIgd2lsbCBiZSAwLgorICAgIGlmICh0aW1lRG9tYWlu
RGF0YVswXSA9PSBhdWRpb0RhdGFaZXJvKQorICAgICAgICB0ZXN0UGFzc2VkKCJSZWFsdGltZUFu
YWx5c2VyTm9kZSBkaWRuJ3QgZ2V0IHB1bGxlZCB3aGVuIGl0IHNob3VsZCBub3QuIik7CisgICAg
ZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCJSZWFsdGltZUFuYWx5c2VyTm9kZSBiZWVuIHB1bGxl
ZCB3aGVuIGl0IHNob3VsZCBub3QuIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8g
VG8gdmVyaWZ5IHRoZSByZWFsdGltZUFuYWx5c2VyIHdpbGwgc3RvcCBwdWxsaW5nIGlmIGl0IGlz
IGNvbm5lY3RlZCB0byBhIGRvd25zdHJlYW0gbm9kZQorLy8gd2hpY2ggaXMgbm90IHVsdGltYXRs
eSBjb25uZWN0ZWQgdG8gYW55IGF1ZGlvIGRlc3RpbmF0aW9uLgorZnVuY3Rpb24gdGVzdDMoKSB7
CisgICAgY29uc3RydWN0Q29tbW9uR3JhcGgoKTsKKworICAgIHZhciBnYWluID0gY29udGV4dC5j
cmVhdGVHYWluTm9kZSgpOworICAgIGFuYWx5c2VyLmNvbm5lY3QoZ2Fpbik7CisKKyAgICBidWZm
ZXJTb3VyY2Uubm90ZU9uKDApOworCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gdGVzdDNGaW5p
c2hlZDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cuanNUZXN0SXNBc3lu
YyA9IHRydWU7CisKKyAgICB0ZXN0MSgpOworfQorCitydW5UZXN0KCk7CisKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>